请先参阅
http://www-128.ibm.com/developerworks/cn/opensource/os-lightweight9/
http://www.iteye.com/post/168845
翻译的晦涩难懂,多多关照
=============================================================
延续(Continuations )
延续(Continuations )是一个很强大的流程控制机制。一个延续(Continuation)表现为一个特定的调用栈和词
法变量状态。他是在执行Ruby代码一个点上的快照。不幸的是,Ruby1.8对延续(Continuations )的实现非常的
慢,造成了对很多应用不可用。Ruby 1.9 的虚拟机可能会改进这个情况,但是不要期望在Ruby1.8上得到延续
(Continuations )的比较好的性能。但是,这个是很有用的组成部分,并且基于延续(continuation-based)的
web框架提供了一个在像Rails框架很有趣的选择。
延续(Continuations)强大的几个原因:
延续(Continuations)仅仅是一个对象;可以在函数间传递。
延续(Continuations)可以在任何地方调用。如果有一个延续(Continuations)的引用,就可以调用。
延续(Continuations)可以再参与。可以用延续(Continuations)在一个函数里返回多次。
延续(Continuations)通常被认为“structured GOTO”。本身,它被作为在同一个情况下任何GOTO construct。延
续(Continuations)非常的少或者不会在一个应用内部代码;它通常应该被封装在库里面。 I don't say this
because I think developers should be protected from themselves. 或者,相比直接使用延续
(continuations), 把他们提取出来更容易理解。这种思想就是程序员在构建软件应用时应该考虑到"external
iterator"或者 "coroutine" (both abstractions built on top of continuations) 而不是延续
("continuation")。
Seaside是Smalltalk的一个基于Continuations的web应用框架。Continuations在Seaside里用作管理会话(色素
sion)状态。每一个用户会话相当于一个服务器段的Continuation。当请求进入时,Continuation会被调用、更多
的代码被执行。这个结果让整个事务可以作为一个代码流,即使他跨过多个HTTP请求。这个能力来自于Smalltalk
的延续是连续的事实;他可以在一个数据库或者文件系统编码,然后溶解并根据请求调用。Ruby的延续不是顺序
的。在Ruby里,延续是只在内存里并且不能转变成字节流。
Borge是一个简单Seaside 2到Ruby移植。Seaside和Borges的主要区别是Borges必须存储当前的延续在内存里,因为他们不是连续的。这是一个很大的限制,他阻止了Borges在任何程度上成为一个很好的web应用。如果连续的延续在Ruby实现,即不会有这个限制了。
在下面Borges很明显的指出了延续的强大,这个例子提供一个在线商店的物品列表:
class SushiNet::StoreItemList < Borges::Component
def choose(item)
call SushiNet::StoreItemView.new(item)
end
def initialize(items)
@batcher = Borges::BatchedList.new items, 8
end
def render_content_on(r)
r.list_do @batcher.batch do |item|
r.anchor item.title do choose item end
end
r.render @batcher
end
end # class SushiNet::StoreItemList
大部分的功能出现在render_content_on里,它用了一个BatchedList去提供分页的连接到产品的列表。但是有趣的是在调用anchor,一个储存了对choose的调用,在相应的连接被点击的时候才执行了。
当然,在web编程的延续上还是有很多分歧。HTTP在设计的时候就是无状态的协议,对于web事务的延续恰好是相反的。所有的延续必须储存在服务器上,这将占用额外的内存和硬盘空间。因此必须处理会话,把用户的流量定向到同一个服务器。结果就是,如果一个server当机,他的所有的session就丢失了。比较流行的Seaside的应用——DabbleDB,很少使用了延续。
分享到:
- 2008-06-08 16:31
- 浏览 1054
- 评论(4)
- 论坛回复 / 浏览 (3 / 2294)
- 查看更多
相关推荐
"Advanced Rails" 涵盖了Rails开发中的高级主题和技术,是Ruby on Rails学习进阶的重要资源,尤其适合已经对基础Rails有一定了解的开发者。 在Web开发领域,Rails以其高效、简洁的代码和“约定优于配置”的哲学吸引...
从给定的文件信息来看,我们正在探讨的是一本关于Ruby on Rails的书籍,书名为《Simply Rails2》,作者是Patrick Lenz。本书旨在为初学者提供深入理解Ruby on Rails框架的指南,从基础概念到高级主题均有涵盖,是...
### Ruby编程语言——基础知识与应用 #### 一、Ruby简介 《The Ruby Programming Language》是一本详细介绍Ruby语言的权威书籍,由Ruby之父Yukihiro Matsumoto(松本行弘)与著名技术作家David Flanagan共同撰写。...
- **目标读者**:本书面向的是对Ruby编程语言感兴趣的程序员和技术人员,无论是初学者还是高级用户都能从中受益。 - **主要内容**: - **Ruby基础知识**:包括语法、数据类型、流程控制等基础概念。 - **面向对象...
根据提供的文件信息,我们可以推断出这是一本关于高级Ruby on Rails编程的书籍,作者为Brad Ediger,并由O'Reilly Media出版。由于文件提供的内容有限,以下将基于已有的信息来总结并展开相关的知识点。 ### 一、...
2. **高级编程技巧**:除了介绍Rails的基础知识外,《Advanced Rails Reciples》还深入探讨了Rails框架中的高级编程技巧,如性能优化、安全性增强等。 3. **实战案例分析**:书中通过多个实战案例来展示如何将Rails...
Ruby是一种强大的动态编程语言,广泛用于Web开发,尤其是在Ruby on Rails框架中。为了在服务器环境中更好地利用Ruby,一些专门针对服务器优化的发行版被开发出来,以提高性能、减少资源消耗并简化管理。"Ruby-服务器...
通过阅读《Pragmatic Bookshelf Advanced Rails Recipes May 2008》,开发者可以掌握Rails的高级特性,提升他们的编程技巧,同时也能更好地理解Rails如何与其他Web开发框架相比较,从而在实际项目中做出更明智的技术...
这些资源涵盖了从基础到高级的Ruby编程知识,以及相关的Web开发框架Rails的内容。此外,还有诸如《Ajax on Rails》和《Ruby on Rails: Up and Running》等其他主题的书籍,显示了Ruby语言及其生态系统在Web开发领域...
O'Reilly Media是一家领先的科技图书出版商,除了《Ruby编程语言》外,还提供了多部与Ruby相关的著作,如《Ruby Cookbook》、《Learning Ruby》、《Advanced Rails》、《Rails Cookbook》、《Ruby Pocket Reference...
Rails是一个流行的开源Web应用框架,基于Ruby编程语言,它遵循模型-视图-控制器(MVC)架构模式,为开发者提供了构建高效、简洁的Web应用程序的能力。 在描述中提到的“博文链接:...
从描述中可以提炼出,这本书是入门Ruby的理想选择,书中内容覆盖了Ruby编程语言的基础知识,为读者打下坚实的基础。书中所涉及的内容可能包括但不限于Ruby语言的语法、数据类型、控制结构、模块、类和对象、异常处理...
在Ruby编程环境中,微信小程序的对称加密数据解密算法主要涉及到的是AES(Advanced Encryption Standard)加密技术。AES是一种广泛使用的块密码,以其安全性、效率和标准化而闻名。本项目"wechat_aes_sample_ruby-...
代码测验关于网站包含许多关于Ruby,Rails,JavaScript,Bash,Git等的编程实践问题! 当我学习编程时,我为自己创建了测验,并决定创建CodeQuizzes作为我的第一个Rails应用程序,以与世界分享这些测验。 现在,该...
2. **AMQP 协议理解**:RabbitMQ 使用 Advanced Message Queuing Protocol (AMQP),教程可能涵盖 AMQP 的基础,包括交换机、队列、绑定和路由键的概念。 3. **Bunny gem**:Bunny 是 Ruby 中最常用的 RabbitMQ ...
Ruby作为一种动态、灵活且富有表现力的编程语言,近年来在软件开发领域得到了广泛应用,尤其在集成不同系统和服务方面展现出强大的潜力。这本书的核心目标是帮助开发者理解和实践Ruby在企业级集成中的最佳实践。 在...
在Ruby编程语言中,我们主要会使用到以下几个核心概念: 1. **Ruby基础**:Ruby是一种动态、面向对象的脚本语言,以其简洁和表达性强而著称。在构建"Odin Flight Booker"时,你需要掌握变量、数据类型、控制结构...