语言_语言排行榜 - CSDN
精华内容
参与话题
  • 2020年5月份编程语言排行榜

    万次阅读 多人点赞 2020-05-28 23:50:02
    本文章中语言排名数据来自TIOBE排行榜和PYPL排行榜。 这段时间一直在忙,都忘记更新这个排行榜了,今天重操旧业,给大家看一下5月份的编程语言排行榜 TIOBE排行榜5月份数据 2020年5月TIOBE指数 以下是官方说明 ...

    前言

    本文章中语言排名数据来自TIOBE排行榜和PYPL排行榜。

    这段时间一直在忙,都忘记更新这个排行榜了,今天重操旧业,给大家看一下5月份的编程语言排行榜

    TIOBE排行榜5月份数据

    在这里插入图片描述

    2020年5月TIOBE指数

    以下是官方说明

    五月标题:编程语言C又回到了第一位

    Java和C在4月份已经非常接近了,但是这个月C再次超越了Java。上一次C排名第一是在2015年。我们只能猜测为什么C又是第一名。其中一个原因可能是冠状病毒。这听起来可能很傻,但有些编程语言确实从这种情况中受益。数据科学领域的例子有Python和R,因为每个人都在寻找病毒的解毒剂。但是,嵌入式软件软件如C和C++也越来越受欢迎,因为它们被用在医疗设备的软件中。另一方面,值得一提的是,Rust现在已经接近前20名(一个月内从27名升至21名)。-保罗詹森首席执行官蒂奥贝软件

    TIOBE编程社区索引是编程语言流行程度的一个指标。索引每月更新一次。评级是基于全球熟练工程师、课程和第三方供应商的数量。流行的搜索引擎,如谷歌,必应,雅虎!,维基百科,亚马逊,YouTube和百度被用来计算收视率。需要注意的是,TIOBE索引并不是关于最好的编程语言,也不是大多数代码都是用哪种语言编写的。

    该索引可用于检查您的编程技能是否仍然是最新的,或者在开始构建新的软件系统时,对应采用何种编程语言作出战略决策。TIOBE指数的定义可以在 这里 找到。

    TIOBE编程语言变化图

    Y3GQFs.png

    其他编程语言

    下面列出了完整的前50种编程语言。此概述是非正式发布的,因为可能是我们错过了某种语言的情况。如果您觉得缺少一种编程语言,请通过tpci@tiobe.com通知我们。另请检查我们监视的所有编程语言的概述。
    在这里插入图片描述

    未来50种编程语言

    以下语言列表表示#51至#100。由于差异相对较小,因此仅列出了编程语言(按字母顺序)。

    • (Visual) FoxPro, ABC, Awk, Bash, BBC BASIC, bc, Bourne shell, C shell, cg, Clean, Clojure, CoffeeScript, Common Lisp, Crystal, cT, Elixir, Euphoria, Falcon, Forth, Hack, Icon, Inform, Io, Korn shell, Ladder Logic, LiveCode, Maple, Mercury, ML, MQL4, NATURAL, Object Pascal, OCaml, OpenCL, Oz, PL/I, PostScript, Programming Without Coding Technology, Q, Raku, Red, Ring, S, SPARK, Standard ML, Stata, Tcl, Vala/Genie, Verilog, VHDL

    本月指数变化

    本月对索引的定义进行了以下更改:

    • Warejo注意到Wikipedia将DWScript重定向到Object Pascal。因此,截至本月,DWScript搜索词已从Delphi转移到Object Pascal。
    • 由于C ++ 11和C ++ 14在Wikipedia上拥有自己的页面,因此这些搜索字词不再用于C ++。这是阿兰·德克(Alain Dekker)提出的建议。
    • 还有很多邮件仍需要处理。只要有更多时间可用,您的邮件就会得到答复。请耐心等待。

    长期历史

    要查看大图,请在下面找到许多年前十大编程语言的位置。请注意,这些是12个月内的平均职位。
    Y3NggI.png

    编程语言名人堂

    列出所有“年度最佳编程语言”获奖者的名人堂如下所示。该奖项授予一年中评分最高的编程语言。
    Y3UKGd.png

    TIOBE结尾

    以上数据仅TIOBE提供,真实性仅供参考。
    TIOBE编程语言排行榜是编程语言流行趋势的一个指标,每月更新,这份排行榜排名基于互联网有经验的程序员、课程和第三方厂商的数量。排名使用著名的搜索引擎(诸如Google、MSN、Yahoo!、Wikipedia、YouTube以及Baidu等)进行计算。请注意这个排行榜只是反映某个编程语言的热门程度,并不能说明一门编程语言好不好,或者一门语言所编写的代码数量多少。


    官方地址:https://www.tiobe.com/tiobe-index/

    PYPL排行榜5月份数据

    2020年5月在全球范围内,与一年前相比:
    Y3a0te.png

    PYPL结尾

    PYPL排行榜也是一个关于编程语言流行度的参考指标,其榜单数据的排名均是根据榜单对象在 Google 上相关的搜索频率进行统计排名,原始数据来自 Google Trends,也就是说某项语言或者某款 IDE 在 Google 上搜索频率越高,表示它越受欢迎。如果你相信这些来自众多开发者以及用户的选择,我们可以将 PYPL 作为一个参考,以帮助决定学习何种语言或 IDE,或者在新的软件项目中使用何种语言或数据库。


    官方地址:http://pypl.github.io/PYPL.html

    最后

    如果有什么想法或者别的可以打开本网站链接或者在小程序评论哦!
    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述

    展开全文
  • 2019年最新语言发布:Z 语言

    千次阅读 2019-05-13 10:44:17
    据《编程圣经》记载,上古时代,程序员们都用同一种语言编程, 他们齐心协力编写一个叫做“通天塔”的超级软件,这个软件能够破解宇宙的奥秘。 此举惊动了上帝,他看到程序员们这么齐心协力,要是真把这个软件做...

    640?wx_fmt=gif

    640?wx_fmt=jpeg

    作者 | 刘欣

    责编 | 伍杏玲

    本文经授权转载自码农翻身(ID:coderising)

     

    640?wx_fmt=png

     

    据《编程圣经》记载,上古时代,程序员们都用同一种语言编程, 他们齐心协力编写一个叫做“通天塔”的超级软件,这个软件能够破解宇宙的奥秘。

    此举惊动了上帝,他看到程序员们这么齐心协力,要是真把这个软件做出来,以后什么事情做不成呢?一定得想办法阻止他们!

    于是他就是来到人间,散播了各种编程语言给程序员,程序员开始各说各的语言,互相鄙视,互相攻击。

    C语言说Java运行慢、效率低,Java说C语言的指针容易出错,得手工管理内存。

    Python鄙视Java那啰嗦的语法,Java反击说Python运行慢,动态一时爽,重构火葬场。

    PHP说我是最好的语言。

    ......

    程序员们分裂了,各个部落之间发生了多次口水战,超级软件无法完成了。

    程序员的生活变得悲惨,不断地学习新的技术、新框架、新语言,经常加班, 到处996。

     

    640?wx_fmt=png

     

    某一天,一个叫做Dennis Gosling Heilsberg 程序员无意中在家里找到一个发黄的羊皮卷,上面歪歪扭扭地写着几个大字:21天精通Z语言。

    640?wx_fmt=png

    他翻了一会儿, 欣喜若狂:原来这就是那个统一世界的编程语言啊!

    Z语言迅速传播到了全世界。

    它运行起来速度超快,和C语言不相上下。它的语法简洁又优美,表达力强,比Python、Ruby有过之而无不及。

    它支持过程式编程、面向对象编程、函数式编程,以及你能想到的任何编程泛型。它有强大的元编程能力,可以和LISP相媲美,还没有LISP那样烦人的括号。

    更可贵的是,Z语言是静态类型,“动态一时爽,重构火葬场”的问题,根本就不存在。 配合着强大的、有智能提示的IDE,用起来不要太爽。

    Z语言的内存管理特别强悍,你只管去创建对象、申请空间,它会完美地去管理内存,垃圾回收时没有任何的停顿。

    它的类库也极其强大而丰富,日期时间操作、网络操作、文档操作、图像处理、数据库访问、Web框架、GUI......应有尽有。

    Z语言是如此厉害,从前端到后端,从移动开发到桌面开发,从云计算到大数据到人工智能,大家纷纷投入它的怀抱。

    前端程序员抛弃了JavaScript,后端程序员抛弃了Python、Java、Go、Ruby......微软抛弃了自家的几个亲儿子, 连“世界上最好的语言”PHP都不得不黯然退场。

    这门语言统一了编程世界,程序员们再也不会争吵了。

     

    640?wx_fmt=png

     

    用了一段Z语言之后,大家发现其实代码的质量没有任何改观,大量的程序员使用这个简单又强大的语言,写出的依然是低劣的代码。

    Dennis Gosling Heilsberg 后来才注意到羊皮卷夹缝中的几行小字:

    编程的关键根本就不是编程语言,而在于背后的思想,能不能分层、抽象,分而治之,能不能把变化的部分和不变的部分给隔离开,能不能让各个功能独立地变化和扩展, 汝等需认真学习、积极思考、多加实践。

    大家明白了:这编程和编程语言是两回事啊!

    除此之外,在羊皮卷的封底,有非常显眼的几个大字: 

    640?wx_fmt=png

    大家都不理解这是什么意思。

     

    640?wx_fmt=png

     

     

    Z语言超级简单,普通人一周就可以掌握, 培训班慢慢地全部倒闭了。

    看到这个行业的高薪,越来越多的人涌入,成为了光荣的程序员。

    老板们非常高兴,因为每天都能收到成千上万封简历,他们可以挑选的人越来越多,话语权越来越大。

    简历太多,HR筛选简历的方式也与时俱进,简单点儿的就抓阄,复杂点儿的按斐波那契数列来筛选......到后来连简历都不用了,随便抓几个人过来就可以干活。

    每当程序员说:老板,这个需求我们需要三周搞定!

    老板就会回答:用了Z语言还需要三周? 我就给你五天,搞不定换人! 会Z语言的人多的是,都在外边排队!还不信? 你到门口去看看!

    996变成了997,程序员们都处于水深火热之中。

    经过了程序员多次大规模的罢工、绝食抗议之后,终于恢复了8小时工作制,不过变成了三班倒。

    IT行业的平均工资不断降低,程序员彻底变成了码农!

     

    640?wx_fmt=png

     

    上帝看到码农的惨状,做了一个艰难的决定:彻底消灭程序员这个职业, 以后都用自然语言来编程,人人都能编程, 于是上帝正式推出了X语言......

    作者简介:刘欣,前IBM架构师,近20年从业经验,「码农翻身」公众号作者,畅销书《码农翻身》作者,用故事讲解技术是拿手好戏。 拨开技术迷雾,轻松理解技术本质,从「码农翻身」开始。

    用多少时间学习才够转行AI,看这份报告!

    https://edu.csdn.net/topic/ai30?utm_source=cxrs_bw

    640?wx_fmt=png

    640?wx_fmt=png

    作为码一代,想教码二代却无从下手:

    听说少儿编程很火,可它有哪些好处呢?

    孩子多大开始学习比较好呢?又该如何学习呢?

    最新的编程教育政策又有哪些呢?

    下面给大家介绍CSDN新成员:极客宝宝(ID:geek_baby)

    戳他了解更多↓↓↓

    640?wx_fmt=jpeg

     热 文 推 荐 

    ☞ 苏州到底有没有互联网?

    ☞ 我是如何将一个技术型产品搞砸的?

    ☞ Python、Java、C#、Perl 创始人聚首,编程语言要变天?

    中小学 AI 教育靠谱吗?50% 教师教学经验不足 1 年

    Oracle 痛裁程序员,阿里云坐收渔翁利?

    储备金被暗中挪用? USDT信任危机再爆发! 拿什么拯救你我的稳定币?

    ☞VMware vSphere 6.0 虚拟机运维常见问题排除

    ☞中国AI开发者真实现状:写代码这条路,会走多久?

    ☞补偿100万?Oracle裁900+程序员,新方案已出!

     

    
     
    你点的每个“在看”,我都认真当成了喜欢
    展开全文
  • 编程语言介绍及各语言特点

    千次阅读 2019-03-29 19:37:57
    C语言:是一种面向过程的语言 优点:代码量小,运行速度快,功能强大 第一个优点:c语言的代码量小。完成同样的功能,c语言编出来的程序容量比较小,其他语言编写容量比较大 比如 Microsoft Word 和 WPS,它们...

    C语言:是一种面向过程的语言


    优点:代码量小,运行速度快,功能强大


    第一个优点:c语言的代码量小。完成同样的功能,c语言编出来的程序容量比较小,其他语言编写容量比较大

    比如 Microsoft Word 和 WPS,它们同样都是办公软件,功能也差不多,但 WPS 的安装文件只有 50MB 左右,而 Microsoft Word 的安装文件超过 500MB,有的甚至接近 1GB。原因就是 WPS 的内核是用C语言编写的。


    C语言的第二和第三个优点是它的运行速度比较快和功能强大。如:UNIX 操作系统是用纯C语言编写的;Windows 操作系统的内
    核也是用C语言编写的;Linux 操作系统仍是用纯C语言编写的。这三大系统的内核都是用c语言编写的,原因:c语言运行速度快,其次是C语言可以直接访问硬件,所以功能强大。

    当建一个word 文档,我们只用在桌面点鼠标有右键,然后点击新建文档即可,在这个过程中,我们没有直接操控计算机硬盘,而是通过操作系统提供的“新建文档”等功能实现的。也就是说,操作系统给我们提供了一个界面,或者说给我们提供了一个操作的手段,通过这个手段我们可以删除文件、新建文件、打开文件或者修改文件。

    那为甚么不用java写呢?是因为java太慢的,而且java中没有指针,不能访问硬件,所以功能是不够的。指针是C语言的一大特色,不会指针就没参透C语言的精华。

    缺点危险性高,开发周期长,可移植性不强(相对于java)

    我们先看第一点。假如你写同样一个程序,在 Java 里面会报错,而在C语言里面是不会报错的。为什么?C语言的设计思想是:只要不是语法错误,一些问题编译器是可以自动完善的,而且认为这样写没有特殊含义,编译就可以通过。但 Java 不行:只要你这么写有歧义,或者说这样写不太好,那么它都会报错。

    比如C语言中你可以将一个浮点型数据赋给一个整型变量,编译时只会警告,因为会丢失精度,但是在 Java 中这样写就会报错,它在语法上就禁止你这样写。所以不同的语言对同样一个问题有不同的处理方式。

    因为有歧义的程序也可以通过,这样就会有很多漏洞,黑客往往会抓住这些漏洞进行攻击。所以说C语言比较危险。这也是为什么C语言比较难学的原因,因为你学完之后编写一个程序很可能就是错的,但又很难发现。C++从安全性上对C语言进行了升级。

    第二个是它的开发周期比较长。因为C语言是面向过程的语言,面向过程语言的一个特点就是写大项目的时候很容易“崩溃”。当代码上到 10 万行的时候很容易崩溃,会出现各种各样莫名其妙的错误。这时候就需要用另外一种思想将整个程序的框架重新设计一下,即用面向对象的思想设计。这也是C语言现在没有 Java 流行的原因。


    C语言的第三个缺点是可移植性不强。这个主要是针对 Java 的。Java 的可移植性太强了,所以就显得C语言的可移植性不强。什么叫可移植性?就是说 Java 程序在哪个机器上都可以运行,而且结果一模一样。而C语言就不行,C程序在其他机器上不一定能运行。而且就算能运行,结果可能也不一样。

     

    JAVA:一次运行处处编译。

    角度一:优点:简单、安全、稳定、跨平台
    缺点:需要运行环境、不适合开发桌面应用程序
    应用:BS结构的ERP系统、金融系统、电子商务系统、网站等
    几乎所有的银行系统和银行网站都是基于Java平台的,你可以访问看看。


    角度二:优势:(1)一次编写,到处运行。(2)系统的多平台支持。(3)强大的可伸缩性。(4)多样化和功能强大的开发工具支持。劣势:(1) 与ASP一样,Java的一些优势正是它致命的问题所在。正是由于为了跨平台的功能,为了极度的伸缩能力,所以极大的增加了产品的复杂性。(2) Java的运行速度是用class常驻内存来完成的,所以它在一些情况下所使用的内存比起用户数量来说确实是“最低性能价格比”了。从另一方面,它还需要硬盘空间来储存一系列的。java文件和.class文件,以及对应的版本文件。

     
    角度三:1、跨平台性,虽然是很好的优势,可以让JAVA在任何的系统中运行,但是前提是该系统要安装JAVA虚拟机,这样导致一些JAVA编写的桌面程序无法在一般的用户(没有安装JAVA虚拟机的用户)上使用
    2、JAVA的身后是SUN公司,提供及时的API更新,但是过多的版本导致JAVA的向下兼容性很差。而SUN公司在J2EE上的标准定义的并不是完美,导致在J2EE的开发中多数使用开源框架,开源框架是好东西,但是更新速度并不快。
    3、都说面向对象的语言先进与面向过程,JAVA是OOP语言,但是它适合的是BS系统,在WEB项目中JAVA的实力毋庸置疑,但是转到了底层的程序却无法同C++抗衡。

     

    JAVA大优点是开源,但是这往往也成了最大的缺陷了,无法定义一个好的标准使得开发时使用了框架,在新的程序员来到公司时必须先了解框架,延缓了开发的时间。

    原文地址:阿凡87


    Python:是一种解释,交互性,面向对象,跨平台的语言。

    优点:

    1、Python提供了更多的错误检查,有益于编写

    2、Python拥有更多的通用数据类型,适合大型项目,维护性好

    3、Python代码复用性好

    4、Python是解释语言,所以不需要编译器和连接,便于调试。

    5、可嵌入其他语言,于其他语言完美结合做混合开发。

    缺点:

    1、运行速度慢。机器

    2、代码开源,不能加密,既是优点也是缺点。

    3、架构选择多。

    C++:C语言的升级版。

    C++是以C语言为基础发展而来的一门面向对象语言。

    优点:

    1、代码复用性好。

    2、C++实现了面向对象程序设计。在高级语言中,处理速度是最快的,大多数的游戏都是用C++来写的。

    3、C++语言非常灵活,功能非常强大。C语言的优点是指针,C++的优点是功能和类层次化结构的设计。

    4、C++非常严谨,精确和数理化,标准制定很详细。

    5、C++语法思路层次分明,相呼应,语法结构也是明显的,明确的。

    缺点:

    1、C++比较难学,语言过度复杂,已经无法简化。

    2、标准库过度苍白。

    新手被指针困扰,中手(3~5年)被stl困扰,高手(5年以上)被boost困扰。stl比较难懂,大多数的项目禁止用stl。

    用boost编写的项目,要是开发者一旦离职,这个项目就废了,因为请一个会boost的高手要比重新编写项目花费的金钱多的多

     

     

     

     

     

     

    展开全文
  • 我为什么放弃Go语言

    万次阅读 多人点赞 2020-02-19 18:55:03
    我为什么放弃Go语言?有好几次,当我想起来的时候,总是会问自己:这个决定是正确的吗?是明智和理性的吗?其实我一直在认真思考这个问题。开门见山地说,我当初放弃Go语言,就是因为两个“不爽”:第一,对Go语言...

    我为什么放弃Go语言

    作者:庄晓立(Liigo)

    日期:2014年3月

    原创链接:http://blog.csdn.net/liigo/article/details/23699459

    转载请注明出处:http://blog.csdn.net/liigo

     

    有好几次,当我想起来的时候,总是会问自己:我为什么要放弃Go语言?这个决定是正确的吗?是明智和理性的吗?其实我一直在认真思考这个问题。

    开门见山地说,我当初放弃Go语言(golang),就是因为两个“不爽”:第一,对Go语言本身不爽;第二,对Go语言社区里的某些人不爽。毫无疑问,这是非常主观的结论。但是我有足够详实的客观的论据,用以支撑这个看似主观的结论。

    文末附有本文更新日志。

     

    第0节:我的Go语言经历

    先说说我的经历吧,以避免被无缘无故地当作Go语言的低级黑。

    2009年底,Go语言(golang)第一个公开版本发布,笼罩着“Google公司制造”的光环,吸引了许多慕名而来的尝鲜者,我(Liigo)也身居其中,笼统的看了一些Go语言的资料,学习了基础的教程,因对其语法中的分号和花括号不满,很快就遗忘掉了,没拿它当一回事。

    两年之后,2011年底,Go语言发布1.0的计划被提上日程,相关的报道又多起来,我再次关注它,[重新评估][1]之后决定深入参与Go语言。我订阅了其users、nuts、dev、commits等官方邮件组,坚持每天阅读其中的电子邮件,以及开发者提交的每一次源代码更新,给Go提交了许多改进意见,甚至包括[修改Go语言编译器源代码][2]直接参与开发任务。如此持续了数月时间。

    到2012年初,Go 1.0发布,语言和标准库都已经基本定型,不可能再有大幅改进,我对Go语言未能在1.0定型之前更上一个台阶、实现自我突破,甚至带着诸多明显缺陷走向1.0,感到非常失望,因而逐渐疏远了它(所以Go 1.0之后的事情我很少关心)。后来看到即将发布的Go 1.1的Release Note,发现语言层面没有太大改变,只是在库和工具层面有所修补和改进,感到它尚在幼年就失去成长的动力,越发失望。外加Go语言社区里的某些人,其中也包括Google公司负责开发Go语言的某些人,其态度、言行,让我极度厌恶,促使我决绝地离弃Go语言。

    在上一个10年,我(Liigo)在我所属的公司里,深度参与了两个编程语言项目的开发。我想,对于如何判断某个编程语言的优劣,或者说至少对于如何判断某个编程语言是否适合于我自己,我应该还是有一点发言权的。

    [1]: https://plus.google.com/+LiigoZhuang/posts/CpRNPeDXUDW

    [2]: http://blog.csdn.net/liigo/article/details/7467309

    第1节:我为什么对Go语言不爽?

    Go语言有很多让我不爽之处,这里列出我现在还能记起的其中一部分,排名基本上不分先后。读者们耐心地看完之后,还能淡定地说一句“我不在乎”吗?

    1.1 不允许左花括号另起一行

    关于对花括号的摆放,在C语言、C++、Java、C#等社区中,十余年来存在持续争议,从未形成一致意见。在我看来,这本来就是主观倾向很重的抉择,不违反原则不涉及是非的情况下,不应该搞一刀切,让程序员或团队自己选择就足够了。编程语言本身强行限制,把自己的喜好强加给别人,得不偿失。无论倾向于其中任意一种,必然得罪与其对立的一群人。虽然我现在已经习惯了把左花括号放在行尾,但一想到被禁止其他选择,就感到十分不爽。Go语言这这个问题上,没有做到“团结一切可以团结的力量”不说,还有意给自己树敌,太失败了。

    1.2 编译器莫名其妙地给行尾加上分号

    对Go语言本身而言,行尾的分号是可以省略的。但是在其编译器(gc)的实现中,为了方便编译器开发者,却在词法分析阶段强行添加了行尾的分号,反过来又影响到语言规范,对“怎样添加分号”做出特殊规定。这种变态做法前无古人。在左花括号被意外放到下一行行首的情况下,它自动在上一行行尾添加的分号,会导致莫名其妙的编译错误(Go 1.0之前),连它自己都解释不明白。如果实在处理不好分号,干脆不要省略分号得了;或者,Scala和JavaScript的编译器是开源的,跟它们学学怎么处理省略行尾分号可以吗?

    1.3 极度强调编译速度,不惜放弃本应提供的功能

    程序员是人不是神,编码过程中免不了因为大意或疏忽犯一些错。其中有一些,是大家集体性的很容易就中招的错误(Go语言里的例子我暂时想不起来,C++里的例子有“基类析构函数不是虚函数”)。这时候编译器应该站出来,多做一些检查、约束、核对性工作,尽量阻止常规错误的发生,尽量不让有潜在错误的代码编译通过,必要时给出一些警告或提示,让程序员留意。编译器不就是机器么,不就是应该多做脏活累活杂活、减少人的心智负担么?编译器多做一项检查,可能会避免数十万程序员今后多年内无数次犯同样的错误,节省的时间不计其数,这是功德无量的好事。但是Go编译器的作者们可不这么想,他们不愿意自己多花几个小时给编译器增加新功能,觉得那是亏本,反而减慢了编译速度。他们以影响编译速度为由,拒绝了很多对编译器改进的要求。典型的因噎废食。强调编译速度固然值得赞赏,但如果因此放弃应有的功能,我不赞成。

    1.4 错误处理机制太原始

    在Go语言中处理错误的基本模式是:函数通常返回多个值,其中最后一个值是error类型,用于表示错误类型极其描述;调用者每次调用完一个函数,都需要检查这个error并进行相应的错误处理:if err != nil { /*这种代码写多了不想吐么*/ }。此模式跟C语言那种很原始的错误处理相比如出一辙,并无实质性改进。实际应用中很容易形成多层嵌套的if else语句,可以想一想这个编码场景:先判断文件是否存在,如果存在则打开文件,如果打开成功则读取文件,如果读取成功再写入一段数据,最后关闭文件,别忘了还要处理每一步骤中出现错误的情况,这代码写出来得有多变态、多丑陋?实践中普遍的做法是,判断操作出错后提前return,以避免多层花括号嵌套,但这么做的后果是,许多错误处理代码被放在前面突出的位置,常规的处理逻辑反而被掩埋到后面去了,代码可读性极差。而且,error对象的标准接口只能返回一个错误文本,有时候调用者为了区分不同的错误类型,甚至需要解析该文本。除此之外,你只能手工强制转换error类型到特定子类型(静态类型的优势没了)。至于panic - recover机制,致命的缺陷是不能跨越库的边界使用,注定是一个半成品,最多只能在自己的pkg里面玩一玩。Java的异常处理虽然也有自身的问题(比如Checked Exceptions),但总体上还是比Go的错误处理高明很多。

    1.5 垃圾回收器(GC)不完善、有重大缺陷

    在Go 1.0前夕,其垃圾回收器在32位环境下有内存泄漏,一直拖着不肯改进,这且不说。Go语言垃圾回收器真正致命的缺陷是,会导致整个进程不可预知的间歇性停顿(Stop the World)。像某些大型后台服务程序,如游戏服务器、APP容器等,由于占用内存巨大,其内存对象数量极多,GC完成一次回收周期,可能需要数秒甚至更长时间,这段时间内,整个服务进程是阻塞的、停顿的,在外界看来就是服务中断、无响应,再牛逼的并发机制到了这里统统失效。垃圾回收器定期启动,每次启动就导致短暂的服务中断,这样下去,还有人敢用吗?这可是后台服务器进程,是Go语言的重点应用领域。以上现象可不是我假设出来的,而是事实存在的现实问题,受其严重困扰的也不是一家两家了(2013年底ECUG Con 2013京东的刘奇提到了Go语言的GC、defer、标准库实现是性能杀手,最大的痛苦是GC;美团的沈锋也提到Go语言的GC导致后台服务间隔性停顿是最大的问题。更早的网络游戏仙侠道开发团队也曾受Go垃圾回收的沉重打击)。在实践中,你必须努力减少进程中的对象数量,以便把GC导致的间歇性停顿控制在可接受范围内。除此之外你别无选择(难道你还想自己更换GC算法、甚至砍掉GC?那还是Go语言吗?)。跳出圈外,我近期一直在思考,一定需要垃圾回收器吗?没有垃圾回收器就一定是历史的倒退吗?(可能会新写一篇博客文章专题探讨。)

    2016年3月3日Liigo补记:直到2015年底,Go 1.5新GC发布后数月,仍获知有大陆圈内知名团队因为GC的原因考虑换掉Go语言,颇有感触。当软件系统逐步发展到更庞大更复杂的时候,Go语言的垃圾回收器(GC)就变成了指不定啥时候会出现的拦路虎,让人进退两难。进,暂时没有确切有效的技术手段对付响应延迟和内存暴涨;退,多年开发付出的心血付之东流损失惨重。语言选型之前多做调查分析,如果一定要用Go语言开发,控制系统规模和复杂度,避开底层的核心业务,可能是比较明智的选择。

    1.6 禁止未使用变量和多余import

    Go编译器不允许存在被未被使用的变量和多余的import,如果存在,必然导致编译错误。但是现实情况是,在代码编写、重构、调试过程中,例如,临时性的注释掉一行代码,很容易就会导致同时出现未使用的变量和多余的import,直接编译错误了,你必须相应的把变量定义注释掉,再翻页回到文件首部把多余的import也注释掉,……等事情办完了,想把刚才注释的代码找回来,又要好几个麻烦的步骤。还有一个让人蛋疼的问题,编写数据库相关的代码时,如果你import某数据库驱动的pkg,它编译给你报错,说不需要import这个未被使用的pkg;但如果你听信编译器的话删掉该import,编译是通过了,运行时必然报错,说找不到数据库驱动;你看看程序员被折腾的两边不是人,最后不得不请出大神:`import _`。对待这种问题,一个比较好的解决方案是,视其为编译警告而非编译错误。但是Go语言开发者很固执,不容许这种折中方案。

    1.7 创建对象的方式太多令人纠结

    创建对象的方式,调用new函数、调用make函数、调用New方法、使用花括号语法直接初始化结构体,你选哪一种?不好选择,因为没有一个固定的模式。从实践中看,如果要创建一个语言内置类型(如channel、map)的对象,通常用make函数创建;如果要创建标准库或第三方库定义的类型的对象,首先要去文档里找一下有没有New方法,如果有就最好调用New方法创建对象,如果没有New方法,则退而求其次,用初始化结构体的方式创建其对象。这个过程颇为周折,不像C++、Java、C#那样直接new就行了。

    1.8 对象没有构造函数和析构函数

    没有构造函数还好说,毕竟还有自定义的New方法,大致也算是构造函数了。没有析构函数就比较难受了,没法实现RAII。额外的人工处理资源清理工作,无疑加重了程序员的心智负担。没人性啊,还嫌我们程序员加班还少吗?C++里有析构函数,Java里虽然没有析构函数但是有人家finally语句啊,Go呢,什么都没有。没错,你有个defer,可是那个defer问题更大,详见下文吧。

    1.9 defer语句的语义设定不甚合理

    Go语言设计defer语句的出发点是好的,把释放资源的“代码”放在靠近创建资源的地方,但把释放资源的“动作”推迟(defer)到函数返回前执行。遗憾的是其执行时机的设置似乎有些不甚合理。设想有一个需要长期运行的函数,其中有无限循环语句,在循环体内不断的创建资源(或分配内存),并用defer语句确保释放。由于函数一直运行没有返回,所有defer语句都得不到执行,循环过程中创建的大量短暂性资源一直积累着,得不到回收。而且,系统为了存储defer列表还要额外占用资源,也是持续增加的。这样下去,过不了多久,整个系统就要因为资源耗尽而崩溃。像这类长期运行的函数,http.ListenAndServe()就是典型的例子。在Go语言重点应用领域,可以说几乎每一个后台服务程序都必然有这么一类函数,往往还都是程序的核心部分。如果程序员不小心在这些函数中使用了defer语句,可以说后患无穷。如果语言设计者把defer的语义设定为在所属代码块结束时(而非函数返回时)执行,是不是更好一点呢?可是Go 1.0早已发布定型,为了保持向后兼容性,已经不可能改变了。小心使用defer语句!一不小心就中招。

    1.10 许多语言内置设施不支持用户定义的类型

    for in、make、range、channel、map等都仅支持语言内置类型,不支持用户定义的类型(?)。用户定义的类型没法支持for in循环,用户不能编写像make、range那样“参数类型和个数”甚至“返回值类型和个数”都可变的函数,不能编写像channel、map那样类似泛型的数据类型。语言内置的那些东西,处处充斥着斧凿的痕迹。这体现了语言设计的局限性、封闭性、不完善,可扩展性差,像是新手作品——且不论其设计者和实现者如何权威。延伸阅读:Go语言是30年前的陈旧设计思想,用户定义的东西几乎都是二等公民(Tikhon Jelvis)。

    1.11 没有泛型支持,常见数据类型接口丑陋

    没有泛型的话,List、Set、Tree这些常见的基础性数据类型的接口就只能很丑陋:放进去的对象是一个具体的类型,取出来之后成了无类型的interface{}(可以视为所有类型的基础类型),还得强制类型转换之后才能继续使用,令人无语。Go语言缺少min、max这类函数,求数值绝对值的函数abs只接收/返回双精度小数类型,排序接口只能借助sort.Interface无奈的回避了被比较对象的类型,等等等等,都是没有泛型导致的结果。没有泛型,接口很难优雅起来。Go开发者没有明确拒绝泛型,只是说还没有找到很好的方法实现泛型(能不能学学已经开源的语言呀)。现实是,Go 1.0已经定型,泛型还没有,那些丑陋的接口为了保持向后兼容必须长期存在着。延伸阅读:HN网友抱怨Go没有泛型

    1.12 实现接口不需要明确声明

    这一条通常是被当作Go语言的优点来宣传的。但是也有人不赞同,比如我。如果一个类型用Go语言的方式默默的实现了某个接口,使用者和代码维护者都很难发现这一点(除非仔细核对该类型的每一个方法的函数签名,并跟所有可能的接口定义相互对照),自然也想不到与该接口有关的应用,显得十分隐晦,不直观。支持者可能会辩解说,我可以在文档中注明它实现了哪些接口。问题是,写在文档中,还不如直接写到类型定义上呢,至少还能得到编译器的静态类型检查。缺少了编译器的支持,当接口类型的函数签名被改变时,当实现该接口的类型方法被无意中改变时,实现者可能很难意识到,该类型实现该接口的隐含约束事实上已经被打破了。又有人辩解说,我可以通过单元测试确保类型正确实现了接口呀。我想说的是,明明可以通过明确声明实现接口,享受编译器提供的类型检查,你却要自己找麻烦,去写原本多余的单元测试,找虐很爽吗?Go语言的这种做法,除了减少一些对接口所在库的依赖之外,没有其他好处,得不偿失。延伸阅读:为什么我不喜欢Go语言式的接口(老赵)。

    1.13 省掉小括号却省不掉花括号

    Go语言里面的if语句,其条件表达式不需要用小括号扩起来,这被作为“代码比较简洁”的证据来宣传。可是,你省掉了小括号,却不能省掉大括号啊,一条完整的if语句至少还得三行吧,人家C、C++、Java都可以在一行之内搞定的(可以省掉花括号)。人家还有x?a:b表达式呢,也是一行搞定,你Go语言用if else写至少得五行吧?哪里简洁了?

    1.14 编译生成的可执行文件尺寸非常大

    记得当年我写了一个很简单的程序,把所有系统环境变量的名称和值输出到控制台,核心代码也就那么三五行,结果编译出来把我吓坏了:EXE文件的大小超过4MB。如果是C语言写的同样功能的程序,0.04MB都是多的。我把这个信息反馈到官方社区,结果人家不在乎。是,我知道现在的硬盘容量都数百GB、上TB了……可您这种优化程度……怎么让我相信您在其他地方也能做到不错呢。(再次强调一遍,我所有的经验和数据都来自Go 1.0发布前夕。)

    1.15 不支持动态加载类库

    静态编译的程序当然是很好的,没有额外的运行时依赖,部署时很方便。但是之前我们说了,静态编译的文件尺寸很大。如果一个软件系统由多个可执行程序构成,累加起来就很可观。如果用动态编译,发布时带同一套动态库,可以节省很多容量。更关键的是,动态库可以运行时加载和卸载,这是静态库做不到的。还有那些LGPL等协议的第三方C库受版权限制是不允许静态编译的。至于动态库的版本管理难题,可以通过给动态库内的所有符号添加版本号解决。无论如何,应该给予程序员选择权,让他们自己决定使用静态库还是动态库。一刀切的拒绝动态编译是不合适的。

    1.16 其他

    • 不支持方法和函数重载(overload)
    • 导入pkg的import语句后边部分竟然是文本(import ”fmt”)
    • 没有enum类型,全局性常量难以分类,iota把简单的事情复杂化
    • 定义对象方法时,receiver类型应该选用指针还是非指针让人纠结
    • 定义结构体和接口的语法稍繁,interface XXX{} struct YYY{} 不是更简洁吗?前面加上type关键字显得罗嗦。
    • 测试类库testing里面没有AssertEqual函数,标准库的单元测试代码中充斥着if a != b { t.Fatal(...) }
    • 语言太简单,以至于不得不放弃很多有用的特性,“保持语言简单”往往成为拒绝改进的理由。
    • 标准库的实现总体来说不甚理想,其代码质量大概处于“基本可用”的程度,真正到企业级应用领域,往往就会暴露出诸多不足之处。
    • 版本都发展到1.2了,goroutine调度器依旧默认仅使用一个系统线程。GOMAXPROCS的长期存在似乎暗示着官方从来没有足够的信心,让调度器正确安全地运行在多核环境中。这跟Go语言自身以并发为核心的定位有致命的矛盾。(直到2015年下半年1.5发布后才有改观
    • 官方发行版中包含了一个叫oracle的辅助程序,与Oracle数据库毫无关系,却完全无视两者之间的名称混淆。

    上面列出的是我目前还能想到的对Go语言的不爽之处,毕竟时间过去两年多,还有一些早就遗忘了。其中一部分固然是小不爽,可能忍一忍就过去了,但是很多不爽积累起来,总会时不时地让人难受,时间久了有自虐的感觉。程序员的工作生活本来就够枯燥的,何必呢。

    必须要说的是,对于其中大多数不爽之处,我(Liigo)都曾经试图改变过它们:在Go 1.0版本发布之前,我在其官方邮件组提过很多意见和建议(甚至包括提交代码CL),极力据理力争,可以说付出很大努力,目的就是希望定型后的Go语言是一个相对完善的、没有明显缺陷的编程语言。结果是令人失望的,我人微言轻、势单力薄,不可能影响整个语言的发展走向。1.0之前,最佳的否定自我、超越自我的机会,就这么遗憾地错过了。我最终发现,很多时候不是技术问题,而是技术人员的问题。

    第2节:我为什么对Go语言的某些人不爽?

    这里提到的“某些人”主要是两类:一、负责专职开发Go语言的Google公司员工;二、Go语言的推崇者和脑残粉丝。我跟这两类人打过很多交道,不胜其烦。再次强调一遍,我指的是“某些”人,而不是所有人,请不要对号入座。

    Google公司内部负责专职开发Go语言的核心开发组某些成员,他们倾向于闭门造车,固执己见,对第三方提出的建议不重视。他们常常挂在嘴边的口头禅是:现有的做法很好、不需要那个功能、我们开发Go语言是给Google自己用的、Google不需要那个功能、如果你一定要改请fork之后自己改、别干提意见请提交代码。很多言行都是“反开源”的。通过一些具体的例子,还能更形象的看清这一层。就留下作为课后作业吧。

    我最不能接受的就是他们对1.0版本的散漫处理。那时候Go还没到1.0,初出茅庐的小学生,有很大的改进空间,是全面翻新的最佳时机,彼时不改更待何时?1.0是打地基的版本,基础不牢靠,等1.0定型之后,处处受到向后兼容性的牵制,束手缚脚,每前进一步都阻力重重。急于发布1.0,过早定型,留下诸多遗憾,彰显了开发者的功利性强,在技术上不追求尽善尽美。

    Go语言的核心开发成员,他们日常的开发工作是使用C语言——Go语言的编译器和运行时库,包括语言核心数据结构和算法map、channel、scheduler,都是C开发的——真正用自己开发的Go语言进行实际的大型应用开发的机会并不多。虽然标准库是用Go语言自己写的,但他们却没有大范围使用标准库的经历。实际上,他们缺少使用Go语言的实战开发经验,往往不知道处于开发第一线的用户真正需要什么,无法做到设身处地为程序员着想。缺少使用Go语言的亲身经历,也意味着他们不能在日常开发中,及时发现和改进Go语言的不足。这也是他们往往自我感觉良好的原因。(2016年5月15日补记:2015年8月Go 1.5版本之后不再使用C语言开发。)

    Go语言社区里,有一大批Go语言的推崇者和脑残粉丝,他们满足于现状,不思进取,处处维护心中的“神”,容不得批评意见,不支持对语言的改进要求。当年我对Go语言的很多批评和改进意见,极少得到他们的支持,他们不但不支持还给予打击,我就纳闷了,他们难道不希望Go语言更完善、更优秀吗?我后来才意识到,他们跟乔帮主的苹果脑残粉丝们,言行一脉相承,具有极端宗教倾向,神化主子、打击异己真是不遗余力呀。简简单单的技术问题,就能被他们上升到意识形态之争。现实的例子是蛮多的,有兴趣的到网上去找吧。正是因为他们的存在,导致更多理智、清醒的Go语言用户无法真正融入整个社区。

    如果一个项目、团队、社区,到处充斥着赞美、孤芳自赏、自我满足、不思进取,排斥不同意见,拒绝接纳新方案,我想不到它还有什么前进的动力。逆水行舟,是不进反退的。

    2016年5月15日补记:@netroby:“Golang社区的神经病和固执,我深有体会。我曾经发过Issue,请求Golang官方,能为doc加上高亮,这样浏览器阅读文档的时候,能快速阅读代码参考。但是被各种拒绝. 他们的理由是很多开发者不喜欢高亮。” https://github.com/golang/go/issues/13178

    2016年5月15日补记:C++天才人物、D语言联合创始人Andrei Alexandrescu:“Go所走的路线在一些问题上持有极其强硬和死板态度,这些问题有大有小。在比较大的方面,泛型编程被严格控制,甚至贬低到只有"N"个字;有关泛型编程的讨论都是试图去劝阻任何有意义的尝试,这已经足够让人觉得耻辱。从长远来看,技术问题的政治化是一种极其有害的模式,所以希望Go社区能够找到修正它的方法。”  http://www.csdn.net/article/2015-12-20/2826517

    第3节:还有比Go语言更好的选择吗?

    我始终坚持一个颇有辩证法意味的哲学观点:在更好的替代品出现之前,现有的就是最好的。失望是没有用的,抱怨是没有用的,要么接受,要么逃离。我曾经努力尝试过接受Go语言,失败之后,注定要逃离。发现更好的替代品之后,无疑加速了逃离过程。还有比Go语言更好的替代品吗?当然有。作为一个屌丝程序员,我应该告诉你它是什么,但是我不说。现在还不是时候。我现在不想把这两门编程语言对立起来,引发另一场潜在的语言战争。这不是此文的本意。如果你非要从现有信息中推测它是什么,那完全是你自己的事。如果你原意等,它或许很快会浮出水面,也未可知。

    第4节:写在最后

    我不原意被别人代表,也不愿意代表别人。这篇文章写的是我,一个叫Liigo的80后屌丝程序员,自己的观点。你完全可以主观地认为它是主观的,也完全可以客观地以为它是客观的,无论如何,那是你的观点。

    这篇文字是从记忆里收拾出来的。有些细节虽可考,而不值得考。——我早已逃离,不愿再回到当年的场景。文中涉及的某些细节,可能会因为些许偏差,影响其准确性;也可能会因为缺少出处,影响其客观性。如果有人较真,非要去核实,我相信那些东西应该还在那里。

    Go语言也非上文所述一无是处,它当然有它的优势和特色。读者们判断一件事物,应该是优劣并陈,做综合分析,不能单听我一家负面之言。但是它的那些不爽之处,始终让我不爽,且不能从其优秀处得以完全中和,这是我不得不放弃它的原因。

     

     


     

    Liigo 2014-4-29 补记1

    Go语言社区还有一个很奇特的现象,就是中国社区独大,国外社区要小的多。有外国网友还专门写了一篇文章研究《为什么Golang中国社区独大》这个问题(文中也提到了我这篇博文)。通常来说,在IT和软件领域,向来都是国外先进国家引领技术潮流,然后国内缓慢跟进。而到了Go语言这里,恰恰反过来了,似乎暗示着在国外的主流软件开发技术人员并不怎么待见Go语言,Go只是在国内受到一帮人的盲目推崇而已,至于这帮人的眼光如何,反正我不看好。

    Liigo 2014-4-29 补记2

    著名的编程语言研究专家王垠写了一篇《对 Go 语言的综合评价》(晚于本博文发表约三五天),也是总体上持批判态度,看衰Go语言。读者们可以对照阅读。

    Liigo 2014-4-29 补记3

    Go语言的拥护者们,似乎连Go语言的“核心优势”都说不出几条。知乎上很有人气的一条问答《为什么要使用 Go 语言,Go 语言的优势在哪里》,连静态编译、GC、跨平台都拿出来说了(无视C/C++/Java),甚至连简单易学(无视Python/易语言)、“丰富的”标准库(跟谁比?敢跟Java/C#/Python比么?)、好用的工具链(gofmt)都扯出来了,可见除了“并发、网络”之外,他们也讲不出另外的什么核心优势了,只能靠一些周边的东西凑数。

    Liigo 2015-1-31 补记4

    全世界认为Go语言不好的可不只是我Liigo一个人。国外著名的问答网站Quora上面有个人气很高的提问,“为什么不要用Go语言”(英文网页),看看那排名最前的两个答案,以及广大程序员们给这两个答案的数百个“赞”,都足以说明Go语言自身的问题是客观存在的。人民群众的眼睛是雪亮的。

    Liigo 2015-4-1 补记5

    文中1.10(黑魔法)和1.12(接口)章节增加了两处“延伸阅读”链接,被引用的链接后面均有大量网友评论。此举主要是为了说明本文观点并非一家之言。

    Liigo 2015-5-29 补记6

    补充说明Go语言直到2015年下半年1.5发布后才将GOMAXPROCS设置为大于1的默认值(HN),他们文中承认之前一直默认设置为1是因为调度器不完善(与我此文最初发表时的猜测一致)。

    Liigo 2015-6-2 补记7

    补充两篇英文:Why Go Is Not Good(作者Will Yager重点批评了Go语言的设计不佳甚至是倒退),Leaving Go(作者Danny Gratzer放弃Go语言的原因主要是:没有泛型,充满黑魔法)。这两篇文章都是针对具体问题做具体分析的,与本文写作精神一致,务实不务虚。其中提到的对Go语言不满的地方,本文也多有涉及,结论类似。

    Liigo 2015-7-2 补记8

    前两天网上出现了一篇本文的驳文,《驳狗屎文 "我为什么放弃Go语言"》,作者是chai2010,请读者们参照阅读,顺便领略一下本文后半部分描述过的Go粉的"风采"。(这篇驳文至少有两个好处:1 它全文引用了本文(便于读者参照);2 使用了本文当时的最新版(包含了补记7)。)

    Liigo 2015-7-3 补记9

    文中1.5节(垃圾回收器/GC)增加 “Stop the world” 相关的三个链接。

    Liigo 2015-7-17 补记10

    文中1.11节(泛型)增加来自HN的延伸阅读链接,开发者们抱怨Go欠缺泛型支持。

    Liigo 2016-3-3 补记11

    文中1.5节(垃圾回收器/GC)末尾增加一段,再次提示开发者重视Go语言GC的潜在问题。

    Liigo 2016-5-15 补记12:

    文中第2节(我为什么对Go社区的人不爽)增加netroby和D语言联合创始人的现身说法。补充说明Go 1.5后不再使用C语言开发。

    Liigo 2020-2-19 补记13:

    本文末尾增加Golang 2.0泛型相关信息。

     

    关于对作者倾向性质疑的声明

    读者看到本文全都是Go语言负面性的内容,没有涉及一点Go语言好的地方,因而质疑作者的盲目倾向。出现这种结果完全是因为文章主题所限。此前本文末尾也简单提到过,评估一件事物,应当优劣并陈,优势项加分,劣势项减分,做综合评估分析。如果有突出的重大优势,则可以容忍一些较大的劣势;但如果有致命的劣势或多项大劣势,则再大的优势也无法与之中和。中国乒乓球界讲领军人物必须做到“技术全面,特长突出,没有明显弱点”,我甚为赞同。用这句话套用Go语言,可以说“技术不全面(人家自己说成简洁),有一点特长(并发),有明显的弱点(包括但不限于本文列出的这些)”。如此一来,优势都被劣势中和了,劣势还是那么突出,自然是得负分,自然是弃用,自然是没有好印象。我在这里可以说观点鲜明、态度明确,不和稀泥。与其看那些盲目推崇Go语言的人和文章,笼统的说“好”,不如也顺便看看本文,具体到细节地说“不好”。凡是具体到细节的东西,都是容易证实或证伪的,比笼统的东西(无论是"黑"还是"粉")可信性更高一些。

     

    关于对作者阴谋论的声明

    有某些阴谋论者(例如谢某),说我因一个Pull Request被Go开发者拒绝而“怀恨至今”,暗示此文是故意报复、抹黑Go语言。我对Golang有恨吗?当然是有的,那是一个不爽接一个不爽(如本文一一罗列的那些),逐步累积,由量变形成质变的结果,是我对Golang综合客观评估之后的主观态度,并非由哪一个单独的事件所主导。要说Pull Request被拒绝,Rust开发者拒绝我的PR次数还少吗?比如 https://github.com/mozilla/rust/pull/13014 和 https://github.com/liigo/rust/tree/xp (https://github.com/rust-lang/rust/issues/12842),要是再算上被拒的Issues,那就多的数不清了。我显然不可能因为某些个别的事件,影响到我对某个事物的综合评估(参见前文)。那本文是“故意抹黑”Go语言吗?我觉得不是,理由有二:1、这是作者的主观感受,2、这些感受是以许多客观事实为基础的。如果本文一一列出的那些现象,是不存在的,是虚构出来的,是凭空生成的,那么作者一定是“低级黑”。问题是,那些都是客观存在的事实。把事实说出来,怎么能叫“黑”呢?欢迎读者客观而详细的指正本文中的所有错误。

     

    关于Golang 2.0的泛型

    今天(2020年2月19日)看到HN的一篇关于 Go2 Generics 的讨论。有网友说到:

    Ken Thompson and Rob Pike are mostly out not at all involved with Go anymore. They are 2/3 of the original creators. It’s different people making the decisions now.

    我找到如下两个链接基本证实了Rob Pike确实已经淡出Golang的核心开发组:

    Rob Pike最近两年仅提交了4k行无关紧要的代码;Ken Thompson就更不用说了,许多年前就已经淡出;Russ Cox似乎也不太参与Go2相关的决策。如此看来,对于Go2的泛型而言,非技术方面的障碍已不存在,剩下只是技术性障碍。

    Ian Lance Taylor 上周(2020年2月13日)说到

    We're working on it. Some things take time.

     

    展开全文
  • C语言这么厉害,它自身又是用什么语言写的?

    万次阅读 多人点赞 2019-09-30 00:54:15
    这是来自我的星球的一个提问:“C语言本身用什么语言写的?”换个角度来问,其实是:C语言在运行之前,得编译才行,那C语言的编译器从哪里来? 用什么语言来写的?如果是用C语...
  • 当我们谈论 c,c++ ,Java,Python的时候,有些语言不仅很难,而且对于大多数软件开发者来说几乎是无法理解的。这些语言被称为深奥的编程语言,英文称为esoteric progr...
  • 初学者最容易学的六种编程语言

    万次阅读 多人点赞 2018-06-27 10:28:32
    学编程关键是要找到一种合适的语言。下面是为大家介绍初学者,最容掌握的六种编程语言。1.JavaScript可别将JavaScript与Java混为一谈。Java是一种可以撰写跨平台应用软件的面向对象的程序设计语言,即使是开发简单的...
  • 编程语言的分类与关系

    万次阅读 多人点赞 2018-07-05 13:28:39
    编译型语言:使用专门的编译器,针对特定的平台,将高级语言源代码一次性的编译成可被该平台硬件执行的机器码,并包装成该平台所能识别的可执行性程序的格式。特点:在编译型语言写的程序执行之前,需要一个专门的...
  • C语言是一个什么样的语言

    万次阅读 多人点赞 2018-03-09 16:07:24
    对于大部分程序员,C语言是学习编程的第一门语言,很少有不了解C的程序员。C语言除了能让你了解编程的相关概念,带你走进编程的大门,还能让你明白程序的运行原理,比如,计算机的各个部件是如何交互的,程序在内存...
  • 如何快速掌握所有编程语言

    万次阅读 多人点赞 2019-04-23 08:16:42
    附Java/C/C++/机器学习/算法与数据结构/前端/安卓/Python/程序员必读书籍书单大全: ...①【Java】学习之路吐血整理技术书从入门到进阶最全50+本(珍藏版): ②【算法数据结构+acm】从入门到进阶吐血整理书单50+本...
  • 在C语言中 ¬∧∨这些符号什么意思

    千次阅读 2008-10-20 09:09:00
    b∨b=b a∨a=a b∧a=a;或运算是 a∨b=a b∧b=b a∧a=a 这三个都是位运算:¬是取非运算 交你个小窍门 没啥子好多的了 好好看看 里面有详细的解释 这就是在逻辑运算中常用到的短路判断 |||ls的已经说的很清楚了 b∨a=...
  • 科学的从文本数据中提取语义并学习是自然语言处理(NLP)研究的一个课题。NLP每天都会产生新的令人兴奋的结果,并且它是一个非常大的领域。然而,在与数百家公司合作之后,Insight团队发现一些关键的实际应用程序比...
  • EGL(Embedded Graphics Library) 一、概念说明 OpenGL ES 命令需要渲染上下文和绘制表面才能完成图形图像的绘制。 渲染上下文: 存储相关OpenGL ES 状态。 绘制表面: 是⽤于绘制图元的表面,它指定渲染所需要的缓存...
  • 动态语言与静态语言

    2020-07-21 21:49:27
    动态语言也称为脚本语言,是介于标签语言(如HTML,XSLT,VML)和静态语言(如C++、C#、Java,也称编译语言)之间的语言。JavaScript、PHP、Perl、Ruby等都是动态语言。动态语言无需编译,它由解释器动态解释执行,...
  • 世界上有多少种语言

    千次阅读 2019-03-27 17:55:23
    所以,我以为我大中华语言肯定不止一种,但是也不会太多吧。突然有一天,我惊呆了,因为我发现我们国家的语言据说有300多种。而世界上语言最多的一个国家居然有800多种。我瞬间凌乱了,这 这 这 这咋交流啊,关键是...
  • 九种编程语言大对比

    万次阅读 多人点赞 2017-03-20 16:21:59
    图解九种主流编程语言,从Python、Java到Objective-C。码农世界,哪种才是最好的编程语言? 这9张信息图囊括了九种主流编程语言:Python、Java、C、C++、JavaScript、C#、Ruby、PHP以及Objective-C。对于每种编程...
  • Go语言编程入门

    万人学习 2018-10-22 21:38:04
    主要介绍Go语言相关的介绍和基础语法,学会开发环境的搭建和使用Go语言简单的编程。本视频教程适合Go语言初学者。
  • 下载地址:Windows 7 SP1 多国语言包(MUI language packs)官方下载
  • 计算机目前九种编程语言大对比

    万次阅读 多人点赞 2018-07-23 16:01:11
    图解九种主流编程语言,从Python、Java到Objective-C。码农世界,哪种才是最好的编程语言? 这9张信息图囊括了九种主流编程语言:Python、Java、C、C++、JavaScript、C#、Ruby、PHP以及Objective-C。对于每种编程...
  • 什么是编译型语言和解释型语言

    万次阅读 多人点赞 2018-08-02 08:41:28
    计算机是不能理解高级语言的,更不能直接执行高级语言,它只能直接理解机器语言,所以使用任何高级语言编写的程序若想被计算机运行,都必须将其转换成计算机语言,也就是机器码。 计算机是不能理解高级语言的,更...
1 2 3 4 5 ... 20
收藏数 3,593,734
精华内容 1,437,493
关键字:

语言