Io Language是一种Prototype-Based Language,像JavaScript一样(其它类似的语言我不清楚),这也是个常见的词,JavaScript也非常流行,所以不用再详细解释这个概念了,主要说一下它的库扩展能力,玩过JavaScript/Ruby的对这个特性应该是很喜欢了。
举个小例子说一下这种模型的好处。
Io Language的Object有一个wait方法,它的实现就是个死循环,在没有其它任务的情况下会不断地取时间判断有没有超时。它的附加库里面有个Socket,是使用libevent来实现的,由于libevent使用的是基于事件接口,比如select/poll/epoll,原有的wait方法会对它造成影响,所以Socket库覆写了Object的wait方法,改成用libevent来实现,很好地和libevent结合起来。
并不是所有情况下都会自动扩展,它和Ruby/JavaScript一样,需要把该模块加载才能产生效果,在Io Language里面只需要简单地在程序里写一行:
,它的自动模块加载机制会找到Socket目录并加载。
另一个例子,Io Language的File模块使用的是Posix接口,在有些情况下可能效率不够高,还会造成线程阻塞。AsyncRequest模块(目前只有aio实现)解决了这个问题,它用aio来实现文件的读写操作,只需要简单地加载它(测试也有问题)。当然它没有彻底解决问题,在很多文件系统上,文件IO的瓶颈在open/close上而不是read/write,aio没有解决这个问题。
在我的测试中发现许多BUG ,毕竟还是个非常不成熟的语言,库还没有经过充分测试,效率也是非常非常低,对于现有的很多C库也没有比Erlang做得更好,不过我很喜欢它。
举个小例子说一下这种模型的好处。
Io Language的Object有一个wait方法,它的实现就是个死循环,在没有其它任务的情况下会不断地取时间判断有没有超时。它的附加库里面有个Socket,是使用libevent来实现的,由于libevent使用的是基于事件接口,比如select/poll/epoll,原有的wait方法会对它造成影响,所以Socket库覆写了Object的wait方法,改成用libevent来实现,很好地和libevent结合起来。
并不是所有情况下都会自动扩展,它和Ruby/JavaScript一样,需要把该模块加载才能产生效果,在Io Language里面只需要简单地在程序里写一行:
Socket
,它的自动模块加载机制会找到Socket目录并加载。
另一个例子,Io Language的File模块使用的是Posix接口,在有些情况下可能效率不够高,还会造成线程阻塞。AsyncRequest模块(目前只有aio实现)解决了这个问题,它用aio来实现文件的读写操作,只需要简单地加载它(测试也有问题)。当然它没有彻底解决问题,在很多文件系统上,文件IO的瓶颈在open/close上而不是read/write,aio没有解决这个问题。
在我的测试中发现许多BUG ,毕竟还是个非常不成熟的语言,库还没有经过充分测试,效率也是非常非常低,对于现有的很多C库也没有比Erlang做得更好,不过我很喜欢它。