用现代语言"自动化"的编程概念

yre*_*uta 30 language-agnostic history

奇怪的问题,但在这里.现代语言"自动化"的编程概念是什么?我的意思是你以前手动做的概念.这是一个例子:我刚读过C语言,你手动进行垃圾收集; 然而,对于"现代"语言,编译器/解释器/语言本身会处理它.你知道其他什么,或者还没有?

Nat*_*man 22

优化.

在最长的时间内,有必要手工完成.现在大多数编译器可以比任何人都能做得更好.

注意:这并不是说仍然没有完成手工优化,正如评论中所指出的那样.我只是说过去手工完成的一些优化现在都是自动的.

  • 那不是真的.这在很大程度上取决于您的架构.特别是利用某些类型的并行性是编译器并不真正隐含的一件事.这并不是说编译器在优化代码方面通常不比以前好多了,但是必须手动优化并不会死亡. (3认同)
  • @Jim:我在回答中提到了这一点. (2认同)

Gar*_*art 15

数据收集

哈希表,链表,可调整大小的数组等

所有这些必须在此之前完成.


har*_*rpo 15

我认为编写机器代码值得一提.


Ion*_*rel 12

对集合的迭代:

foreach (string item in items)
{
    // Do item
}
Run Code Online (Sandbox Code Playgroud)

数据库访问,查看Ruby中的ActiveRecord模式.

邪恶的goto.

  • 是! Foreach循环是有史以来最好的控制流程之一.我很高兴他们最终将它带入C++ 0x中的C++. (3认同)

Sql*_*yan 11

记忆管理,任何人?我知道明确地分配和释放你自己的内存会更有效,但是当它没有正确完成时它也会导致缓冲区溢出,并且它非常耗时 - 许多现代语言将自动分配和垃圾收集.


Kro*_*oaX 10

事件系统

在你必须自己实现观察者模式之前.今天(至少在.NET中)你可以简单地使用"委托"和"事件"


Wil*_*ung 8

行号

没有更多的基础,没有更多的卡片!


Mic*_*uen 8

  • 列表中的第一个,扩展方法.促进流畅的编程

  • 例外,程序尝试做什么(尝试阻止)以及如果某些事情失败(catch阻止)将会做什么的区分,使得编程更加精简.而在此之前,您应始终保持警惕,以便在程序语句之间进行散布错误处理

  • 属性,使语言非常以组件为中心,非常现代.但遗憾的是,这会让Java变得不现代.

  • Lambda,捕获变量的函数.而之前,我们只有函数指针.这也排除了对嵌套函数的需求(Pascal具有嵌套函数)

  • 方便循环收集,即foreach,而在你必须为obj-> MoveNext,obj-> Eof制作设计模式之前

  • 使用像break,continue,return这样的现代构造进行无字节编程.而在之前,我记得在Turbo Pascal 5中,没有中断继续,VB6有Exit Do/For(类似于break),但它没有继续

  • C#-wise,我爱的分化outref,因此编译器能及早发现编程错误

  • 反射和属性,使程序/组件能够发现彼此的功能,并在运行时调用它们.而在C语言之前(我不知道在现代C中,很长一段时间没有使用C),这件事是不可思议的

  • 远程方法调用,如WebServices,Remoting,WCF,RMI.计算机之间通信的低级TCP/IP管道的日子已经一去不复返了

  • 属性+1.男人我爱属性. (3认同)

MSa*_*ers 8

声明

在C和C++等单通道编译器语言中,声明必须先于函数的使用.更现代的语言使用多遍编译器,不再需要声明.遗憾的是,C和C++的定义方式很差,因为多路传输编译器是可行的,所以它们不能弃用声明.