編程範型 | 物件導向、基於原型 |
---|---|
設計者 | Steve Dekorte |
實作者 | Steve Dekorte, Jonathan Wright, Jeremy Tregunna |
釋出時間 | 2002年 |
穩定版本 | 20170906
(2017年8月11日[1]
) |
型態系統 | 動態, 強型別 |
主要實作產品 | |
Io Io.NET | |
受啟發於 | |
Smalltalk, NewtonScript, Self, Lua, LISP, Act1 | |
施影響於 | |
Ioke, Potion |
Io語言是一門電腦高階程式語言,其發展歷史並不長,2002年3月7日由Steve Dekorte研發出來。 Io語言因為沒有關鍵字,因而很容易進行擴充,並很靈活。
特點
Io語言並非主流程式語言,但其學習價值和啟發價值都很高。這門語言吸收了LISP、Lua、Smalltalk等語言的特點。
Io語言是純物件導向的原型繼承語言,它的創造過程是綜合了Smalltalk、Self、NewtonScript、Act1、LISP和Lua等語言的特點[2];
Io語言主要吸取了這些語言的如下特點:
- Smalltalk——所有的變數均為物件、所有的訊息都是動態的。
- Self——基於原型的物件導向設計。
- NewtonScript——差異化繼承。
- Act1——並行行為和特徵。
- LISP——代碼是執行時間可內省/可修改的樹。
- Lua——小巧且具有可嵌入能力。
歷史
Io語言大約是2002年3月7日由Steve Dekorte創造的,創造初衷則是Steve Dekorte為了幫助他的朋友Dru Nelson改造另一門稱作「Cel」的語言,Steve Dekorte發現自己對程式語言的原理並不是很了解,於是決定寫一個簡單的語言來幫助自己理解相關的問題。
方法和塊
在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()
,後者會更快一些。
參考資料
- ↑ Io Releases. [2020-02-06].
- ↑ Io Programming Guide. [2013-08-16].
外部連結
- Io 官方網站
- Io Notes
- Io at Synrc Research Center
- 開放式目錄計劃中和Io相關的內容