华为p40pro最新消息刘强东黄晓明在用不

内容提示:c语言简单程序第一次莋业程序题pta

文档格式:DOCX| 浏览次数:10336| 上传日期: 15:19:06| 文档星级:?????

全文阅读已结束如果下载本文需要使用

该用户还上传了这些文档

这几天来我在思考那些正在挑戰c语言简单程序的系统编程语言领袖地位的新潮语言,尤其是Go和Rust思考的过程中,我意识到了一个让我震惊的事实——我有着35年的c语言简單程序经验每周我都要写很多C代码,但是我已经记不清楚上一次我 创建一个新的c语言简单程序项目 是在什么时候了

如果你完全不认为這种情况令人震惊,那你很可能不是一个系统程序员我知道有很多程序员使用更高级的语言工作。但是我把大部分时间都花在了深入打磨像NTPsec、 GPSD以及giflib这些东西上熟练使用c语言简单程序在这几十年里一直就是我的专长。

但是现在我不仅是不再使用 C 语言写新的项目,甚至我嘟记不清我是什么时候开始这样做的了而且……回头想想,我觉得这都不是本世纪发生的事情

这个对于我来说是件大事,因为如果你問我我的五个最核心软件开发技能是什么,“c语言简单程序专家” 一定是你最有可能听到的之一这也激起了我的思考。

c语言简单程序嘚未来会怎样 c语言简单程序是否正像当年的COBOL语言一样,在辉煌之后走向落幕?

我恰好是在c语言简单程序迅猛发展并把汇编语言以及其它许多编译型语言挤出主流存在的前几年开始编程的。

那场过渡大约是在1982到1985年之间在那之前,有很多编译型语言争相吸引程序员的注意力那些语言中还没有明确的领导者;但是在那之后,小众的语言就直接毫无声息的退出了舞台

主流的语言(FORTRAN、Pascal、COBOL)则要么只限于老玳码,要么就是固守单一领域再就是在c语言简单程序的边缘领域顶着愈来愈大的压力苟延残喘。

而在那以后这种情形持续了近30年。尽管在应用程序开发上出现了新的动向:Java、 Perl、 Python 以及许许多多不是很成功的竞争者。起初我很少关注这些语言这很大一部分是因为在它们嘚运行时的开销对于当时的实际硬件来说太大。因此这就使得C的成功无可撼动。

为了使用和对接大量已有的c语言简单程序代码你得使鼡c语言简单程序写新代码(一部分脚本语言尝试过打破这种壁垒,但是只有Python有可能取得成功)

回想起来,我在1997年使用脚本语言写应用时夲应该注意到这些语言的更重要的意义的当时我写的是一个名为SunSITE的帮助图书管理员做源码分发的辅助软件,当时使用的是Perl语言

这个应鼡完全是用来处理文本输入的,而且只需要能够应对人类的反应速度即可(大概0.1秒)因此使用C或者别的没有动态内存分配以及字符串类型的语言来写就会显得很傻。

但是在当时我仅仅是把其视为一个试验,而完全没有想到我几乎再也不会在一个新项目的第一个文件里敲丅int main(int argc, char **argv) 这样的c语言简单程序代码了

我说“几乎”,主要是因为1999年的SNG 我想那是我最后一个用C从头开始写的项目了。

在那之后我写的所有的C代碼都是在为那些上世纪已经存在的老项目添砖加瓦或者是在维护诸如GPSD以及NTPsec一类的项目。

当年我本不应该使用c语言简单程序写SNG的因为在那个年代,摩尔定律的快速迭代使得硬件愈加便宜使得像Perl这样的语言的执行效率也不再是问题。仅仅三年以后我可能就会毫不犹豫地使用Python而不是c语言简单程序来写SNG。

在1997年我学习了Python 这对我来说是一道分水岭。这个语言很美妙——就像我早年使用的Lisp一样而且Python还有很酷的庫!甚至还完全遵循了POSIX!还有一个蛮好用的对象系统!Python没有把c语言简单程序挤出我的工具箱,但是我很快就习惯了在只要能用Python时就写Python 而呮在必须使用c语言简单程序时写C。

(在此之后我开始在我的访谈中指出我所谓的 “Perl 的教训” ,也就是任何一个没能实现和c语言简单程序語义等价的遵循 POSIX 的语言都注定要失败在计算机科学的发展史上,很多学术语言的骨骸俯拾皆是原因是这些语言的设计者没有意识到这個重要的问题。)

显然对我来说,Python的主要优势之一就是它很简单当我写Python时,我不再需要担心内存管理问题或者会导致核心转储的程序崩溃 —— 对于C程序员来说处理这些问题烦的要命。

而不那么明显的优势恰好在我更改语言时显现我在90年代末写应用程序和非核心系统垺务的代码时,为了平衡成本与风险都会倾向于选择具有自动内存管理但是开销更大的语言以抵消之前提到的c语言简单程序的缺陷。

而茬仅仅几年之前(甚至是 1990 年)那些语言的开销还是大到无法承受的;那时硬件产业的发展还在早期阶段,没有给摩尔定律足够的时间来發挥威力

尽量地在c语言简单程序和Python之间选择C —— 只要是能的话我就会从c语言简单程序转移到Python。这是一种降低工程复杂程度的有效策略峩将这种策略应用在了GPSD中,而针对NTPsec , 我对这个策略的采用则更加系统化这就是我们能把NTP的代码库大小削减四分之一的原因。

但是今天我不昰来讲Python的尽管我觉得它在竞争中脱颖而出,Python也未必真的是在2000年之前彻底结束我在新项目上使用c语言简单程序的原因因为在当时任何一個新的学院派的动态语言都可以让我不再选择使用c语言简单程序。也有可能是在某段时间里在我写了很多Java之后我才慢慢远离了c语言简单程序。

我写这个回忆录是因为我觉得我并非特例在世纪之交,同样的发展和转变也改变了不少c语言简单程序老手的编码习惯像我一样,他们在当时也并没有意识到这种转变正在发生

在2000年以后,尽管我还在使用 C/C++ 写之前的项目比如GPSD ,游戏韦诺之战以及NTPsec但是我的所有新項目都是使用Python的。

有很多程序是在完全无法在c语言简单程序下写出来的尤其是reposurgeon 以及doclifter这样的项目。

由于C 言受限的数据类型本体论以及其脆弱的底层数据管理问题尝试用C写的话可能会很恐怖,并注定失败

甚至是对于更小的项目——那些可以在C中实现的东西——我也使用Python写,因为我不想花不必要的时间以及精力去处理内核转储问题这种情况一直持续到去年年底,持续到我创建我的第一个Rust项目以及成功写絀第一个使用Go语言的项目。

如前文所述尽管我是在讨论我的个人经历,但是我想我的经历体现了时代的趋势我期待新潮流的出现,而鈈是仅仅跟随潮流

在98年的时候,我就是Python的早期使用者来自TIOBE的数据则表明,在Go语言脱胎于公司的实验项目并刚刚从小众语言中脱颖而出嘚几个月内我就开始实现自己的第一个Go语言项目了。

总而言之:直到现在第一批有可能挑战c语言简单程序的传统地位的语言才出现

我判断这个的标准很简单——只要这个语言能让我等c语言简单程序老手接受不再写C的事实,这个语言才 “有可能” 挑战到c语言简单程序的地位—— 来看啊这有个新编译器,能把C转换到新语言现在你可以让他完成你的全部工作了 —— 这样c语言简单程序的老手就会开心起来。

Python鉯及和其类似的语言对此做的并不够好使用Python实现 NTPsec(以此举例)可能是个灾难,最终会由于过高的运行时开销以及由于垃圾回收机制导致嘚延迟变化而烂尾

如果需求是针对单个用户且只需要以人类能接受的速度运行,使用 Python 当然是很好的但是对于以 机器的速度 运行的程序來说就不总是如此了 —— 尤其是在很高的多用户负载之下。

这不只是我自己的判断 —— 因为拿Go语言来说它的存在主要就是因为当时作为Python語言主要支持者的Google在使用Python实现一些工程的时候也遭遇了同样的效能痛点。

Go语言就是为了解决Python搞不定的那些大多由c语言简单程序来实现的任務而设计的

尽管没有一个全自动语言转换软件让我很是不爽,但是使用Go语言来写系统程序对我来说不算麻烦我发现我写G写的还挺开心嘚。我的很多C编码技能还可以继续使用我还收获了垃圾回收机制以及并发编程机制,这何乐而不为

本来我想把Rust也视为 “C 语言要过时了”的例证,但是在学习并尝试使用了这门语言编程之后我觉得这种语言现在还没有做好准备。也许5年以后它才会成为c语言简单程序的對手。

随着2017结束我们已经发现了一个相对成熟的语言,其和C类似能够胜任c语言简单程序的大部分工作场景(我在下面会准确描述),茬几年以后这个语言界的新星可能就会取得成功。

这件事意义重大如果你不长远地回顾历史,你可能看不出来这件事情的伟大性三┿年了 —— 这几乎就是我作为一个程序员的全部生涯,我们都没有等到一个c语言简单程序的继任者也无法遥望C之后的系统编程会是什么樣子的。而现在我们面前突然有了后C时代的两种不同的展望和未来……

……另一种展望则是下面这个语言留给我们的。

我的一个朋友正茬开发一个他称之为 “Cx” 的语言这个语言在c语言简单程序上做了很少的改动,使得其能够支持类型安全;他的项目的目的就是要创建一個能够在最少人力参与的情况下把古典 c语言简单程序修改为新语言的程序

我不会指出这位朋友的名字,免得给他太多压力让他做出太哆不切实际的保证。但是他的实现方法真的很是有意思我会尽量给他募集资金。

现在我们看到了可以替c语言简单程序实现系统编程的彡种不同的可能的道路。而就在两年之前我们的眼前还是一片漆黑。我重复一遍:这件事情意义重大

我是在说c语言简单程序将要灭绝嗎?不是这样的在可预见的未来里,c语言简单程序还会是操作系统的内核编程以及设备固件编程的主流语言在这些场景下,尽力压榨硬件性能的古老规则还在奏效尽管它可能不是那么安全。

现在那些将要被C的继任者攻破的领域就是我之前提到的我经常涉及的领域 —— 仳如 GPSD 以及 NTPsec、系统服务以及那些因为历史原因而使用 C 语言写的进程还有就是以DNS服务器以及邮件传输代理 —— 那些需要以机器速度而不是人類的速度运行的系统程序。

现在我们可以对后C时代的未来窥见一斑即上述这类领域的代码都可以使用那些具有强大内存安全特性的 C 语言嘚替代者实现。Go 、Rust 或者 Cx 无论是哪个,都可能使C的存在被弱化

比如,如果我现在再来重新实现一遍NTP 我可能就会毫不犹豫的使用Go语言去唍成。

我要回帖

更多关于 p40pro最新消息 的文章

 

随机推荐