系统编程语言和应用程序语言之间的区别

13

系统编程语言和应用程序编程语言有什么区别?


1
http://wiki.answers.com/Q/What_is_the_difference_between_system_programming_and_application_programming - jmj
这个问题以前已经出现过,但我在SO上找不到它。 - user166390
5个回答

16
我认为有几个因素需要考虑:
  1. 在系统编程语言中,您必须能够接近真实的硬件世界,涉及到底层的问题。然而,在应用程序语言中,存在一种“虚拟世界”(希望更好、更易于交互),该世界是使用语言设计的,您只需要能够应对它。

  2. 在系统编程语言中,性能方面不应有任何妥协。程序员必须能够编写代码,从硬件中挤出所有的性能优势。但在应用程序语言中,实际编写程序所需的时间才是更重要的考虑因素。

  3. 由于第2点,系统编程语言可以自由地假设程序员不会犯错误,因此没有“运行时错误”保护措施。例如,数组的索引超出范围将意味着世界末日,除非硬件免费提供这些检查(但这种情况下,您可能可以选择成本更低或速度更快的硬件)。这样做的想法是,如果假定代码正确,那么即使为了检查不可能的事情而付出一点代价也毫无意义。另外,在系统编程语言中,不应妨碍程序员故意做某些他/她认为正确的事情。而在应用程序语言中,帮助程序员检查代码以及尝试强制使用某些哲学模式被认为是好的编程实践。为了帮助程序员避免犯错,应用程序语言可以牺牲执行速度、输入时间和代码大小等方面。

  4. 由于第3点,系统编程语言将更难通过试验学习。从某种意义上说,它们是强大但危险的工具,人们应该小心地思考每一个语句,因此调试也更加困难。相反,在应用程序语言中,可以采用尝试和查看的方法(如果虚拟世界抽象没有泄漏太多),让错误进入并稍后进行修复是可行的选择。


9
在IT领域,很多事情都是模糊的。例如,C语言最初是作为系统编程语言(并用于实现Unix),但也被用于应用程序开发。尽管如此,有一些语言明显比其他语言更适合系统编程(例如,相对于COBOL/FORTRAN,C/C++更适合系统编程)。同样,有一些语言更适合应用程序开发而不是系统编程,例如VB.NET。
从上述例子中可以看出,系统编程语言的低级特性(例如指针、位操作符等)是突出的语言特点,比如C/C++。当然,有一个老笑话说C语言是“海平面”级别的语言(介于汇编语言和“高级”语言之间)。
警告:我从操作系统开发者/工具开发者的角度来看待系统编程。
我认为可以公正地说,尽管有开发使用Java开发操作系统的项目(虽然我认为大部分是本地编译,而不是字节码和JIT编译/解释),但系统编程语言的目标是其目标平台的本机机器代码。因此,主要针对托管代码/解释代码的语言不太可能用于系统编程。
总之,这足以引起一些支持和反对的评论了 :)

C应该一直保持“系统”编程的身份;-) - user166390
1
C语言可能不是很适合许多应用程序,但仍有足够的应用程序可以选择C语言。C语言还作为并行编程语言(如CUDA、OpenCL)的基础而复兴。无法否认其受欢迎程度(尽管受遗留支持的影响),例如www.tiobe.com的“编程语言指数”。我开发了多种语言,但我总是对C语言有一种柔软的情感,你可以称我是虐待狂;我也喜欢汇编语言;-) - Peter G. McDonald
"...我认为大部分都是本地编译而非字节码和JIT / 解释执行。" 对于JNode,基础系统和核心插件是本地编译的,其余内容是JIT编译的(没有任何解释执行)。 - Stephen C

5

这些不是确切的概念,但本质上,系统编程语言适合编写操作系统(因此它们具有指针、与汇编程序集成、对应于内存和寄存器组织的数据类型等低级概念),而应用程序编程语言更适合编写应用程序,因此它们通常使用更高级别的概念来表示计算(例如OOP、闭包、内置复杂数据类型等)。


2
一般来说,系统编程语言比应用程序编程语言更低级。然而,语言本身与此无关。更多的是语言实现的具体细节。
例如,Pascal最初是一种教学语言,几乎完全用于应用程序开发。但是,它已经发展成为一种系统语言,并被用于创建早期的MacOS和Windows版本。
C#通常不是一种系统语言,因为它不能进行低级别的工作,尽管随着托管操作系统的出现,这条界线也变得模糊了。

2
我不认为这里还有一个最终答案。
Perl和Python几乎都预装在每个Linux发行版中...两者都可以内联C...都可以进行作业控制和其他“低级”任务...线程等。
任何具有良好的系统调用绑定和/或FFI的语言都应该像C或C++一样具有基本的系统意识。
我唯一不考虑作为系统语言的语言是那些专门针对另一个平台(JVM、CLR)并积极防止本地交互的语言。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接