APL与A对比J与K?
数组语言的风景尽pipe令人着迷,却令人困惑不已。 是否有理由selectJ或K或APL或A之一? 这些选项似乎都不是开源的 – 有没有开源的版本? 我很想扩大我的想法,但我仍然感到困惑。
这些语言之间的差异是比较微妙的。 APL“适当”具有原始象征符号的优点和缺点。 (这些年来的符号集已经有了很小的变化,但它们都足以满足最初的愿景。)
A +语言是开源的。 它与“经典”APL很大程度上的分离,但是就像他们保留大部分核心字符集一样。 我的感觉是它没有跟上技术的变化。 这是K的前兆
arrays语言系列中脱离APL字符集的语言包括J,K和Nial。 Nial使用英文单词而不是符号,并有一个名为Q'Nial的开源解释器。 K和J主要依赖于符号,但这些都是从ASCII字符集中提取的。 单词可以用来代替这些语言中的符号,但是,仅仅通过分配定义。
APL系列编程语言自1964年APL作为IBM产品的最初出现以来一直是专有的。与此同时,专有arrays语言似乎比开源替代品有更多的支持和更快的新function演进。 我不确定所有的竞争对手如何相互对抗,但是Dyalog APL肯定已经积极地促进他们作为现有技术的语言实现。 APL2000为Unix,Linux和Windows提供产品,包括用于.Net的VisualAPL。 MicroAPL Ltd提供APLX。
K是一种专门的语言,不再单独销售。 Kx系统公司正在销售Kdb +数据库及其Q(查询)语言,这两种语言都是用K编写的。这是一个function强大的专门工具,专为stream数据的高速处理而devise。 它离开了原来的APL方法。 Kx系统的产品价格昂贵,用户主要从事金融工作。
APL是由Ken Iverson设想和主要devise的。 在应用和完善商业应用程序APL的职业生涯之后,他转而执行“合理化”的修订任务,纠正了多年来他发现自己不满意的语言的方面。 这个主题被称为J. J和APL之间的区别在J软件维基上的一篇论文中被描绘出来。 一个明显的变化是消除了数组索引语法。 然而,最大的特点是默认的forms,在这种forms下,程序是通过编写函数来编写的,而不涉及他们的论点。 默契J与函数式编程语言中的“无点”风格密切相关,但不同之处在于,这种forms是J语言的基础。 J中使用的基于ASCII的符号可能比更独特的APL字符更难以阅读。
对于想要学习数组语言的人,我的build议是在Dyalog APL,APLX,J和Q'Nial中进行select。 Dyalog APL(特别是Windows)或者APLX(特别是Linux)对于那些想要使用与APL非常不同的核心象征,并且希望与APL社区整体有强大联系的人来说,可能是最好的select。 对于那些想要构buildWeb应用程序的人来说,J可能是最好的,或者专注于math(比如Euler项目),特别是那些着迷于它所强调的默认风格的人。 如果我的优先级是开源的,那么Q'Nial就是我要select的,但只有当这个优先级不意味着期待得到一个活跃的操作系统社区的支持。
更新:J 7.01已经与 GPL 3下的开源代码一起发布。另外还有Kona ,K上的变体。这些增加了开源数组语言的选项。
Tobia更新: GNU APL在GPL下可用。 它紧随最新公布的关于扩展APL语言的ISO标准。 这是一个很好的开源APL实现,正在积极开发和维护。 还有其他一些有趣的实现,比如ngn APL ,这是一个用Coffeescript编写的APL(编译为Javascript)的令人惊讶的function强大和现代化的实现。2015年,数组语言还活着。
添加更多信息…
有一个K
开源版本叫做Kona
https://github.com/kevinlawler/kona
对于q/kdb+
,有一个试用版。 http://kx.com/trialsoftware.php
主要限制是2小时超时,32位内存,3个月许可证到期以及许可证本身。 这些不应该太麻烦,如果你只是想玩耍,学习一些东西。
就我个人而言,我发现q
是用户最友好的,因为KX将K
的一元(单一参数)动词翻译成英文单词,并有大量的文档http://code.kx.com 。 另外,数据库系统的思想非常灵活,
J是一个可执行的math表示法,用ascii字符input和显示。
它也是一个完全成熟的function性,面向对象的编程语言。
J(我不知道任何其他)的JS软件实现不是开源的,但它是免费使用的。
虽然引擎不是开源的,但有一个活跃的J代码用户库可供人们参考。
J拥有丰富而简洁的文档http://www.jsoftware.com/help.htm ,论坛成员可以快速,快速地回答任何问题或问题,并且热衷于帮助新用户成为导向者,同时还能解决更多高级问题。
在开源问题上,J的文档(规范)是非常广泛的,理论上任何人都可以创build一个开源项目来尝试实现J如果他们愿意的话。
需要考虑的是运营商的词汇(高阶函数)。
原始的APL只有最后和第一轴减less( f/
, f⌿
),最后和第一轴累积减less( f\
, f⍀
),再加上内积和外积( fg
, ∘.g
)。
大多数扩展的APL(例如GNU APL,APLX,APL + Win,APL2)仅添加了每个循环( f¨
)和轴括号规范( f[
… ]
)。
J,增加了过多 (称为副词和连词),但删除了括号(包括轴和索引),每个操作符(赞成更一般的等级操作符)和最后轴(累加)的缩减。
现在已经失效的夏普APL(SAX)保留了传统的最后轴操作员和支架索引,同时增加了许多J的新操作员。
Dyalog APL正在逐渐接近夏普APL的词汇,但是也包含了从未进入夏普APL的J-exclusive运营商。
下表比较了J,Sharp APL和Dyalog APL组合词汇表。 灰色的条目正在提出。
ELI是一种新开发的免费提供的跨平台数组编程语言。 与J和K类似,它依赖于ASCII字符集。 它实现了一些(据我所知)是k / q / kdb +独有的特性,例如时态数据types和内置的SQL子集。
虽然A +似乎(可惜)是一个死的项目,但有一个新的开源APL解释器: GNU APL 。
我也一直困惑不已(APL一直让我感到困惑 – 幸运的是,自从我上次尝试任何东西到现在已经有20年以上了),但是有点search却发现A的开源版A:
我不知道它会满足你(或任何人)的需求。