似乎有许多"新"语言,但实际上似乎大多数流行的,非实验性的,已经在他们的青少年,真正的主流比大多数初级程序员更老.现在我只记得这个显而易见的事实,当我意识到本月(1994年2月)甚至"时髦"的Ruby语言是15.虽然像哈斯克尔这样的东西,但是每个人都要学习的东西比那个更老.
考虑到它是唯一真正使用的新语言,我可以想到10岁以下的是C#.但即使C#也没有真正的新功能,尽管它已经获得了它的前辈的一些最好的功能.
所以我想知道现在有哪些新语言及其相应的新功能/想法在10以下?从现在起10年后可能出现什么大事?任何新的语言功能都值得期待?或者我们已经完成了???
显然,没有什么新东西不是混合或改进.也许是LOLCODE,因为它的设计是荒谬的,但是像Brainf*ck和WhiteSpace这样的东西基本上都是古老的基于堆栈的汇编语言.
我们是否已进入编程语言的百科全书时代?
没有,我见过.
当然,总会有"新"语言出现.但我使用了恐慌报价,因为通常提供的所有例子都是:
重新包装(使用另一种语言)几十年来一直在计算机科学和数学领域的想法,或者
比这更早的语言/技术,但最近才被"主流"世界"发现".
具体例子:
Lambda演算可以追溯到20世纪30年代的数学和逻辑,
函数式编程可以追溯到20世纪50年代后期的LISP,
约翰巴克斯在1977年的图灵奖演讲(pdf)中讨论过FP ,
约翰休斯的论文为什么功能编程事项是在1984年写的,
理解可以追溯到19世纪70年代的设定理论和20世纪60年代的SETL,
解析器组合器由Phil Wadler在20世纪80年代中期推广,并在20世纪20年代重新回到组合 逻辑,
等等.
促进,推广,应用和完善这些(以及许多其他)重要思想的工作是值得的.但这并不能使这些用途真正具有创新性.
当然,如果有人能够在十年前不存在的编程中提供真正原创概念的例子,我将感到高兴.
维基百科有一个很好的时间表关于编程语言的第一次出现 - 它表明有几种语言可以像2000年以上那样发展,但我相信这些语言并不是广泛使用的语言(但是?).
D编程语言不到10年.它的独特功能包括传递const(从const对象可以访问的所有内容也是const),编译时函数评估,以及将函数注释为纯函数的能力,并让编译器对函数外部可见的副作用进行静态检查.还包括一个模板系统,它使C++模板,Java/C#泛型等变得羞耻:
可以为无限数量的参数"正常工作"的变量模板.
字符串,浮点数和函数别名可以是模板参数.
该static if
声明与C++ 0x中的纸张类似,实际上已经实现并且有效.
字符串和模板mixins,允许将任意参数化样板代码注入源中的任何位置,并用于任意编译时代码生成.在极端情况下,Don Clugston使用它来构建一个矩阵数学库,它实际上在编译时解析了作为字符串文字给出的代码,并在编译器的代码生成阶段之前为这些操作生成了最佳的内联汇编代码.
结构可以表示为元组,允许迭代它们的字段.这允许使用结构进行一些有趣的通用编程.
非常强大的编译时反射/内省.我曾经写过一个函数模板,可以深度复制任何结构,只要没有涉及运行时多态类对象(编译时反射根本无法工作).这只使用编译时反射完成.没有使用运行时类型信息.
语言在不断发展.您不一定需要新语言才能获得新的语言功能.例如,Haskell不是一种新语言,但它确实有许多"新"功能,包括STM.
我认为这个问题的措辞表明没有创新,但事实上,在这里的讨论中所揭示的是,创新需要数十年的时间才能成为主流.
如果你在大约20年前问过这个问题,当OO是使用C++和Smalltalk以及诸如此类的"重大新事物"之一时,人们可以回答那只是Simula(1967)重新包装的问题.但是在1970年,我认为任何人都不会认为对象是"一项重大创新",而在Simula语言中它们只是"一种有趣的句法精确".随着时间的推移,面向对象逐渐发展,人们认识到OO是如何自然地建模/构建系统,设计模式被发现,......现在,许多语言只是将OO'视为理所当然'.但是很难找到人们会说"OO是一项伟大的新创新"的任何时刻,因为当它是新的时候,没有人会对软件工程领域的影响范围表示赞赏,并且当它的影响力显而易见时,
20年后,也许所有新的/流行的语言都会有类似今天Haskell的'类型类'这个功能(这是一个杀手级功能),但是这个问题的标准已经"太老了"才能成为一项创新,即使它可能是"下一件大事".
所以,是的,我打赌太阳下有新的东西,可能是数百种,但它们都是用微小的实验语言完成的,直到几十年后,当今最好的想法得到改进/证明并使它们成为现实时,我们才会欣赏它的新颖性.进入主流的方式.
OMeta不到2年,是一种用于创建其他语言的语言.在我看来,它比微软即将推出的MGrammar等语言更具表现力.
它最酷的想法是你可以以面向对象的方式创建语言(例如,你可以创建一个Ruby和C#语法的mashup语言).
语法看起来与BNF几乎完全相同,因此非常可读.
我写了更多关于它在这里.
我不认为最近的创新是在发明新功能.它一直在主流设置中提供旧的想法(和实用的).Lambda表达式就是一个很好的例子 - 像山丘一样古老,但绝大多数开发人员在C#3和VB9之前都不会遇到它们.
同样,两个功能可能之前独立存在,但从不使用相同的语言.我不想开始声称哪些组合是新的,但值得考虑.
顺便说一下.NET泛型的本质是"新的"吗?我不知道有多少计算历史可以说,但它与Java泛型(带有类型擦除)或C++模板之间存在明显差异(据我所知,专业化实际上是编译时的业务,需要模板的来源).