西西河

主题:【原创】介绍一下Go语言(1)之前的话 -- zllwy

共:💬92 🌺231
全看树展主题 · 分页首页 上页
/ 7
下页 末页
家园 GC总是要慢一点的

每次引用计数稍微花点时间,扫垃圾的时候比较麻烦一点,stop the world比较好玩了,以前java被人诟病的时候,就有一个例子拿stop the world说事儿,说您敢用java写first-person shooting的联网游戏么?您正打到关键时刻,敌人在面前,然后您的JVM说,那啥,您等会儿啊,我把垃圾扫扫先...

Go的run time除了GC,还干点啥呢?动态优化弄不弄?JVM带动态优化,那可是越用越快。

家园 直接改python编译器的lex当然行

不过弄个预处理程序也行,直接把大括号对里面的东西按编辑器格式化处理,变成缩进再喂给编译器。

家园 js的语法还是会给编译器一点麻烦的

一样是object.field的语法,strong type的语言就可以直接编译成间址,js这样的就必须runtime去查找了。一样是转化成native code执行,间址还是比查找快的。

家园 instruction reordering

不应该对执行结果有影响,否则这个优化就是错的了。另外硬件,特别是多CPU或者多核的架构,应该有自己在硬件层的cache coherency保证才是。就我所知,intel的CPU在多CPU时代就有专门的部分来保证跨CPU的内存一致性问题,到了多核时代,在memory bus以内,也有硬件来确保各个核心之间的缓存一致性。当然出了memory bus就没关系了,因为从memory bus看,里面有几个核心,对内存都是一样的。

家园 可以分析一下python的twisted与go的比较
家园 是马甲么?

牵着一只大猫

大龙猫

家园 我是看EHCACHE

我是看EHCACHE才懂得volatile.

谢谢推荐Go,很喜欢.打算写一个Load Distributor.

家园 是的,现在编辑工具都很强大
家园 是啊,写短代码,应该也会让程序更好读吧

不过有些东西实在太复杂了,可能麻烦点

家园 exception handling

突然意识到Go没有try-catch-exception,而是用panic/defer/recover.Google 一下发现很多有意思的讨论.

http://stackoverflow.com/questions/1736146/why-is-exception-handling-bad

http://groups.google.com/group/golang-nuts/browse_thread/thread/1ce5cd050bb973e4?pli=1

家园 关于这个type,我还是有些疑问

有多少是从运行的性能考虑,有多少是从编程便利的角度考虑?或者说,哪个会更重要一些?

我一直不太明白,那些解释型的,为什么就不能搞成编译性的呢?比如象 php 这样的,要编译成 opcode,然后再去执行,难道就不能直接编译成象exe那样的么,最起码,也可以提供这么个选项啊。为什么就没有。如果是为了多个平台通用,既然能搞出在不同平台上的解释器,没有道理搞不出不同平台上的编译器啊。

家园 试着回答一下

我想关于type system的设计,主要是从为程序员提供比较好的工具考虑的,目的是能精练,准确地表达程序的逻辑,同时保证程序的安全性,可读性等其他方面的要求。性能考虑也有。比如Go非常强调语法的简单性,使得编译器设计比较简单,编译速度也比较快。

至于解释型和编译型的区别,其实界限也不是那么明确的。比如Java,gcc就提供了编译器gcj。虚拟机起到了把语言本身和平台隔离的作用,这样虚拟机和编译器的实现都相对比较简单一点。另外,很多解释型语言的一些特征,在虚拟机上实现容易一些。其实对这样的语言进行编译也不见得就有什么优势。虚拟机目前的技术已经能够实现比较好的性能,更何况虚拟机天生就有很多静态编译做不到的能力。比如动态优化等等。

家园 【原创】介绍一下Go语言(5)其他特性

Go的一个设计目标是在尽量简单的基础上,提供一组正交(orthogonal)的语言特性。使得这些语言特性的应用也比较简单明了。我对Go的感觉就是一套趁手好用的工具,每件工具都有自己独立的功能,都设计得比较精巧,而它们又可以通过简单的结合来提供强大的综合功能。这里把我喜欢的一些语言特性罗列一下:

1 函数的多返回值。一个函数可以返回多个值。类似于python可以返回一个tuple。这个特性太方便了。所以我把它排在第一位。:-)当然由于这个特性,Go的call convention和C不一样。Go的compiler(非gccgo)不能和C的call convention兼容,在和C进行连接的时候要通过特殊的步骤(cgo)。目前Go可以调用C的函数(通过SWIG可以调用C++)。但反过来还不行。

2 Array slice。也和python类似的功能一样,可以用来访问一个array的不同区段。

3 强大的for和switch。Go里面没有了while和do。for可以表达任何循环。和range结合起来基本起到了可以iterate各种type的作用。switch实际上起到连串else if的作用。

4 内置map。这个很多dynamic language都有,不过static language的还不多见。也算是抄python吧。

5 closure。这个不用说了吧。

6 defer。有点像Java的finally。不过可以写在函数任何地方。感觉红来保证资源的释放比finally更方便。

7 garbage collection。这个也列在这里吧。

8 程序本身的UTF-8支持。

9 panic/recover用来处理runtime exception。类似于exception。感觉Java里面exception有点被滥用了。exception应该只用来处理罕见的错误,而不应该用来控制流程。我觉得多返回值很大程度上已经使得错误处理方便很多了。

10 变量定义的短形式。你可以写

a := 1

自动就把a定义为int了。可以少些很多废话。

11 变量类型定义。终于把C/C++的变态格式改过来了。类型的表达式放在了变量名的后面,初始化放在最后。清楚,简单。

12 简单的变参定义。又抄了python。

其他还有很多小的特性。感觉用Go写程序比较轻松简单。我想跟C接近,又消除了C的很多不足,是最大的原因吧。

家园 【原创】介绍一下Go语言(6)没有的特性

最后讨论一下Go没有的一些特性。这些特性在其他语言中很常见,但Go还没有实现。

1 generics。这个可能讨论最多了。对于很多人来说,没有generics就没法写程序了。Go内置了map,所以很大一部分对generics的需要似乎就满足了。另外,可以用interface{}来实现任意类型的container,然后自己unboxing,所以实现generics也不是那么紧急。当然,性能上generics可能要好一些。我个人无所谓,generics似乎对我没有那么重要。

2 Union类型。似乎对于写某些系统程序比较重要。对大部分应用没有太大影响。

3 oeprator method。好像对科学计算比较重要。一般的应该没有也没什么。

4 exception。Go提供了panic/recover起到了部分作用。完整的exception机制对于我来说似乎不是很重要。

5 method/operator overloading。主要好像是从Go语言本身的简单性,容易实现来考虑的。

家园 11 变量类型定义。

C/C++的格式为什么变态?

全看树展主题 · 分页首页 上页
/ 7
下页 末页


有趣有益,互惠互利;开阔视野,博采众长。
虚拟的网络,真实的人。天南地北客,相逢皆朋友

Copyright © cchere 西西河