`
magixyu
  • 浏览: 79803 次
  • 性别: Icon_minigender_1
  • 来自: 青岛
社区版块
存档分类
最新评论

Advanced Rails -- Ruby 基本技术(7) -- 元编程技巧2

    博客分类:
  • ROR
阅读更多
请先参阅
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,很少使用了延续。
分享到:
评论
4 楼 magixyu 2008-06-09  
题目上有,是Oreilly 的 Advanced Rails中的一节,翻译不好,多多包涵 
可以参考以下:
http://www.iteye.com/post/168845
3 楼 lgn21st 2008-06-09  
同感,貌似是翻译的原因,如果真的是,请给出原始连接的URI
2 楼 yangzhihuan 2008-06-09  
真是惭愧,完全看不明白.
1 楼 justps 2008-06-08  
找时间学习一下

相关推荐

    Advanced Rails

    "Advanced Rails" 涵盖了Rails开发中的高级主题和技术,是Ruby on Rails学习进阶的重要资源,尤其适合已经对基础Rails有一定了解的开发者。 在Web开发领域,Rails以其高效、简洁的代码和“约定优于配置”的哲学吸引...

    rails2-sample

    从给定的文件信息来看,我们正在探讨的是一本关于Ruby on Rails的书籍,书名为《Simply Rails2》,作者是Patrick Lenz。本书旨在为初学者提供深入理解Ruby on Rails框架的指南,从基础概念到高级主题均有涵盖,是...

    The Ruby Programming Language

    ### Ruby编程语言——基础知识与应用 #### 一、Ruby简介 《The Ruby Programming Language》是一本详细介绍Ruby语言的权威书籍,由Ruby之父Yukihiro Matsumoto(松本行弘)与著名技术作家David Flanagan共同撰写。...

    The Ruby Programming Language 2008 .pdf

    - **目标读者**:本书面向的是对Ruby编程语言感兴趣的程序员和技术人员,无论是初学者还是高级用户都能从中受益。 - **主要内容**: - **Ruby基础知识**:包括语法、数据类型、流程控制等基础概念。 - **面向对象...

    Advanced.Rails(2007)].Brad.Ediger.文字版.pdf

    根据提供的文件信息,我们可以推断出这是一本关于高级Ruby on Rails编程的书籍,作者为Brad Ediger,并由O'Reilly Media出版。由于文件提供的内容有限,以下将基于已有的信息来总结并展开相关的知识点。 ### 一、...

    Advance RAils Reciples

    2. **高级编程技巧**:除了介绍Rails的基础知识外,《Advanced Rails Reciples》还深入探讨了Rails框架中的高级编程技巧,如性能优化、安全性增强等。 3. **实战案例分析**:书中通过多个实战案例来展示如何将Rails...

    Ruby-服务器优化的Ruby发行版通过APTYUM实现更少内存更快速易于安装和安全补丁

    Ruby是一种强大的动态编程语言,广泛用于Web开发,尤其是在Ruby on Rails框架中。为了在服务器环境中更好地利用Ruby,一些专门针对服务器优化的发行版被开发出来,以提高性能、减少资源消耗并简化管理。"Ruby-服务器...

    Pragmatic.Bookshelf.Advanced.Rails.Recipes.May.2008

    通过阅读《Pragmatic Bookshelf Advanced Rails Recipes May 2008》,开发者可以掌握Rails的高级特性,提升他们的编程技巧,同时也能更好地理解Rails如何与其他Web开发框架相比较,从而在实际项目中做出更明智的技术...

    The Ruby Programming Language PDF

    这些资源涵盖了从基础到高级的Ruby编程知识,以及相关的Web开发框架Rails的内容。此外,还有诸如《Ajax on Rails》和《Ruby on Rails: Up and Running》等其他主题的书籍,显示了Ruby语言及其生态系统在Web开发领域...

    Ruby.Programming.Language.The.Jan.2008

    O'Reilly Media是一家领先的科技图书出版商,除了《Ruby编程语言》外,还提供了多部与Ruby相关的著作,如《Ruby Cookbook》、《Learning Ruby》、《Advanced Rails》、《Rails Cookbook》、《Ruby Pocket Reference...

    Rails相关电子书汇总二

    Rails是一个流行的开源Web应用框架,基于Ruby编程语言,它遵循模型-视图-控制器(MVC)架构模式,为开发者提供了构建高效、简洁的Web应用程序的能力。 在描述中提到的“博文链接:...

    the_ruby_programming_language原版

    从描述中可以提炼出,这本书是入门Ruby的理想选择,书中内容覆盖了Ruby编程语言的基础知识,为读者打下坚实的基础。书中所涉及的内容可能包括但不限于Ruby语言的语法、数据类型、控制结构、模块、类和对象、异常处理...

    Ruby版微信小程序对称加密数据解密算法wechat_aes_sample_ruby-master.zip

    在Ruby编程环境中,微信小程序的对称加密数据解密算法主要涉及到的是AES(Advanced Encryption Standard)加密技术。AES是一种广泛使用的块密码,以其安全性、效率和标准化而闻名。本项目"wechat_aes_sample_ruby-...

    code_quizzer:Ruby,JavaScript,Rails和Bash的编程练习问题

    代码测验关于网站包含许多关于Ruby,Rails,JavaScript,Bash,Git等的编程实践问题! 当我学习编程时,我为自己创建了测验,并决定创建CodeQuizzes作为我的第一个Rails应用程序,以与世界分享这些测验。 现在,该...

    ruby-rabbitmq:一些带有Ruby + RabbitMQ集成的教程

    2. **AMQP 协议理解**:RabbitMQ 使用 Advanced Message Queuing Protocol (AMQP),教程可能涵盖 AMQP 的基础,包括交换机、队列、绑定和路由键的概念。 3. **Bunny gem**:Bunny 是 Ruby 中最常用的 RabbitMQ ...

    Enterprise Integration with Ruby

    Ruby作为一种动态、灵活且富有表现力的编程语言,近年来在软件开发领域得到了广泛应用,尤其在集成不同系统和服务方面展现出强大的潜力。这本书的核心目标是帮助开发者理解和实践Ruby在企业级集成中的最佳实践。 在...

    odin-flight-booker

    在Ruby编程语言中,我们主要会使用到以下几个核心概念: 1. **Ruby基础**:Ruby是一种动态、面向对象的脚本语言,以其简洁和表达性强而著称。在构建"Odin Flight Booker"时,你需要掌握变量、数据类型、控制结构...

Global site tag (gtag.js) - Google Analytics