跳至內容
主選單
主選單
移至側邊欄
隱藏
導覽
首頁
近期變更
隨機頁面
MediaWiki說明
Taiwan Tongues 台語維基
搜尋
搜尋
外觀
建立帳號
登入
個人工具
建立帳號
登入
檢視 Dylan語言 的原始碼
頁面
討論
臺灣正體
閱讀
檢視原始碼
檢視歷史
工具
工具
移至側邊欄
隱藏
操作
閱讀
檢視原始碼
檢視歷史
一般
連結至此的頁面
相關變更
特殊頁面
頁面資訊
外觀
移至側邊欄
隱藏
←
Dylan語言
由於以下原因,您無權編輯此頁面:
您請求的操作只有這些群組的使用者能使用:
使用者
、taigi-reviewer、apibot
您可以檢視並複製此頁面的原始碼。
'''Dylan'''是多範式的程式語言,包括支援函數式佮物件導向程式設計(OOP), 伊是動態佮反射式的,煞提供設計用佇支援生做高效機器碼的編程模型,包括佇咧動態佮靜態行為頂懸的細粒度的控制。伊是佇一九九空年代早期由蘋果公司領導的群組創造的。 ==概述== 佇咧 Dylan 參考手冊內底有足簡明的徹底的語言概述。Dylan 衍生自 Scheme 和 Common Lisp,並且增加了衍生自 Common Lisp 東西系統(CLOS)的整合的物件系統。佇咧 Dylan 中,彼个所有的值(包括數值、字元、函式和類)攏是頭等等的物件。Dylan 支援多重繼承、多型、多分派、關鍵字參數、物件內省、是因為模式的語法擴充宏佮真濟其他進階特徵。程式會當表達佇咧動態性上的細粒度的控制,允准程式占佇咧動態佮靜態編程之間的連續區,並支援演進式開發(允准先快速原型隨後增進精製和最佳化)。 Dylan 的主要設計目標是成做適合開發商業軟體的動態語言。Dylan 試看覓影決潛在的效能問題,通過向完全靈活性的 Lisp 系統介入「本性」限制,允准編譯器清楚的理解會當編譯單元比如函式庫。Dylan 對 Scheme 佮其他 Lisp 衍生出著伊的足濟語意;某寡 Dylan 實現上頭起佇咧現存 Lisp 系統之內。猶毋過 Dylan 有類似 ALGOL 的語法相𫝛是一个類似 Lisp 字條語法。 ==歷史== Dylan 是佇一九九空年代早期由蘋果公司領導的一个群組建立的。佇伊的開發的時陣,伊予意圖用佇咧 Apple Newton 電腦,猶毋過 Dylan 實現彼陣猶無達到充分成熟,而且 Newton 轉來使用矣 C 和 Walter Smith 開發的 NewtonScript 二者的混合。Apple 佇咧一九九五年尾止矣其實 Dylan 開發努力,就算講𪜶製作一个真接著的「技術發行」版本(Apple Dylan TR 一), 並且包括一个進階整合式開發環境(IDE)。 其他兩个小組對語言設計佮開發實現做出了貢獻:Harlequin 公司發行矣 Microsoft Windows 下的商業 IDE,卡內基 ・ 梅隆大學發行矣叫做 Gwydion Dylan 的 Unix 下跤的編譯器。二者的實現分別於二空空四年和一九九八年開放矣原始碼。Harlequin 實現早當咧叫做 Open Dylan 並且由一組志願者維護。 Dylan 語言的代號是 Ralph。James Joaquin 選擇名 Dylan 表示「動態語言」('''Dy'''namic'''lan'''guage)。 ==語法== Dylan 的多數語法特徵來自伊的 Lisp 傳承。Dylan 頭仔咧使用類似 Lisp 字條語法,伊敢若是 S-表達式。到甲語言設計完成的時陣,語法予人變更做類似 ALGOL 的語法,預期廣泛的編程者受眾會閣較熟似伊。語法由 Michael Kahl 設計的。伊佇咧 Dylan 來參考手冊有詳盡描寫。 ===詞法=== Dylan 毋是大細寫敏感的。Dylan 的詞法允准使用連字佮減號的號名約定,來連接多單詞識別碼的各部份(有時叫做「lisp-case」抑是「kebab case」)。 這个約束佇咧 Lisp 語言內底是捷看著的,但無適用佇將毋是數值文字一部份的連字號佮減號,當做一个單一詞法記號處理的遐的程式語言,就算佇伊無包圍佇空白字元的時陣。 除了字母數字元佮連字佮減號以外,Dylan 允准特定非字母數字元作為識別碼的一部份。捌別碼袂使單獨的由非字母數字元或數字元組成。若有任何歧義,應使用空白。 ===樣例代碼=== 有幾若个溝的一个簡單的類: 佇咧約束頂懸,類使用尖括號(即的小於號佮大於號)來號名,比如講這个代碼例內底的類名 ` < point > `。 佇咧 ` end class < point > ` 中,` class ` 和 ` < point > ` 二者攏是可選的。嘿所有 ` end ` 子句攏是按呢。比如講,通好寫 ` end if ` 抑是唯寫 ` end ` 來終止一个 ` if ` 語句。 仝款的類,會當用極小化的方式重寫: 槽這馬攏確定類型做 ` < object > `。槽著愛予手動初初化。 佇咧約束頂懸,常有數名開始就 ` $ `: 階乘函式: 遮的 ` n ! ` 和 ` < integer > ` 就是正常的識別碼。 遮無顯式的倒轉去語句。一个方法抑是函式的結果是到尾仔求值的彼个表達式。除掉佇回位置的表達式後壁的分號是捷看的風格。 ==模組佮號名空間== 佇足濟物件導向語言內底,類是封裝和模組化的主要方式;每一个類別定義一个號名的空間並控制佗一寡定義是佇外部可見的。進一步的,佇真濟語言中類別定義必須愛予人用做一个整體的不可見單元。比如講,使用 ` String ` 串接函式要求匯入並編譯全部的 ` String `。 某一寡語言的套件括 Dylan,閣包括一个分立的顯式的號名空間或者是模組系統,會當用閣較一般性的方式來進行封裝。 佇咧 Dylan 中,編譯單元和匯入單元的概念是分開的,類對兩个攏無啥物特殊會當講。「庫」定義應當被做伙編譯佮處理的專案,而且「模組」定義一个號名空間。類會當共囥佇咧模組內底,抑是分拆到其中,隨編程者意願。定定是一个類的完全定義無存在佇一个單一的模組內底,是延展佇進行選擇性收集的多個模組至上。無仝的程式會當有仝的類的無仝的定義,而且包括𪜶所需要的。 比如講,考慮支援 ` String ` 的一个附加庫 regex。佇咧某一寡語言內底,一个功能愛予人包括佇字串內底,這个功能著愛予人增加到 ` String ` 號名空間。隨這款代誌不斷發生,` String ` 類變愈來愈大,毋免閣用 regex 的函式猶原需要為增加著庫大細付出代價。為此,這種附加件典型的共囥佇咧𪜶家己的號名空間和物件內底。這種方式的缺點是新函式無閣再是 ` String ` 的一部份;伊轉去予隔離佇單獨聲明的伊家己的函式集合內底。無閣用矣 ` myString . parseWith ( myPattern ) `,對 OO 視角這是自然的組織方式,是使用像 ` myPattern . parseString ( myString ) ` 這款的物件,彼个效果頂懸反轉矣次序。 佇咧 Dylan 之下,會當為相仝代碼的定義誠濟介面,比如講 ` String ` 串接方法會當共囥咧 ` String ` 介面佮 ` concat ` 介面二者內底,後者將無仝的類中的無仝的串接函式收集做伙。這捷用數學庫內底,遮的函式意圖適用廣泛的無仝物件類型。 介面構造的閣較實際用法是建造一个模組的公開佮私有版本,佇咧其他的語言內底這予人包括做一个附帶特徵,並且總是致使問題並增加語法。佇咧 Dylan 之下,所有的函式呼叫會當簡單的囥咧「私有」抑是「開發」介面當中,而共可公開存取的函式收集佇咧 ` Public ` 介面內底。佇咧 Java 抑是 C + + 之下,一个物件的可見性是定義佇代碼中的,意味著愛提供類似的變更,編程者將予人強制的去完全重寫定義,並且袂當同齊有兩个版本。 ==類== 佇咧 Dylan 中以類似大多數 OO 語言的風格,類似的物件欲描寫 ` slot `(槽,資料成員,欄位,ivar 等)。 所有對槽的存取攏愛通過方法,就親像 Smalltalk 彼款的。預設的 ` getter ` 和 ` setter ` 方法基於槽名而自動生成。著比如講多數其他 OO 語言,會當應用於類的其他方法定定義佇這个類的外部,所以佇遮 Dylan 中類別定義典型的只包括儲存的定義。比如講: 佇這个例中,定義矣類 ` < window > `。` < 徛名 > ` 語法只是約束,予類名顯得通好突出,尖括號只是這个類名的一部份。佮之相對比,佇一寡語言內底,約束做大寫類名的首字母,抑是予名字條頂懸 C 抑是 T(比一个例)。 ` < window > ` 繼續承一个單一類 ` < view > `,並包含二个槽:` title ` 持有這个窗口標題的字串,和 ` position ` 持有這个窗口一角的 X-Y 點。佇這个例中,標題予出為預設值,彼位置猶閣無值。可選的 ` init-keyword ` 語法允准編程者佇咧初初化這个類的物件指定這个槽的初初值。 語言譬論講 C + + 抑是 Java 中,類猶閣定義矣伊的介面。所以佇咧這二種語言內底,若像上述案例中,類別定義無顯式的著可見性的指令,是對資料成員佮方法的存取攏予人當做是 ` protected `,意味著𪜶干焦會當予子類使用。愛予無關代碼使用這个窗口的實例,𪜶著愛予聲明為 ` public `。 佇咧 Dylan 中,遮的槽的可見性規則無予當做是這个代碼的一部份,是一个模組 / 介面系統的一部份。這是增加足大的靈活性。比如講,佇早期開發中用的介面會當聲明所有的物件為 ` public `,毋過用佇咧測試佮部署內底用的介面會加以限制。對於 C + + 抑是 Java,這種變更加會需要改變原始碼,所有的人就無愛做矣,啊若佇咧 Dylan 中,這是完全無關係的概念。 就算講這个例無用著,Dylan 閣支援偌重繼承咧。 ==方法佮泛化函式== 佇咧 Dylan 中,方法毋是講原生的關聯佇咧任何特定的類似;方法會當予人認為存在佇咧這个類以外。就親像 CLOS,Dylan 是因為多分派(多方法)的,遮特定方法的呼叫是因為伊的所有實際參數的類型來選擇的。方法無需要咧編譯時間就知,是因為使用者偏好,所要求的函式會當是得著的嘛會當袂當。 佇咧 Java 之下,仝款的方法予人隔離佇咧特定的類之中。欲使用這个功能,編程者去予人強制去 ` import ` 這个類並顯式的參照伊來呼叫這个方法。抑若這个類袂當得著,或者是這个編譯時間未知,這个應用簡單的袂當編譯。 佇咧 Dylan 中,泛化函式表示零抑是濟類似的方法,用 ` define method ` 方式來建立的所有方法自動的包含佇仝名的泛化函式內底。泛化函式嘛會當顯式的用 ` define generic ` 聲明,允准編程者精確控制會當增加佗一種方法。代碼被隔離佇儲存才佇位泛化函式當中。足濟類佇內底有𪜶家己的方法,因此佇感官頂懸就親像多數其他 OO 語言仝款。但是代碼實際上位佇咧泛化函式內底,意味著𪜶無附屬於特定的類似,並會當予任何人自然的呼叫。下例將類 ` < window > ` 的方法 ` turn-blue ` 併入仝名的泛化函式內底: 這个定義類似其他的語言的定義,並有可能去予人封裝著 ` < window > ` 類之中。注意 ` :=` 這乎 ` setter ` 搧叫,伊是 ` color-setter ( $ blue , w ) ` 的語法糖。 泛化函式的自主利用會當看著遮爾仔譀化的例內底。比如講,多數的語言內底的一个常見函式 ` to-string `,伊閣轉去這个物件的某種人類會當讀形式。比如講一个窗口可能倒轉來伊的標題佮伊佇咧爸窗口內底的位置,啊若一字串將返回伊家己。佇咧 Dylan 中,遮的方法會當共收集著叫做 ` to-string ` 的一个單一模組內底,毋過這个代碼予對這个自身的定義中徙掉。若是一个特定的物件無支援 ` to-string `,會當簡單的佇咧 ` to-string ` 模組中增加上伊。 ==擴充性== 述的整體概念可能予讀者感覺足奇怪。處理一个窗仔口的 ` to-string ` 無定義佇咧 ` < window > ` 之中。除非考慮著講 Dylan 著 ` to-string ` 呼叫的處理方式,抑若無就可能會變做無意義。佇多數語言內底,佇咧程式的編譯的時陣,走揣予 ` < window > ` 的 ` to-string ` 並共替代為著這个方法的一个指標(抑是濟抑是少)。 佇咧 Dylan 中,這是發生佇程式初次咧執行的時陣,執行時系統建造一个方法名 / 形式參數細節的表格,並且通過這个表格來動態的走揣方法。這意味對一个特定的方法會當徛佇任何所在,毋但是編譯時間單元內底。最後編程者得著咧囥其代的碼頂頭的相當大的靈活性,只要若合,會使收集佇伊的類之中,嘛閣會當佮仝款的功能的方法來收集佇咧泛化函式內底。 遮隱含著編程者會當通過佇單獨檔案中定義函式,來向現存的類增加功能。譬如講人可能希望講向所有 ` < string > ` 增加拼寫檢查,這佇多數語言內底會需要存取著字串類的原始碼,這款基本類真少以原始寫碼形式共出。佇咧 Dylan(佮其他會使延伸語言)中,拼寫檢查方法會當增加到 ` spell-check ` 模組中,通過 ` define method ` 構造定義伊會當適用所有的類似。佇這个情形下,實際功能會當定義佇一个單一的泛化函式中,伊接受一个字串閣回錯誤。當 ` spell-check ` 模組去予人編譯入程式的時陣,所有的字捾(佮其他的物件)攏會得著這个增加的功能。 ==參照== ==外部連結== * 官方網站 , Open Dylan–hosts open source , optimizing Dylan compiler targeting Unix / Linux , macOS , Microsoft Windows * Overview of the language * An Introduction to Dylan * Apple Dylan TR 一 * The Marlais Dylan Interpreter–An implementation of a subset of Dylan , suitable for bootstrapping a compiler * 開放 kha-tá-lok-guh 專案中的「Dylan」 [[分類: 待校正]]
返回到「
Dylan語言
」。