<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
	>

<channel>
	<title>Erlang非业余研究 &#187; Go lang</title>
	<atom:link href="http://blog.yufeng.info/archives/tag/go-lang/feed" rel="self" type="application/rss+xml" />
	<link>http://blog.yufeng.info</link>
	<description>Erlang系统深度探索和应用</description>
	<lastBuildDate>Tue, 17 Jan 2012 06:05:54 +0000</lastBuildDate>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.3.1</generator>
		<item>
		<title>Go Lang介绍</title>
		<link>http://blog.yufeng.info/archives/193</link>
		<comments>http://blog.yufeng.info/archives/193#comments</comments>
		<pubDate>Thu, 21 Jan 2010 14:22:03 +0000</pubDate>
		<dc:creator>Yu Feng</dc:creator>
				<category><![CDATA[杂七杂八]]></category>
		<category><![CDATA[Go lang]]></category>

		<guid isPermaLink="false">http://blog.yufeng.info/?p=193</guid>
		<description><![CDATA[原创文章，转载请注明： 转载自Erlang非业余研究 本文链接地址: Go Lang介绍 Go Lang介绍 Go编程语言是Google中一些大牛（尤其是有着plan9前科的大牛们）如Rob Pike，Ken Thomason这两位赫赫有名的程序高手、技术作于2007年9月开始建造。 Pike指出，Go代码的编译基本上可以达到C语言的速度，几乎可以在瞬间完成，“就像是在使用交互式语言”。现有的语言都没有针对多核心处理器进行优化，为了解决此类编程问题，Google工程师们开发了Go语言。从源文件的copyright可以看到，很多基础代码来自plan9. Go 已在Google公司内部测试过，但仍处于试验阶段。Google开放Go的代码，希望籍此帮助Go语言的发展。首席软件工程师Rob Pike说：我们开发Go，是因为近10年左右开发程序之难让我们有点沮丧。Google两年前开始开发Go，1年前开始有一只团队专职于此。目前只支持unix平台， windows平台的支持由于资源的原因，需要更多的参与者来移植。 Go的定位 是系统编程，比如Web服务器、存储系统和数据库等，但也欢迎在其它方面的应用。 Go语言的官方吉祥物如下: 我看好Go的原因是： 这个语言不是凭空或者实验室设计的，而是填补过去10年在系统编程软件方面的不足。作为系统软件的编写者，经常会深深的感觉到目前常见语言的面对大规模的网络应用，在不断涌现的多核心硬件前的无奈, 纠缠在多线程和各种锁中间， 不停的制造各种各样的轮子， 低效的排错。Go拥有的这些现代特性都是系统用户梦迷以求的，经过作者全面的考虑，适当的取舍，即结合了动态语言的弹性，又有了静态语言的安全性和高性能。 目前这个GO社区非常活跃，邮件列表里每天都有几百个讨论，加上有Google的强力支持， 个人认为非常有前途。 那么GO能解决什么问题： 1. 硬件很快 软件开发很慢。 2. 依赖很麻烦。 3. c++ java太笨拙。 4. 并行和gc 5. 多核心机器的出现，未来几年128核心的机器都很常见。 大部分的系统语言并不是设计来解决这些问题的,而且新涌现的大多数库并没有改善这些问题，相反加剧了。 GO结合了动态语言的开发效率和静态编译型语言的安全性和运行效率，支持网络和多核编程，带给我们快速， 安全， 并发， 快乐。 Go有着非常高的效率。 实际上golang.org就是用gdoc架设的。同时语言效能评测网站（） Go和其他语言的对比，也充分说明了Go的效率和c语言很接近。 GO的设计目标： 1。 系统编程语言。 2. 快速编译和执行。 3. 类型安全性和内存使用安全。 4. 很好的支持并发计算。 [...]]]></description>
			<content:encoded><![CDATA[<div style="margin-top: 15px; font-style: italic">
<p><strong>原创文章，转载请注明：</strong> 转载自<a href="http://blog.yufeng.info/">Erlang非业余研究</a></p>
<p><strong>本文链接地址:</strong> <a href="http://blog.yufeng.info/archives/193">Go Lang介绍</a></p>
</div>
<p><strong>Go Lang介绍</strong><br />
Go编程语言是Google中一些大牛（尤其是有着plan9前科的大牛们）如Rob Pike，Ken Thomason这两位赫赫有名的程序高手、技术作于2007年9月开始建造。</p>
<p>Pike指出，Go代码的编译基本上可以达到C语言的速度，几乎可以在瞬间完成，“就像是在使用交互式语言”。现有的语言都没有针对多核心处理器进行优化，为了解决此类编程问题，Google工程师们开发了Go语言。从源文件的copyright可以看到，很多基础代码来自plan9.</p>
<p>Go 已在Google公司内部测试过，但仍处于试验阶段。Google开放Go的代码，希望籍此帮助Go语言的发展。首席软件工程师Rob Pike说：我们开发Go，是因为近10年左右开发程序之难让我们有点沮丧。Google两年前开始开发Go，1年前开始有一只团队专职于此。目前只支持unix平台， windows平台的支持由于资源的原因，需要更多的参与者来移植。<br />
Go的定位 是系统编程，比如Web服务器、存储系统和数据库等，但也欢迎在其它方面的应用。</p>
<p>Go语言的官方吉祥物如下:<br />
 <a href="http://blog.yufeng.info/wp-content/uploads/2010/01/logo-153x55.png"><img src="http://blog.yufeng.info/wp-content/uploads/2010/01/logo-153x55.png" alt="" title="logo-153x55" width="153" height="55" class="alignnone size-full wp-image-194" /></a></p>
<p>我看好Go的原因是： 这个语言不是凭空或者实验室设计的，而是填补过去10年在系统编程软件方面的不足。作为系统软件的编写者，经常会深深的感觉到目前常见语言的面对大规模的网络应用，在不断涌现的多核心硬件前的无奈, 纠缠在多线程和各种锁中间， 不停的制造各种各样的轮子， 低效的排错。Go拥有的这些现代特性都是系统用户梦迷以求的，经过作者全面的考虑，适当的取舍，即结合了动态语言的弹性，又有了静态语言的安全性和高性能。</p>
<p>目前这个GO社区非常活跃，邮件列表里每天都有几百个讨论，加上有Google的强力支持， 个人认为非常有前途。</p>
<p><strong>那么GO能解决什么问题：</strong><br />
1.	硬件很快 软件开发很慢。<br />
2.	依赖很麻烦。<br />
3.	c++ java太笨拙。<br />
4.	并行和gc<br />
5.	多核心机器的出现，未来几年128核心的机器都很常见。</p>
<p>大部分的系统语言并不是设计来解决这些问题的,而且新涌现的大多数库并没有改善这些问题，相反加剧了。</p>
<p>GO结合了动态语言的开发效率和静态编译型语言的安全性和运行效率，支持网络和多核编程，带给我们快速， 安全， 并发， 快乐。</p>
<p>Go有着非常高的效率。 实际上golang.org就是用gdoc架设的。同时语言效能评测网站（） Go和其他语言的对比，也充分说明了Go的效率和c语言很接近。</p>
<p><strong>GO的设计目标：</strong><br />
1。 系统编程语言。<br />
2. 快速编译和执行。<br />
3. 类型安全性和内存使用安全。<br />
4. 很好的支持并发计算。<br />
5. 高效，低延迟的垃圾回收算法。</p>
<p><strong>指导原则：</strong><br />
1.	减少bookkeeping。<br />
2.	更少的关键词，减少无谓的输入。无符号表设计使得语法分析，调试等大幅简单。<br />
3.	保持概念正交<br />
4. 保持简单。<br />
5. 减少类型，无类型层次，避免啰嗦。</p>
<p><strong>语言特性：</strong><br />
清晰，精确的语法语法：大多数从c 继承， 包机制Pascal/Modula/Oberon family (declarations, packages)，并发从(CSP)那里借鉴。<br />
	大写符号导出符号。<br />
	函数或者块开始注释是文档，用于gdoc处理。<br />
	改进的If， case 复合语句，允许在条件前，执行语句。 Case 不支持自动fall throught, 必须显示说明。 Case支持多个判断。</p>
<p>轻量的类型系统<br />
没有隐式的转换<br />
强类型，显式类型转化<br />
指针运算 slice代替 提供安全性<br />
通用类型：interface{}<br />
内置数组和字典<br />
支持面向对象编程，但是不支持层次继承。<br />
融合多种语言的特性，各个社区的人都会熟悉，特别是c, lua, python社区的用户非常容易上手。</p>
<p>运行期： c和汇编实现内存的分配和收集，栈管理，轻量级协程，通讯管道，切片，Map以及反射等等基础设施。</p>
<p>Gc：目前是用经典的简单的Mark And sweep 算法, 未来会采用更高效，低延迟的算法。</p>
<p><strong>库实现：</strong><br />
1.	完全用Go语言实现, 不依赖其他系统库<br />
2.	从接口库如xml, asn1，jonson, IO库，压缩，加密库等等，比较齐全，极大的方便了用户。<br />
支持unicode. 值得一提的是 Go的 “hello 世界”，很好的展示了对unicode支持。</p>
<p>模块：<br />
	Package管理。一个package可以分散在多个文件里，就好比在一个文件效果一样。</p>
<p>扩展：<br />
	Cgo 支持c和go编程混合，使得GO的扩展非常容易，让Cgo来做参数和类型的转换， 直接连接用户的c函数。</p>
<p>Range：for语句支持通用的迭代，支持数组，字典，通讯管道。 特别是通讯管道结合goroutine, 由生产者负责在一端输入数据， range充当消费者， 从另外一端。。。，使得包容器的迭代实现非常的优雅和简单易懂。</p>
<p>Type: 相当灵活的struct, 支持匿名字段，复用看起来很优雅。</p>
<p>Interface:<br />
接口 类型 接口实现分离。Interface{}用来实现表示同样类型，用于实现保容器和参数省略。</p>
<p>闭包：函数是第一类对象。有了闭包，我们很容易把数据和函数结合在一起，形成一个独立的执行体，无需关心数据的泄漏。</p>
<p>反射(reflection)：用于实现多参数和实现比如xml库，很直观的把结构的字段名和值映射起来，但是效率不高。</p>
<p>Network 支持。支持tcp,udp，接口统一，但网络读写暂时无效的时候，net模块会自动把该句柄注册到系统的poll, 并且让出执行，等待读写事件的发生。一旦事件通知，net内部通过channel通知阻塞的句柄继续往下执行。从用户的使用角度来看，网络的读写都是顺序执行的，极大的简化了编程。</p>
<p>Goroutine：Goroutines 是使得并发编程变得容易的核心。核心思想就是通过系统的线程来多路派遣独立函数的执行 单位协程。当一个协程阻塞的时候，比如说系统调用，调度器就会自动把其他协程安排到另外的线程去执行，从而保证了系统的不间断运行。 这个调度对于程序员是透明的，从用户的角度来看，协程在一直运行。而且这个调度的开销非常小，典型的CPU每秒钟可以调度百万次，使得我们可以创建大量的goroutine, 模拟现实世界的行为，大大的简化了程序的设计和实现。</p>
<p>Channel： CSP的核心思想是通过消息共享， 而不是内存共享。 而消息共享机制就是通过channel来传递消息，有同步和异步之分。 Channel在生产者和消费者之间架设起沟通的桥梁。<br />
<strong><br />
正是 Network+闭包+Goroutine+Channel让Go这么突出。</strong></p>
<p><strong>目前存在的问题：</strong><br />
1.	语言的实现时间比较短，实现和社区都不够成熟，一些语言特性如select timeout还没有实现。<br />
2.	语言库和基于GO的应用还比较少，甚至在Google内部也还是个试验项目。</p>
<div style="margin-top: 0; margin-bottom: 15px; color: #888888; font-size: 80%; font-style: italic">
<p>Post Footer automatically generated by <a href="http://easwy.com/blog/wordpress/wp-posturl/" style="color: #8888FF; text-decoration: underline;">wp-posturl plugin</a> for wordpress.</p>
</div>
]]></content:encoded>
			<wfw:commentRss>http://blog.yufeng.info/archives/193/feed</wfw:commentRss>
		<slash:comments>9</slash:comments>
		</item>
	</channel>
</rss>

