Go推出的主要目的之一就是G内部大东西太多了,系统级开发巨型项目非常痛苦,Go定位取代C++,Go以简单取胜(KISS)

以前为了做compiler,研读+实现了几乎所有种类的语言。现在看语法手册几乎很快就可以理解整个语言的内容。后来我对比了一下go和rust,发现go的类型系统简直就是拼凑的。这会导致跟C语言一样,需要高超的技巧才能写大程序。而rust则没有这种问题,每个部分的组成都很和谐。
----------------------------------------------------------------------

Rust是挺优秀的,函数式本来就比命令式来的优雅。但同时也要看到,两种语言的定位不同。Go的定位是取代C(或C++),做所有软件的基础。而Rust想是一种划时代的语言,如果成功,将是颠覆性的。

但同时也应该看到,
Go的目标简单,现在也比较稳定,可以使用了
而Rust虽然很强大,但它还处于很早期的阶段,一切还有待于发展。

如果Rust能实现其大部分特性,将是十分优秀的语言,期待。

----------------------------------------------------------------------

语言之争很费时间的,没必要和这帮人说。每个人都有自己的偏好,有的人就对Java来电,有的人就不喜欢Go,你说啥都没用的。自己用着舒服就醒了。
顺便提醒你一下,意见有没有道理不是说某个compiler大拿就能判定的。首先是不是大拿,多大拿另说,如果你问rob
pike,他肯定说Go比Rust好,rob和这个人比谁更大拿?Linus说C++ sucks,难不成C++程序员全换行业了?

自己专心做自己的事情就是了。
至于那句“作者竟然说学完C++的时间和用go写64个开源项目的时间一样多”,呵呵,他明显没看懂这个玩笑。

是么?Go team的人里面,应用开发的大拿其实还是不少的
Go推出的主要目的之一就是G内部大东西太多了,系统级开发巨型项目非常痛苦,所以估计Go开发时和不同team都有沟通交流,要address的问题很多就是巨型开发team中的实际问题。举个例子,Go的interface就是专为大型应用项目设计的,原因大家也都知道吧。Go的优点在实际大型应用项目已经体现,而且不是说除了Google没人用,用了的人反馈是什么样的,大家估计也有所耳闻

Dart team起点就不一样,因为javascript实在太......那个了。但Dart始终还是主营前端吧。这俩基本就没法比较。

我用Go并不是因为Ken Thompson、Rob Pike这帮人,我觉得C++ sucks也不是因为Linus。那就是我用过之后喜欢还是不喜欢而已。
不要迷信权威。说服别人用Go最好的办法不是拉出一帮名人说观点,而是做一个牛逼的项目和库出来,让别人主动想用
----------------------------------------------------------------------

这个,GUI库明显不在Go Team的开发日程之内。我觉得用swig做一个其它GUI库(比如Qt)的绑定,像pyQt那样才是比较好的模式
----------------------------------------------------------------------

现在对 GO 语言,我关注挺长时间,感觉作者们控制的很严格,很多很好的建议都被拒绝了,参见 golang-nuts 邮件组。有些建议,他们只需要做很少的工作,就能有很好的效果,他们就是拒绝改进。
----------------------------------------------------------------------
比如什么?我猜想你是说‘#!‘么?
我觉得控制得严格些有好处。因为加入一个特性简单,但是你要想从语言中去掉一个已有的特性就难了。

如果一个特性可以被外部有效地实现(比如用gorun实现#!),那么就没有必要增加语言本身的复杂性。
所以不是Go team懒惰,连一些很简单实现的建议都不采纳(#!)或者说拒绝改进。

我认为Go还是要简单、一致(正交性)上取胜的。这符合Unix界软件的一贯风格,换句话说就是KISS原则。

----------------------------------------------------------------------
参考:https://groups.google.com/forum/#!topic/golang-china/aX61jyZXBws%5B1-25-false%5D

时间: 2024-08-10 08:50:52

Go推出的主要目的之一就是G内部大东西太多了,系统级开发巨型项目非常痛苦,Go定位取代C++,Go以简单取胜(KISS)的相关文章

8月最新基于kubernetes的应用编排实践

本文根据8月22日腾讯云研发工程师颜卫在DockOne社群线上直播分享整理.颜卫来自腾讯云容器服务团队,现在主要从事腾讯云容器服务应用编排和微服务相关开发工作. 1 今天交流的话题主要会分为三部分 1.为什么需要应用编排 2.kubernetes社区应用编排发展现状 3.腾讯云容器服务应用编排的实践这几个方面做介绍. 在腾讯云容器服务应用编排的实践部分,主要会涉及1.配置管理,2.应用模板管理,3.基于应用的服务组管理等内容. 为什么需要应用编排: "微服务"架构大家都知道,他具有开发

定论——软件开发的方法论探讨

http://www.jianshu.com/p/9593bd7b28d9 一.消除隐喻 1.隐喻 软件开发这件事情,出现得很晚.距今只有几十年的时间,关于它的定义,我们可以简单地说:"就是把软件做出来." 这基本上等于什么都没有说.而软件开发究竟是怎么回事,大家也没有搞明白,于是隐喻就派上用场了.当你要向一个完全没有概念的朋友,解释什么是软件开发的时候,你无法向解释建筑工程那样把他带到现场去看--案件开发的现场,你的朋友会以为软件开发就是一群人坐在电脑前面打键盘--你只能打比方:它就

linux内核空间与用户空间信息交互方法

linux内核空间与用户空间信息交互方法 本文作者: 康华:计算机硕士,主要从事Linux操作系统内核.Linux技术标准.计算机安全.软件测试等领域的研究与开发工作,现就职于信息产业部软件与集成电路促进中心所属的MII-HP Linux软件实验室.如果需要可以联系通过[email protected]联系他. 摘要:在进行设备驱动程序,内核功能模块等系统级开发时,通常需要在内核和用户程序之间交换信息.Linux提供了多种方法可以用来完成这些任务.本文总结了各种常用的信息交换方法,并用简单的例子

Linux程序包管理之rpm包管理

Linux程序包管理 软件包管理 功能:将编译好的程序的各组成文件打包成一个或几个程序包文件,为了方便的实现程序包的安装.升级.卸载.查询.校验.数据库维护. API:Application ProgramInterface应用程序接口: ABI:Application BinaryInterface应用二进制接口: Unix-like和linux在ABI层次是相同的 linux程序包:ELF格式: 但是与Windows相差甚远 windows程序包:exe,msi格式: API层次兼容不一定A

Ready? Go! 下篇:多核并起

Google于2009年11月发布了Go编程语言,旨在同时具备C语言的效率和Python的简便.今年3月,Go开发组正式发布了Go语言的第 一个稳定发行版:Go version 1,简称Go 1.这意味着Go语言本身和它的标准库已经稳定下来,开发者现在可以将其作为一个稳定的开发平台,构建自己的应用.我们用两篇文章介绍Go语言的特性和应 用,本文是其中的第二篇. 上一期介绍了Go语言的部分语法和类型系统.本篇重点介绍Go语言对于并行的处理和go工具链.本文中的完整代码可以在github上找到. 并

2018-3-11Linux系统管理(10)(11)程序包初步概念及后端管理工具

本章我们来介绍Linux程序包的概念及安装校验卸载等管理操作. 一.概述 我们不止一遍讲述过操作系统的概念,首先是硬件,计算机它的计算能力都是在硬件设计逻辑上实现的,而这个设计硬件设计逻辑不同厂商所生产的硬件芯片及接口的方式都不一样.那么在向上一层就是将硬件规格给封装起来的操作系统层,它将硬件的差异化和复杂化而由丑陋的接口隐藏起来,向上提供了一个简洁而又统一的接口,我们称之为系统调用(system call),但系统调用仍然很底层,为了加速开发和易于维护,在系统调用的半层接口上又封装了一个更复杂

第8天压缩 xarges sed命令 yum配置 rpm包文件修复

seq 10 seq 10 |xargs echo 1 2 3 4 5 默认跟 echo \n换成空格 [[email protected] ~]#seq 1 10 |xargs echo [[email protected] ~]#seq 1 10 |xargs 1 2 3 4 5 6 7 8 9 10 [[email protected] ~]#seq 1 10 |xargs echo 1 2 3 4 5 6 7 8 9 10 [[email protected] ~]# xargs 默认是

02-大鸭梨博客系统数据库设计及Dapper的使用

毫无疑问,数据库的设计在一个系统中起了至关重要的作用.我们都知道,系统设计分为两部分,或者说是两个阶段,即数据库设计和功能设计.构建一个完善的系统需要这两个阶段的充分考量.周密设计.合理联接以及密切配合.数据库设计是整个系统的根基,它关乎系统功能的实现.稳定性.扩展性等多个方面,可见数据库设计的重要性. 那么好的数据库设计应该具备什么样的基本条件呢,大致有这么几点: 1.充分体现系统的需求 不管是数据库设计还是功能设计,我们最终的目的都是要实现客户的业务需求,所以数据库设计的第一准则就是要符合业

rpm包及rpm 命令详解

一.软件运行环境 API: Application Programming Interface 国际标准 POSIX: Portable OS 执行流程: 程序源代码 –> 预处理 –> 编译 –> 汇编 –> 链接 静态编译:将编译完成的程序代码以及所依赖的库文件一起打包使用 共享(动态)编译:使用独立的外置的库文件,与系统中的其他程序共享库,linux 中以 .so结尾,译为共享对象 ABI: Application Binary Interface 应用程序二进制接口 (Wi