【问题标题】:What programming languages and language features are under 10? [closed]10 种以下的编程语言和语言功能有哪些? [关闭]
【发布时间】:2010-10-07 15:35:05
【问题描述】:

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

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

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


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

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

【问题讨论】:

  • C# 比这更早——它直到 2000 年 6 月才发布。.NET 项目始于 1997 年,而最终成为 C# 的项目“cool”几乎同时启动。不过,大多数软件都会经历这样的早期阶段。 PHP 直到版本 3 才被广泛使用...
  • Agda 低于 10 年,并且它具有依赖类型,这是旧语言几乎没有的功能。

标签: programming-languages survey


【解决方案1】:

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

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

【讨论】:

  • 没错,D 就像 C++、C# 和 Java 一样,但它除了 const 传播之外没有任何新东西。无论如何,D 的编译器功能很棒,我希望它被更频繁地使用!但是虚拟机/通用语言的东西很强大,不确定它将把我们引向何方。
  • 不断传播??? WTF???
  • Transitive const 就是我的意思。 :)
  • 另外,D .net 正在开发中。 the-free-meme.blogspot.com LLVM 的实现处于测试阶段。 dsource.org/projects/ldc
【解决方案2】:

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

虽然 ASP.NET MVC 不是一种语言功能,但它会很重要(我几乎可以肯定),尽管我知道很多人永远不会接受它。

【讨论】:

  • 嗯 lambda 比任何活着的人甚至计算机都要老:(
  • Lambda 演算是在 1930 年代才发明的,而 LINQ 以列表推导的形式存在了一段时间(自 1990 年以来在 Haskell 中)。我认为太阳底下没有新鲜事是真的。 ;)
  • 正如 Robert 和 jleedev 所说,“不”。 SETL 语言是在 60 年代后期开发的,并使用了集合论中的相同概念,现在显示为“理解”。这是来自 Wikipedia 的示例: print({n in {2..N} | forall m in {2..n - 1} | n mod m > 0});
  • C# 的添加是C# 语言的新功能,但C# 借鉴了已经存在数十年的想法。 LINQ 是列表解析的实现,lambda 表达式在过去 50 年里一直是语言的一个特性,扩展方法是 .NET 风格的 mixins,等等。
  • 扩展方法在 Delphi 中作为类助手存在很多年,在 C# 中引入它们之前。
【解决方案3】:

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

要让一种语言流行起来,确实需要大公司的大力支持,所以我们会在一段时间内陷入困境。尽管 Sun 和 MS 正在大力投资以使他们的平台(JVM、CLR)对这些语言更加开放。目前默认是 Java 和 C#,但只有时间可以证明。

【讨论】:

  • 没有过多地检查 F#,但它有什么新东西吗?
  • “度量单位”和“活动模式”是我认为其他语言可能没有的功能。
  • 类型提供程序也相对较新。 F# 对 inline 的支持是新的 AFAIK。
【解决方案4】:

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

  • 现实世界的可扩展语言(例如,从脚本和隐式到演员和模块)。我说真实世界是因为有些人会声称其他人(从 Lisp 开始)首先出现在这里,但我相信 Scala 的 Java 兼容性、面向对象的特性、类型系统等让它与众不同
  • 函数式编程和面向对象编程的现实世界融合(例如,具有高阶函数,以及状态和静态类型)。我再次说 real-world 因为虽然例如Oz 比较老,相信 Scala 的兼容性和实用性会有所作为

【讨论】:

  • Scala 几乎不支持函数式编程(例如没有尾调用消除),而 Lisp 的 CLOS 和 OCaml 中的 O 已经做了 FPL+OOP 并且做得更好。
【解决方案5】:

非常期待Boo

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

【讨论】:

  • Wow Boo 比我想象的要老 :) 无论如何,这是一个有趣的脚本和编译想法的混合体。
【解决方案6】:

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

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

语法看起来几乎与 BNF 相同,因此可读性也很好。

我写了更多关于它here

【讨论】:

  • 有趣的想法。有点现代的 Yacc。
  • “语法看起来几乎与 BNF 相同,因此非常易读”我是唯一能从中得到笑声的人吗?
  • 另一个指向 OMeta 的链接(因为上面的链接对我不起作用):tinlizzie.org/ometa
  • 当然,之所以称它为 OMeta,是因为它深受 1962 年的 META-II 语言的启发并基于它。
【解决方案7】:

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

【讨论】:

  • 是的,但我担心 20 年后,如果现在不出现,就不会有什么新东西了,我的意思是我已经赶上了人们在90 年代 :)
【解决方案8】:

Wikipedia 有一个关于编程语言第一次出现的漂亮时间表 - 它表明有几种语言像 the years 2000+ 一样出现,尽管我相信这些不是广泛使用的语言(还没有?)。

【讨论】:

  • 是的...C#、F#、Clojure、Boo、Groovy 和 D 非常相关。
【解决方案9】:

没有,我见过。

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

  • 重新包装(用另一​​种语言)在计算科学和数学领域已有数十年的想法,或
  • 比这更古老但最近才被“主流”世界“发现”的语言/技术。

具体例子:

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

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

【讨论】:

  • 我将你标记为答案,但我真的希望有人能证明这是错误的;)
  • 在 Haskell 类型系统的更高级领域可能会有一些新的东西(作为一个数学概念并不是真正的新概念,而是第一次在编程语言中工作)。对于 99.9% 的程序员来说,这并不重要……
【解决方案10】:

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

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

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

【讨论】:

  • C#的泛型不好说,实现确实不一样,但不知道怎么分类。
  • 参见 Hindley-Milner 类型推断 (en.wikipedia.org/wiki/Hindley-Milner_type_inference)。泛型和类型推断自 1973 年就出现在 ML 中,但直到 1977 年在 Ada 中实现才流行起来。
  • @Princess:C# 甚至没有 Hindley-Milner 类型推断。我知道泛型已经存在了很长时间,但是有各种不同的形式。我想知道 .NET 表单是新的还是至少有新的方面。不管怎样,这并不重要(IMO)。
  • @JonSkeet:标准 ML 的 MLton 编译器 (1997) 进行了单态化,这与 .NET 的具体化泛型基本相同,只是它使用整个程序编译而不是 JIT。
【解决方案11】:

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

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

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

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

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

【讨论】:

    【解决方案12】:

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

    【讨论】:

      【解决方案13】:

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

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

      【讨论】:

        【解决方案14】:

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

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

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

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

        【讨论】:

        • 我还想打赌,现在有一些疯狂的新功能,还没有人去探索,但我一直没能找到它:(
        • 非常有见地的答案
        【解决方案15】:

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

        【讨论】:

          【解决方案16】:

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

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

          【讨论】:

            【解决方案17】:

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

            【讨论】:

              猜你喜欢
              • 1970-01-01
              • 2011-03-30
              • 2011-03-05
              • 2016-05-30
              • 2011-02-07
              • 1970-01-01
              • 1970-01-01
              • 1970-01-01
              • 2011-01-13
              相关资源
              最近更新 更多