3

您认为语言的下一次演变会是什么样子?

4

15 回答 15

7

您可能会假设 C 和 C++ 正在“逐步淘汰”,而 Java/.Net/Python/whatever 是“进步”或“下一站”。

它们都被大量使用(请参阅本网站上的标签数量 C 或 C++)。不同之处在于,两者都不再是编程世界的通用语言。过去,大多数应用程序都是资源非常有限的系统上的桌面或 DOS 应用程序,而且所有主要的桌面 API 都是用 C 或 C++ 编写的。所以每个人都学会了这些。

现在它更复杂了。语言正变得更加特定于应用程序。当性能很重要时使用 C/C++。当您的主要性能影响是数据库读取/写入时的脚本语言。Java 和 .Net 用于通用、非性能关键的桌面应用程序。

计算机或电气工程也是如此。在过去,这些是可用的最高抽象级别的巨大字段。现在我们有了各种更高层次的抽象。尽管如此,我们还是需要人们来做这种较低级别的工程。他们仍然有需求。以同样的方式,C 将继续在许多环境中使用,C++ 也是如此。例如,你会疯狂地认为你可以用 Java 编写设备驱动程序,如果你有选择和能力的话,你也会有点疯狂(但可能不那么疯狂)用 C 编写一个完整的 GUI 应用程序在 Java 或 .Net 中完成。

每个工具都有其用途。我希望 C、C++ 和 Java 能够发展并继续用于新旧开发。

于 2008-10-02T14:55:57.483 回答
5

我不能代表 C++ 和 Java,但 C 绝对不会无处可去……

几乎无法想象编写任何类型的操作系统内核而不用 C 语言(好吧,如果你真的很固执,你可以完全使用汇编语言:-P)。

C 基本上是对汇编语言的精巧包装。它与标准的冯诺依曼 CPU 架构紧密耦合,以至于不需要标准库或运行时来实现其大部分功能:指针、字符串、堆栈上的自动变量、整数运算等。

出于同样的原因,C 非常适合绝对需要高性能的用户级应用程序,例如乘以巨大的矩阵或解析复杂的语言。用 C 编写解析器可能会很痛苦,但是手动内存管理的速度和效率优势是难以忽视的......

于 2008-10-02T16:11:24.447 回答
2

我相信答案是双重的。

首先,客户端应用程序越来越多地实现为基于浏览器的应用程序。要使基于浏览器的应用程序具有与富桌面应用程序相当的外观和感觉,您需要 Javascript 之类的东西。如果您稍微关注一下新闻,您会看到为加速浏览器中的 javascript 实现所做的巨大努力,以及一个蓬勃发展的库生态系统,可帮助您在浏览器中使用 javascript 创建响应式、直观的 GUI。

所以,对于 GUI,我相信未来是 Javascript。

对于后端,服务器,我非常怀疑在不久的将来是否有脚本语言存在。服务器端软件往往存在多年,添加了功能,修复了错误等等。编写该语言的语言不需要写得那么快,而是易于阅读(维护)。

如果您在一两年后重新访问您的代码以修复该错误,那么脚本语言往往更难以理解。这有(在我看来)两个主要原因,短期内不会消失:

  • IDE 无法使用动态语言提供提示
  • 根据定义,在您工作的上下文中,可用的上下文信息较少;在 Java 中,你知道你只能得到 X 类型。在脚本语言中,你应该检查所有引用代码,这在大型项目中并不容易

这些问题可以通过使用非常有经验的开发人员来缓解,但是如果将来唯一有用的开发人员是有经验的开发人员,我们就不需要雇用没有经验的开发人员,这会给未来带来麻烦。

由于这些原因,我相信下一代服务器端语言是静态类型的。从静态类型语言中,我认为 C# 和 Java 有最好的机会,因为有大量有用的库可用,而且这些语言的可读性很强。

于 2008-10-02T18:32:55.777 回答
2

Alan Kay 曾经说过“实际上我创造了‘面向对象’这个词,我可以告诉你我并没有想到 C++。”

他正在努力改变编程的未来

“真正的浪漫已经到来,但尚未到来。计算机革命尚未开始。不要被大量资金流入错误的事实标准所误导,这些标准对于不成熟的买家使用不完整的想法进行不良改编。” 资源

好吧,我可以补充一下,Bjarne 曾经说过“只有两种语言:人们抱怨的语言和没人使用的语言。”

于 2008-10-02T14:56:37.933 回答
2

语言不断发展以填补其他语言未涵盖的利基问题。

语言获得立足点并建立自己的天气完全是另一个问题,与流行度有很大关系。

接下来是什么?
我看到需要填充的问题是多处理器(或多核)。目前,所有流行的语言利用额外内核的能力都非常有限。基本上所有当前流行的语言都为开发人员提供了非常基本的对象(线程/锁等)来使用内核,然后让开发人员尝试利用多核可用的并行性。

如果有一种语言可以抽象出内核(甚至线程)的概念,并且可以自动利用多核/多处理器架构中可用的固有并行性,那将是一件好事。不幸的是,所有这些语言(我所知道的)仍然是大学的研究项目,不太可能很快看到真正的采用。

您暗示有一个进展 C -> C++ -> Java。
这有点人为,每种语言都代表一种解决问题的方法,每种语言都有固有的问题域,可以有效地解决问题和其他问题域,该语言将是一个糟糕的选择。

亲自:

  1. 我永远不会用 Java 编写设备驱动程序。
  2. 我可能不会用 C 编写后端 web 模块(你可能可以但我不行)等。
于 2008-10-02T15:03:42.487 回答
2

C# ?-- 哦,但那是 Java :) (抱歉,无法抗拒)

下一代语言已经出现,脚本语言。毫无疑问,微软正在开发 DLR(动态语言运行时)。我认为未来将是解释型(但 JITted)的动态语言,它几乎没有限制和很大的灵活性。

现在大多数语言的性能限制都不是那么重要,或者根本没有人会编写 Java 或 C# 应用程序,但考虑到 CPU 速度超快,RAM 很便宜,我们没有注意到这些更高的效率低下级设计(例如,如果你有一个 1mhz 的 cpu,你用 C 而不是 C# 编写代码。如果你有一个运行在 3Ghz 的 CPU,你可以随心所欲地编写它)

所以.. Ruby、Python、“Dynamic-C#”……这些都是未来。当 MS 发布 DLR 时,预计会有很多人对它感兴趣,预计很多公司会开始谈论程序员生产力是大多数应用程序开发中最重要的部分。

之后......可能是一个 GUI 驱动的系统,您可以在类似 UML 的系统中将块连接在一起,并向它们添加属性以生成生成的代码。

于 2008-10-02T15:12:34.027 回答
1

编程的未来在哪里?远离我们所知道的语言。

现在是 2009 年,我们还在使用文本编辑器吗?通过我参与的项目,您可以通过设置属性来构建整个应用程序。在(主要是数学)表达式和字符串值之外,任何地方都没有一行文本。

一位开发人员抱怨“你不能打印代码”,我回答说,“公司会打印出它的整个会计结构吗?或者它会打印出它想要看到的方面,例如现金流量表和余额床单?” 只有当我们进入新的抽象机制时,我们才能真正向前迈进。

编程的未来还有待观察,但我认为正在发生的一些令人兴奋的发展最终将使我们摆脱我们长期使用的 C/C++/Java 束缚。

于 2009-01-14T10:11:24.093 回答
1

As other have mentioned, languages tend to adapt around new technologies and trends. So in order to answer that question, you first have to look at the overall future of computers and see what languages are most suitable for these purposes.

For example, to use your language progression as an example, in the beginning (:-)) there was a need for a language that would make maximum use of the limited resources available, C fit the bill in that regard. As time went on, and the spectrum of software applications incresed there was a greater demand for OO based languages in order to facilitate software reuse, easier design etc. and C++ / Java became popular.

Currently, there is an increased drift in the industry towards server side components that do all the work with thin client UIs (i.e. browsers). So languages that cater for this demand are becomming more popular (Ruby, ASP/Java EE languages).

New languages will become popular when the technology that they are closest to become popular. Personally (and this is guesswork), I think there is huge scope for a language that truly takes advantage of multi-core systems. This will mean having multi-threading built from the very start and will probably require a change in approach and thinking (like going from procedural to OO).

于 2008-10-02T16:44:03.790 回答
1

现在已经有几年的历史了,但是 Tim Sweeney 的下一个主流编程语言:游戏开发者的观点是对这个主题的有趣思考。

于 2008-10-03T04:23:49.833 回答
0

在我看来,像 C++ 这样具有更紧凑的定义、更好的标准库、本机垃圾收集和本机同步结构的语言会很棒。它应该可供相关新手使用,但仍为专家在需要时以有效的低级方式编程提供便利。我相信 D 符合这些标准中的大部分,但在我看来,它不太可能占据上风。

于 2008-10-02T18:39:35.590 回答
0

在某些时候,程序将开始编写自己的程序,就编程而言,人类变得多余。主要分歧在于何时会发生这种情况。

于 2008-10-02T15:19:29.767 回答
0

如果您只关注编程语言历史的这一分支,我认为您可以同时编写 JavaScript 和 C#,因为它们是在您提到的三个之后出现的,具有相似的语法,并且借鉴了前辈。

其他人可能会提到 D 或 Objective-C(当然,他们已经在这里了)。

下一个语言,我想你的意思是“下一个成功”,因为每个月几乎都有一种新的语言......
我认为这将是一种具有垃圾收集的语言,使用 Jit 在字节码上运行,高度可移植。
我不知道它是面向对象的还是函数式的,具有静态类型还是动态类型,但我敢打赌,就像有趣的Fan Programming Language一样。

或者我们都错了,它可能只是一种自然语言,带有语音或图形界面:“获取此页面的天气框,将其颜色和此徽标更改为那个,并集成到我的页面中”。

于 2008-10-02T16:50:24.713 回答
0

在短期内,我预计高级语言会变得更强大和更常用。Perl 6 和 Javascript 2.0 是等待我们的好例子。

从长远来看,函数式语言可能会成为主流,但我预计这不会很快发生。

于 2008-10-02T15:06:57.317 回答
0

D 语言,尤其是 2.0 版本从 Ruby、Python 和许多现代语言中学习,但没有保持与 C 的源代码兼容性,仍然允许对金属进行原始访问。这种语言的设计决策是下一代系统和通用编程语言的完美解决方案,甚至内置了函数式编程和元编程。

于 2009-06-04T18:06:40.937 回答
0

语言问题在我看来是不是。这总是取决于您的应用程序。而且由于语言大多有一套标准的库,非常适合这个或那个应用程序。语言在某种程度上与特定的应用领域相关。

例如:

  C                       -> Device drivers
  C++                     -> Highperformance Computing
  Java                    -> Server side programs (J2EE)
  C#                      -> Server, Client(Silverlight, WinForm, WPF)
  Ruby, Python, ...       -> WebScripting (Serverside) and helper scripts
  ECMAScript (Javascript) -> WebScripting (Clientside)

我认为这些语言中的任何一种都能够解决任何计算程序(也有性能方面的问题,因为我们有 Jits),但它们没有用于任何领域,因为为每种语言重新创建每个库是不可行的。

使 C 和 C++ 与众不同的是,有一个标准库,但与其他标准库相比,它是一个相当简约的标准库。为了有效地使用这些语言,需要第三方(非标准)库。

因此,在为项目选择语言时,您会寻找以下内容:

  • 是否有可以在项目中使用的正确库
  • 你懂语言吗
  • 用这种语言编程是否有效(看看brainfuck)
  • 您的团队了解并掌握该语言吗?

最后一件事是你也喜欢这种语言吗?最后,这是使用这种或那种语言的最大动力。

因此,语言进化的下一步将是更高级别的库和概念,以更快、更具表现力。例子是

  • Lambda 表达式
  • Linq(在语言中执行某种 sql 的 C# 功能)
  • 函数式编程
  • 变量类型
  • 动态类型
  • 不是特定的语言:帮助程序员的更好的 IDE
  • 重要提示:支持easy!并行性(Axum、Nesl、orca、Chapel、...)这里列出
于 2011-03-24T06:49:53.520 回答