最有趣的非主流语言?

时间:2008-10-14 10:59:06

标签: programming-languages language-design

我对编译器,口译员和语言感兴趣。

你知道的最有趣但却被遗忘或未知的语言是什么?更重要的是,为什么?

我对编译,解释和VM语言感兴趣,但不是深奥的语言,如Whitespace或BF。当然,开源是一个优势,因为我打算学习并希望从中学习。

43 个答案:

答案 0 :(得分:30)

我喜欢编译器和虚拟机,我喜欢Lua。

Lua并不像许多其他脚本语言那样得到很好的支持,但是从像你这样的心态来看,我相信你也会爱上Lua。我的意思是它就像lisp,(据我所知,可以做任何事情),有很多来自ADA的主要功能,还有内置的元编程,功能编程和面向对象编程足够松散,可以制作任何类型您可能想要的域语言。除了VM的代码是简单的C,这意味着你可以轻松地挖掘它,即使在那个级别也能欣赏。

(它是开源麻省理工学院许可证)

答案 1 :(得分:25)

我是D编程语言的粉丝。这是wikipedia articleintro from the official site

维基百科文章中的一些片段:

  

D编程语言,也简称为D,是数字火星的Walter Bright的面向对象,命令式,多范式系统编程语言。它起源于C ++的重新设计,但即使它主要受该语言的影响,它也不是C ++的变体。 D重新设计了一些C ++特性,并受到其他编程语言中使用的概念的影响,例如Java,C#和Eiffel。稳定版本1.0于2007年1月2日发布。实验版本2.0于2007年6月17日发布。

关于功能:

  

D的设计是从实际的C ++使用中吸取的经验教训,而不是从理论的角度。即使它使用了许多C / C ++概念,它也会丢弃一些,因此并不严格向后兼容C / C ++源代码。它通过合同,单元测试,真实模块,垃圾收集,第一类数组,关联数组,动态数组,数组切片,嵌套函数,内部类,闭包[2],匿名函数,实现设计,增加了C ++的功能。编译时间函数执行,延迟评估并具有重新设计的模板语法。 D保留了C ++进行低级编码的能力,并增加了对集成内联汇编程序的支持。 C ++多重继承被具有接口和mixin的Java样式单继承所取代。 D的声明,语句和表达式语法与C ++的语法非常匹配。

答案 2 :(得分:18)

我想很大程度上取决于你对'非主流'的意思。

lisp会被视为非主流吗?

答案 3 :(得分:16)

我建议看一下Erlang - 最近有点新闻,所以一些学习资源非常好。如果您使用过OO和/或程序语言,Erlang肯定会以新的和激动人心的方式让您大吃一惊。

Erlang是一种纯函数式语言,具有对并发,分布式和容错程序的全面支持。它有许多有趣的功能,包括变量根本不是真正的变量 - 它们一旦声明就不能改变,事实上它们更好地被理解为一种模式。

关于在Erlang平台(OTP)之上构建以及对其他语言(如Ruby)的机器支持,围绕博客圈有一些讨论 - 然后Erlang将成为运行并发应用程序的一种虚拟机,这将是一个非常令人兴奋的可能性。

答案 4 :(得分:11)

我最近爱上了Ocaml和一般的函数式语言。

例如,Ocaml提供了所有可能世界中最好的东西。您可以像C一样快速地编译可执行本机机器语言的代码,或者通用的可移植字节代码。你得到一个解释器,将REPL-speed带入开发阶段。您将获得函数式编程的所有功能,以生成完美的正交结构,深度递归和真正的多态性。所有这些都支持面向对象,它在已经提供OOP承诺(封装,模块化,正交函数和多态可回收性)的功能语言的上下文中,意味着被迫实际证明自己的OOP。

答案 5 :(得分:10)

Smalltalk (see discussion linked here)。动态语言的祖父(可能除了Lisp和SNOBOL之外)的排序。很高兴与Java一起工作,可悲地被践踏,现在是Python和Ruby等新语言。

答案 6 :(得分:10)

FORTH是一种专为早期CPU的低级代码而设计的语言。其最显着的特征是基于RPN堆栈的数学运算。早期HP计算器使用的数学类型相同。例如1 + 2 + 3 + 4 =将被写为1,2,3,4,+,+,+

答案 7 :(得分:8)

Haskell和REBOL都是引人入胜的语言,原因各不相同。

Haskell可以真正睁开你的眼睛作为开发人员,有monad,部分应用,模式匹配,代数类型等概念。这对于好奇的程序员来说是一个大杂烩。

REBOL也不吝啬。一开始看起来很简单,但是当你开始深入研究上下文,PARSE方言和Bindology等概念时,你会发现它远不止眼睛。 REBOL的好处在于它比使用Haskell更容易上手。

我无法决定哪个更好。

答案 8 :(得分:7)

Boo以.NET框架为目标,是开源的。灵感来自Python。

答案 9 :(得分:7)

PROLOG是一种基于规则的语言,具有回溯功能。您可以生成非常易读的(如prosa)代码。

答案 10 :(得分:7)

试试colorForth

答案 11 :(得分:6)

我发现约束语言很有趣,但很难知道什么是遗忘或未知。以下是我所知道的一些语言(这当然不是任何类型的详尽列表):

  • CiaoYAPSWI-PrologGNU Prolog都是Prolog实现。我认为它们都是开源的。 Ciao,gnu prolog,以及其他可能也是Prolog实现中常见的,支持其他约束类型。例如整数编程。
  • 根据我的理解,
  • MozartMercury都是替代逻辑编程语言。
  • Alice在ML系列中更多,但支持使用GECODE C ++库进行约束编程。

离开主题......

  • Maude是一个有趣的术语重写语言。
  • HOLCOQ都是机械化校对系统,通常用于语言社区。

Lambda-the-Ultimate是一个讨论和学习更多编程语言的好地方。

答案 12 :(得分:5)

我不得不说Scheme,特别是它的R6RS化身。

答案 13 :(得分:4)

Modula-2是我发现最有趣的非主流语言。看起来很主流,但并不像我们习惯的那样工作。从Pascal继承了很多东西,但又足以提供有趣的学习机会。

答案 14 :(得分:4)

http://www.iolanguage.com/查看Io 或Lisaac at:https://gna.org/projects/isaac/ 或者自我:http://self.sourceforge.net/ 或者萨瑟(现在绝对被遗忘) 或埃菲尔http://www.eiffel.com

为什么这里有几个原因。 Io绝对简约,甚至没有“控制流元素”作为合成实体。 Lisaad是埃菲尔的后续行动,有许多简化AFAIKT。 Self是Smalltalk的后续版本,Io也从Self中获得了很多。最根本的是,Class和Object之间的区别已经放弃了。 Sather是埃菲尔的另一个规则和对函数式编程的更好支持(从一开始)。

埃菲尔绝对是静态类型OO语言的标志。 Eiffel是第一个通过契约,泛型(aka模板)支持Design的语言,也是处理继承的最佳方法之一。它曾经是并且是更简单的语言之一。我个人为埃菲尔找到了最好的图书馆.....

它的创造者只有一个问题,他不接受对OO领域的其他贡献.....

此致

答案 15 :(得分:3)

学习任何需要您重新思考编程习惯的语言是必须的。一个明确的标志是你浏览语言核心(而不是库)文档的速度。快速意义在这里毫无结果。

根据我的曝光顺序,我的短名单将是我从他们那里学到的概念:

  • 汇编,C:非常适合学习指针及其算术。
  • C ++:与C一样,只要您能够忍受令人难以置信的冗长语法,就可以使用泛型。
  • Ruby / Lua:脚本语言,动态类型化,为现有C库编写绑定。
  • Python / C#/ Java:跳过,这些语言在我看来是对其他地方的巨大标准库的概念的重复。当然整个包装都很好,但你不会在这里学习新的概念。
  • OCaml:类型推断完成权限,部分应用程序,编译器推理通用性,默认不变性,如何优雅地处理空值。
  • Haskell:默认为懒惰,monads。

我的€.02。

答案 16 :(得分:3)

我无法相信Logo是如此被遗忘。好的,这是Logo。有点像lisp,但语法略显丑陋。虽然使用Logo中的列表,但人们会遇到令人愉快的“butfirst”和“butlast”操作。 = P

答案 17 :(得分:3)

ML。学习它并使用它会迫使你以不同的方式思考编程问题。在大多数情况下,它也会给予一点耐心。最

答案 18 :(得分:3)

go怎么样?它是全新的,所以它是未知的而不是主流(还)。

这很有意思,因为语法看起来就像将C和pascal放入jar并让它们打架后会发生什么。

答案 19 :(得分:3)

我最近learned of Icon来自this question。 我已经用它来回答几个问题了。 (1234

这很有意思,因为它的评估策略 - 它是我所知道的唯一支持回溯的命令式语言。它为许多事情提供了一些很好的简洁代码:)

答案 20 :(得分:2)

动态类型

Harbour。商业应用程序的绝佳选择。

答案 21 :(得分:2)

一旦被称为MUMPS,现在它被称为InterSystemsCaché http://www.intersystems.com/cache/

答案 22 :(得分:2)

第一个答案 - 计划。它没有被广泛使用,但绝对看起来像是一种可靠的语言,特别是考虑到DrScheme的健壮性(实际上将Scheme程序编译为本机二进制代码)。

之后 - Haskell非常有趣。它是一种使懒惰评估正确的语言,其后果令人难以置信(包括像fibonnaci序列的单行定义)。

更加主流,Python在商业界仍然没有被广泛接受,但它现在肯定应该是......

答案 23 :(得分:2)

Ken Kahn的ToonTalk,一种具有核心理论基础的卡通语言: http://www.toontalk.com/

Prograph:http://en.wikipedia.org/wiki/Prograph ...好像Prograph继续作为Marten生活:   http://andescotia.com/products/marten/

Self的IDE是美丽的东西,谈论Flow(在Csíkszentmihályi意义上)......

总的来说,我不得不说Haskell是最有趣的,因为它代表的计算潜在的优势。

答案 24 :(得分:1)

Eiffel for static type。

答案 25 :(得分:1)

REIA!

  

http://wiki.reia-lang.org/wiki/Reia_Programming_Language

这是Erlang有道理,它是美丽的,我爱上了。它是如此未知,它甚至没有维基百科页面!

答案 26 :(得分:1)

我衷心地推荐Tcl。我认为这很符合您熟练使用语言的心态。

说实话,这并不是那么不为人知。由于Tk的普及,大多数程序员迟早会遇到它。但大多数程序员都像瘟疫那样避开和避免它,因此大多数程序员并不完全了解这种语言。在我看来,这是不公平的 - 他们只是不理解可以从它的简单语义中提取出来的美丽和力量。

Tcl是一种非常有趣的语言。以tcl中的OO为例。在tcl中为tcl设计OO系统几乎是一种爱好。每年都有人会想到一个新的。当然对于生产代码,大多数都会使用已建立的库 - 这是正确的,在tcl OO只是一个库!

tcl社区一直在玩的另一个游戏是试图让tcl解释器理解其他语言的语法和/或语义。如下所示:

您可以使用更多游戏,例如从解释器中删除所有条件结构,并查看是否可以从中构建可用的编程语言。这引发了关于纯函数式编程的讨论,这些编程导致了组合逻辑,currying和教会数字。

非常有趣的东西。

答案 27 :(得分:1)

如果你对虚拟机感兴趣,你应该看看Parrot ......支持一堆语言,而且非常整洁....

如果你想学习如何实现编译器,那么O'caml是一门很好的语言......

答案 28 :(得分:1)

我最近查了很多关于Windows PowerShell的内容。

虽然不一定只是一种语言。它是一个很棒的shell,有一个内置的脚本语言。它基本上是一个超级强化的命令行shell。

与Unix shell不同,其中一切都是字符串文本(这肯定有它的好处),PowerShell命令(cmdlet)使用对象。它基于.Net框架,因此熟悉它们的人可能已经知道PowerShell返回的任何内容都可以通过管道传输,并且可以使用该对象的属性和方法。说“一切都是对象!”很有趣。再次就像OOP变大一样。

非常整洁的东西。 Windows第一次实现了一些类似于grep和整个系列的Unix命令行界面工具。

答案 29 :(得分:1)

Rebol当然! 它很简单,但在http://reboltutorial.com

上学得如此强大

答案 30 :(得分:1)

我发现FactorOzOCaml非常有趣。事实上,我已经开始将Factor用于个人项目。

答案 31 :(得分:1)

我学到的第一个主要(非BASIC)语言是Dream Maker,来自http://www.byond.com。 它有点类似于C ++或Java,但它主要用于设计多人在线游戏。它非常基于继承。 这是一种有趣的语言,特别是作为一种起始语言,它可以更快地获得令人满意的结果,并且说实话,大多数第一次学习编程的人都对一件事感兴趣......游戏。

答案 32 :(得分:1)

Mathematica,因为它是一种独特的成功术语 - 重写语言(一种完全不同的评估代码的方法!)。

答案 33 :(得分:1)

立即想到一个方案,一个更好的Lisp。

此外,我知道您的问题会使深奥语言失去资格,但请考虑INTERCAL。它有一个滑稽的COME FROM运算符(如GOTO,但位于跳转目标,而不是跳转点)。这个运算符看起来很奇怪,但我们可以说它的影响在面向方面编程中可见吗?在AOP中,通常在某些外部位置指定建议,只需查看建议的代码并不总是使控制流清晰。然而,查看建议会告知读者控制源自何处。

至少看起来像one other person agrees with me that COME FROM is like AOP

答案 34 :(得分:0)

您是否听说过O.H.R.RPG.C.E.游戏引擎?

用于“编写”游戏的编译(!)语言怎么样?

对于初学者来说,编译器会删除空格。不是连续的空格,所有空格。写“走英雄北”与“walkheronorth”和“wa lkhe ron rt h”相同。

我很久没有使用它了,之前我曾经抱怨的很多东西(例如在每个函数的源代码最顶层定义参数,然后自己放置函数)都是固定的。

另外,我只是想再次提及它,是的,你必须先编译脚本才能将它们导入游戏,尽管游戏编辑器本身没有理由不包含编译器。

答案 35 :(得分:0)

我将推断Digital Mars D语言的动议。它具有C#或Python的许多生产力功能,但具有C的低级功能。它是学习一些C概念的一种很好的语言,并且还提供内联汇编程序(用于学习)并通过合同,代表支持许多编程范例,还有一些反思。它还具有非常好的数组处理和完整的Unicode支持。

此外,如果OCamL看起来很有趣,也许请查看受{OCamL启发的F#。这是一种新的.NET语言,到目前为止只在“社区预览”中发布,但它看起来很酷。

答案 36 :(得分:0)

来自Autoplay Media Studio的AMS脚本。它是Lua的超集。

答案 37 :(得分:0)

Lolcode是我遇到的最有趣,最有趣的编程语言之一。

答案 38 :(得分:0)

Lava是一种非常有趣的实验语言。它试图结合一些对RAD非常有用的新概念。目前没有实际用途,但从长远来看也很有趣。

更实用,但同样有趣的是L.in.o.l.e.u.m.(选择部分,链接太长而无法粘贴)语言。它是一种低级语言,如汇编,但更容易学习,也声称是跨/平台(未经过个人测试)。一些非常好的程序是用这种语言开发的(在网站上看)。

当然,一些更常用的语言对学习也很有用,并提供一些有趣的观点:

  • ADA:很好的概念,易于学习编码,也可用于军事项目,由NASA和Boing。
  • Ruby:非常容易学习oo脚本语言,这是GUI测试和Web开发的必备条件。
  • ERLANG:爱立信主要用于并发编程,也是一种功能语言。
  • 标识:用于教小学生的语言(又名初学者的Lisp)。

最后,我推荐Context Free这是一种用于创建复杂的计算机生成艺术作品的语言。

答案 39 :(得分:0)

对我而言,Joy programming language是一种优雅的基于功能堆栈的语言。如果您对这种语言的实现感兴趣,可以查看类似的Cat programming language,但它具有静态类型系统。 C#和其他语言都有可用的实现。

注意:我应该透露我实际上是Cat的作者。

答案 40 :(得分:0)

Nemerle http://nemerle.org/Main_Page

它为.NET平台提供强大的静态类型编程语言。它支持函数式编程范例以及面向对象的范例。 Nemerle宏使这种语言非常强大和可扩展。有关宏的详细信息,请参阅http://nemerle.org/Macros


Eiffel http://eiffel.com

它是有史以来最强大,最真实的面向对象语言之一。我们可以使用这种语言来编译C代码或.Net平台。它是使用契约设计的第一语言,而Void Safety可以显着减少你应用中的错误。

有关Void Safety和C.A.R.的更多信息。霍尔的“十亿美元的错误”:

B.Meyer“无效安全:结束无法解除引用的瘟疫”,Dobb博士的期刊01,2009,http://www.ddj.com/architect/219500827http://se.ethz.ch/~meyer/publications/hoare/void-safety.pdf

答案 41 :(得分:0)

Poplog 太棒了。 IIRC它是Prolog,lisp和其他一些语言的混搭。试想一下,如果所有70年代的编程语言都有一个狂欢而且意外地生了孩子。

它最初是在人工智能课程中向我介绍的,有了它,你可以制作一个不到100行的聊天机器人,不包括字典。

太棒了。

更多信息可以是found on wikipedia.

答案 42 :(得分:-2)

以下内容应该让您忙碌:

FORTRAN - 在工程界广受欢迎的简单语言
LISP - 经典的AI语言。在我看来,Prolog更好,但LISP更受欢迎 Ada - 提供世界包装和泛型以及严格的数据输入 ALGOL - 用于解决FORTRAN的许多问题。它是C的祖父,

当时所有语言都是非常有影响力的语言。