Icon编程语言的优缺点是什么?

6

最近我在寻找图标(图形),但是我看到了一个非常有趣的链接,那就是一种叫做Icon的语言,然后我想知道:

  • 这里有没有人尝试过使用Icon进行开发?
  • 它是编译型语言还是解释型语言?
  • 这种语言的优缺点是什么?
  • 在哪些领域它比其他语言更好(垃圾回收...)?

所以被接受的答案基本上会是有人说,“是的,我有”? - random
1
既然你已经将正文转化为实际问题,我建议将标题改为“Icon编程语言的优缺点是什么”或类似的内容。 - Paul Dixon
1
遗憾,我已经回答了原始问题 :P - Abel
6个回答

9
我知道这是一个非常晚的回复,但我必须说一下。
这是一种华丽的语言。它是那种你尝试一下,如果你/掌握/了它,你就会被它包围。我在公司的一个非常重要的内部产品中使用过它,并且它表现得非常出色。我称它为我的最爱语言;它很有趣,用于正确的任务时真的很高效。
我的第一个好奇/如果它能正常工作可能会有用的项目是从F77到C的翻译器。我的第一次尝试很糟糕和慢,而我后来的第二次尝试则更加流畅和快速 - 那时我才真正开始充分利用字符串扫描。我从未完成这个长期失落的项目,因为它变得无关紧要了;我停止与一些工程师合作,他们一直试图说服我FORTRAN很好。
很明显,像Larry Wall和Guido van Rossum这样的人知道Icon和Unicon。他们对它们了解得多好我不敢说,但我敢打赌他们对它们了解得相当好,因为他们似乎是语言狂热者。影响正在产生。Icon和Unicon有点像音乐界的Velvet Underground或Captain Beefheart;它们不是主流,但知道它们的人会受到强烈的影响。
顺便说一下,与VU或Beefheart不同,(Un)Icon并非因为对普通人来说过于刺耳而获得其价值,因此这个比喻在这方面很糟糕...实际上,语法及其所有功能非常清晰,令人愉悦。与Pascal的相似之处只是表面的。对于未经训练的眼睛来说,语法看起来确实像Pascal,但行为上却完全不同。
它适合哪里?它不会与C竞争进行硬核高性能编码,但这就像大多数语言一样,当纯粹的CPU性能是唯一的解决方案时,它无法击败C。它无法击败Perl在CPAN的大量库中,但那可能是Perl中唯一可以使用的东西!如果您想要CPAN提供的某些内容,请重写并将其捐赠给Unicon存储库。它没有类似Java的安全模型,但这就像大多数其他语言一样。你现在可能明白了。
我从Icon开始,然后几年后转向Unicon,那里是主要活动的地方。Icon被保持“稳定,干净和完整”。Unicon汇集了许多扩展并将其转化为一个有机的项目。最重要的是更好地覆盖标准O / S调用以及完整的鸭子类型OO系统。
Unicon的OO甚至支持循环继承,更不用说MI了!这主要是为了脑部混乱,但也因为它被证明是可行的。当然,任何明智的程序员通常不应该变得那么愚蠢,除非他们真的在数学中实现某些东西(例如极坐标<笛卡尔坐标<极坐标<笛卡尔坐标< ...)或量子力学(例如波<粒子<波<
首先回答简单的问题,是的,它是编译过的,但是编译后会生成一种PCODE,然后由虚拟机执行。构建的可执行文件有一个散列标头,因此可以直接执行。在Windows上,它们有一个.EXE标头(或者是.COM?),因此也可以直接执行。不用说,它们在Unix和Windows之间不可移植,尽管Powershell可能能够做一些事情,从而允许在Windows上直接运行Unix可执行文件。在实践中,编译步骤非常快,由普通的makefiles处理。Unicon还具有一个快速的编译和运行步骤,用于混乱,但任何超出总体草图的项目都最好通过制作阶段来服务。
网络功能是Unicon的一部分。长期以来,Icon已经有了一个便携式图形库,也是Unicon的一部分。垃圾收集是必然的,因为它是一种非常高级的语言。
最重要的两个独特特性是它的生成器和字符串扫描。我不会详细介绍这些 - 最好您下载并通过教程进行游戏,直到它沉入。一旦生成器可用于一种语言,字符串扫描就可以很好地工作。我认为如果没有它,字符串扫描就无法如此整洁地工作。再次玩到有意义为止。它是使用正则表达式的非常有趣和强大的替代方法,并且它是我工作的关键部分。
生成器是那些渴望在任何新语言中使用的东西之一。它不在雷达上的事实是一个悲剧,我认为。如果我真的坐下来梦想着制作下一个流行的开源语言,这将成为核心的一部分。但是谁有时间?我还有账单要付。
最近的版本(约2012年)现在具有真正的多线程,并且在我写这篇文章时可能是稳定的。
Windows构建在Unicon中基本上是最新的。 Windows构建已经解决了,我已经成功地将我的主要项目放入Windows中,除了使用Windows明显的痛苦之外,没有遇到太多困难。

7
这是一种非常古老的编程语言(1977年),很有趣看到它再次出现。我记不得曾经见过除了实验或教育脚本之外的任何东西都是用它编写的。维基百科为您提供了一些信息
其中一个后代Unicon(也可在维基百科上查看)被用于我上一家雇主的内部应用程序开发。他们用它进行3D设计(也可以参见这篇论文)。所以我知道它确实被使用过,但我不能说我自己积极使用过它。 编辑:您在问题中编辑了一些更多的问题,这里有更多的答案:
  • 这里是否有人已经尝试使用Icon进行开发?
    可能有,但它主要是一种在大学中使用的教育语言

  • 这是一种编译语言还是解释语言?
    这是一种编译语言

  • 这种语言的优缺点是什么?
    它是一种非常高级的编程语言,据说在字符串和更高层次的结构方面非常好,但Icon的许多新颖之处已经出现在其他语言中。你不能真正把这种语言看作是什么科学,虽然它擅长处理图形和字符串

  • 在哪些方面它比其他语言更好(垃圾回收...)?
    Icon很难用另一种语言替代,因为它相当独特。垃圾回收不是你需要担心的事情,但如果你今天使用Java、C#、Rebol或Ruby进行编程,那么Icon可能是一个不错的中断,但可能不会取代你当前流行的语言

换句话说:享受旅程,下载它,尝试它,感到惊讶,然后再离开。将其放在您的简历中的“其他语言”下,但不要指望它产生太大的印象;-)
附注:这是一种语言,在您在现实生活项目中偶然遇到它的罕见场合中,您很容易掌握(尽管更可能是Unicon)。

3

我一直使用Icon,似乎已经很长时间了,现在仍在使用。它是“Snobol”和Snobol的继承者Spitbol(“Snobol的快速实现”)的后继者。它具有类似于Algol的语法(与C和许多其他变体一样),并通过其自己独特的语法支持内置的“魔术内存”(哈希表)。你可能以前在Icon中看到的许多内容现在出现在其他地方。例如,在Icon中,abc [“xyz”]是哈希索引到哈希表(在Icon中是“table”)中的一个键为xyz的abc,而Javascript具有类似的语法对象属性引用。它还具有内置列表、协程、递归(每种像样的语言都有递归)、任意大小的整数和字符串解析,通过替代备份 - 这可能是语言中最强大和有用的部分。我今天使用它来替换需要进行密集的字符串/哈希处理的shell脚本。多年前,在以前的生活中,我编写了一个与Oracle接口的C语言插件。它确实缺少PHP或Python或标准C库中内置的各种函数。但是,我猜对于我所做过的绝大多数编码,它们也不是必需的。它编码快速且易于阅读。与任何其他语言一样,当编程需要时,你选择它。我记得Icon中的另一个有趣的程序是将Ingress风格的SQL简单转换为Oracle的程序。甚至可以将其用于CGI编程。当需求和能力匹配时,它编程快速、易于使用,而且信不信由你,使用起来很有趣。多年来它没有被扩展(除了Unicon),但ksh(或类似bash)也没有。


2
是的,我使用过Icon编程语言,发现它非常有趣。特别是,它有一个“yield”操作符,允许子程序返回可能的答案,但保留其状态以备需要另一个答案时使用。除此之外,这使得实现协程和其他有趣的东西变得更加简洁。

许多编程语言都有一个yield操作符。 - markasoftware

1

这里讨论了 - http://lambda-the-ultimate.org/node/136

unicon是更受欢迎的扩展实现(它是icon的分支,得到了更好的支持并且有对象) - http://unicon.sourceforge.net/index.html

我没有使用过它,但我知道它有相当长的历史 - 它从未变得非常流行,但它使用生成器的方式影响了像Python这样的语言。

另请参阅

unicon 包括 icon 和 unicon 语言的解释器和编译器 - http://unicon.org/utr/utr11.html

此外,它在字符串处理方面特别好。


-1

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接