10以下的编程语言和语言功能是什么?

时间:2009-02-14 15:51:53

标签: programming-languages survey

似乎有许多“新”语言,但实际上似乎大多数流行的,非实验性的,已经十几岁了,真正的主流比大多数初级程序员年龄大。现在我只记得这个显而易见的事实,当我意识到本月(1994年2月)甚至“时髦”的Ruby语言是15。虽然像Haskell这样的东西,但是每个人都要“学习”的名单甚至比那个还要老。

考虑到它是唯一真正使用的新语言,我能想到10岁以下的语言是C#。但即便是C#也没有任何新功能,尽管它已经获得了它前辈的一些最佳功能。

所以我想知道现在有哪些新语言及其相应的新功能/想法在10以下?从现在起10年后可能出现什么大事?任何新的语言功能都值得期待?或者我们已经完成了???


显然没有什么新东西不是混合或改进。也许LOLCODE因为它设计得比其他所有都荒谬,但即使像Brainf * ck和WhiteSpace这样的东西也基本上是古老的基于堆栈的汇编语言。

我们是否已进入编程语言的百科全书时代?

17 个答案:

答案 0 :(得分:19)

,我见过。

当然,总会有“新”语言出现。但是我使用了恐慌引用,因为通常提供的所有例子都是:

  • 重新包装(使用另一种语言)几十年来一直在计算机科学和数学方面的想法,或
  • 比这更早的语言/技术,但最近才被“主流”世界“发现”。

具体例子:

促进,推广,应用和完善这些(以及许多其他)重要思想的工作是值得的。但这并不能使这些用途真正具有创新性。

当然,如果有人能够在十年前不存在的编程中提供真正原创概念的例子,我将感到高兴。

答案 1 :(得分:12)

Wikipedia关于编程语言的第一次出现有一个很好的时间表 - 它表明有几种语言可以像the years 2000+一样,但我相信这些语言并不是广泛使用的语言(但是?)

答案 2 :(得分:11)

D编程语言不到10年。它的独特功能包括传递const(从const对象可以访问的所有内容也是const),编译时函数评估,以及将函数注释为纯函数的能力,并让编译器对函数外部可见的副作用进行静态检查。还包括一个模板系统,它使C ++模板,Java / C#泛型等变得羞耻:

  1. 可以为无限数量的参数“正常工作”的可变模板。
  2. 字符串,浮点数和函数别名可以是模板参数。
  3. static if语句与C ++ 0x中的纸张类似,实际上已实现且有效。
  4. 字符串和模板mixins,允许将任意参数化样板代码注入源中的任何位置,以及任意编译时代码生成。在极端情况下,Don Clugston使用它来构建一个矩阵数学库,它实际上在编译时解析了作为字符串文字给出的代码,并在编译器的代码生成阶段之前为这些操作生成了最佳的内联汇编代码。
  5. 结构可以表示为元组,允许迭代它们的字段。这允许使用结构进行一些有趣的泛型编程。
  6. 非常强大的编译时反射/内省。我曾经写过一个函数模板,可以深度复制任何结构,只要没有运行时多态类对象(编译时反射只是不能工作)。这只使用编译时反射完成。没有使用运行时类型信息。

答案 3 :(得分:6)

语言不断发展。你不一定需要一种新的语言来获得 新语言功能。举个例子,Haskell不是一种新语言, 但它确实有许多“新”功能,包括STM。

答案 4 :(得分:6)

我认为这个问题的措辞表明没有创新,但事实上,在这里的讨论中所揭示的是,创新需要数十年的时间才能成为主流。

如果你在大约20年前问过这个问题,当OO是C ++和Smalltalk的“重大新事物”之一时,人们可以回应那只是Simula(1967)的重新包装。但是在1970年,我认为任何人都不会认为对象是“一项重大创新”,而在Simula语言中它们只是“一种有趣的句法精确”。随着时间的推移,面向对象逐渐发展,人们认识到OO对于建模/结构系统是如何自然的,设计模式被发现,......现在,许多语言只是将OO'视为理所当然'。但很难找到人们会说“OO是一项伟大的新创新”的任何时刻,因为当它是新的时候,没有人会对软件工程领域的影响范围表示赞赏,并且当它的影响力显而易见时,不再是新人了。

20年后,也许所有新的/流行的语言都会有像今天的Haskell这样的“类型类”这样的功能(它是一个杀手级功能),但是这个问题的标准已经“太老了”才能成为一种创新,即使它可能是“下一件大事”。

所以是的,我打赌阳光下有新的东西,可能是数百种,但是它们都是用微小的实验语言完成的,直到几十年后,当今最好的想法得到改进/证明时,我们才会欣赏它的新颖性并进入主流。

答案 5 :(得分:5)

OMeta不到2年,是一种用于创建其他语言的语言。在我看来,它比微软即将推出的MGrammar等语言更具表现力。

它最酷的想法是你可以以面向对象的方式创建语言(例如,你可以创建Ruby和C#语法的mashup语言)。

语法看起来与BNF几乎完全相同,因此非常可读。

我写了更多关于它的信息here

答案 6 :(得分:5)

我不认为最近的创新一直在发明新功能。它一直在主流设置中提供旧的想法(和实用的)。 Lambda表达式就是一个很好的例子 - 像山丘一样古老,但绝大多数开发人员在C#3和VB9之前都不会遇到它们。

同样,两个功能可能之前独立存在,但从不使用相同的语言。我不想开始声称哪些组合是新的,但值得考虑。

顺便说一句.NET泛型的本质是“新的”吗?我不知道有多少计算历史可以说,但它与Java泛型(带有类型擦除)或C ++模板之间存在明显的差异(据我所知,专业化实际上是编译时的业务,需要模板的来源)。

答案 7 :(得分:3)

F#:)怎么样?独奏开发者正在开发大量新语言。像scala,jruby,groovy,boo等。

对于一种可以接受它的语言,它确实需要大公司的大力支持,所以我们会坚持我们得到的一段时间。虽然Sun和MS正在大力投资,使他们的平台(JVM,CLR)对这些语言更加开放。现在的默认值是Java和C#,但只有时间可以说明。

答案 8 :(得分:3)

用于编程智能代理的AgentSpeak(L)语言。它基于Prolog(这是非常古老的),但有一些非常具体的功能,它是全新的。

您可以查看名为Jason的完全解释器。

答案 9 :(得分:2)

Scala programming language未满10岁(我相信它最初于2001年发布)并且可以声称是第一个:

  • 真实可扩展语言(例如,从脚本和对演员和模块的暗示)。我说的是真实世界,因为有些人会首先声称其他人,从Lisp开始,首先在这里,但我相信Scala的Java兼容性,面向对象的功能,类型系统等使它与众不同
  • 功能和面向对象编程的真实融合(例如,具有高阶函数,还有状态和静态类型)。我再次说真实世界,因为Oz年龄较大,我相信Scala的兼容性和实用主义有所不同

答案 10 :(得分:2)

非常期待Boo

自2003年以来,Boo是一种面向对象的静态类型编程语言,旨在利用公共语言基础结构对Unicode,国际化和Web应用程序的支持,同时使用Python启发的语法1并特别关注语言和编译器的可扩展性。注意的一些功能包括类型推断,生成器,多方法,可选的鸭子类型,宏,真正的闭包,currying和一流的功能。

答案 11 :(得分:2)

许多“新”语言针对一个或另一个就地VM,即JVM或CLR。它允许专注于语法和“哲学”的设计而不是实现(利用现有的优化VM,GC,库等)。

有趣的是,有些语言针对两个平台,例如Fan Programming Language

其他语言只是将自己翻译成另一种语言(通常是C语言),因此依靠一些便携式或本地优化编译器来做好工作。

我发现Haxe很有趣,因为它针对多种语言/ VM:JavaScript,Flash,NekoVM甚至是PHP。

正如其他人所说,今天很难找到真正的新概念。部分是因为已经探索了很多,部分原因是如果新语言不使用熟悉的语法,很多程序员都很懒惰和混淆(我在Lua邮件列表中看到很多人抱怨,请求使用{和}而不是做/结束 - 参见对JavaFX不是Java的投诉......),更不用说新概念了!

答案 12 :(得分:1)

Powershell作为一种语言不到10,当然不是语言功能。

答案 13 :(得分:1)

好的,我们知道自埃菲尔以来的代码合同 - 这是20多年,代码分析多年和年,但我从未见过像c#4.0和Pex那样完整的代码合同,代码分析和单元测试组合。也许我对其他几年前提供这种功能水平的语言和产品一无所知并且一无所知 - 但我肯定会将这种程度的帮助称为“bugfree”软件。那么,这是新的吗?

答案 14 :(得分:0)

E language轻量级承诺流水线可访问。对于即将到来的多核革命而言,这应该是一个至关重要的想法,因为它可以编写易于并行化的代码,在通信子流程之间具有低成本依赖性,并避免管理锁定和避免死锁的所有标准问题。 E中的主要观点是ported to a variety of other languages。 E是一系列(尽管有点模糊)对象能力语言的一部分,它在软件的健壮性和安全性方面做出了一些非常重要的贡献。 E现在只有10岁左右。

答案 15 :(得分:0)

Blue Programming Language显示出巨大的潜力。想想“Python,但更容易使用和扩展”。

不,我不是说Blue比Python更好,我只是说它的酿造,易于使用,并且(仅在几年之后)已经相当稳定。它在我身上长大了一年:)

答案 16 :(得分:-3)

我会说C#最新增加的内容如LINQ,扩展方法,lambda表达式等等都是相对较新的。如果他们现在不大,他们就会。

ASP.NET MVC虽然它不是一个语言功能会很大(我几乎可以肯定),虽然我知道许多人永远不会接受它。