Euphoria語言
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)的三種版本。
編程範型 | 指令式編程 |
---|---|
設計者 | Jeremy Cowgar, Robert Craig (original), Matt Lewis, Derek Parnell |
實作者 | openEuphoria Group |
釋出時間 | 1993年 |
當前版本 |
|
型態系統 | static, dynamic |
作業系統 | Cross-platform: Win32, Linux, macOS, FreeBSD, NetBSD, OpenBSD |
許可證 | BSD |
文件擴展名 | .e, .ex, .exw, .edb |
網站 | openeuphoria |
啟發語言 | |
BASIC | |
影響語言 | |
Phix |
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 有兩種基本數據類型:
- Atom – 一個數字,用 31 位有符號整型或 64 位IEEE 浮點型實現。 Euphoria 根據當前值在整數和浮點表示之間動態變化。
- Sequence – 具有零個或多個元素的數組,每個元素可能是一個Atom或另一個Sequence。Sequence中元素的數量不是固定的(即不必聲明數組的大小)。程序可以在運行時根據需要添加或刪除元素。內存分配-釋放由引用計數自動處理。使用方括號括起來的索引值引用單個元素。Sequence中的第一個元素的索引為
[1]
。嵌入Sequence中的元素由附加帶括號的索引值引用,X[3][2]
指的是作為X的第三個元素的Sequence中包含的第二個元素。序列的每個元素都是一個Object類型(見下文) .
Euphoria 有兩種額外的預定義數據類型:
- Integer – 一種atom ,31位有符號整數,取值範圍是 -1073741824 到 1073741823(即-230到230-1)。Integer數據類型比Atom數據類型更有效率,但和Atom的取值範圍不同。字符存儲為整數,例如,在編碼ASCII中
'A'
編碼為65。 - Object – 一種通用數據類型,它可能包含上述任何一種(即atom、sequence或integer ),並且可以在運行時更改為另一種類型。
沒有字符串數據類型。字符串由Integer的Sequence表示。由於文字字符串在編程中非常常用,Euphoria 將雙引號括起來的字符解釋為整數序列。因此
"ABC"
在解釋器看來是與下列代碼相同:
{'A', 'B', 'C'}
這與以下相同:
{65, 66, 67}
Hello, World!
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,並且函數僅在副本更新數據。
類似的語言
參考文獻
- ^ OpenEuphoria: 4.1.0 Latest Mar 1, 2021. 2021年3月1日 [2023年4月13日].
- ^ 2.0 2.1 2.2 RapidEuphoria homepage. [2010-12-30]. (原始內容存檔於2012-07-11).
- ^ 3.0 3.1 RapidEuphoria forum, 2002-09-10 by Robert Craig. [2010-12-30]. (原始內容存檔於2011-07-16).
- ^ 4.0 4.1 RapidEuphoria forum, 2006-10-18 16:44 by Robert Craig. [2010-12-30]. (原始內容存檔於2011-07-16).
- ^ 5.0 5.1 RapidEuphoria forum, 2006-10-18 1:19 by Robert Craig. [2010-12-30]. (原始內容存檔於2011-07-16).
- ^ 6.0 6.1 openEuphoria group homepage. [2010-12-30]. (原始內容存檔於2012-07-18).
- ^ openEuphoria download page. [2010-12-30]. (原始內容存檔於2012-06-18).
- ^ 8.0 8.1 8.2 openEuhporia manual, Binding and Shrouding. [2011-01-07]. (原始內容存檔於2012-04-16).
- ^ Euphoria Win32Lib project at Sourceforge. [2010-12-30]. (原始內容存檔於2012-01-14).
- ^ Euphoria wxEuphoria project at Sourceforge. [2010-12-30]. (原始內容存檔於2012-06-24).
- ^ Euphoria GTK+ project at Sourceforge. [2010-12-30]. (原始內容存檔於2012-07-08).
- ^ Euphoria IUP Project by Jeremy Cowgar. [2010-12-30]. (原始內容存檔於2012-07-23).
- ^ openEuphoria manual, Database. [2010-12-30]. (原始內容存檔於2012-03-14).
- ^ openEuphoria wiki, Database Interfaces. [2011-01-02]. (原始內容存檔於2012-03-14).
- ^ 15.0 15.1 15.2 15.3 RapidEuphoria website, release notes. [2010-12-30]. (原始內容存檔於2012-07-14).
- ^ RapidEuphoria forum, 2 Mar 1998 13:04 by Robert Craig. [2010-12-30]. (原始內容存檔於2011-07-16).
- ^ RapidEuphoria news. [2010-12-30]. (原始內容存檔於2010-12-16).
- ^ openEuphoria release notes. [2010-12-30]. (原始內容存檔於2011-07-27).
- ^ openEuhporia manual, Platform Specific Issues. [2010-12-30]. (原始內容存檔於2012-04-16).
- ^ openEuphoria roadmap. [2010-12-30]. (原始內容存檔於2012-03-14).
外部連結
免費下載適用於各種平台、軟件包、Windows IDE、Windows API 庫、Linux 和 Windows 的跨平台 GTK3 包裝器、圖形庫(DOS、OpenGL 等)的 Euphoria。
- 官方網站OpenEuphoria
- 官方網站RapidEuphoria
- openEuphoria Wiki (頁面存檔備份,存於互聯網檔案館)
- openEuphoria 論壇 (頁面存檔備份,存於互聯網檔案館)
- OpenEuphoria · GitHub (頁面存檔備份,存於互聯網檔案館)開發存儲庫。
- Using Euphoria