Go 摆脱了 C,又惹上了 Java? - PHPERZ中文资讯站 - 胜博发888手机平台

发布于 2015-05-29 08:50:09 | 270 次阅读 | 评论: 0 | 来源: 网友投递

这里有新鲜出炉的GO语言教程,程序狗速度看过来!

Go语言

Go是一种新的语言,一种并发的、带垃圾回收的、快速编译的语言。Go是谷歌2009年发布的第二款编程语言。2009年7月份,谷歌曾发布了Simple语言,它是用来开发Android应用的一种BASIC语言。


talks.golang.org 前几天放出了 PPT《Go in Go》和 《The State of Go》讲解最近 Go 的开发动态和成果:

随着 Go 1.5 版本的开发,现在整个系统都是使用 Go 编写的(有一小部分汇编)

C 已经成为过去时了。

Go 1.5 计划在 8 月份发布,将会尝试支持 iOS。(Go 1.4 已经正式支持 Android

4月份进行的 NYJavaSIG 聚会上 Go 团队的技术主管经理分享了《Go for Java Programmers》,为 Java 程序员提供的 Go 入门指南,正式向 Java 领域进军了吗?

 

不知道现在大家的看法是否有些改变。

《Go in Go》

随着 Go 1.5 版本的开发,现在整个系统都是使用 Go 编写的(有一小部分汇编)

C 已经成为过去时了。

注: gccgo 仍然很强大
这篇文章主要探讨原始编译器 gcc

为什么之前用 C 编写?

启动

(而且 Go 的主要目的不是作为一个编译器实现语言)

为什么编译器使用 Go 重写?

不单单是验证,我们还有更多实际的原因:

  • Go 比 C 容易编写(实际上)

  • Go 比 C 容易调试(即使没有调试器的情况下)

  • Go 将成为你唯一需要会的语言,鼓励贡献

  • Go 有更好的模块化,工具链,测试工具,配置工具等等

  • Go 很简单就能进行并行操作

虽然看起来很多优势,但是还是夸的太早了:)

设计文档: golang.org/s/go13compiler  

为什么运行时也是用 Go 重写?

我们有自己的 C 编译器来编译运行时,我们需要一个带有跟 Go ABI 一样编译器,比如 segmented stacks。

使用 Go 编写可以摆脱 C 编译器的劣势,这是比使用 Go 重写编译器还重要。

(所有使用 Go 重写编译器的理由都可以作为使用 Go 重写运行时的理由)

限制运行时只用一种语言编写,更容易进行集成,管理 stack 等等操作。

跟往常一样,简化是首要的考虑因素。

历史

为什么我们要有完全属于自己的工具链?

  • 我们的 ABI?

  • 我们自身的文件格式?

Go 的大规模重大改进要比 GCC 或者 LLVM 要更困难。

news.ycombinator.com/item?id=8817990

重大改进

由于使用自身工具简化的功能和使用 Go 重写后的一些改进:

  • linker 重构

  • 新垃圾收集器

  • 堆叠图

  • 连续栈

  • 写屏障

最后三个都不可能用 C 实现:

  • C 是非类型安全的

  • 因为最佳化而造成堆栈槽混淆

(Gccgo 很快会有 segmented stacks 和 imprecise (stack) collection )

更多技术细节改进请看 PPT 原文。

启动

不需要 C 编译器,只需要一个 Go 编译器

因此需要从 1.5 的源代码去下载安装构建 Go

我们使用 Go 1.4+ 作为基础库来构建 1.5+ 的工具链

详情: golang.org/s/go15bootstrap  

未来

未来仍然有很多任务要完成,但是 1.5 已经完成的差不多了。

未来的计划:

  • 更好的转义分析

  • 新编译器后端使用 SSA(使用 Go 会比 C 简单很多)

更多优化:

  • 从 PDFs (或者是 XML)生成机器描述,将会有一个纯机器生成指令定义,“从 PDF 读入,写出一个汇编配置”;

  • 已经部署反汇编程序

总结

摆脱 C 是 Go 项目的一个巨大改进,代码更整洁,提升可测试性,可部署性,也更容易运行。

新的统一工具链减少了代码数量,提升可维护性。

灵活的工具链对可移植性也很重要。

《The State of Go》

这篇 PPT 主要讲解了 Go 1.5 的开发成果,用数据说话,各种图表显示 Go 1.5 跟 Go 1.4 简直不是一个级别的,大量的优化和极高的性能提升。

Go 1.5 主要特性:

1. 并发垃圾收集机制,目标是:GC 延迟小于 10 毫秒。

新的垃圾收集机制是花费一些内存和 CPU 胜博發来换取更低的延迟胜博發:

2. 更高的并发性能,设置 GOMAXPROCS=N (where N is your number of CPUs):

更好的 goroutines 执行性能:

更好的 goroutines 转换性能:

3. 整体性能

《Go for Java programmers》

这是 Google 的 Go 团队技术主管经理 Sameer Ajmani 分享的 PPT,为 Java 程序员快速入门 Go 而准备的。

Go 和 Java 有很多共同之处

  • C 系列 (强类型,括号)

  • 静态类型

  • 垃圾收集

  • 内存安全 (nil 引用,运行时边界检查)

  • 变量总是初始化 (zero/nil/false)

  • 方法

  • 接口

  • 类型断言 (实例)

  • 反射

Go 与 Java 的不同之处

  • 代码程序直接编译成机器码,没有 VM

  • 静态链接二进制

  • 内存布局控制

  • 函数值和词法闭包

  • 内置字符串 (utf-8)

  • 内置泛型映射和数组/片段

  • 内置并发

Go 特意去掉了大量的特性

  • 没有类

  • 没有构造器

  • 没有继承

  • 没有 final

  • 没有异常

  • 没有注解

  • 没有自定义泛型

为什么 Go 要省去那些特性?

代码清晰明了是首要的

当查看代码时,可以很清晰的知道程序将会做什么

当编写代码的时候,也可以很清晰的让程序做你想做的

有时候这意味着编写出一个循环而不是调用一个模糊的函数。

(不要变的太枯燥)

详细的设计背景请看:

原文和所有图片都来自 talks.golang.org。



相关阅读 :
Go 摆脱了 C,又惹上了 Java?
Windows 用户请勿使用 Go 1.3.2 ,有 Bug!
Go 语言如果按这样改进,能不能火过 Java?
Express.js 作者弃用 Node.js,转向 Go 语言
Go 语言将使用 Go 代替 C 重写运行时环境
Go 已经迁移到了 GitHub
为什么说 2017 年你必须要学习 Go 了
调查显示,66%的开发者选择在业余胜博發使用 Go
有起有伏,使用 Go 一年的体验分享
2017 开发者生态报告:Java 最火,Go 最有前途
强大的 Rust 还是简单的 Go?我选择了 Go
Go 语言开源发布 8 周年,名列各排行榜前位
最新网友评论  共有(0)条评论 发布评论 返回顶部
月排行榜

Copyright © 2007-2017 PHPERZ.COM All Rights Reserved   冀ICP备14009818号  版权声明  服务