Io
简介:
Io是用原型语言(如同Lua、JavaScript),这意味着,每个对象都是另一个对象的复制品。Io的语法非常简单,但到了Io库的学习就会花多些时间了,因为这门语言的复杂性和丰富性,统统来自于库的设计。大多Io社区都致力于把Io作为带有微型虚拟机和丰富并发特性的可嵌入语言来推广;其核心优势是拥有大量可定制语法和函数,以及强有力的并发模型。(了解Io,可以很好的了解javascript的运行机制)
原型
。
开场:
-
对象的制造是复制已有的对象(Io>Vehicle :=Object clone)//这是基于
Object
对象创造新对象
-
每个对象多有一组槽(类似于对象的各个属性或方法) (有type这个原型类型,还有各种的方法等;使用slotname 方法可以返回对象的槽类表。
-
Io是通过发送消息来获取槽的值。
以上这些只是开场,具体对于对象的槽等可以google:Io language;;
对象、原型、继承::
Io的类型是一种非常好用的机制。其一大些字母开头的对象是类型,Io对它设置了type槽;而类型的复制品若以小谢字母开头,就是对象,没有对其设置type槽,调用时会调用父类的type槽;!。!
-
对象会记住它的原型(在type槽);
-
槽可以包含对象(包括方法和对象)(方法:method(。。。))
-
消息返回槽中值,或调用槽中的方法;
-
如果对象无法响应某消息,则它会把该消息发送给自己的原型;
列表和映射:
列表(list);映射(map) ;如同Ruby的散列表一样;具体的实现这里略;
true、false、nil、 单例:
true、false、nil这三个就没什么好特别介绍了;要讲的是这三个都是单例:
就是在对它们进行复制的时候,返回的只是单例对象的值;(就是其本身,在程序中都只有一个实例,其被复制(实例化)是返回的是其本身,所以永远都只有一个)
/**实现方式就是重定义clone方法**/
你可以改变任何一个对象上的任意一个槽
,甚至那些定义这门语言的对象也概莫能外。这样,当你完全掌握运算符合组对象的各个槽,就可以简单漂亮的实
现领域特定语言(domain-specific-language);这个和Ruby一样,让人爱恨交加啊:-(
条件和循环
::
-
Io的循环是像方法一样调用的;而if控制结构是以函数的形式实现的,(形如:if(condition,true code,false code,);
-
循环:无限循环:loop(“getting 天才“ println)
-
while循环:while(i<11, i println; i=i+1);
-
for循环:for(i,1,11,2,i println)://循环1~11,递增2
-
(在Io中”;”是可以用来连接前后连个语句的,在循环中直接用)(好像这个有点多余,不过还是写上去下下)
-
运算符:Io可以自定义一些运算符,可以调用OperatorTable来查看运算表。
消息与反射:
!!(在Io中除了注释和参数之间的逗号外,一切事物都是消息!)
一个消息由三个部分组成:发送者(sender)、目标(target)和参数(arguments)
。
在Io中,消息由发送者发送至目标,然后由目标执行该消息。
你可以使用call方法访问任何消息的元信息(mate information)。
反射:
我的理解就是,对于接收到消息后,如果没有响应,则剑消息放射到原型,层层向上;
(放射和消息,的使用很强大,也能搞出很有意思的玩意儿。有兴趣可以另外看一些资料或google)
给个小的代码,关于反射的:
Object ancestors := method(
prototype := self proto
if(prototype !=Object,
writeln("Slots of",prototype type,"\n--------")
prototype slotNames foreach(slotNmae,writeln(slotName))
writeln
prototype ancestors))
/**代码的结果是输出消息发送者的各个原型和原型的原型,直到Object**/
领域特定语言:Io是很开放的,完全可以从定义任何对象和任何槽;这里就不加以说明了;
Io的method_missing:
并发:!!
这是Io非常出色的地方;有初设的并发库,主要组成 协程‘
actor和future
(这个东东笔记太多了,我直接拍照了)
Io总结:
核心优势:
-
Io是原型语言,具有良好的可塑性,可以改变任意对象的任意槽。可以哦使用它创建出你想要的语法。
-
占用空间小:大多是Io应用程序的产品都是嵌入式系统。语言的个头小但功能强大且灵活,Io的虚拟机也易于移植到不同的操作系统环境中;
-
简单:Io的语法极为简洁,不过学会核心后,重要的是库是如何组织的;
-
灵活:很开放,能改变任何对象的任何槽,这可以快速创建出自己想要的语法;
-
并发!!:actor、future和协程使得Io编写多线程应用程序比较容易,而且写出来的程序易于测试且拥有更出色的性能;
不足:
-
语法:没什么语法糖,使得Io清晰易懂,但语法常常使得Io难以用简短的方式表达艰深的概念;就是说,会很容易明白某个程序如何用Io写出来,但很难明白某个程序到底做了什么。
-
社区:它的社区很小;
-
性能:在单线程上有其执行速度的特性,不过Io的并发结构可得到一定程度的缓解,但Io在性能上的这种局限性;
最后:我觉得Io这个语言挺好玩的,就是这种原型语言的方法吧,这是第一次看到所谓的原型语言,那个槽的设计感觉挺好玩的,消息的i传递和反射感觉也是一个特点吧!不过和Ruby相比,觉得小巧或是说是太简陋了!(我是这么觉得的) ;但是用来开发什么的,我根本搞不懂要怎么搞的,单单处理一些小的算法等觉得还是可以的 ,但其他的就不知道要怎么编写的了。。。