軟體工程師手冊/語言詞典/ToonTalk
Ken Kahn 發明並實現了 ToonTalk,並建議將其用於兒童。它可以從ToonTalk 網站免費獲得,可在 Intel 架構的 Windows 系統上執行。我不知道是否有人嘗試在類 Unix 系統上的 Windows 模擬器上執行它。
ToonTalk 具有細粒度的併發性,並且可以說是一種宣告式解釋,作為一種併發約束(邏輯)語言。引數是物件,不是“面向物件”程式設計意義上的“物件”,而是更日常的意義,即如果我把一個物件給你,我就沒有它了。
程式設計師透過執行操作來觸發執行。這沒有特定的限制。
ToonTalk 的語法是動畫,就像卡通一樣。程式設計師扮演一個角色,透過示例向機器人展示要做什麼。程式設計師(或機器人)可以將機器人組裝成機器人團隊。為一個團隊提供一個盒子(一個數組/元組容器)將啟動一個程序。團隊中的順序很重要。在程序的每個執行週期,機器人依次嘗試將一個模式(每個機器人一個模式)與盒子匹配。第一個匹配項觸發。
程式設計師或機器人可以將一個物件放入盒子中的一個“洞”(隔間)中,或者可以將其取出來。您可以將其視為類似於賦值。洞可以是空的。
可以使用魔杖複製東西,可以使用吸塵器使東西消失。
存在一個參考和通訊結構,由鳥巢對(或家庭)組成。一隻鳥飛到一個巢裡,在最簡單的情況下(也可以有多隻鳥飛到同一個巢裡,一隻鳥飛到多個巢裡,或者多對多,但是為了描述,我會繼續假設最簡單的通訊)。當程式設計師或機器人將一個物件交給一隻鳥時,這隻鳥(她;所有的鳥都是雌性,所有的機器人都是雄性)飛到她的巢裡並將物件放在那裡。如果巢裡已經有了一些物件,這隻鳥會把新物件放在它們下面。
當一個機器人等待一個特定型別的物件出現在盒子中的一個洞裡時,如果那個洞裡確實有一個未覆蓋的巢,機器人會一直等待,直到一隻鳥應該把東西放到巢裡。然後,對機器人來說,盒子看起來就像是在那裡放置了交付的物件而不是巢穴。因此,您可以傳遞結構(作為帶有可能巢狀的盒子的盒子),實際上,這些引數的值還不知道,用巢穴表示。當程式的另一部分弄清楚引數的值應該是什麼時,它可以將表示該值的物體交給飛往相關巢穴的鳥。
您可以將將一個物件交給一隻鳥視為類似於賦值。
實際上,我撒謊了;鳥巢不是唯一的引用結構。還有“感測器”物件與其他物件連結為它們的“外觀”,一個物件的更改會立即反映在另一個物件中。然而,這些不能是盒子,只能是文字、數字或圖片。我認為感測器在 Lisp 中與賦值一樣髒,您可以將“純 Lisp”視為不包含這種髒東西的方言。但是,感測器似乎在 ToonTalk 實踐中是必要的,作為一種輸出機制(動畫的“圖片”),如果用鳥來驅動會很尷尬;卡恩博士嘗試過只將鳥作為 I/O,最終改為使用感測器。
程式設計師或機器人可以在洞、鳥巢和機器人上鍵入標籤。標籤對執行沒有影響,但可以幫助程式設計師更好地記住設計中洞的作用。此外,物件的集合還包括“筆記本”,在筆記本上,通常將文件作為放置在左頁上的文字墊來編寫,以記錄儲存在右側下一頁上的任何物件。整個筆記本也可以標記。
一個盒子包含多個洞。您可以將任何物件放入一個未被佔用的洞中。您也可以將一個“矩形”物件(例如一個盒子、一個數字墊或一個文字墊)交給一隻鳥。洞或鳥的存在可以被視為構成一個變數的宣告。這種想法背後的邏輯會認為,您可以將物件放入洞中視為分配值,因此洞代表了確定該值的可能性,而這正是變數的本質;它是一個實體,我們可能還不知道它的值,但一旦我們弄清楚它的值應該是什麼,就可以給它分配值。從這個角度來看,一隻鳥的值可以被認為是最終將交給這隻鳥的一系列物件。
另一方面,如果我們選擇將 ToonTalk 中任何被修改的物件視為兩個不同的物件,一個是在修改之前,另一個是在修改之後,那麼我們可以將該語言視為宣告式語言,因此當然沒有要宣告的賦值或變數,除了邏輯變數,而一隻鳥/巢對可以被視為一個邏輯變數。當您從 Tooly 工具箱中提取鳥巢對時,您就在宣告變數。
這取決於觀點。
程式設計師和所有上下文中的所有機器人可以使用“工具箱”(實際上是一個供應箱)。程式設計師從工具箱中取一個新機器人,並將其交給一個示例盒子。每個機器人始終都有一個漫畫風格的“思維泡泡”,它揭示了機器人將嘗試匹配的模式(始終是一個盒子)(一個新機器人有一個沒有盒子的思維泡泡;這被稱為“沒有思維的機器人”)。程式設計師(在這種情況下,機器人不能這樣做)將一個示例盒子交給一個新機器人,就像從 Tooly 工具箱中取出的一樣(所有工具都有可愛的名稱;魔杖是 Maggie,吸塵器是 Dusty)。然後,動畫擴充套件機器人的思維泡泡以填充螢幕。它包含一個示例盒子的副本、工具箱以及與滑鼠連線作為游標的機器人的影像。程式設計師使用此游標來模擬機器人每次觸發時應該執行的操作。為了完成編寫方法,程式設計師有兩個選擇。一個是按下 ESC 鍵。當機器人執行此操作時,它所屬的程序將繼續存在並繼續進行下一個執行週期。另一個退出語法是拿起一個炸彈並將其引爆。這會在執行時銷燬程序。請注意,程式設計會話不是執行,除非在有限的意義上,可見物件的計算結果將很明顯。
在程式設計師如此指定機器人的動作(或者我稱之為身體或尾巴,將機器人視為邏輯語言中的規則)之後,程式設計師(或者機器人,我認為)可以根據軟體設計的要求對機器人的模式進行泛化。
機器人可以操控方便拿取的物體。機器人會在其“我的箱子”中找到這些物體,並可以暫時將它們放在地板上。“我的箱子”也可以被操控(例如,交給一隻鳥)。
機器人不會四處遊蕩。
存在三種遠端操作形式。一種是上面已經描述過的鳥巢機制。第二種是生成新程序。第三種涉及具有對遠端對應物立即影響的特殊“感測器”物體;我不喜歡談論它們;它們很髒。
當機器人或程式設計師將一條訊息(任何“矩形”物體)交給一隻鳥時,在鳥將物體送到她的巢穴後,鳥會飛回來,並且可以將額外的訊息交給她,或者將她交給其他人(例如,把她放進一個箱子的洞裡,然後把箱子交給另一隻鳥)。
唯一的條件是上面描述的機器人模式匹配機制檢查的那些條件。機器人的主體是直線程式碼,沒有條件、迴圈或子例程呼叫。因此,執行不需要堆疊,並且觸發機器人的時間是可預測的且很短。
模式可以直接檢查物體型別(例如,數字、字串、N孔箱子(可能對孔中可以放什麼有模式限制)、一般來說不考慮孔數的箱子、鳥、空巢),並且可以檢查數字和字串的常數值(因此,字串可以作為訊息選擇器)。為了進行大小比較(<,>),必須使用天平。天平比較箱子兩側的兩個數字或字串,並且模式可以尋找天平的特定傾斜角度(小於、等於或大於)。
每個沒有爆炸的程序始終處於迴圈狀態。透過生成額外的程序也可以實現遞迴,這些程序可以包含生成它們的機器人團隊的副本,或任何其他機器人團隊。沒有其他迴圈機制。特別是,如上所述,機器人的主體是直線程式碼。
假設你得到了一隻鳥,並且你理解你應該使用這隻鳥作為你的輸出通道。然後從 Tooly 中提取一個文字板。在握住或指向文字板的同時,按下退格鍵刪除“A”(所有新的文字板都有一個單字元“A”)。然後輸入“Hello world”。如果你想包含回車符,請按回車鍵。將修改後的文字板交給鳥。
還存在“圖片”,它們可以在背面有機器人作為程序執行,並使用與圖片關聯的感測器物體使圖片改變外觀(包括顯示文字)。因此,程式設計師可以製作動畫角色。
程式設計師可以環繞系統,觀察任何程序或物體,並進行操作。
本機容器是箱子。箱子是 0 到 64K-1 個孔的線性排列。一個孔可以包含任何物體或為空。注意,箱子可以包含另一個箱子。箱子可以相互追加或拆分。零孔箱子是可能且有用的。
請注意,可以構建由兩孔箱子組成的列表結構。這與 Lisp 列表不同,因為列表之間不能共享任何物體(實際上,除了鳥和巢穴)。
請注意,程序可以用來包含東西(每個程序都圍繞一個單獨的箱子,稱為“我的箱子”),並且可以透過鳥和巢穴進行通訊的程序來構建連結結構。
演算法往往是遞迴的。
沒有自動垃圾回收。每個程序(除了圖片背面的程序)都佔據一個“房子”。程式設計師負責決定何時不再需要這些程序並安排它們自爆。
使用者/程式設計師執行和修改系統的動態空間稱為“城市”。城市由一個包含城市街區的二維陣列組成,街道和大道在街區之間穿過。每個街區可以建造四棟房子。直升機可用於讓程式設計師進行概覽並支援在城市周圍快速移動。進入一棟房子(步行)後,程式設計師可以觀察裡面的內容,通常是一個程序。程式設計師也可以在房子裡留下物體(甚至在房子外面的草地上,但這是沒有用處的,因為並非所有操作都能從那裡完成)。程序對程式設計師可能留在它們各自房子裡的任何物體都是盲目的,並且一個程序的執行週期也不能留下任何東西(除了“我的箱子”及其內容)。當一個程序生成另一個程序時,機器人會從 Tooly 中提取一輛新鮮的卡車(它看起來像一輛玩具卡車),並將一隊機器人(單個機器人實際上是一個單機器人團隊,並且無法構建一個零機器人團隊)和一個箱子放在上面。一旦卡車裝載了這兩個物體並放在房子的地板上,它就會駛離。一旦在外面,它會變成一輛真正的卡車大小(所以它會在動畫中出現,無論如何)並四處尋找建造房子的地方。一支看不見的建築工人隊伍從卡車中出來,很快地建造了房子。然後卡車再次縮小到玩具大小,駛入房子。然後卡車消失,留下機器人團隊處理箱子。
程式設計師可以將城市儲存在 Windows 檔案中,並使用該城市的副本恢復執行。程式設計師可以匯出或匯入任何物體(匯出格式為 XML)。存在可以飛越網際網路到 ToonTalk 不同執行例項的遠端鳥類。存在在其頁面上儲存物體副本的“筆記本”(其中可能包括筆記本)。每個程式設計師都有一個主筆記本,該筆記本在 ToonTalk 會話之間持續存在。通常,人們會在定義機器人後立即將它們儲存到此處。除了遠端鳥類外,這些機制只能透過直接操作供程式設計師使用;機器人無法執行這些操作。機器人無法訪問永續性機制,除非透過“外國鳥類”(不要與遠端鳥類混淆),它們構成語言之間的介面。
<請包含使從其他語言切換到本語言更輕鬆的提示。>
最好不要接觸過其他程式語言。
但是,一些基本的計算機科學仍然適用。遞迴仍然是遞迴,資料結構仍然是資料結構。
如果你想使用堆疊進行程式設計,可以自己建立一個。
http://groups.yahoo.com/group/ToonTalk/links
<列出可能會有幫助的其他書籍和文章。請包括參考文獻適合哪個級別的讀者。(初級/中級/高階)>
Morgado, Leonel; Kahn, Ken (2008). ToonTalk 語言規範, 視覺化語言與計算雜誌, 19 (2008), 574-597.
主要論文列表: [1]