`
qiezi
  • 浏览: 492160 次
  • 性别: 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  
这个语言现在的弱点是太年轻

相关推荐

Global site tag (gtag.js) - Google Analytics