有点厌倦了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的,其它部分并没有使用。
分享到:
相关推荐
Language Loader Middleware Model Profiler Query Record Registry Renderer Router Session String Test Uri Utilities Validator View 标签:Windwalker Web框架
$ git clone https://github.com/IoLanguage/eerie.git $ cd eerie $ . ./install_unix.sh 下一个选项可用: --dev从本地目录安装Eerie,因此Eerie会记住其来源的路径,您可以调用eerie selfUpdate轻松地对其进行...
Java Language Features, 2nd Edition,介绍了注解,内部类、IO、持久化等java特性。比较适合深入研究的人员。
Atom-language-svg.zip,SVG的Atom.io语言插件atom中的svg语言支持,atom是一个用web技术构建的开源文本编辑器。
语言io包Atom 的 Io 语言支持。 向 Atom 中的 Io 文件添加语法突出显示和片段从 Atom 包安装从 Atom 包中搜索“io”安装手册cd ~/.atom/packages git 克隆 版权所有 (c) 2014
Atom-language-gdscript.zip,atom.io的gdscript语言语法包lang gdscript包,atom是一个用web技术构建的开源文本编辑器。
Atom-language-todotxt.zip,atom.io的todo.txt文件的语法突出显示和实用程序语言todoxt包,atom是一个用web技术构建的开源文本编辑器。
The authors systematically cover most classes in Java's main packages, java.lang.*, java.util, and java.io, presenting in-depth explanations of why these classes work as they do, with informative...
language-terraform:Terraform.io对Atom的支持
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 ...
Atom-language-archlinux.zip,[NO LONGER MAINTAINED] Arch Linux development package for the Atom text editor (https://atom.io).Arch Linux开发包,atom是一个用web技术构建的开源文本编辑器。
emacs语言工具 emacs-languagetool的登录页面
Source code is freely available for download from http://gopl.io/ and may be conveniently fetched, built, and installed using the go get command. Table of Contents Chapter 1. Tutorial Chapter 2. ...
Cylvre-Language.github.io:Cylvre编程语言的所在地
在线阅读出处:http://numbbbbb.gitbooks.io/-the-swift-programming-language-/content/index.html 如阅读pdf文档发现或怀疑有错误 请到出处查看
English language book
IO With delphi language.
atom.io的GDScript(Godot脚本语言)语法。 产品特点 突出显示gd,tres,tscn和project.godot文件的语法。 Godot(v3.2 +)提供的GDScript自动完成功能 集成 添加数据提示,诊断和超点击支持。 依存关系 node- gyp...
Specific hardware interfacing topics covered are parallel IO, analog-to-digital/digital-to-analog conversion, pulse width modulation, timer usage for IO polling, and industry standard serial ...
开源项目-iron-io-functions.zip,IronFunctions: language agnostic open-source alternative to AWS Lambda written in Go