Euphoria語言
Euphoria是由加拿大安大略省多倫多 Rapid Deployment Software 公司 Robert Craig 開發的程式語言。頭仔佇咧 Atari ST 平台頂開發但是無公布,第一个商業版本是佇咧十六位 DOS 平台的運行的,並且是專有軟體。二空空六年,隨著版本三的發布,Euphoria 成做開源軟體。openEuphoria Group 繼續管理佮開發這个項目。二空一空年十二月,openEuphoria Group 發佈矣 openEuphoria 的第四版佮伊的吉祥物以及新的特性。OpenEuphoria 目前支持 Windows、Linux、macOS 和伯克利軟體包(BSD)的三種版本。
Euphoria 是一種通用的指令式解說型高級語言。翻譯器生成 C 原始碼,並且支持 GNU 編譯器套裝 ( GCC ) 和 Watcom C / C + + 編譯器。而且,Euphoria 程序會當創建獨立的會當執行文件。支持包括 Win 三十二 lib、wxWidgets、GTK + 和 IUP 在內的濟濟圖形用戶界面 ( GUI ) 庫。Euphoria 有一个簡單的內置資料庫佮各種其他資料庫的包裝庫。
概述
Euphoria 是一種通用的過程式編程,伊通過多種方式拍拚語言簡潔、𠢕讀、適應快速開發、高效。
- 簡潔啊—— 伊干焦使用四種內置數據類型(見下文)而且會當實現的糞埽回收。
- 𠢕讀—— 伊的語法傾向於使用簡單的英語關鍵字表示結構毋是用標點符號來表示。
- 快速開發—— 解說器對原型設計佮增量開發。
- 高效—— 高效的引用計數正確處理循環引用。
歷史
Euphoria 是 Robert Craig 作為這種對零開始開發程式語言的個人項目佇 Atari Mega-ST 上創建的程式語言。該語言的真濟設計思想攏來自 Craig 多倫多大學的計算機科學的碩士論文。Craig 的論文深受 John Backus 咧函數式的編程 ( FP ) 語言方面做工課的影響。
Craig 將伊上開始的 Atari 實現徙栽到十六位 DOS 平台,並且一九九三年七月作為專有軟體頭擺發佈 Euphoria 一垺零。上代先的 Atari 實現予人 Craig 欲描述講「原始」並且猶未公開發布。Euphoria 由 Craig 通過伊的公司快速部署軟體 ( RDS ) 佮網站 Rapideuphoria . com 繼續開發佮發布。二空空六年十月,RDS 發布 Euphoria 三版,閣宣布今後 Euphoria 將佇咧開源軟體許可免費分發。
RDS 繼續開發 Euphoria,並且二空空七年八月發布了三五一 . 一版。隨後,RDS 單方面停止矣 Euphoria 的開發,openEuphoria Group 接管矣當咧進行的開發。openEuphoria Group 佇二空一空年十二月發布矣版本四,閣公布矣 openEuphoria 項目的新徽標佮吉祥物。
三孵一 . 一版猶原閣是一个重要的路站碑版本,是 Euphoria 支持 DOS 的最後一个版本。
Euphoria 是 _ End-User Programming with Hierarchical Objects for Robust Interpreted Applications 的 _ 首字母縮寫詞,就算講有人懷疑講這是無一个縮略詞。
Euphoria 解說器上頭仔是用 C 編寫的。佇二空空四年十一月發布的 Euphoria 二孵五中,解說器分做兩部分:前端解析器佮後端解說器。前端這馬是用 Euphoria 編寫的(並佮 Euphoria-to-C 轉換器佮 Binder 做伙使用)。 主要的後端程序佮運行時庫是用 C 編寫的。
特徵
Euphoria 的設計佮開發實現以下設計目標佮特性:
- 誠有學習而且有一致的高級結構(比 BASIC 語言閣較容易)
- 實現三十二位內存以避免複雜的內存管理佮大小尋址的限制
- 支持 Debugging 佮運行的時陣錯誤處理
- 下標佮類型檢查
- 冗散佮嚴格的變量類型
- 物件導向編程(用戶定義抑是用)
- 解說型語言,有自動內存管理閣有糞埽回收
- 異構集合類型(序列)
- DOS 圖形庫(Euphoria 一直到版本三石一 . 一直支持)
- 調試器
- 綜合資料庫
- 有低級內存處理
- 直接包裝(抑是訪問)C 庫
執行模式
- 解說型語言
- 用佇獨立會當執行文件抑是動態掛結 C 語言翻譯器 ( E 二 C )
- 字節碼編譯器佮解說器(shrouder)
- Binder 將 Euphoria 原始碼縛定到解說器以創建會當執行文件。
- 讀取-求值-輸出循環 ( REPL ) 版本佇咧 openEuphoria 計畫內底。
使用
Euphoria 旨佇迅速促進無仝類型的動態數據集處理,伊尤其適用佇字符串佮圖像處理。Euphoria 已經予人用工智慧、數學研究、編程教學佮實現牽涉著數千字符的字體。Euphoria 解說器的足大一部份是用 Euphoria 編寫的。
數據類型
Euphoria 有兩種基本的數據類型:
- Atom–一个數字,用三十一个有符號規型抑是六十四个 IEEE 浮點型實現。Euphoria 根據當前值在整數佮浮點表示之間動態變化。
- Sequence–有零个抑是多元素的數組,每一个元素可能是一个 Atom 抑是另外一个 Sequence。Sequence 中元素的數量毋是固定的(即免聲明數組的大細)。 程序會當佇運行的時根據需要添加抑是刪除元素。內存分配-釋放由引用計數自動處理。使用方括號括起來的索引值引用單個元素。Sequence 中的頭一个元素的索引為 ` [一] `。1875入去 Sequence 中的元素由附加帶括號的索引值引用,` X [三] [二] ` 指的是作為 X 的第三个元素的 Sequence 中包括的第二个元素。序列的每一个元素攏是一个 Object 類型(見下文).
Euphoria 有兩款額外的預定義數據類型:
- Integer–一款 _ atom _,三十一位有符號整數,取值範圍是鋪十二鋪空七千三百七十四抹一千八百二十四到十五空七千三百七十四刣一千八百二十三(即-兩百三十到兩百三十七一)。 Integer 數據類型比 Atom 數據類型閣較有效率,但是佮 Atom 的取值範圍無仝。字符存儲為整數,比如講,咧編碼 ASCII 中 `'A'` 編碼為六十五。
- Object–一種通用數據類型,伊可能包括伊上任何一種(即 _ atom _、_ sequence _ 抑是 _ integer _), 並且會當佇運行的時陣改做另外一種類型。
無字符串數據類型。字符符合 Integer 的 Sequence 表示。因為文字符合編程當中非常用,Euphoria 將雙引號括起來的字符解說為整數序列。所以
` ` ` " ABC " ` ` `
咧解說器看是佮下列代碼仝款:
` ` ` {'A','B','C'} ` ` `
這佮以下仝款:
` ` ` { 六十五 , 六十六 , 六十七 } ` ` `
Hello , World !
` ` ` puts ( 一 , " Hello , World ! \ n " ) ` ` `
例
程序注釋以雙連字符 `--` 開頭並直至到行尾。
以下這代碼佇一組項目中查這揣舊的項目。若揣著,伊共徙掉這个結果並且將後一个元素共接起來進前一个元素。請注意,Sequence 中的頭一个元素的索引為 ` [一] `,` $ ` 表示序列的長度(即元素總數)。
` ` ` global delete _ item(object old,Sequence group) integer pos --台灣石頭-- pos=find ( old , group ) if pos > 零 then group=group [一 . . pos 影一] & group [pos + 一 . . $] end if return group end function ` ` `
對頂懸述示例的以下修改會實現舊的項目來替換做新的項目。因為變量 _ old _ 和 _ new _ 已經予人定義做 Object,𪜶會當是 Atom 抑是 Sequence。無需要類型檢查,因為該函數會當處理 Sequence 中任意類型的任意數據,並且無需要外部庫。
` ` ` global replace _ item(Object old , Object new , Sequence group) integer pos --台灣石頭-- pos=find ( old , new ) if pos > 零 then group [pos]=new end if return group end function ` ` `
此外,伊無包含指針並會當自動檢查下標,因此不存在函數越界訪問。另外咧,Euphoria 無需要顯式分配抑是釋放內存,因此無放屎尿的機會。
` ` ` group=group [一 . . pos 影一] & group [pos + 一 . . $] ` ` `
這途也顯示一寡 Sequence 處理特性。一个 Sequence 可能包括一組任何類型的數據,這乎 Sequence 會當予人切片(以獲取 Sequence 中數據的子集), Sequence 會當佇表達式內底連結並無需要特殊函數。
參數傳遞
程序中的參數總是值傳遞;無欲提供引用傳遞的特性。猶毋過,參數允准佇內部修改(譬如講函數內底調用)。 因為 Sequence 有自動寫入去複製語法,因此會當非常有效地實現這點。嘛會使講,當 Sequence 傳達予函數時,頭仔干焦傳達對伊的引用,但是函數來修改遮 Sequence 時,會複製該 Sequence,並且函數干焦佇副本更新數據。
類似的語言
- Lua
- Phix
- Python
- REBOL
- Ruby
參考文獻
外部連結
免費下載適用佇各種平台、軟體包、Windows IDE、Windows API 庫、Linux 和 Windows 的迒平台 GTK 三包裝器、圖形庫(DOS、OpenGL 等)的 Euphoria。
- 官方網站 OpenEuphoria
- 官方網站 RapidEuphoria
- openEuphoria Wiki
- openEuphoria 論壇
- OpenEuphoria ・ GitHub 開發存儲庫。
- Using Euphoria