Io (程式語言)

本頁使用了標題或全文手工轉換
維基百科,自由的百科全書
(重新導向自Io (编程语言)
Io
編程範型物件導向基於原型同像性
設計者Steve Dekorte
實作者Steve Dekorte, Jonathan Wright, Jeremy Tregunna
釋出時間2002年,​22年前​(2002
型態系統動態, 強型別
網站iolanguage.org 編輯維基數據連結
主要實作產品
Io, Io.NET
啟發語言
Smalltalk, NewtonScript, Self, Lua, LISP, Act1英語Actor_model_middle_history#Actor_programming_languages
影響語言
Ioke[1], Potion

Io語言是一門電腦高階程式語言,其發展歷史並不長,2002年3月7日由Steve Dekorte研發出來。 Io語言因為沒有關鍵字,因而很容易進行擴充,並很靈活。

特點[編輯]

Io語言並非主流程式語言,但其學習價值和啟發價值都很高。這門語言吸收了LISPLuaSmalltalk等語言的特點。

Io語言是純物件導向的原型繼承語言,它的創造過程是綜合了SmalltalkSelfNewtonScriptAct1LISPLua等語言的特點[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中,一個新的空對象在建立後,其中只儲存了與其父對象的不同之處,這種行為被稱為差別繼承英語Differential inheritance。下面是一個例子:

 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英語Range (computer programming)的用法,而沒有用for(),後者會更快一些。

參照[編輯]

  1. ^ 存档副本. [2023-01-19]. (原始內容存檔於2021-01-30). 
  2. ^ Io Releases. [2020-02-06]. (原始內容存檔於2020-11-24). 
  3. ^ Io Programming Guide. [2013-08-16]. (原始內容存檔於2013-08-06). 
  4. ^ Tate, Bruce. Chapter 3: Io需要免費註冊. Seven Languages in Seven Weeks: A Pragmatic Guide to Learning Programming Languages 1st. Raleigh, North Carolina: Pragmatic Bookshelf英語The Pragmatic Programmer. 2010: 60, 72. ISBN 978-1934356593. 

外部連結[編輯]