Go/Java/C++杂谈 - 蘭陵N散記

作者:JerryXia | 发表于 , 阅读 (0)
阅读:2892 字 ~6分钟最近公司层面在摧广Go语言,我作为平台DU的首席编程,参加其中一些讨论。虽有5年+的C++开发经验,也有5年+的Java开发经验,Go差不多也有2年时间。但个人仍觉得语言不是解决业务问题的银弹,换种语言也不可能就能提升开发效率。从语言层面来说,各种语言都有它们的优缺点,有不同的使用场景;而一个语言是否能大规模应用,往往是它的整个生态。个人虽比较喜欢Go,但从目前刚兴起的生态来看,也不敢在产品中大面积推广它。下面就从各语言概要来说说他们。
Go首先要肯定的,Go语言在并发方面,goroutine与channel机制提供了语言层面的轻量组的并发机制,使得并发编程变得较为简单;在性能方面,由于它直接编译为机器码,提供了据说超过Java的运行性能(1.6版本在计算方面部分已超过Java);在内存资源点用方面,相对Java或其它带有虚拟机的语言来说,具备明显的优势;在语法方面,继承了C的简洁,严谨的编码要求,以及吸收像Python动态语言特性,在对象构建,序列化提供简洁的表态方式,而这些代码可能占据10%~20%的代码量,尤其对于处理数据,配置,协议...阅读全文

Goroutine陷阱 - 蘭陵N散記

作者:JerryXia | 发表于 , 阅读 (0)
阅读:1797 字 ~4分钟Go在语言层面通过Goroutine与channel来支持并发编程,使并发编程看似变得异常简单,但通过最近一段时间的编码,越来越觉得简单的东西,很容易会被滥用。Java的标准库也让多线程编程变得简单,但想当初在公司定位Java的问题,发现很多的同学由于没有深入了解Java Thread的机制,Thread直接New从不管理复用,那Goroutine肯定也要面临这类的问题。
Goroutine泄漏问题Rob Pike在2012年的Google I/O大会上所做的“Go Concurrency Patterns”的演讲上,说道过几种基础的并发模式。从一组目标中获取第一个结果就是其中之一。
func First(query string, replicas ...Search) Result {c := make(chan Result)searchReplica := func(i int) { c <- replicas[i](query) }for i := range replicas {go searchReplica(i)}return <-c}在...阅读全文

Pandoc+Mardown生成Web Slide - 蘭陵N散記

作者:JerryXia | 发表于 , 阅读 (0)
背景在我司PPT被称为胶片。一层层的汇报都是胶片承载,胶片也是做得非常漂亮。像我所在领域,架构师主要产出也是胶片,俨然无胶片就无架构。一方面个人非常羡慕胶片写得好(内容与外观)的人,另一方面觉得像使用MS的PowerPoint几乎要把一半的精力放在外观而不是内容上。甚至感觉到为了一个格式、一个颜色,调整都需要老半天时间。大家的胶片都做得漂亮,而你不可能也就只草草准备,尤其是给领导的胶片,人在江湖,身不由已。但做一名技术人员,内心还是比较抵触形式大于内容的胶片。昨天,一名同事给我展示了一个由Markdown生成Slide,给人感觉是耳目一新。
Markdown是一种内容与形式的分享的轻量级标记语言,受到越来越多的人喜欢,只要只简单的文本编辑器,都能书写文本内容。那有什么工具能快速方便地生成Slide呢。Markdown本身是为了方便输出到HTML格式。而HTML+CSS+JS是一个开放的,可扩展的技术。自然Markdown也可以通过工具生成像PPT一样可以上下翻页的HTML Slide,同样借助CSS与JS的结合,Slide一样可以做得像PPT一样格式漂亮,动作酷炫。
PandocP...阅读全文

为什么是Go - 蘭陵N散記

作者:JerryXia | 发表于 , 阅读 (0)
HW的执行力就是强,推广Go也是雷力风行,几乎目前是全员皆Go。作为一名其中的参与者,也知目前Go若大规模应用还是有很多的不成熟,风险也非常大。那为什么我司还是选择Go?也来谈谈我个人对为什么选择Go的认识,仅是个人拙见,不代表我司官方的观点。
背景Go语言主创人员之是C语言与Linux的发明人,所以Go的语法在C的基础之上取众家之精华:
主要继承了C(func, struct,指针)包管理吸取自Java(package, import)多态吸取自Python与Ruby(duck type)并发吸取自Limbo(CSP模型)。同时是一种多范式的编程语言,集众多编程范式之所长,并以自己独到的方式将它们融合在一起:
面向过程(if,switch,for…)面向对象(部分支持):封装(struct),继承(匿名组合),多态(隐式Interface,即duck type)函数式(部分支持):闭包,函数作为参数(入参,返回值)Go语言打的组合拳:
简单易用 vs Python机器码性能 vs C/C++跨平台/标准库 vs Java并发模型(goroutine/channel)vs Er...阅读全文