有点厌倦了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的,其它部分并没有使用。
分享到:
相关推荐
$ git clone https://github.com/IoLanguage/eerie.git $ cd eerie $ . ./install_unix.sh 下一个选项可用: --dev从本地目录安装Eerie,因此Eerie会记住其来源的路径,您可以调用eerie selfUpdate轻松地对其进行...
XML(eXtensible Markup Language)是一种标记语言,广泛用于数据交换、配置文件和文档存储。XML解析主要分为DOM(Document Object Model)、SAX(Simple API for XML)和StAX(Streaming API for XML)三种方式。 ...
在Android开发中,IO(Input/Output)和XML(eXtensible Markup Language)是两个非常重要的概念。本文将深入探讨这两个主题,尤其对于初学者来说,了解它们的基础知识至关重要。 首先,我们来讨论IO。在计算机科学...
XML(eXtensible Markup Language)是一种用于存储和交换数据的标记语言,广泛应用于软件开发、数据存储和网络通信等领域。在MATLAB中处理XML文件通常需要编写自定义的解析代码,但“xml_io_tools”这个包提供了一个...
HTML(HyperText Markup Language)是网页内容的结构标准,用于定义页面布局和内容。在这个聊天室中,HTML可能包含了输入框、发送按钮和消息显示区域等元素。 4. **实时通信机制**: 在聊天室中,用户发送的消息需要...
Atom-language-svg是一个专门为Atom.io文本编辑器设计的SVG语言插件。这个插件的主要目标是增强Atom对SVG(可缩放矢量图形)文件的支持,让开发者在编辑SVG代码时能够享受到更好的语法高亮、代码补全和智能提示等...
语言io包Atom 的 Io 语言支持。 向 Atom 中的 Io 文件添加语法突出显示和片段从 Atom 包安装从 Atom 包中搜索“io”安装手册cd ~/.atom/packages git 克隆 版权所有 (c) 2014
XML(eXtensible Markup Language)是一种用于存储和传输数据的标准格式,特别是在软件开发和数据交换中广泛应用。MATLAB是一款强大的数学计算软件,它也提供了处理XML文件的能力,但有时可能需要更专业的工具来增强...
GitHub是开源项目常用的托管平台,所以"emacs-languagetool.github.io-master"可能是该网站源代码的下载包,包含构建和维护Emacs-Languagetool网页的所有资源,如HTML、CSS、JavaScript文件以及可能的配置文件。...
在数字系统设计中,VHDL(Very High-Speed Integrated Circuit Hardware Description Language)是一种重要的硬件描述语言,用于描述、模拟和实现数字逻辑系统。在VHDL设计流程中,Testbench扮演着至关重要的角色,...
这个语法包由 prestonknopp 开发并维护,它在 atom.io 上发布,便于广大开发者下载和使用。 Atom 是一款由 GitHub 开发的开源文本编辑器,它的独特之处在于使用了 Web 技术(如 HTML、CSS 和 JavaScript)进行构建...
西门子S7-1200 PLC的Profinet IO技术是现代工业自动化系统中的重要组成部分,尤其在实现高效、灵活的工厂自动化时显得尤为关键。Profinet IO(Industrial Ethernet for Input/Output)是一种基于工业以太网的技术,...
这款插件由atom.io社区开发,目的是提升开发者和用户在处理`todo.txt`任务管理格式时的工作效率和体验。 Atom是一个基于Web技术的开源文本编辑器,它允许用户通过安装各种插件来扩展其功能。Atom的灵活性和可定制性...
GSDML(Generic Station Description Markup Language)文件则是ABB变频器在PROFINET网络中进行设备配置的关键文件。 1. **ABB变频器FENA系列**: ABB FENA系列变频器是一款集成了先进电机控制技术和强大通讯功能...
本文将详细探讨"kk.rar_IO port_io口扩展_扩展IO"的主题,特别是如何使用VHDL语言来扩展I/O口,以及8数据3地址扩展到64个I/O口的具体实现。 首先,理解I/O口的基本概念是至关重要的。I/O口是指微控制器或FPGA...
XML(eXtensible Markup Language)是一种用于存储和传输数据的标记语言,它以其结构化、自解释性和可扩展性而被广泛应用于软件开发、Web服务以及数据交换等领域。本压缩包“xml_io_tools_2010_11_05.zip”包含了...
5. **博途程序**:博途V16的程序文件可能包含了SCL(Structured Control Language)或Ladder Diagram(梯形图)等形式的代码,它们是PLC控制逻辑的核心。通过这些程序,用户可以了解如何在Factory.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 ...
3. **Global Switch Management Language (GSML)**:spec_gsml_chapter5.pdf介绍了GSML,这是RapidIO交换机管理和配置的一种语言。GSML用于配置交换机参数,如端口设置、路由表和QoS策略,这对于建立和维护RapidIO...
选择SCL(Structured Control Language)作为编程语言,SCL是一种高级的编程语言,适合处理复杂的逻辑和数学运算。在FB的接口变量中,我们可以定义一个二维数组,用于存储IO点的状态。例如,可以定义一个类型为BOOL...