about summary refs log tree commit homepage
path: root/Documentation
diff options
context:
space:
mode:
authorEric Wong <normalperson@yhbt.net>2009-11-25 22:30:35 -0800
committerEric Wong <normalperson@yhbt.net>2009-11-25 22:32:42 -0800
commit1079dfa30108466d413f30526eda468cdf0ae985 (patch)
tree194cdd7a688e3d4db283bad239f4aacf089e445f /Documentation
parentdd2b2274ef0cd8a121cf7655ade939a1f63bc971 (diff)
downloadrainbows-1079dfa30108466d413f30526eda468cdf0ae985.tar.gz
This will hopefully make many things clearer about the project.
Diffstat (limited to 'Documentation')
-rw-r--r--Documentation/GNUmakefile5
-rw-r--r--Documentation/comparison.css6
-rw-r--r--Documentation/comparison.haml184
3 files changed, 194 insertions, 1 deletions
diff --git a/Documentation/GNUmakefile b/Documentation/GNUmakefile
index e33c87f..19de585 100644
--- a/Documentation/GNUmakefile
+++ b/Documentation/GNUmakefile
@@ -26,5 +26,8 @@ install-man: man
 %.1.html: %.1.txt
         $(pandoc_html) < $< > $@+ && mv $@+ $@
 
+comparison.html: comparison.haml
+        haml -t ugly < $< > $@+ && mv $@+ $@
+
 clean::
-        $(RM) $(man1) $(html1)
+        $(RM) $(man1) $(html1) comparison.html
diff --git a/Documentation/comparison.css b/Documentation/comparison.css
new file mode 100644
index 0000000..82a6012
--- /dev/null
+++ b/Documentation/comparison.css
@@ -0,0 +1,6 @@
+/* help to make this look nice would be greatly appreciated */
+.comparison {
+        margin: 1em;
+        border: 1px solid;
+        width: 100%;
+}
diff --git a/Documentation/comparison.haml b/Documentation/comparison.haml
new file mode 100644
index 0000000..a12f13d
--- /dev/null
+++ b/Documentation/comparison.haml
@@ -0,0 +1,184 @@
+%h2 core features and requirements
+%br
+%table.comp
+  %tr.comp_header
+    %th.mod module
+    %th.tee rack.input streaming
+    %th.r18 Ruby 1.8
+    %th.r19 Ruby 1.9
+    %th.rbx Rubinius
+    %th.slow slow clients
+    %th.lib lib compat
+    %th.thr thread-safety
+    %th.reent reentrancy
+  %tr.comp_base
+    %td.mod Unicorn/Base
+    %td.tee Yes
+    %td.r18 Yes
+    %td.r19 Yes
+    %td.rbx Yes
+    %td.slow No
+    %td.lib Most
+    %td.thr No
+    %td.reent No
+  %tr.comp_row
+    %td.mod Revactor
+    %td.tee Yes
+    %td.r18 No
+    %td.r19 Yes
+    %td.rbx No
+    %td.slow Yes
+    %td.lib Meh
+    %td.thr No
+    %td.reent Yes
+  %tr.comp_row
+    %td.mod ThreadPool
+    %td.tee Yes
+    %td.r18 Yes
+    %td.r19 Yes
+    %td.rbx Yes
+    %td.slow OK
+    %td.lib Good
+    %td.thr Yes
+    %td.reent No
+  %tr.comp_row
+    %td.mod Rev
+    %td.tee No
+    %td.r18 Yes
+    %td.r19 Yes
+    %td.rbx No
+    %td.slow Yes
+    %td.lib Good
+    %td.thr No
+    %td.reent No
+  %tr.comp_row
+    %td.mod ThreadSpawn
+    %td.tee Yes
+    %td.r18 Yes
+    %td.r19 Yes
+    %td.rbx Yes
+    %td.slow OK
+    %td.lib Good
+    %td.thr Yes
+    %td.reent No
+  %tr.comp_row
+    %td.mod EventMachine
+    %td.tee No
+    %td.r18 Yes
+    %td.r19 Yes
+    %td.rbx No
+    %td.slow Yes
+    %td.lib Good
+    %td.thr No
+    %td.reent No
+  %tr.comp_row
+    %td.mod RevThreadSpawn
+    %td.tee No
+    %td.r18 Slow
+    %td.r19 Yes
+    %td.rbx No
+    %td.slow Yes
+    %td.lib Good
+    %td.thr Yes
+    %td.reent No
+  %tr.comp_row
+    %td.mod FiberSpawn
+    %td.tee Yes
+    %td.r18 No
+    %td.r19 Yes
+    %td.rbx Yes
+    %td.slow Yes
+    %td.lib Meh
+    %td.thr No
+    %td.reent Yes
+  %tr.comp_row
+    %td.mod FiberPool
+    %td.tee Yes
+    %td.r18 No
+    %td.r19 Yes
+    %td.rbx Yes
+    %td.slow Yes
+    %td.lib Meh
+    %td.thr No
+    %td.reent Yes
+
+%ul
+  %li waiting on Rubinius for better signal handling
+  %li
+    rack.input streaming is what makes
+    %a(href="http://upr.bogomips.org/") upload progress,
+    BOSH, and Web Sockets possible
+
+%h2 middlewares and frameworks
+%br
+
+%table.comp
+  %tr.comp_header
+    %th.mod model
+    %th.devfd
+      %a(href="Rainbows/DevFdResponse.html") DevFdResponse
+    %th.app_pool
+      %a(href="Rainbows/AppPool.html") AppPool
+    %th.lock
+      %a(href="http://rack.rubyforge.org/doc/Rack/Lock.html") Rack::Lock
+    %th.async async
+  %tr.comp_row
+    %td.mod Unicorn/Base
+    %td.devfd no-op
+    %td.app_pool no-op
+    %td.lock no-op
+    %td.async lots of RAM :P
+  %tr.comp_row
+    %td.mod Revactor
+    %td.devfd no-op
+    %td.app_pool Yes
+    %td.lock No!
+    %td.async Revactor itself
+  %tr.comp_row
+    %td.mod ThreadPool
+    %td.devfd no-op
+    %td.app_pool Yes
+    %td.lock Yes
+    %td.async standard Ruby
+  %tr.comp_row
+    %td.mod Rev
+    %td.devfd Yes
+    %td.app_pool no-op
+    %td.lock no-op
+    %td.async DevFdResponse
+  %tr.comp_row
+    %td.mod ThreadSpawn
+    %td.devfd no-op
+    %td.app_pool Yes
+    %td.lock Yes
+    %td.async standard Ruby
+  %tr.comp_row
+    %td.mod EventMachine
+    %td.devfd Yes
+    %td.app_pool no-op
+    %td.lock no-op
+    %td.async async_sinatra
+  %tr.comp_row
+    %td.mod RevThreadSpawn
+    %td.devfd Yes
+    %td.app_pool Yes
+    %td.lock Dumb
+    %td.async standard Ruby
+  %tr.comp_row
+    %td.mod FiberSpawn
+    %td.devfd Yes
+    %td.app_pool Yes
+    %td.lock No!
+    %td.async Rainbows::Fiber{::IO,.sleep}
+  %tr.comp_row
+    %td.mod FiberPool
+    %td.devfd Yes
+    %td.app_pool Yes
+    %td.lock No!
+    %td.async Rainbows::Fiber{::IO,.sleep}
+
+%ul
+  %li "No!" means it's fundamentally incompatible
+  %li
+    Everything that's DevFdResponse-compatible can use it for passing
+    async responses through