你最喜欢的编程语言是什么?

Lor*_*igs 6 language-agnostic theory language-features programming-languages

作为一名程序员,我经常会看一下我目前正在使用的语言的一些功能,并自己思考"这对于程序员来说很难做到,并且可以由机器自动处理".

这种特征的一个例子是存储器管理,它在各种语言中已经自动化了一段时间.虽然大多数时候内存管理并不难以手动完成,但在不泄漏内存的情况下在应用程序中完美地完成它非常困难.自动化使其变得简单,以便我们的程序员可以专注于更关键的问题.

是否有任何您认为编程语言应该自动化的功能,因为奖励/难度比率太低(例如并发)?

这个问题旨在成为关于编程未来的头脑风暴,以及我们可以让我们专注于更重要的任务的语言,所以即使您认为自动化不实用,也请发表您的意愿/可行.好的答案将指出在许多语言中真正难以做到的事情,而不是单一语言的宠儿.

小智 9

无论语言能为我自动做什么,我都想要一种为自己做的事情.

  • 我想你在汇编代码?如果没有,你应该放弃Java,Python,C#或者你使用的任何东西,因为它们会自动完成99.99%的任务. (12认同)
  • 不,我在大多数情况下使用C++.但我偶尔会使用PHP,VB等语言,我认为通过允许访问必须实现的更低层次机制,它们都可以得到改进.我从来没有理解为什么GC语言不能支持RAII(即析构函数)_and_ GC. (5认同)
  • +1,计算机为你做的任何事情都是正确的......大多数时候.从来没有*所有*的时间. (2认同)
  • 您必须显式声明(只读)要在RAII方案中使用的变量.(如果你愿意的话,C#的`using`会发生什么),因为编译器无法检测哪些对象仅用于函数的生命周期以及哪些对象被传递.另外:分代GC将很快收集最近分配的对象,因此RAII和显式"使用"块之间的差异并不大. (2认同)

Nol*_*rin 7

兼容(半)自动化的并发编程/并行,与不得不乱用线程,回调和同步相反.能够并行化循环,例如:

Parallel.ForEach(fooList, item =>
{
    item.PerformLongTask();
}
Run Code Online (Sandbox Code Playgroud)

只是赢了.

但是,某些语言已在某种程度上支持此类功能.值得注意的是,F#具有异步工作流程.随着.NET 4.0的发布,Parallel Extensions库将使C#和VB.NET中的并发变得更加容易.我相信Python也有某种并发库,但我个人还没有使用它.

同样很酷的是纯函数式语言中的全自动并行,即不需要稍微更改代码并自动使其在多个内核之间以最佳方式运行.请注意,这只能使用函数语言(例如Haskell,而不是CAML/F#)来完成.尽管如此,上面给出的示例构造对于面向对象和其他语言中的并行性自动化非常方便.

我认为,随着桌面计算机开始从2个内核转移到4个内核,然后是8个内核,并且随着桌面计算机开始从8个核心转移到8个内核,图书馆,设计模式,甚至整个编程语言都将面向简单和高级别的并行支持.自动并发的优势变得更加明显.


Seb*_*Seb 5

exec("Build a system to keep the customer happy, based on requirements.txt");
Run Code Online (Sandbox Code Playgroud)

  • exec怎么样("读$ MY_MIND") (3认同)
  • 我希望系统也能编写requirements.txt(并且当然要继续更新它100次.) (2认同)

For*_*ner 5

在Java中,我想要一个使整个类不可变的关键字.

例如

public immutable class Xyz {
}
Run Code Online (Sandbox Code Playgroud)

如果任何不可变性条件被打破,编译器会警告我.

  • 你不希望这是一个错误,而不是一个警告? (4认同)
  • 不变性是一个非常严格的条件.对象不能"有些"不可变.`immutable`关键字是用户和类作者之间合同的一部分.如果作者承诺不变,则编译器必须强制执行. (3认同)
  • 这在许多语言中都很有用,不仅仅是Java,还可以用来帮助自动化并发. (2认同)

fly*_*ire 5

在Java中,不那么冗长地创建bean.

例如:

bean Student
{
    String name;
    int id;
    type1 property1;
    type2 property2;
}
Run Code Online (Sandbox Code Playgroud)

这将创建一个bean私有字段,默认访问器,toString,hashCode,equals等.