`
qiezi
  • 浏览: 498671 次
  • 性别: Icon_minigender_1
  • 来自: 上海
社区版块
存档分类
最新评论

IoLanguage

阅读更多
有点厌倦了ErLang。

这种语言有很多优点,但缺点也是致命的。和C库的交互能力不是很好,主要原因是C库都是基于线程、阻塞线程的。Port不能很好地解决需要多线程来操作的资源,所以ErlyDB宁愿自己实现协议。

相比之下优点不是很突出了。分布式?一直在做分布式系统,积累的库再借鉴点Erlang的优点,已经解决大部分问题了。并发?状态机也不是很难写,就是有点恶心,当然C++有更高的效率,恶心点也值了。鲁棒性?编写服务器程序也有些经验了,虽然自己觉得写得也不怎么样,但稳定性方面不是问题。平滑升级?从架构上消除单点,再做到协议兼容,这方面也不是问题,即便是Erlang写程序也要考虑这两点。无锁什么的,本来就应该避免到处加锁,必须加锁的地方效率是有些损失,C++超强的性能可以弥补,也可以自己实现无锁队列。


我考虑过用C++/D来实现一个简单点的框架,它由两个部件组成,Coroutine和Actor,由LibEvent来做调度器(省事)。Coroutine用来简化状态机类程序的编写,Actor用来解除线程间的耦合。我在C++/D之间犹豫了很久,C++没有Lambda可用,我现在几乎无法忍受。D使用Coroutine可能影响到GC,也不方便做私有堆。

抽空上网查询了一下,竟然有很多C++的Coroutine实现,看了一些,受益匪浅。最终找到一个叫作IoLanguage的东西,好像和我想要的东西很相似,而且是纯OO语言(FP还是让我感觉不爽,为了效率我不能老是重建List),它没有关键字(从介绍上看的),从效率上看(它自己介绍的)它比Python还要好。其它方面没有仔细研究,编译时看到它需要LibEvent,和我的想法也很接近啊。

打算近期就仔细研究一下这个了。测试了一下,竟然有段错误,不过这没什么关系,既然是研究就不用管这些,或许可以帮助测试出BUG并打个补丁什么的。。。

====================
IoLanguage印象

1、它是个Prototype-Based的语言,和JavaScript挺像。
2、语法某些方面和Lisp有些像,和Objective-C也挺像,也有点Ruby的模样。
3、它没有关键字。
4、它支持高并发,用Coroutine实现。
5、它支持同步、异步调用,Actor模式。
6、面向对象、动态类型。

从它的例子看,它在支持高并发、Actor方面,比ErLang更友好,由于是面向对象的,又有Prototype-Based的可扩充的优点,看起来非常好。

主页:
http://www.iolanguage.com

忍不住贴点代码,一个简单的Web服务器,从它主页上抄过来的:
WebRequest := Object clone do(
	handleSocket := method(aSocket,
		aSocket streamReadNextChunk
		request := aSocket readBuffer betweenSeq("GET ", " HTTP")
		f := File with(request) 
		if(f exists, f streamTo(aSocket), aSocket streamWrite("not found"))
		aSocket close
	)
)

WebServer := Server clone do(
	setPort(8000)
	handleSocket := method(aSocket, 
		WebRequest clone @handleSocket(aSocket)
	)
)

WebServer start

这是个支持并发的服务器。不过把上面的@符号去掉就不支持并发了,比erlang的spawn简单吧。

==============================
搞明白了,段错误实际上是没捕捉的异常,这让我感觉很亲切。。


==============================
测试好像效率比较差。


==============================
看了下它的代码,它竟然也使用了libcoroutine,和我之前看中的是同一个东西。

这世界真小。

挺喜欢这个语言的。

==============================
看来还是想错了,它的Socket模块是用LibEvent的,其它部分并没有使用。
9
0
分享到:
评论
6 楼 ye_jian_hui 2008-02-11  
这个IoLanguage,我之前在看一篇采访Matz(Ruby之父)的文章中提到,Matz被问到如果现在要他学习一门新语言,他会学什么,他说他会学IoLanguage......
这个语言确实是比较有意思。
5 楼 qiezi 2008-01-27  
上面说的libcoroutine也是io的作者完成的。。。
4 楼 qiezi 2008-01-26  
FP勉强可以接受吧,不过太纯了也不算是什么优点,像OCaml这种带点副作用的我感觉更好一些。COP方面Erlang做得很好,但和Io比起来我更喜欢后者,虽然它目前并不一定可用。Io支持FP风格,又支持OO风格,COP也只是简单地一个符号(目前的实现BUG不少)。

如果顺利的话,两三年之后它或许慢慢稳定了,两三年内很难有其它语言跳到这个高度,结合这么多优点,所以我打算关注一下。
3 楼 jackyz 2008-01-25  
Erlang 的 FP 学习曲线怒长,而 COP 又思维转换巨卡,的确不具“程序员亲和力”。尤其对于在其它语言下有着丰富并发编程经验的程序员,这些经验不但用不上,还会处处让人觉得受到Erlang的制肘,因此常能听到N多想要愤而发明更顺手轮子的声音。这也许是靠谱的,如果已经PK过并发之路上的各头怪兽,已经探出了一条避免若干陷阱的路子,当然是怎么顺手怎么来的好,搞一套那样的东西,或许只是要多费些力气而已。

不过对于没有这种背景一张白纸两手空空的并发新鲜人,Erlang 可能仍然是一套“平衡性”不错便宜又好用的“大众”装备,在其漫长锻造过程中N多高经验值玩家为其赋予的特性,可以算是中规中矩。对于一众新人来说,对付怪兽和陷阱,足够稳定好用。
2 楼 qiezi 2008-01-24  
那也是优点啊,起点比较高,没有历史包袱
1 楼 ShiningRay 2008-01-24  
这个语言现在的弱点是太年轻

相关推荐

    PHP开发框架Windwalker.zip

    Language Loader Middleware Model Profiler Query Record Registry Renderer Router Session String Test Uri Utilities Validator View 标签:Windwalker Web框架

    eerie:Io的软件包管理器

    $ git clone https://github.com/IoLanguage/eerie.git $ cd eerie $ . ./install_unix.sh 下一个选项可用: --dev从本地目录安装Eerie,因此Eerie会记住其来源的路径,您可以调用eerie selfUpdate轻松地对其进行...

    IO流、Xml解析

    XML(eXtensible Markup Language)是一种标记语言,广泛用于数据交换、配置文件和文档存储。XML解析主要分为DOM(Document Object Model)、SAX(Simple API for XML)和StAX(Streaming API for XML)三种方式。 ...

    IO和XML讲解

    在Android开发中,IO(Input/Output)和XML(eXtensible Markup Language)是两个非常重要的概念。本文将深入探讨这两个主题,尤其对于初学者来说,了解它们的基础知识至关重要。 首先,我们来讨论IO。在计算机科学...

    xml_io_tools

    XML(eXtensible Markup Language)是一种用于存储和交换数据的标记语言,广泛应用于软件开发、数据存储和网络通信等领域。在MATLAB中处理XML文件通常需要编写自定义的解析代码,但“xml_io_tools”这个包提供了一个...

    基于socket.io的聊天室

    HTML(HyperText Markup Language)是网页内容的结构标准,用于定义页面布局和内容。在这个聊天室中,HTML可能包含了输入框、发送按钮和消息显示区域等元素。 4. **实时通信机制**: 在聊天室中,用户发送的消息需要...

    Atom-language-svg,SVG的Atom.io语言插件。为Buzz贡献力量.zip

    Atom-language-svg是一个专门为Atom.io文本编辑器设计的SVG语言插件。这个插件的主要目标是增强Atom对SVG(可缩放矢量图形)文件的支持,让开发者在编辑SVG代码时能够享受到更好的语法高亮、代码补全和智能提示等...

    language-io:Atom 的 Io 语言支持

    语言io包Atom 的 Io 语言支持。 向 Atom 中的 Io 文件添加语法突出显示和片段从 Atom 包安装从 Atom 包中搜索“io”安装手册cd ~/.atom/packages git 克隆 版权所有 (c) 2014

    xml_io_tools_2010_11_05.rar

    XML(eXtensible Markup Language)是一种用于存储和传输数据的标准格式,特别是在软件开发和数据交换中广泛应用。MATLAB是一款强大的数学计算软件,它也提供了处理XML文件的能力,但有时可能需要更专业的工具来增强...

    emacs-languagetool.github.io:emacs-languagetool的登录页面

    GitHub是开源项目常用的托管平台,所以"emacs-languagetool.github.io-master"可能是该网站源代码的下载包,包含构建和维护Emacs-Languagetool网页的所有资源,如HTML、CSS、JavaScript文件以及可能的配置文件。...

    Text-IO.zip_TEXT IO_VHDL testbench_testbench vhdl IO_text io v

    在数字系统设计中,VHDL(Very High-Speed Integrated Circuit Hardware Description Language)是一种重要的硬件描述语言,用于描述、模拟和实现数字逻辑系统。在VHDL设计流程中,Testbench扮演着至关重要的角色,...

    Atom-language-gdscript,atom.io的gdscript语言语法包。为prestonknopp/语言做出贡献.zip

    这个语法包由 prestonknopp 开发并维护,它在 atom.io 上发布,便于广大开发者下载和使用。 Atom 是一款由 GitHub 开发的开源文本编辑器,它的独特之处在于使用了 Web 技术(如 HTML、CSS 和 JavaScript)进行构建...

    Profinet IO.rar_1200加io_profinet_profinet io_s7 1200_西门子PLC Prof

    西门子S7-1200 PLC的Profinet IO技术是现代工业自动化系统中的重要组成部分,尤其在实现高效、灵活的工厂自动化时显得尤为关键。Profinet IO(Industrial Ethernet for Input/Output)是一种基于工业以太网的技术,...

    Atom-language-todotxt,atom.io的todo.txt文件的语法突出显示和实用程序.zip

    这款插件由atom.io社区开发,目的是提升开发者和用户在处理`todo.txt`任务管理格式时的工作效率和体验。 Atom是一个基于Web技术的开源文本编辑器,它允许用户通过安装各种插件来扩展其功能。Atom的灵活性和可定制性...

    ABB变频器-FENA_PROFINET_IO_GSDML

    GSDML(Generic Station Description Markup Language)文件则是ABB变频器在PROFINET网络中进行设备配置的关键文件。 1. **ABB变频器FENA系列**: ABB FENA系列变频器是一款集成了先进电机控制技术和强大通讯功能...

    kk.rar_IO port_io口扩展_扩展IO

    本文将详细探讨"kk.rar_IO port_io口扩展_扩展IO"的主题,特别是如何使用VHDL语言来扩展I/O口,以及8数据3地址扩展到64个I/O口的具体实现。 首先,理解I/O口的基本概念是至关重要的。I/O口是指微控制器或FPGA...

    TIA博途中通过AT指令和二维数组实现IO点位映射的具体方法示例.docx

    选择SCL(Structured Control Language)作为编程语言,SCL是一种高级的编程语言,适合处理复杂的逻辑和数学运算。在FB的接口变量中,我们可以定义一个二维数组,用于存储IO点的状态。例如,可以定义一个类型为BOOL...

    xml_io_tools_2010_11_05.zip

    XML(eXtensible Markup Language)是一种用于存储和传输数据的标记语言,它以其结构化、自解释性和可扩展性而被广泛应用于软件开发、Web服务以及数据交换等领域。本压缩包“xml_io_tools_2010_11_05.zip”包含了...

    Factory. IO工厂结合西门子博途v16做的一个仿真控制 有电气图纸+Factory仿真软件+博途程序+博途v16安装包

    5. **博途程序**:博途V16的程序文件可能包含了SCL(Structured Control Language)或Ladder Diagram(梯形图)等形式的代码,它们是PLC控制逻辑的核心。通过这些程序,用户可以了解如何在Factory.IO环境中实现具体...

    io-info:很多人都在谈论io

    io-info so many people talk about io, so let read it~ io.js非官方声明,中文版本IO naming conflict with Io programming language Node.js Advisory Board io.js TC Meeting 2014-12-10Node.js is forked, not ...

Global site tag (gtag.js) - Google Analytics