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)的三种版本。 Euphoria 是一种通用的指令式解释型高级语言。翻译器生成C源代码,并且支持GNU 编译器套装(GCC) 和Watcom C/C++ 编译器。而且,Euphoria 程序可以创建独立的可执行文件[8]。支持包括 Win32lib [9]、wxWidgets[10] 、 GTK+ [11]和IUP [12]在内的众多图形用户界面(GUI) 库。 Euphoria 有一个简单的内置数据库[13]和各种其他数据库的包装库[14]。 概述Euphoria 是一种通用的过程式编程,它通过多种方式努力使语言简洁、易读、适应快速开发、高效。
历史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 有两种基本数据类型:
Euphoria 有两种额外的预定义数据类型:
没有字符串数据类型。字符串由Integer的Sequence表示。由于文字字符串在编程中非常常用,Euphoria 将双引号括起来的字符解释为整数序列。因此 "ABC" 在解释器看来是与下列代码相同: {'A', 'B', 'C'} 这与以下相同: {65, 66, 67} Hello, World!puts(1, "Hello, World!\n") 例子程序注释以双连字符 以下代码在一组项目中查找旧项目。如果找到,它将移除这一结果并将后一个元素连接上前一个元素。请注意,Sequence中的第一个元素的索引为 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,并且函数仅在副本更新数据。 类似的语言参考文献
外部链接免费下载适用于各种平台、软件包、Windows IDE、Windows API 库、Linux 和 Windows 的跨平台 GTK3 包装器、图形库(DOS、OpenGL 等)的 Euphoria。
|