text: Euphoria是由加拿大安大略省多倫多Rapid Deployment Software公司Robert Craig開發的程式語言。最初在Atari ST平臺上開發但是沒有公佈， 第一個商業版本是在 16 位DOS平臺的執行的，並且是專有軟體。 2006 年，隨著版本 3 的釋出， Euphoria 成為開源軟體。 openEuphoria Group 繼續管理和開發該專案。 2010 年 12 月，openEuphoria Group 釋出了 openEuphoria 的第 4 版和它的吉祥物以及新的特性。 OpenEuphoria 目前支援Windows 、 Linux 、 macOS和伯克利軟體包的三種版本。Euphoria 是一種通用的指令式解釋型高階語言。翻譯器生成C原始碼，並且支援GNU 編譯器套裝(GCC) 和Watcom C/C++ 編譯器。而且，Euphoria 程式可以建立獨立的可執行檔案。支援包括 Win32lib 、wxWidgets 、 GTK+ 和IUP 在內的眾多圖形使用者介面(GUI) 庫。 Euphoria 有一個簡單的內建資料庫和各種其他資料庫的包裝庫。概述.Euphoria 是一種通用的程序式程式設計，它透過多種方式努力使語言簡潔、易讀、適應快速開發、高效。歷史.Euphoria 是Robert Craig 作為一種從零開始開發程式語言的個人專案在Atari Mega-ST上建立的程式語言 。 該語言的許多設計思想都來自於 Craig 在多倫多大學的計算機科學的碩士論文。 Craig 的論文深受John Backus在函數語言程式設計(FP) 語言方面工作的影響。Craig 將他最初的 Atari 實現移植到 16 位DOS平臺，並於 1993 年 7 月作為專有軟體首次釋出Euphoria 1.0。最初的 Atari 實現被 Craig 描述為“原始” 並且尚未公開發布。 Euphoria 由 Craig 透過他的公司快速部署軟體 (RDS) 和網站 Rapideuphoria.com 繼續開發和釋出。2006年10月，RDS 釋出Euphoria 3版，並宣佈今後 Euphoria 將在開源軟體許可下免費分發。RDS 繼續開發 Euphoria，並於2007 年 8 月釋出了 3.1.1 版。隨後，RDS 單方面停止了 Euphoria 的開發，openEuphoria Group 接管了正在進行的開發。 openEuphoria Group 於 2010 年 12 月釋出了版本 4，並公佈了 openEuphoria 專案的新徽標和吉祥物。3.1.1 版仍然是一個重要的里程碑版本，是 Euphoria 支援DOS的最後一個版本。Euphoria 是"End-User Programming with Hierarchical Objects for Robust Interpreted Applications 的"首字母縮寫詞，儘管有人懷疑這是不一個縮略詞。#重定向Euphoria 直譯器最初是用C編寫的。在2004年11月釋出的Euphoria 2.5中，直譯器分為兩部分：前端解析器和後端直譯器。前端現在是用 Euphoria 編寫的。主要的後端程式和執行時庫是用 C 編寫的。特徵.Euphoria 的設計和開發實現以下設計目標和特性：使用.Euphoria 旨在迅速促進不同型別的動態資料集處理，它尤其適用於字串和影象處理。 Euphoria 已被用於人工智慧、數學研究、程式設計教學以及實現涉及數千個字元的字型#重定向資料型別.Euphoria 有兩種基本資料型別：Atom – 一個數字，用 31 位有符號整型或 64 位IEEE 浮點型實現。 Euphoria 根據當前值在整數和浮點表示之間動態變化。Sequence – 具有零個或多個元素的陣列，每個元素可能是一個Atom或另一個Sequence。Sequence中元素的數量不是固定的 .Euphoria 有兩種額外的預定義資料型別：Integer – 一種"atom" ，31位有符號整數，取值範圍是 -1073741824 到 1073741823。Integer資料型別比Atom資料型別更有效率，但和Atom的取值範圍不同。字元儲存為整數，例如，在編碼ASCII中codice_3編碼為65。Object – 一種通用資料型別，它可能包含上述任何一種，並且可以在執行時更改為另一種型別。沒有字串資料型別。字串由Integer的Sequence表示。由於文字字串在程式設計中非常常用，Euphoria 將雙引號括起來的字元解釋為整數序列。因此"ABC"在直譯器看來是與下列程式碼相同：這與以下相同：Hello, World!puts(1, "Hello, World!\n")例子.程式註釋以雙連字元codice_4開頭並直至行尾。以下程式碼在一組專案中查詢舊專案。如果找到，它將移除這一結果並將後一個元素連線上前一個元素。請注意，Sequence中的第一個元素的索引為codice_1，codice_6表示序列的長度。global delete_iteminteger pos-- 程式碼開始 --pos =find(old,group)if pos &gt; 0 thengroup = group[1 .. pos-1] &amp; group[pos+1 .. $]end ifreturn groupend function對上述示例的以下修改將實現舊專案替換為新專案。由於變數"old"和"new"已被定義為Object，它們可以是Atom或Sequence。不需要型別檢查，因為該函式可以處理Sequence中任意型別的任意資料，並且不需要外部庫。global replace_iteminteger pos-- 程式碼開始 --pos =find(old,new)if pos &gt; 0 thengroup[pos] = newend ifreturn groupend function此外，它不包含指標並能夠自動檢查下標，因此不存在函式越界訪問。另外，Euphoria不需要顯式分配或釋放記憶體，因此沒有記憶體洩漏的機會。group = group[1 .. pos-1] &amp; group[pos+1 . . $]這行顯示了一些Sequence處理特性。一個Sequence可能包含一組任何型別的資料，這個Sequence可以被切片，Sequence可以在表示式中連結並不需要特殊函式。引數傳遞.程式中的引數總是值傳遞；不提供引用傳遞的特性。但是，引數允許在內部修改。由於Sequence有自動寫入時複製語法，因此可以非常有效地實現這一點。換句話說，當Sequence傳遞給函式時，最初只傳遞對它的引用，但在函式修改此Sequence時，會複製該Sequence，並且函式僅在副本更新資料。免費下載適用於各種平臺、軟體包、Windows IDE、Windows API 庫、Linux 和 Windows 的跨平臺 GTK3 包裝器、圖形庫的 Euphoria。
metadata: erhwenkuo/wikipedia-zhtw
metadata: Euphoria語言
metadata: https://zh.wikipedia.org/wiki?curid=7569240