Loading AI tools
来自维基百科,自由的百科全书
Euphoria是由加拿大安大略省多倫多Rapid Deployment Software公司Robert Craig開發的程式語言[2]。最初在Atari ST平台上開發但是沒有公佈[3], 第一個商業版本是在 16 位DOS平台的運行的[4],並且是專有軟件。 2006 年,隨着版本 3 的發佈, Euphoria 成為開源軟件[5]。 openEuphoria Group 繼續管理和開發該項目[6]。 2010 年 12 月,openEuphoria Group 發佈了 openEuphoria 的第 4 版[7]和它的吉祥物以及新的特性。 OpenEuphoria 目前支持Windows 、 Linux 、 macOS和伯克利軟件包(BSD)的三種版本。
Euphoria 是一種通用的指令式解釋型高級語言。翻譯器生成C原始碼,並且支持GNU 編譯器套裝(GCC) 和Watcom C/C++ 編譯器。而且,Euphoria 程序可以創建獨立的可執行文件[8]。支持包括 Win32lib [9]、wxWidgets[10] 、 GTK+ [11]和IUP [12]在內的眾多圖形用戶界面(GUI) 庫。 Euphoria 有一個簡單的內置數據庫[13]和各種其他數據庫的包裝庫[14]。
Euphoria 是Robert Craig 作為一種從零開始開發程式語言的個人項目在Atari Mega-ST上創建的程式語言[2] [3]。 該語言的許多設計思想都來自於 Craig 在多倫多大學的計算機科學的碩士論文[15]。 Craig 的論文深受John Backus在函數式編程(FP) 語言方面工作的影響[15]。
Craig 將他最初的 Atari 實現移植到 16 位DOS平台,並於 1993 年 7 月作為專有軟件首次發佈Euphoria 1.0[4]。最初的 Atari 實現被 Craig 描述為「原始」[16] 並且尚未公開發布。 Euphoria 由 Craig 通過他的公司快速部署軟件 (RDS) 和網站 Rapideuphoria.com 繼續開發和發佈[2]。2006年10月,RDS 發佈Euphoria 3版,並宣佈今後 Euphoria 將在開源軟件許可下免費分發[5]。
RDS 繼續開發 Euphoria,並於2007 年 8 月發佈了 3.1.1 版[15][17]。隨後,RDS 單方面停止了 Euphoria 的開發,openEuphoria Group 接管了正在進行的開發[6]。 openEuphoria Group 於 2010 年 12 月發佈了版本 4,並公佈了 openEuphoria 項目的新徽標和吉祥物[18]。
3.1.1 版仍然是一個重要的里程碑版本,是 Euphoria 支持DOS的最後一個版本[19]。
Euphoria 是End-User Programming with Hierarchical Objects for Robust Interpreted Applications 的首字母縮寫詞,儘管有人懷疑這是不一個縮略詞。[來源請求]
Euphoria 解釋器最初是用C編寫的。在2004年11月發佈的Euphoria 2.5中[15],解釋器分為兩部分:前端解析器和後端解釋器。前端現在是用 Euphoria 編寫的(並與 Euphoria-to-C 轉換器和 Binder 一起使用)。主要的後端程序和運行時庫是用 C 編寫的。
Euphoria 的設計和開發實現以下設計目標和特性:
Euphoria 旨在迅速促進不同類型的動態數據集處理,它尤其適用於字符串和圖像處理。 Euphoria 已被用於人工智能、數學研究、編程教學以及實現涉及數千個字符的字體[來源請求]。Euphoria 解釋器的很大一部分是用 Euphoria 編寫的。
Euphoria 有兩種基本數據類型:
[1]
。嵌入Sequence中的元素由附加帶括號的索引值引用, X[3][2]
指的是作為X的第三個元素的Sequence中包含的第二個元素。序列的每個元素都是一個Object類型(見下文) .Euphoria 有兩種額外的預定義數據類型:
'A'
編碼為65。沒有字符串數據類型。字符串由Integer的Sequence表示。由於文字字符串在編程中非常常用,Euphoria 將雙引號括起來的字符解釋為整數序列。因此
"ABC"
在解釋器看來是與下列代碼相同:
{'A', 'B', 'C'}
這與以下相同:
{65, 66, 67}
puts(1, "Hello, World!\n")
程序註釋以雙連字符--
開頭並直至行尾。
以下代碼在一組項目中查找舊項目。如果找到,它將移除這一結果並將後一個元素連接上前一個元素。請注意,Sequence中的第一個元素的索引為[1]
,$
表示序列的長度(即元素總數)。
global delete_item(object old,Sequence group) integer pos -- 代码开始 -- pos =find(old,group) if pos > 0 then group = group[1 .. pos-1] & group[pos+1 .. $] 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 > 0 then group[pos] = new end if return group end function
此外,它不包含指針並能夠自動檢查下標,因此不存在函數越界訪問。另外,Euphoria不需要顯式分配或釋放內存,因此沒有內存泄漏的機會。
group = group[1 .. pos-1] & group[pos+1 . . $]
這行顯示了一些Sequence處理特性。一個Sequence可能包含一組任何類型的數據,這個Sequence可以被切片(以獲取Sequence中數據的子集),Sequence可以在表達式中連結並不需要特殊函數。
程序中的參數總是值傳遞;不提供引用傳遞的特性。但是,參數允許在內部修改(例如函數內調用)。由於Sequence有自動寫入時複製語法,因此可以非常有效地實現這一點。換句話說,當Sequence傳遞給函數時,最初只傳遞對它的引用,但在函數修改此Sequence時,會複製該Sequence,並且函數僅在副本更新數據。