Io (编程语言)
编程范型 | 面向对象、基于原型、同像性 |
---|---|
设计者 | Steve Dekorte |
实现者 | Steve Dekorte, Jonathan Wright, Jeremy Tregunna |
发行时间 | 2002年 |
类型系统 | 动态, 强类型 |
网站 | iolanguage |
主要实现产品 | |
Io, Io.NET | |
启发语言 | |
Smalltalk, NewtonScript, Self, Lua, LISP, Act1 | |
影响语言 | |
Ioke[1], Potion |
Io语言是一门电脑高级编程语言,其发展历史并不长,2002年3月7日由Steve Dekorte研发出来。 Io语言因为没有关键字,因而很容易进行扩展,并很灵活。
特点
Io语言并非主流编程语言,但其学习价值和启发价值都很高。这门语言吸收了LISP、Lua、Smalltalk等语言的特点。
Io语言是纯面向对象的原型继承语言,它的创造过程是综合了Smalltalk、Self、NewtonScript、Act1、LISP和Lua等语言的特点[3];
Io语言主要吸取了这些语言的如下特点:
- Smalltalk,所有的变量均为对象、所有的消息都是动态的。
- Self,基于原型的面向对象设计。
- NewtonScript,差异化继承。
- Act1,并发行为和特征。
- LISP,代码是运行时间可内省/可修改的树。
- Lua,小巧且具有可嵌入能力。
历史
Io语言大约是由Steve Dekorte在2002年3月7日创造的,创造初衷则是Steve Dekorte为了帮助他的朋友Dru Nelson,改造另一门称作“Cel”的语言,Steve Dekorte发现自己对编程语言的原理并不是很了解,于是决定写一个简单的语言,来帮助自己理解相关的问题[4]。
语法
在它的最简单形式下,它可以构成自一个单一标识符:
doStuff
假定上述doStuff
是一个方法,它被以零个实际参数来调用,因而不需要显式的圆括号。
如果doStuff
有实际参数,它可能如下这样调用:
doStuff(42)
消息
Io是一种消息传递语言,因为在Io中所有东西都是一个消息(不包括注释),每个消息都被发送给一个接收者。上述例子展示的并不完全。要更好的描述这一点,请看下面的例子:
System version
这个例子展示了Io中的消息传递,version
消息被发送到System
对象。
运算符
运算符是特殊情况,这里的语法不像上述例子那样业已定型。Io的解析器检视由解释器定义的一组运算符,并把它们转译成方法调用,例如:
1 + 5 * 8 + 1
被转译成:
1 + (5 *(8)) +(1)
在Io中所有运算符都是方法,它们不需要显式圆括号的事实是一种方便。如你所见,这里仍存在一点运算符优先级,它们同于C运算符优先级。
对象
新对象是通过克隆其他对象来创建的。特别是在Io中,一个新的空对象在创建后,其中只保存了与其父对象的不同之处,这种行为被称为差别继承。下面是一个例子:
A := Object clone // 创建一个新的空对象,命名为"A"
方法和块
在Io语言中有两种方法来创建匿名函数:方法和块。这两种方法除了作用域不同外,几乎是没有区别的。块拥有词法作用域,方法拥有动态作用域。方法和块都是高阶函数。
示例
Hello, World!
经典的Hello, World!程序:
"Hello, world!" println
非递归的阶乘
Io语言中一个简单的非递归的阶乘方法:
factorial := method(n,
if(n == 0, return 1)
res := 1
Range 1 to(n) foreach(i, res = res * i)
)
由于将res * i
赋值给res
是方法的最后一个操作,这个函数会隐式地返回这个结果,因此不需要显式地加上一个返回语句。上面这段代码展示了Range
的用法,而没有用for()
,后者会更快一些。
引用
- ^ 存档副本. [2023-01-19]. (原始内容存档于2021-01-30).
- ^ Io Releases. [2020-02-06]. (原始内容存档于2020-11-24).
- ^ Io Programming Guide. [2013-08-16]. (原始内容存档于2013-08-06).
- ^ Tate, Bruce. Chapter 3: Io. Seven Languages in Seven Weeks: A Pragmatic Guide to Learning Programming Languages 1st. Raleigh, North Carolina: Pragmatic Bookshelf. 2010: 60, 72. ISBN 978-1934356593.