写点什么

Dataflow:Ruby 的声明式并发控制模型

2009 年 5 月 12 日

由于 Ruby 语言受到了一些函数式程序设计技术的影响,有些 Ruby 程序员随之采纳了 Erlang 或者 Haskell 的思想,甚者建立起了从 Ruby 到这些语言的桥梁,比如: Erlectricity

Larry Diehl 基于 Oz 语言的 Unification 概念,为 Ruby 引入了声明式并发控制模型。Oz 是一种多维编程语言,它主要作为一种函数式(包括延迟计算和即时计算)、分布式和并发编程语言而著称,但同时它也支持约束、逻辑、命令式和面向对象编程。

随着计算机中核心处理器数量的不断增加,Larry 希望声明式并发模型能给 Ruby 语言带来一些好处

  • 更加易读的代码
  • 简单但强大的并发控制

为了实现这个目标,Larry 应用了《Concepts, Techniques, and Models of Computer Programming》一书中描述的数据流线程行为(Dataflow threading behavior)概念:

如果一个操作试图使用一个未绑定的变量,该怎么办?如果纯粹从审美角度来看,这个操作应该等待,直到其它线程绑定了这个变量再继续进行。这种“文明礼貌”的线程行为被称之为数据流线程行为(Dataflow threading behavior)。

为了用 Oz 实现这个概念,Larry 应用了 Unification:

Unification 的思想是用逻辑方程来描述值,而逻辑方程可以自动被一些合一算法(unification algorithm)所解决。

那么在实际应用中,我们就可以这样编写代码了(这段代码来自 Dataflow 项目网站):

复制代码
# Local variables
include Dataflow
local do |x, y, z|
# notice how the order automatically gets resolved
Thread.new { unify y, x + 2 }
Thread.new { unify z, y + 3 }
Thread.new { unify x, 1 }
z #=> 6
end

用 local 或者 declare(实例变量)创建一些变量,然后用 unify 来绑定这些变量。

Oz Ports (非确定行为) 或者 Erlang 化 Actors 就是两个很好的例子。

但 Brian Morearty 也指出了对 Dataflow 调试、性能和内存的一些有意思的担心 。随后 Larry Diehl 在 Brian 的博客中进行了解释

有一点需要注意的是,由于这个库支持绿色线程(green threads)和本地线程池实现,它已经让 JRuby 在 MRI 上光芒四射了。

查看英文原文: Declarative Concurrency For Ruby With Dataflow

2009 年 5 月 12 日 00:16988

评论

发布
暂无评论
  • Go 语言简介:历史背景、发展现状及语言特性

    2019 年 3 月 4 日

  • Elixir:可能成为下一代 Web 开发语言

    Elixir是一种动态函数式语言,设计用于构建可扩展、可维护的应用程序。Lau Taarnskov是一名有着20多年Web软件开发经验的开发人员。他认为,Elixir将会对Web开发领域产生重大影响。近日,他在个人博客上阐述了这一观点。

  • 从 Google 看 Ruby 语言增长趋势

    随着动态语言逐步得到开发领域的认可,创建在Google Code上的Ruby开源项目也逐步增多。InfoQ在前不久发布了Google SoC系列文章,其中包含Ruby文档分析器dcov、Rubyland、Ruby实现约束规划等内容。Ruby是否会成为继Python之后Google在动态语言方面的下一个关注焦点,以及Ruby语言的增长趋势是否在Google应用上得到体现,本文将会在这方面进行探讨。

  • MacRuby 0.5 将引入基于 LLVM 的 VM,性能提升明显

    在一个试验性分支上,MacRuby下个版本的首个性能方面的改进已经完成。该版本引入了一个基于LLVM的全新VM,较之MacRuby早起的版本已经有了非常显著的速度提升。

  • Randal Schwartz 访谈:Ruby 之根——Smalltalk 王者归来

    作为一种对Ruby影响深远的语言,Smalltalk正逐渐重返人们的视线之中。本文总结了Smalltalk的发展现状,并就Smalltalk这一话题对Randal L. Schwartz进行了访谈。

  • 在 CLR 之上的构建领域特定语言

    在Ayende Rahien最新的这篇文章中介绍了内部DSL作为创建领域特定语言(DSL)的一种手段,无需考虑设计一门全新语言所带来的复杂性。它比较了适合作为 DSL宿主语言的不同.NET语言,并由于它的元数据编程基础功能、灵活性和性能,提出了Boo是理想的候选语言。

  • Google 编程之夏和 Ruby 编程之夏中的动态语言项目

    夏日已至,又到了学生们有偿参与开源项目的时候了。作为前辈级的活动,Google编程之夏为Ruby开发者提供了一系列的项目。还有Ruby编程之夏活动,通过社区资助20个Ruby和Ruby on Rails的项目。我们来了解一下它们为Ruby和其他动态语言提供了哪些项目以供选择。

  • Startup:掌握 ASP.NET Core 的启动过程

    2020 年 1 月 13 日

  • Microsoft 推出 Bosque,一种编写易推理代码的编程语言

    微软最近推出了Bosque编程语言,该语言由受TypeScript启发的语法和类型,以及受ML和Node/JavaScript启发的语义组合而成。

  • 唯有套路得人心:谈谈 Java EE 的那些模式

    这些模式,就是我们在搭建全栈架构、设计的工作过程中,不断总结和应用的“套路”。

    2019 年 10 月 7 日

  • 在线观看 RubyConf 2007 全部视频演讲

    提供大会录像和网络服务的Confreaks公司最近发布了今年RubyConf大会的全部视频演讲。Nathanial用代码展示了为什么要用Camping,然后将Camping和Rails做了一个对比(Camping的哲学是最小化,而不是Rails的约定优于配置)。Ben Scofield对语言理论,以及它是如何与编程语言相联系的主题做了一个有趣的演讲。

  • Go 语言课程介绍

    2019 年 3 月 4 日

  • Lilu:Rails Mockup 驱动开发之道

    在两年前就有过一场争论,争论的焦点在于Rails框架及它缺乏内建模板语言的支持,还有是否要为Rails引入这样的模板语言。直至今天,已经存在有不下五种的模板系统:ERB、 HAML、Liquid、Amrita2等等。然而所有这些都是将Ruby语言或是Ruby的派生语言与HTML代码混合在一起。Lilu的目标是将静态HTML页面和Ruby代码完全解耦。

  • Ruby 1.9 加入纤程实现轻量级并发

    在Ruby 1.9的分支中,最近刚刚加入了纤程(Fibers)。这个与协程(Coroutine)相类似的概念用处很多,例如可以用来实现轻量级并发等等。在这里我们来探索一下Ruby 1.9中纤程的概念、它所带来的影响,以及相应的范例代码。

  • Matz:如何成为语言的设计者

    在今天举行的RubyConfChina 2012大会上,Ruby语言之父松本行弘第四次来到中国参加大会,为大家带来了一场名为《Be a language designer》的主题演讲,分享了作为语言设计者的心得,还带来了mruby与Ruby 2.0的最新信息。

  • Rubinius 加入多虚拟机支持

    Rubinius加入了一个名为“多虚拟机(Multi-VM)”的新功能,使得在一个OS进程中运行多个Ruby虚拟机成为可能。我们就这个功能的优点和实现请教了Rubinius项目的Evan Phoenix。

  • 程序员练级攻略:微服务

    微服务中有很多很不错的想法和理念,所以学习微服务是每一个技术人员迈向卓越的架构师的必经之路。

    2018 年 7 月 19 日

  • Practical Go

    演讲嘉宾David Cheney,Heptio 资深工程师, 著名Go语言专家内容介绍Go is a language designed for engineering teams. It’s central themes are simplicity, readability, and maintainability. This talk will provide best practice real world advice for teams building projects in Go covering five areas; idiomatic code, package and api design, error handling, concurrency, and testing.内容大纲Identifiers Choose identifiers for clarity, not brevity Use a consistent declaraton style Package Design A good package starts with its name An identifier’s name includes its package name Prefer lower case package names and import paths Rather than nesting deeply, return early Make the zero value useful Eschew package level state. No package level variables. Avoid global side effects. Project Structure Consider fewer, larger packages Arrange code into files by import statements. Prefer nouns for file names. Eschew elaborate package hierarchies, resist the desire to apply taxonomy Keep package main small as small as possible API Design Design APIs that are hard to misuse. Design APIs for their default use case. Prefer var args to []T parameters Let callers define the interface they require Prefer streaming interfaces Use type assertions for optional behaviour Error handling Elminate handling by eliminating errors Only handle an error once Concurrency Never start a goroutine without when it will stop. When sending or receiving on a channel, consider what happens if the other party never receives the message Keep yourself busy while waiting for a goroutine. or, do the work yourself. Leave concurrency to the caller

    2018 年 12 月 18 日

发现更多内容

性能之巅:定位和优化程序CPU、内存、IO瓶颈

华为云开发者社区

性能 cpu 优化

一个优秀的程序员,不仅要会编写程序,更要会编写高质量的程序

Java成神之路

Java 程序员 架构 面试 编程语言

足不出户带你体验专业实验室,技术实现不在话下

华为云开发者社区

体验 平台 实验

在阿里巴巴内网找到的一份《Java核心宝典》简直太细了,如获至宝!

Java架构之路

Java 程序员 架构 面试 编程语言

如何通过易观Argo,免费快速搭起精细化运营平台?

易观大数据

你敢信?就是这个Netty的网络框架差点把我整疯了,哭jj

996小迁

Java 架构 面试 Netty 面试程序人生

Nginx做web服务器linux内核参数优化

赖猫

c++ Linux 编程 后台开发 内核

ChaosBlade x SkyWalking 微服务高可用实践

阿里巴巴云原生

微服务 云原生 监控 混沌工程 CloudNative

《算法问题整理》​.pdf

田维常

大厂也在用的 6种 数据脱敏方案,严防泄露数据的 “内鬼”

程序员内点事

Java 数据脱敏;

GitHub标星17K,超火的SpringBoot +Vue实战项目,文档视频贼全

Java成神之路

Java 程序员 架构 面试 编程语言

架构师训练营 1 期 -- 第十二周总结

曾彪彪

极客大学架构师训练营

mybatis快速入门,so easy啦

田维常

mybatis

大厂iOS面试题全面讲解(上)

ios 面试

3种缓存读写策略都不了解?面试很难让你通过啊兄弟!

Java架构师迁哥

MySQL最全整理(面试题+笔记+导图),面试大厂不再被MySql难倒

Java成神之路

Java 程序员 架构 面试 编程语言

金九银十Android热点知识!架构师花费近一年时间整理出来的安卓核心知识,送大厂面经一份!

欢喜学安卓

程序员 面试 编程开发 Android进阶 Android开发

linux命令:查询占用端口文件所在位置

梁小航航

Linux

话题讨论 | 图解一致性哈希算法全小区局域网最通俗易懂

柠檬橙

Kubernetes 1.20发布,Release Logo变成一只猫

晓川

阿里P8大牛的建议,工作1-5年的Java工程师如何让自己变得更值钱

Java成神之路

Java 程序员 架构 面试 编程语言

安卓开发不得不会!啃下这些Framework技术笔记,成功入职阿里

欢喜学安卓

android 程序员 编程开发 Android进阶

架构师训练营第一期 - 第十一周学习总结

卖猪肉的大叔

极客大学架构师训练营

刷完这两份pdf轻松拿下了蚂蚁金服、头条、小米等大厂的offer。

Java架构之路

Java 程序员 架构 面试 编程语言

Swift性能优化分析

ios swift

TRX波场智能合约APP系统开发|TRX波场智能合约软件开发

开發I852946OIIO

系统开发

二层交换机和三层交换机之间VLAN的区别

网络技术平台

不为人知的网络编程(十):深入操作系统,从内核理解网络包的接收过程(Linux篇)

JackJiang

Linux 网络编程 TCP/IP

浅谈ToB市场精细化运营

Linkflow

营销数字化 客户数据平台 CDP 精细化运营

iOS逆向学习(arm64汇编入门)

ios 汇编

可以秒杀全场的SpringCloud微服务电商实战项目,文档贼全

Java成神之路

Java 程序员 架构 面试 编程语言

InfoQ 极客传媒开发者生态共创计划线上发布会

InfoQ 极客传媒开发者生态共创计划线上发布会

Dataflow:Ruby的声明式并发控制模型-InfoQ