Io (编程语言)

维基百科,自由的百科全书
跳转至: 导航搜索
Io
Io-logo.svg
编程范型 面向对象编程 原型程序设计
发行时间 2002
设计者 Steve Dekorte
实现者 Steve Dekorte, Jonathan Wright, Jeremy Tregunna
型态系统 dynamic, strong
主要实现产品 Io Io.NET Acute
派生副语言 Europa Metis
启发语言 Smalltalk, NewtonScript, Self, Lua, LISP, Act1
影响语言 Ioke, Restricted Io, Fancy, Luna

Io语言是一门计算机高级编程语言,其发展历史并不长,2002年3月7日由Steve Dekorte研发出来。 Io语言因为没有关键字,因而很容易进行扩展,并很灵活。

特点[编辑]

Io language并非主流编程语言,但其学习价值和启发价值都很高。这门语言吸收了LISPLuaSmalltalk等语言的特点。

Io language是纯面向对象的原型继承语言,它的创造过程是综合了SmalltalkSelfNewtonScriptAct1LISPLua等语言的特点[1]

Io语言主要吸取了这些语言的如下特点:

  • Smalltalk——所有的变量均为对象、所有的消息都是动态的;
  • Self——基于原型的面向对象设计
  • NewtonScript——差异化继承
  • Act1——并发行为和特征
  • LISP——code is a runtime inspectable/modifiable tree
  • Lua——小巧且具有可嵌入能力

历史[编辑]

Io语言大约是2002年3月7日由Steve Dekorte创造的,创造初衷则是Steve Dekorte为了帮助他的朋友Dru Nelson改造另一门称作“Cel”的语言,Steve Dekorte发现自己对编程语言的原理并不是很了解,于是决定写一个简单的语言(Io Language)来帮助自己理解相关的问题。

方法和块[编辑]

在Io语言中有两种方法来创建匿名函数:方法和块。这两种方法除了作用域不同外,几乎是没有区别的。块拥有词法作用域,方法拥有动态作用域方法都是高阶函数

示例[编辑]

经典的Hello World程序:

 "Hello, world!" println

新对象是通过克隆其他对象来创建的。特别是在Io中,一个新的空对象在创建后,其中只保存了与其父对象的不同之处,这种行为被称为差别继承。下面是一个例子:

 A := Object clone         // 创建一个新的空对象,命名为"A"

Io语言中一个简单的非递归的阶乘方法:

factorial := method(n,
    if(n == 0, return 1)
    res := 1
    Range 1 to(n) foreach(i, res = res * i)
)

由于将res * i赋值给res是方法的最后一个操作,这个函数会隐式地返回这个结果,因此不需要显式地加上一个返回语句。上面这段代码展示了ranges的用法而没有用for(),后者会更快一些。

参考资料[编辑]

  1. ^ Io Programming Guide

外部链接[编辑]