11

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

想想它是唯一真正新的语言,常用的,我能想到的 10 岁以下是 C#。但即使是 C# 也没有任何新特性,尽管它继承了其前辈的一些最佳特性。

所以我想知道现在有哪些新语言及其相应的新功能/想法不到 10 种?从现在起 10 年后有什么可能成为大事吗?有什么新的语言功能值得期待吗?还是我们已经完成了???


显然,没有什么不是混合或改进的真正新事物。也许 LOLCODE 是因为它的设计是荒谬的,但即使是 Brainf*ck 和 WhiteSpace 之类的东西,基本上也是古老的基于堆栈的汇编语言。

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

4

17 回答 17

19

没有,我见过。

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

  • 将几十年来在计算科学和数学中的想法重新包装(转换成另一种语言),或
  • 比这更古老的语言/技术,但直到最近才被“主流”世界“发现”。

具体例子:

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

当然,如果有人能提供一个十年前不存在的真正原创编程概念的例子,我会很高兴。

于 2009-02-14T16:58:57.373 回答
12

维基百科有一个关于编程语言的第一次出现的很好的时间表 - 它表明有几种语言像2000 年以上那样出现,尽管我相信这些不是广泛使用的语言(还没有?)。

于 2009-02-14T16:29:58.113 回答
11

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

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

语言不断发展。您不一定需要一种新语言来获得新的语言功能。例如,Haskell 并不是一门新语言,但它确实有很多“新”特性,包括 STM。

于 2009-02-14T16:23:25.290 回答
6

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

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

20 年后,也许所有新的/流行的语言都将具有今天 Haskell 中的“类型类”之类的功能(这是一个杀手级功能),但是按照这个问题的标准,它已经“太老了”,不能成为创新,尽管它可能是“下一件大事”。

所以,是的,我敢打赌,太阳底下会有新事物,可能有数百种,但它们都以微小的实验性语言出现,直到几十年后,当当今最好的想法得到提炼/证明并使其成为现实时,我们才会欣赏这种新颖性进入主流的方式。

于 2009-02-15T01:21:25.140 回答
5

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

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

语法看起来几乎与 BNF 相同,因此非常易读,这也很好。

我在这里写了更多关于它的内容。

于 2009-02-14T16:09:38.367 回答
5

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

类似地,两个特征以前可能独立存在,但从未在同一种语言中存在。我不想开始声称哪些组合是新的,但值得考虑。

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

于 2009-02-14T17:12:53.770 回答
4

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

您可以检查一个名为Jason的完整解释器。

于 2009-02-14T18:14:55.443 回答
3

F# 怎么样 :)。独立开发人员也正在开发大量新语言。像 scala、jruby、groovy、boo 等。

要让一种语言流行起来,真的需要大公司的大力支持,所以我们会暂时停留在我们所得到的东西上。尽管 Sun 和 MS 正在大力投资以使他们的平台(JVM、CLR)对这些语言更加开放。目前默认值为 Java 和 C#,但只有时间可以证明。

于 2009-02-14T15:57:48.130 回答
2

Scala 编程语言不到 10年(我相信它最初是在 2001 年发布的),可以说是第一个:

  • 真实世界的可扩展语言(例如,从脚本和隐式到参与者和模块)。我说的是真实世界,因为有些人会声称其他人,从 Lisp 开始,首先在这里,但我相信 Scala 的 Java 兼容性、面向对象的特性、类型系统等使它与众不同
  • 函数式编程和面向对象编程的现实世界融合(例如,具有高阶函数,还有状态和静态类型)。我再次说真实世界,因为虽然例如Oz更老,但我相信 Scala 的兼容性和实用主义会有所作为
于 2009-02-14T15:59:05.257 回答
2

非常期待

Boo 是一种面向对象的静态类型编程语言,自 2003 年以来一直在积极开发中,它旨在利用公共语言基础架构对 Unicode、国际化和 Web 应用程序的支持,同时使用受 Python 启发的语法1并特别关注语言和编译器可扩展性。一些值得注意的特性包括类型推断、生成器、多方法、可选的鸭子类型、宏、真正的闭包、柯里化和一等函数。

于 2009-02-14T16:02:57.557 回答
2

许多“新”语言以一种或另一种就地良好的虚拟机为目标,即 JVM 或 CLR。它允许专注于语法和“哲学”的设计,而不是实现(利用现有的优化 VM、GC、库等)。

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

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

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

正如其他人所说,今天很难找到真正的新概念。部分是因为已经探索了很多,部分是因为如果新语言不使用熟悉的语法,许多程序员会变得懒惰和困惑(我在 Lua 邮件列表中看到很多人抱怨,要求使用 { 和 }而不是 do/end -- 另请参阅对 JavaFX 不是 Java 的投诉......),更不用说一个新概念了!

于 2009-02-14T17:40:08.133 回答
1

好的,我们从 Eiffel 开始就知道代码合同 - 所以已经有 20 多年了,而且代码分析也有很多年了,但是我从未见过像 c# 4.0 和 Pex 中这样完整的代码合同、代码分析和单元测试组合。也许我对几年前确实提供这种功能水平的其他语言和产品是错误的和无知的——但我肯定会将这种程度的对“无错误”软件的帮助称为一种功能。那么,它是新的吗?

于 2009-02-14T17:43:01.777 回答
1

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

于 2009-10-30T06:00:46.983 回答
0

E 语言使轻量级的 Promise 流水线变得易于使用。对于即将到来的多核革命来说,这应该是一个关键的想法,因为它可以编写易于并行化的代码,在通信子进程之间具有低成本的依赖关系,并回避管理锁和避免死锁的所有标准问题. E 中的主要思想已被移植到各种其他语言中。E 是一长串(尽管有些晦涩)的对象能力语言的一部分,它对软件的健壮性和安全性做出了一些非常重要的贡献。E现在才10岁左右。

于 2009-04-26T17:32:20.407 回答
0

蓝色编程语言显示出巨大的潜力。想想“Python 但更易于使用和扩展”。

不,我并不是说 Blue 比 Python 更好,我只是说它正在酝酿中,易于使用并且(已经,仅仅过了几年)非常稳定。它在我身上生长了大约一年:)

于 2009-04-26T17:39:28.720 回答
-3

我会说 C# 的最新添加,如 LINQ、扩展方法、lambda 表达式和其余的都是相对较新的。如果他们现在不大,他们会的。

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

于 2009-02-14T15:57:28.113 回答