From b03106c3c5a11c1ffafd308ae94f28b9f141899b Mon Sep 17 00:00:00 2001 From: chai2010 Date: Tue, 14 Aug 2018 20:33:50 +0800 Subject: [PATCH] =?UTF-8?q?ch1.2:=20=E8=A7=84=E8=8C=83=E5=8C=96=E5=9B=BE?= =?UTF-8?q?=E5=92=8C=E4=BB=A3=E7=A0=81=E7=BC=96=E5=8F=B7?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- ch1-basic/ch1-02-hello-revolution.md | 35 +++++++++++++++++++++- images/ch1.2-1-go-history.png | Bin 0 -> 9738 bytes vendor/ch1.1-1/doc_ch1-01.go | 2 -- vendor/ch1.1-1/main.go | 2 ++ vendor/ch1.2-1/hello.b | 10 +++++++ vendor/ch1.2-10/hello.go | 10 +++++++ vendor/ch1.2-11/hello.go | 9 ++++++ vendor/ch1.2-12/hello.go | 7 +++++ vendor/ch1.2-13/hello.go | 11 +++++++ vendor/ch1.2-14/hello.go | 11 +++++++ vendor/ch1.2-15/hello.go | 9 ++++++ vendor/ch1.2-16/main.go | 22 ++++++++++++++ vendor/ch1.2-2/hello.c | 6 ++++ vendor/ch1.2-3/hello.c | 6 ++++ vendor/ch1.2-4/hello.c | 8 +++++ vendor/ch1.2-5/hello.c | 8 +++++ vendor/ch1.2-6/hello.newsqueak | 3 ++ vendor/ch1.2-7/prime.newsqueak | 43 +++++++++++++++++++++++++++ vendor/ch1.2-8/hello.alef | 21 +++++++++++++ vendor/ch1.2-9/hello.limbo | 17 +++++++++++ 20 files changed, 237 insertions(+), 3 deletions(-) create mode 100644 images/ch1.2-1-go-history.png delete mode 100644 vendor/ch1.1-1/doc_ch1-01.go create mode 100644 vendor/ch1.2-1/hello.b create mode 100644 vendor/ch1.2-10/hello.go create mode 100644 vendor/ch1.2-11/hello.go create mode 100644 vendor/ch1.2-12/hello.go create mode 100644 vendor/ch1.2-13/hello.go create mode 100644 vendor/ch1.2-14/hello.go create mode 100644 vendor/ch1.2-15/hello.go create mode 100644 vendor/ch1.2-16/main.go create mode 100644 vendor/ch1.2-2/hello.c create mode 100644 vendor/ch1.2-3/hello.c create mode 100644 vendor/ch1.2-4/hello.c create mode 100644 vendor/ch1.2-5/hello.c create mode 100644 vendor/ch1.2-6/hello.newsqueak create mode 100644 vendor/ch1.2-7/prime.newsqueak create mode 100644 vendor/ch1.2-8/hello.alef create mode 100644 vendor/ch1.2-9/hello.limbo diff --git a/ch1-basic/ch1-02-hello-revolution.md b/ch1-basic/ch1-02-hello-revolution.md index 7f5e31e..dade0fb 100644 --- a/ch1-basic/ch1-02-hello-revolution.md +++ b/ch1-basic/ch1-02-hello-revolution.md @@ -2,7 +2,7 @@ 在创世纪章节中我们简单介绍了Go语言的演化基因族谱,对其中来自于贝尔实验室的特有并发编程基因做了重点介绍,最后引出了Go语言版的“Hello, World”程序。其实“Hello, World”程序是展示各种语言特性的最好的例子,是通向该语言的一个窗口。这一节我们将沿着各个编程语言演化的时间轴,简单回顾下“Hello, World”程序是如何逐步演化到目前的Go语言形式、最终完成它的革命使命的。 -![](../images/ch1-01-go-history.png) +![](../images/ch1.2-1-go-history.png) ## 1.2.1 B语言 - Ken Thompson, 1972 @@ -10,6 +10,8 @@ 目前见到的B语言版本的“Hello World”,一般认为是来自于Brian W. Kernighan编写的B语言入门教程(Go核心代码库中的第一个提交者名字正是Brian W. Kernighan),程序如下: +*代码 1.2-1* + ```c main() { extrn a, b, c; @@ -31,6 +33,8 @@ C语言是由Dennis Ritchie在B语言的基础上改进而来,它增加了丰 在Brian W. Kernighan于1974年左右编写的C语言入门教程中,出现了第一个C语言版本的“Hello World”程序。这给后来大部分编程语言教程都以“Hello World”为第一个程序提供了惯例。第一个C语言版本的“Hello World”程序如下: +*代码 1.2-2* + ```c main() { @@ -42,6 +46,8 @@ main() 这个例子同样出现在了1978年出版的《C程序设计语言》第一版中,作者正是Brian W. Kernighan 和 Dennis M. Ritchie(简称K&R)。书中的“Hello World”末尾增加了一个换行输出: +*代码 1.2-3* + ```c main() { @@ -53,6 +59,8 @@ main() 在K&R的教程面世10年之后的1988年,《C程序设计语言》第二版终于出版了。此时ANSI C语言的标准化草案已经初步完成,但正式版本的文档尚未发布。不过书中的“Hello World”程序根据新的规范增加了`#include `头文件包含语句,用于包含`printf`函数的声明(新的C89标准中,仅仅是针对`printf`函数而言,依然可以不用声明函数而直接使用)。 +*代码 1.2-4* + ```c #include @@ -64,6 +72,8 @@ main() 然后到了1989年,ANSI C语言第一个国际标准发布,一般被称为C89。C89是流行最广泛的一个C语言标准,目前依然被大量使用。《C程序设计语言》第二版的也再次印刷新版本,并针对新发布的C89规范建议,给`main`函数的参数增加了`void`输入参数说明,表示没有输入参数的意思。 +*代码 1.2-5* + ```c #include @@ -82,6 +92,8 @@ Newsqueak是Rob Pike发明的老鼠语言的第二代,是他用于实践CSP并 Newsqueak类似脚本语言,内置了一个`print`函数,它的“Hello World”程序看不出什么特色: +*代码 1.2-6* + ```go print("Hello,", "World", "\n"); ``` @@ -92,6 +104,8 @@ print("Hello,", "World", "\n"); Newsqueak语言并发版本的“素数筛”程序如下: +*代码 1.2-7* + ```go // 向管道输出从2开始的自然数序列 counter := prog(c:chan of int) { @@ -150,6 +164,8 @@ Newsqueak语言中并发体和管道的语法和Go语言已经比较接近了, Alef语言并发版本的“Hello World”程序如下: +*代码 1.2-8* + ```c #include @@ -182,6 +198,9 @@ Limbo(地狱)是用于开发运行在小型计算机上的分布式应用的 Limbo语言版本的“Hello World”程序如下: + +*代码 1.2-9* + ```go implement Hello; @@ -208,6 +227,8 @@ init(ctxt: ref Draw->Context, args: list of string) ### 1.2.6.1 hello.go - 2008年6月 +*代码 1.2-10* + ```go package main @@ -221,6 +242,8 @@ func main() int { ### 1.2.6.2 hello.go - 2008年6月27日 +*代码 1.2-11* + ```go package main @@ -233,6 +256,8 @@ func main() { ### 1.2.6.3 hello.go - 2008年8月11日 +*代码 1.2-12* + ```go package main @@ -245,6 +270,8 @@ func main() { ### 1.2.6.4 hello.go - 2008年10月24日 +*代码 1.2-13* + ```go package main @@ -259,6 +286,8 @@ func main() { ### 1.2.6.5 hello.go - 2009年1月15日 +*代码 1.2-14* + ```go package main @@ -273,6 +302,8 @@ Go语言开始采用是否大小写首字母来区分符号是否可以被导出 ### 1.2.6.7 hello.go - 2009年12月11日 +*代码 1.2-15* + ```go package main @@ -290,6 +321,8 @@ Go语言终于移除了语句末尾的分号。这是Go语言在2009年11月10 在经过半个世纪的涅槃重生之后,Go语言不仅仅打印出了Unicode版本的“Hello, World”,而且可以方便地向全球用户提供打印服务。下面版本通过`http`服务向每个访问的客户端打印中文的“你好, 世界!”和当前的时间信息。 +*代码 1.2-16* + ```go package main diff --git a/images/ch1.2-1-go-history.png b/images/ch1.2-1-go-history.png new file mode 100644 index 0000000000000000000000000000000000000000..0a8d63f48392c61813c757f4446403375ed9155f GIT binary patch literal 9738 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 + +main() +{ + printf("hello, world\n"); +} diff --git a/vendor/ch1.2-5/hello.c b/vendor/ch1.2-5/hello.c new file mode 100644 index 0000000..519563b --- /dev/null +++ b/vendor/ch1.2-5/hello.c @@ -0,0 +1,8 @@ +// ch1.2-5 + +#include + +main(void) +{ + printf("hello, world\n"); +} diff --git a/vendor/ch1.2-6/hello.newsqueak b/vendor/ch1.2-6/hello.newsqueak new file mode 100644 index 0000000..a0683cd --- /dev/null +++ b/vendor/ch1.2-6/hello.newsqueak @@ -0,0 +1,3 @@ +// ch1.2-6 + +print("Hello,", "World", "\n"); diff --git a/vendor/ch1.2-7/prime.newsqueak b/vendor/ch1.2-7/prime.newsqueak new file mode 100644 index 0000000..70e44a8 --- /dev/null +++ b/vendor/ch1.2-7/prime.newsqueak @@ -0,0 +1,43 @@ +// ch1.2-7 + +// 向管道输出从2开始的自然数序列 +counter := prog(c:chan of int) { + i := 2; + for(;;) { + c <-= i++; + } +}; + +// 针对listen管道获取的数列,过滤掉是prime倍数的数 +// 新的序列输出到send管道 +filter := prog(prime:int, listen, send:chan of int) { + i:int; + for(;;) { + if((i = <-listen)%prime) { + send <-= i; + } + } +}; + +// 主函数 +// 每个管道第一个流出的数必然是素数 +// 然后基于这个新的素数构建新的素数过滤器 +sieve := prog() of chan of int { + c := mk(chan of int); + begin counter(c); + prime := mk(chan of int); + begin prog(){ + p:int; + newc:chan of int; + for(;;){ + prime <-= p =<- c; + newc = mk(); + begin filter(p, c, newc); + c = newc; + } + }(); + become prime; +}; + +// 启动素数筛 +prime := sieve(); diff --git a/vendor/ch1.2-8/hello.alef b/vendor/ch1.2-8/hello.alef new file mode 100644 index 0000000..df4ef07 --- /dev/null +++ b/vendor/ch1.2-8/hello.alef @@ -0,0 +1,21 @@ +// ch1.2-8 + +#include + +void receive(chan(byte*) c) { + byte *s; + s = <- c; + print("%s\n", s); + terminate(nil); +} + +void main(void) { + chan(byte*) c; + alloc c; + proc receive(c); + task receive(c); + c <- = "hello proc or task"; + c <- = "hello proc or task"; + print("done\n"); + terminate(nil); +} diff --git a/vendor/ch1.2-9/hello.limbo b/vendor/ch1.2-9/hello.limbo new file mode 100644 index 0000000..1f8a0d2 --- /dev/null +++ b/vendor/ch1.2-9/hello.limbo @@ -0,0 +1,17 @@ +// ch1.2-9 + +implement Hello; + +include "sys.m"; sys: Sys; +include "draw.m"; + +Hello: module +{ + init: fn(ctxt: ref Draw->Context, args: list of string); +}; + +init(ctxt: ref Draw->Context, args: list of string) +{ + sys = load Sys Sys->PATH; + sys->print("hello, world\n"); +}