数组语言环境虽然令人着迷,但令人困惑不已。有理由选择 J 或 K 或 APL 或 A 之一吗?这些选项似乎都不是开源的——有开源版本吗?我很想扩展我的思维,但我仍然感到困惑。
7 回答
这些语言之间的差异相对微妙。APL“正确”具有原始符号表示法的优点和缺点。(多年来,对符号集进行了一些细微的更改,但它们都对原始愿景足够真实。)
A+ 语言是开源的。它与“经典”APL 大相径庭,但与它们一样保留了大部分核心字符集。我的感觉是它没有跟上技术变化的步伐。这是K的前身。
数组语言家族中脱离独特 APL 字符集的语言包括 J、K 和 Nial。Nial 使用英文单词而不是符号,并且有一个名为 Q'Nial 的开源解释器。K 和 J 主要依赖于符号,但这些都是从 ASCII 字符集中提取的。在这些语言中,单词可以用来代替符号,但是,只需分配定义即可。
自 1964 年 APL 作为 IBM 产品首次出现以来,APL 系列编程语言一直主要是专有的。此时,专有数组语言似乎比开源替代方案具有更多的支持和更快的新功能发展。我不确定所有竞争对手是如何相互竞争的,但 Dyalog APL 肯定一直在积极努力推动他们将语言作为当前技术的实现。APL2000 提供适用于 Unix、Linux 和 Windows 的产品,包括 VisualAPL for .Net(已停用)。MicroAPL Ltd 提供 APLX(已停用)。
K 是一种不再单独销售的专业语言。Kx Systems 正在销售 Kdb+ 数据库及其 Q(查询)语言,这两种语言都是用 K 编写的。它是一个强大的专用工具,专为高速处理流数据而设计。它与最初的 APL 方法大相径庭。Kx Systems 产品价格昂贵,其用户大多从事金融工作。
APL 是由 Ken Iverson 设想并主要设计的。在商业应用程序中应用和改进 APL 的整个职业生涯之后,他转向了进行“合理化”修订的任务,该修订纠正了他多年来发现自己不满意的语言方面。这种对主题的新看法被称为 J。J 和 APL 之间的区别在 J Software wiki 上的一篇论文中进行了概述。一个显着的变化是删除了数组索引语法。然而,最大的特点是默契形式,其中程序是通过组合函数而不参考它们的参数来编写的。Tacit J 与函数式编程语言中的“无点”风格密切相关,但不同之处在于这种形式是 J 语言的基础。
对于想要学习数组语言的个人,我的建议是在 Dyalog APL、APLX、J 和 Q'Nial 中进行选择。Dyalog APL(尤其适用于 Windows)或 APLX(尤其适用于 Linux)可能最适合想要使用 APL 如此独特的核心象征意义并希望与整个 APL 社区建立牢固联系的人。J 可能最适合那些想要构建 Web 应用程序或专注于数学(如 Project Euler)的人,尤其是那些对它所强调的默契风格着迷的人。如果我的优先级是开源,我会选择 Q'Nial,但前提是该优先级并不意味着期待活跃的操作系统社区的支持。
更新:J 7.01 已在 GPL 3 下随开源代码一起发布。此外,还有Kona的变体。这些增加了开源数组语言的选项。
Tobia 更新:GNU APL在 GPL 下可用。它紧跟最新发布的关于扩展 APL 语言的 ISO 标准。它是一个很棒的开源 APL 实现,并且正在积极开发和维护。还有其他有趣的实现,例如ngn/APL,这是一个用 CoffeeScript 编写的功能强大且现代的 APL 实现(可编译为 JavaScript)。数组语言在 2015 年还很活跃。
Adám 更新: J 的首席实施者和设计师之一Roger Hui已加入 Dyalog,在他的指导下,Dyalog APL 添加了许多受 J 启发的功能。这包括一种默认的函数式编程风格和几个运算符和函数,其中许多已在此过程中得到改进。Dyalog APL 现在可免费用于非商业用途。此外,还出现了几个新的 APL 实现;请参阅aplwiki.com。数组语言在 2020 年依然活跃。
要添加更多信息...
K
有一个名为https://github.com/kevinlawler/kona的开源版本Kona
对于q/kdb+
,有一个试用版。http://kx.com/download/
主要限制是 2 小时超时、32 位内存、3 个月许可证到期和许可证本身。如果您只是想玩耍和学习一些东西,这些应该不会太麻烦。
就个人而言,我发现q
它是最用户友好的,因为 KX 将 monadic(单参数)动词从K
翻译成英文单词并且有大量的文档@http ://code.kx.com。此外,数据库系统经过深思熟虑且非常灵活。
J 是使用 ascii 字符输入和显示的可执行数学符号。
它也是一种成熟的函数式、面向对象的编程语言。
J 的 JSoftware 实现(我不知道其他的)不是开源的,但可以免费使用。
尽管该引擎不是开源的,但有一个活跃的 J 代码用户库可供人们贡献。
J 拥有广泛而简洁的文档http://www.jsoftware.com/help.htm和论坛成员愉快而快速地响应任何问题或问题,并且热衷于帮助新用户成为导向以及更高级的问题。
顺便说一下,在开源问题上,J 的文档(规范)很广泛,理论上任何人都可以创建一个开源项目来尝试实现 J,如果他们愿意的话。
虽然 A+ 似乎(可悲地)是一个死项目,但有一个新的开源 APL 解释器:GNU APL。
ELI is a newly developed, freely available, cross-platform, array programming language. Similar to J and k it relies on the ASCII character set. It implements some of the features that (as I know) were unique to k/q/kdb+ such as temporal datatype and inbuilt SQL subset.
我也很困惑(APL 总是让我感到困惑——幸运的是,自从我上次尝试用它做任何事情以来已经 20 年或更长时间了),但经过一番搜索发现 A+,A 的开源版本:
我不知道它会满足您(或任何人)的需求。