Language agnostic 编程概念是;“自动化”;用现代语言

Language agnostic 编程概念是;“自动化”;用现代语言,language-agnostic,history,Language Agnostic,History,奇怪的问题,但在这里。现代语言“自动化”的编程概念是什么?我的意思是你以前必须手动完成的概念。这里有一个例子:我刚刚读到在C中,您手动执行垃圾收集;然而,对于“现代”语言,编译器/解释器/语言本身会处理它。你知道还有其他的吗,或者没有了?优化。 在很长的一段时间里,必须用手来做这件事。现在,大多数编译器可以做得比任何人都好得多 注意:这并不是说手工优化还没有完成,正如评论中指出的那样。我只是说,过去手工完成的许多优化现在都是自动的。数据收集 哈希表、链表、可调整大小的数组等 所有这些之前都必须手

奇怪的问题,但在这里。现代语言“自动化”的编程概念是什么?我的意思是你以前必须手动完成的概念。这里有一个例子:我刚刚读到在C中,您手动执行垃圾收集;然而,对于“现代”语言,编译器/解释器/语言本身会处理它。你知道还有其他的吗,或者没有了?

优化。

在很长的一段时间里,必须用手来做这件事。现在,大多数编译器可以做得比任何人都好得多


注意:这并不是说手工优化还没有完成,正如评论中指出的那样。我只是说,过去手工完成的许多优化现在都是自动的。

数据收集

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


所有这些之前都必须手工完成。

行号


没有更多的基础,没有更多的牌组

如果你回到汇编,你会发现更多的东西,比如类的概念,你可以在一定程度上模仿,但很难实现。。。甚至在一行中有多个语句,比如说“intc=5+10/20”;实际上是在一行中放了许多不同的“指令”


除了简单的汇编,您可以想到的几乎都是(范围、继承和多态性、重载、“运算符”等概念。基本汇编之外的任何东西都是现代语言、编译器和解释器已经自动化的东西。)

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

对一个集合进行迭代:

foreach (string item in items)
{
    // Do item
}
数据库访问,查看Ruby中的ActiveRecord模式

邪恶的转到

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

  • 异常,将程序试图做什么(try块)和失败时它将做什么(catch块)划分开来,有助于更理智的编程。而以前,您应该始终保持警惕,在程序语句之间穿插错误处理

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

  • Lambda,捕获变量的函数。而以前,我们只有函数指针。这也排除了嵌套函数的需要(Pascal有嵌套函数)

  • 方便的收集循环,即foreach,而在您必须为obj->MoveNext、obj->Eof创建设计模式之前

  • 使用现代构造(如break、continue、return)进行少转到编程。而之前,我记得在Turbo Pascal 5中,没有中断-继续,VB6有退出Do/For(类似于中断),但它没有继续

  • C#wise,我喜欢区分
    out
    ref
    ,因此编译器可以更早地捕获编程错误

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

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


有些语言支持动态类型,比如Python!这是有史以来最好的事情之一(对于某些应用领域)。

事件系统


在您必须自己实现观察者模式之前。现在(至少在.NET中),您可以简单地使用“委托”和“事件”以及用于排序的内置函数(如冒泡排序、快速排序等)。 尤其在Python中,“容器”是一种功能强大的数据结构,在其他高级和现代编程语言中也需要几行代码来实现。在Python描述中可以找到许多此类示例。

多线程


该语言(如java)中对多线程的本机支持使其比将其添加为外部库(如C中的posix线程层)更“自然”。它有助于理解这个概念,因为有许多示例、文档和工具可用。

动态库

动态库自动在进程之间共享公共代码,节省RAM并加快启动时间

插件


一种非常干净高效的扩展功能的方法。

数据绑定。一定要减少布线,手动将数据移入和移出UI元素。

愚蠢

这是我从现代编程语言中得到的很多帮助。有些编程语言一开始就是一团糟,所以您不需要花费精力来无缘无故地胡乱处理。好的现代库通过强迫程序员进入其框架并编写冗余代码来实施愚蠢。Java特别帮助了我的愚蠢,它强迫我进入OOPS框。


在C和C++的单遍编译语言中,声明必须先于函数的使用。更现代的语言使用多通道编译器,不再需要声明。不幸的是,C和C++的定义是如此糟糕,以至于现在不能声明声明,因为多遍编译器是可行的。

< P> <强>函数。< /强>


过去,您需要手动将所有参数放入堆栈,跳转到定义函数的代码段,然后手动处理其返回值。现在您只需编写一个函数

类型推断

在F#或Haskell等语言中,编译器推断类型,使
match myList with
| []       -> "empty list"
| 2::3::tl -> "list starts with elements 2 and 3"
| _        -> "other kind of list"
(myList.Count == 0) ? "empty list" :
   (myList[0] == 2 && myList[1] == 3 ? "list starts with elements 2 and 3" :
      "other kind of list")
volatile bool run = true;
void thread1()
{
   while(run)
   {
      doHeavyWork();
      yield();
   }
}
void thread2()
{
   run = false;
}