妈妈的朋友在线观看,屏保-爱做饭的人,最值得深交

C言语五十年来一向是软件开发的一种主力言语。 以下是它在现在的2019年与C ++,Java,C#,成都龙泉天气预报Go,Rust和Python抗衡的方法。

作者 | Serdar Yegulalp

译者 | 王艳妮,王丽鹤责编 | 屠敏

出品 | CSDN(ID:CSDNnews)

以下为译文:

没有什么技能能够运用长达50年之久,除非它真的比大大都其他东西都要好用——关于一种核算机职业的技能来说尤陈数全祼剧照其如此。自1972年诞生以来,C言语一向坚持生龙活虎郑馥丹的状况,时至今日它仍然是咱们用来建立软件国际的根底建筑材料之一。

但有时一种技能能够长时间存在,仅仅因为人们还没有来得及创造新的东西来替代它罢了。 在曩昔的几十年里,呈现了许多其他言语——其间一些明确地被规划用于应战C的主导位置,有些言语企图凭仗自己的人气渐渐分裂C言语的控制位置。

为C需求被替换掉的引鳄观念争论是简略的。编程言语研讨和软件开发实践都暗示了怎么比C更好地去干事。但历经数十年的研讨和开发,C言语的妈妈的朋友在线观看,屏保-爱煮饭的人,最值得深交位置却广州优创电子有限公司仍旧安定。很少有其他言语能够在功用、裸机兼容性或通用性等方面打败它。不过,2018年C是怎么与那些明星编程言语竞赛的呢,其间细节仍值得一看。

C vs. C ++

当然了,C最常被拿来与C ++进行比较,正如其称号自身所暗示的那样,C++作为对C言语的扩展而被创立出来。C ++和C之间的差异能够归纳为C++愈加广泛(褒)或愈加广泛(贬),详细取决于这个问题你是问的C仍是C++程序员。(笑)

尽管C ++的语法等方面仍情迷阴阳界然是类C的,但它供给了许多在原生的C中本不行用的十分有用的功用:命名空间(na男人自学风水盗墓mespace),模板(妈妈的朋友在线观看,屏保-爱煮饭的人,最值得深交template),反常(exception),主动内存办理(automatic m妈妈的朋友在线观看,屏保-爱煮饭的人,最值得深交emory management)等等。需求尖端功用的项目,例如触及数据库,机器学习体系的项目一般是用C ++编写的,以便项目能尽或许地剥削以及利用到每一点功用。

此外,与C比较,C ++在继续地愈加积极地扩展。行将推出的C ++ 20会带来更多功用供开发者享受,包含模块,协同程序,同步库,以及概念,这些使模板更易于运用。 C standard的最新版别只进行了少数更新,并侧重于坚持向后兼容性。

事实上,C ++中的一切附加功用相同也或许成为负担。而且是很大的负担。您运用的C ++专属功用越多,引进的复杂度就越高,对成果的批改就越困难。将自己局限于仅一个C ++子集的开发人员能够防止许多开发中严峻的坑和额外负担。可是有些团队想要从根儿上防备C ++的过度复杂性。坚持运用C能迫使开发人员将自己局限于一个子集。例如,Linux内核开发团队就妈妈的朋友在线观看,屏保-爱煮饭的人,最值得深交直接避开了C ++。

选C而不选C++对您——以及任何将会保护你代码的开发人员——来说都是可行的,经过选用强制精约主义来防止与C ++的复杂性羁绊。当然,C ++具有丰厚的高档功用,这是有它自己的道理的。但假如极简主义更合适当时和未来的项目——以及担任项目的团队——那么仍是选C更正确一些。

C vs. Java

几十年了,Java仍然是企业软件开发的主力军之一——而且也是广泛而言的开发的主力军之一。许多最重要的企业软件项目都是用Java编写的——包含绝大大都Apache Software Foundation项目——而Java仍然是开发企业级需求项目的可行言语。

Java的语法从C和C ++中学习了许多东西。可是,与C不同的是,Java默许状况下不会编译为本机代码。相反,Java运转时环境,JVM,JIT(实时)编译Java代码以在方针环境中运转。在恰当的状况下,JIT编译后的Java代码能够挨近乃至超越C的功用。

Java背面的“一次编写,到处运转”的理念也pp匠答应Java程序在方针架构进步行相对较少的调整即可运转。比较之下,尽管C已被移植到许多架构中,但任何给定的C程序仍或许需求从头量身定做才能在,打个比方,Windows与Linux,两种不同的os之间正常运转。

这种可移植性和强壮功用的结合,以及巨大的软件库和结构组成的生态,使Java成为构建企业运用程序的首选言语。

Java输给C的当地是一个Java从未计划竞赛的范畴:接近底层结构运转,或直接与硬件打交道。 C代码被编译成机器代码,由进程直接履行。 Java被编译成字节码,这是一种随后会被JVM解说器转换为机器代码的中间代码。此外,尽管Java的主动内存办理在大大都状况下都是个长处,但C更合适于有必要充分利用有限内存资源的状况。

也便是说,在某些方面,Java在速度方面能够挨近于C。JVM的JIT引擎在运转时依据程序行为优化例程,答应进行许多类型的优化,而这些妈妈的朋友在线观看,屏保-爱煮饭的人,最值得深交优化是在未提早编译的C中无法完结的。尽管Java运转时主动履行内存办理,但一些较新的运用程序能够处理这个问题。例如,Apache Spark部分地经过运用绕过JVM的自定义内存办理代码来优化内存中处理。

C vs. C#和.Net

在推出近二十年后,C#和.Net 结构仍然是企业软件国际的首要组成部分。有人说C#和.Net是微软对Java的回应——一个保管代码编译器体系和通用运转库——C和Java之间的许多种比照也适用于C和C#或.Net之间。

与Java(以及某种程度上来说Python也是如此)相同,.Net供给跨各种渠道的可移植性和巨大的集成软件生态体系。考虑到.Net国际中有多少面向企业的开发,这些都是不小的优势。当您运用C#或任何其他.Net言语开发程序时,您能够运用为.Net运转时编写的许多东西和库。

.NET另一个相似Java的优势是JIT优化。 C#和.Net程序能够依照C言语提早编译,但它们首要由.Net运转时进行即时编译,并运用运转时信息进行优化。 JIT编译答应对无法在C中履行的运转着的.Net程序进行各种就地优化。

与C相同,C#和.Net供给各种直接拜访内存的机制。堆,栈和非保管体系内存都能够经过.Net API和方针拜访。开发人员能够运用.Net中的unsafe形式来完结更高的功用。

但这些都不是没有价值的。保管方针和unsafe方针不能被恣意交流,而且它们之间的编组会下降功用。因而,要最大化.Net应文怀沙5任妻子用程序的功用需求将保管和非保管方针之间的变化坚持在最低极限。

假如您无法承当保管与非保管内存之间变化形成的功用丢失,或许.Net运转时关于方针环境(例如,内核空间)来说是一个糟糕的挑选,或许或许底子不行用,那么C便是你所需求的。与C#和.Net不同,C被默许能够解锁对内存的拜访权。

C vs. Go

Go的语法很大程度上学习了C——花括号作为定界符,句子以分号完毕,等等。通晓C的开发人员一般能够毫不妈妈的朋友在线观看,屏保-爱煮饭的人,最值得深交吃力地直接运用Go,乃至算上Go的独有功用,如命名空间和包办理,对开发人员来说也并不困难。

代码可读性是Go的辅导规划方针之一:让开发人员能够轻松把握任何Go项目,并在短时间内熟练把握代码库。 C代码库或许很难了解,因为它们很简单集合许多专归于某个项目或某个团队的宏和和#ifdef。 Go的语法及其内置的代码格局以及项目办理东西旨在防止这种结构性问题。

Go还供给了比方goroutine和channel之类的附加功用,用于处理并发性和组件之间的音讯传递的言语等级的东西。大叔的幸福生活 C需求开发者手动完结或由外部库供给,但Go供给了开箱即用的这些功用,使得构建需求这些功用的软件变得愈加简单。

Go与C最深层次的不同之处在于内存办理方面。默许状况下,Go的方针会被主动办理并主动进行收回。关于大大都编程作业来说,这十分便利。但这也意味着任何需求确定性处理内存的程序都会更难编写。

Go的确包含了用于绕过Go的某些类型处理综惊鸿踏雪安全性的unsafe包,例如运用Pointer类型读取和写入恣意内存。但unsafe会顺便一个warning说用它编写的程序“或许是不行移植的,而且不受Go 1兼容性攻略的保护。”

Go十分合适构建命令行有用程序和网络服务等,因为这些很少用到过分详尽的操作。可是,假如是初级设备驱动程序,内核空间操作体系组件以及其他需求严厉控制内存布局和办理的使命,那么就最好用C来创立。

C vs. Rust

在某些方面,Rust是对C和C ++创立的内存办理闻继霞难题的回应,也是对这两种言语的许多其他缺陷的回应。 Rust编译为本机机器代码,因而就功用而言,它被以为与C适当。但默许状况下,内存安全才是Rust的首要卖点。

Rust的语法和编译规则可协助开发人员防止常见的内存办理过错。假如程序有一个不契合Rust语法的内存办理问题,它就不会被编译。刚触摸这种言语的新手,特别是从前用C言语的开发者,因为C言语为这类bug供给了满足的容错空间,所以他们触摸Rust的第一步是学习怎么安慰编译器。但Rust的支持者以为,这种短期的苦楚有一个长时间的报答:更安全的,不会减缓速度的代码。

Rust还经过其东西改进了C言语。默许状况下,项目和组件办理是Rust供给的东西链的一部分,与G富钟水牛o相同。有一种默许的,引荐的方法来办理包,安排项目文件夹,以及处理C需求独自处理的其他许多事情,每个项目和团队以不同的苦战森林电视剧全集方法处理它们。

可是,在Rust中被吹捧为优势的东西关于C开发者来说或许并没有太大吸引力。 Rust的编译时安全功用无法禁用,因而即便是最小的Rust程序也有必要契合Rust的内存安全约束。默许状况下,C或许不太安全,但在必要时它更灵敏,更宽恕。

另一个或许的缺陷是Rust言语的巨细。即便考虑到规范库,C的功用也相对较少。 Rust功用集十分巨大而且还在不断增加。与C ++相同,较大的Rust功用集意味着更强壮的功用,但也意味着更高的复杂度。 C是一种较小的言语,但更简单在脑筋中进行建模,因而或许更合适那些对Rust来说太小,不值得大动干戈的项目。

C vs. Python

当今,每逢议论软件开发时,Python好像总是能呈现在对话中。究竟,Python是“对一切项目的第二佳言语”,毫无疑问是最通用的言语之一,具稀有祁介泉千个第三方库。

Python着重的,以及它与C最不同的当地,是有利于开发速度而不是履行速度。一个或许需求一个小时簿本r18才能用另一种言语写出来的程序——比方C——或许用Python几分钟内就能写好。另一方面,该程序在C中履行或许需求几秒钟,但需求一分钟才能在Python中运转完。 (一个很好的经历规律:Python程序一般比它们对应的C言语程序运转速度慢一个数量级。)可是关于现代硬件上的许多作业,Python现已满足快了,这是它现在广泛运用的一个重要原因。

另一个首要区别是内存办理。 Python程序完全由Python运转时进行内存办理,因而开发人员不用忧虑分配和开释内存的细节。但相同,开发人员的轻松也是以运转时功用为价值的。编写C程序需求严厉重视内存办理,但生成的程序一般是纯机器速度的黄金规范。

可是,在二者的血脉中,Python和妈妈的朋友在线观看,屏保-爱煮饭的人,最值得深交C同享一个深学长的隐秘情人层的联系:Python运转时参阅是用C言语编写的。这答应Python程序包装用C和C ++编写的库。第三方库的Python生态体系的许多重要模块,例如机器学习方面的库,其中心是C代码。

假如开发速度比履行速度更重要,而且假如程序的大大都高功用部分能够被阻隔到独立组件中(而不是遍布整个代码),那么纯Python或Python和C库的混合使得会是比独自运用C更好的挑选。不然的话,C仍然是老迈。

原文:https://www.infoworld.com/article/3402023/why-the-c-programming-language-still-rules.html

热 文推绿妈群 荐

☞小米崔宝秋:小米 AIoT 深度拥抱开源

☞首款搭载国产CPU的域名服务器发布;iPhone完全筛选Lightning接口?ChromeOS 75发布 | 极客头条

☞华为在美研制组织 Futurewei 意欲分居?

☞老司机教你怎么写出没人敢保护的代码!

☞Python有哪些技能上的长处?比其他言语好在哪儿?

☞上不了北大“图灵”、清华“姚班”,AI专业还能去哪上?

☞公链史记 | 从鸿蒙初辟到万物成长的十年激荡……

☞边际核算容器化是否有必要?

☞马云从前偶像,总算把阿里留下的1400亿败光了!

点击阅览原文,输入关键词,查找CSDN文章。

你点的每个“在看”,我都仔细当成了喜爱

点击展开全文

上一篇:

下一篇:

相关推荐