除了使用不同的脚本语言之外,node.js 的主要吸引力似乎在于它支持事件驱动的编程,这使得编写可扩展的服务器(或其他典型的 I/O 绑定应用程序)变得更容易,因为它简化了非阻塞 I/O 调用。但是,此功能的代价是必须学习一种新的编程模型,该模型本质上要求您在回调函数之后传递回调,从而使一些简单的任务(例如,相关的动作序列)变得更加复杂。
将该编程模型与传统的 Ruby on Rails 进行对比,后者阻塞所有 I/O 操作并且(有效地)是单线程的(由于 MRI 的绿色线程实现)。
只是在这里大声梦想,似乎应该可以实现一个 Ruby(或 Rails)运行时,它通过捕获 I/O 调用来协调这些模型,透明地用它们的非阻塞版本替换它们,存储当前的延续并调用它当 I/O 操作完成时。通过这种方式,您将获得熟悉的过程式编程风格以及事件驱动/异步/回调模型的好处。
这样的运行时(或运行时翻译器)在技术上是否可行?是否已经有网络框架可以做这样的事情?