文档库 最新最全的文档下载
当前位置:文档库 › Erlang_Programming_导读

Erlang_Programming_导读

Erlang_Programming_导读
Erlang_Programming_导读

《Programming Erlang导读》

前言

如果你没有学习过C语言,我建议先去学C,并学习计算机的编译原理。因为那才是真正意义上的计算机程序设计。否则,如果把erlang作为你开始学习计算机的第一门语言,你将感到非常困惑,而且对程序的理解将停留在应用层面,很难有所底层技术的突破。

本导读的作用是帮助你快速理解Erlang,并基于该理解去考虑Erlang语言是否适合您的应用开发。要对Erlang全面了解,包括语法的各个方面,库函数的各个方面,以及Socket编程,文件操作等,你还是需要去仔细研读Erlang的官方著作——《Programming Erlang》。不过,当我看完这本书的时候,还是认为其中的某些章节,作者并没有写清楚,尤其是在一些例子方面,因此,如果时间充裕,我接下来会尝试给大家提供一份更容易理解的Erlang例程,并基于这些例程详细说明Erlang的用法和作用。

2008-11-27(北京)

第一、 Erlang是什么?

首先,Erlang包括一个Erlang虚拟机,Erlang编译器,以及Erlang语法。

什么是虚拟机(Vitual Machine)呢?其实虚拟机可以理解是一个软件,如果你在windows操作系统上安装了Erlang的虚拟机,那么从进程的角度来讲,VM 的地位可你计算器上其他软件的地位是一样的,比如Office Word, 金山词典,Photoshop等。只是VM所提供的功能和其他应用软件有所不同罢了。

Erlang编译器是一个exe可执行程序,当然,在Window下的编译器和UNIX 下的编译器有所不同,然而,所完成的功能都是把一个.erl文件转换为.beam文件。.erl文件是用所谓的erlang语言编写的程序代码,而.beam文件是一个可以在Erlang VM环境下运行的“程序”。

Erlang语法就是规定好的Erlang编译器可以理解的一种程序设计语言。然而,erlang语言和C语言还是两种不同层次的语言。Erlang语言更应该定义为一种应用语言,因为它并不是面向CPU编程的语言,相比之下,C语言基本上是直接面向CPU编程的(这不是严格意义上的,实际上C语言会被编译为汇编语言,并再次编译为CPU能够执行的二进制指令)。

了解java的人可以把Erlang虚拟机理解为java虚拟机,对erlang语言和java 的语言则是对等的。

说的更通俗一点,相信你用过office word吧,首先你安装了Microsoft的Office 软件,然后编辑了一个.doc文档。Office提供了你一种图形化编写.doc文档的功能,你可以通过输入法输入文字,你可以点击“文件”里面的“保存”菜单,把输入的文字保存在硬盘里,你还可以插入一个表格,当然,还包括照片等。然而,要知道,最终生成的.doc文件不只是这些,它还包含了很多其他信息,比如图片在文件中的位置,文本的页面信息等。好了,让我们把Erlang和office对比一下吧。

Erlang的虚拟机就好像Office程序,是独立的一个进程(独立的程序),.erl 文件就好像你所编写的.doc文件,erlang编译器把.erl文件编译为.beam文件,.beam文件是Erlang虚拟机能理解的程序文件,相比之下,office更高级,它可以直接理解.doc文件,而不需要再把.doc文件编译为其它格式。

Erlang提供了自己的语法,可以进行数据处理,数据的输入或者输出。Office word也提供了数据处理以及数据输入、输出的接口,只是用法不同而已。Erlang 生成自己对多线程的并发式应用很擅长,当然Office却声称自己对文字处理很擅长,的确是这个样子。

我之所以把Erlang和Office word对比,为的是让大家理解,Erlang不是一个纯粹的程序语言,它是为了面向某种应用而设计的语言,这就是为什么总有新的语言层出不穷。你是否问过自己,为什么CPU只有一个,然而却又无数种计算机语言,比如Ruby,java, php,erlang…,未来可能会有新的语言产生。实际上,计算机语言只有一种,那就是汇编语言,c,以及c++只是汇编语言的一种高级呈现方式,都是面向机器的语言,这种语法基本上代表了CPU的执行方式。然后,那种基于虚拟机VM上的语言,大多数则是由于应用的需求而人为设计的一种语言,这种语言则是面向应用的,而不是面向机器的。当然,erlang就是一种,它面向的应用就是并发程序。举个例子,对于Web服务器,要求同时能够提供多个连接,而且彼此的连接要求并发,那么如何设计一个Web服务器,并发需求显得额外突出,因此,如果能有一些更好用的接口,那么的确是一件很美好的事情,就好像在office word里面,我们可以很容易的输入不同字体的文字,

很容易把这些页面打印到纸张上。道理是一样的。

因此,学习一门基于VM的应用类语言,重点应该放在该语言所提供的库函数,因为这些库函数是经过优化了的片段代码,相比之下,这类语言的语法则是次要的,因为你会发现不同的语言的语言差别甚大,Erlang的语法更像是从火星上掉下来的一样,令人乍舌。不过没关系,如果你把Photoshop也称为一种程序的话,Photoshop的语法则更奇特,因为你的源代码甚至不是由字符构成,而是由图片构成。

好了,理解清楚了Erlang的架构,让我们开始下面的Erlang导读吧。

第二、 Erlang的基本语法

安装Erlang。上面已经介绍过,Erlang包括Erlang虚拟机,编译器,当然还有一个称为Shell的工具。你可以到https://www.wendangku.net/doc/4a3439654.html,网站上下载Erlang的Windows安装版或者Linux版。

现在,开始运行Erlang Shell工具吧。Shell是一个程序员和Erlang虚拟机交互的窗口,我们不需要详细的去探讨这个,试一下你就可以感觉到它是干什么的。

首先,让我们输入一个数字,然后以“点”结束,如下:

23.

可别忘了那个“点”,erlang语法中,“点”代表一个完整语句的结束,只有语句结束后,Erlang虚拟机才会执行该语句,VM会返回该表达式的值。

再来一次,输入:

23+90.

再输入如下,卡看会出现什么:

?Var1 = 90.

?Var2 = Var1 + 90.

?var3 = Var2 + 90.

呵呵,不好意思,当你输入上面第三句话的时候,出现了错误的提示,原因是var3是一个“Atoms”,我们就把它翻译为“原子”吧。而Var1,Var2都是变量。为什么呢?Erlang语法规定,变量必须以大写字母开头,而原子则必须以小写字母开头,原子是有固定值的最小表达式单位。

比如说,23就是一个原子,它是一个整数的表达式的最小单位。随着物理学的深入或者Atom应该翻译为“中子”或者“夸克”等,不过,老百姓可能知道的最小单位就是原子吧,因为大家都知道“原子弹”。

这里可别混淆,var3很像一个字符串,然而,它绝对不是一个字符串。你可以尝试输入如下:

?“i love you”.

?i love you.

?i,love,you

你能发现什么?第一个之所以正确,是因为你输入了一个字符串,这是一个合法的字符串表达式。而第二个没有引号的i love you 代表了三个原子,三个原子是不能这样连写的,这就好像C语言中写:

i =90 j=80一样,不合法。

而第三个加了逗号的表达式中,却是合法的,这就是Erlang的语法规定,两个顺序表达式之间,需要用逗号分隔,请注意这里的“逗号”,因为对于没有先后顺序的表达式,可以用分号“;”分开,这听起来有点含混,先别着急,之后你看你个例子后,自然会明白。

这会儿,你该对shell有所感觉了吧,它更像是一个Dos程序,我们可以和它交互。

让我们再输入如下一些代码:

?{i, love, you}.

?{1,11,21,1211,111221, 312211}

?[i,love,you].

请注意,这里的“大括弧”和“中括弧”。这是Erlang语法中的两个基本数据格式。相信大家对第二个输入比较眼熟吧,这的确是我们高中数学里面的序列,

你能猜出这个序列的规律吗?(坐公交车的时候想想吧)。

Erlang语法中,大括弧的叫做“序列”(Tuple),中括弧的叫做“列表”(List),为什么要序列和列表这种奇怪的数据类型呢?C语言中,大家都知道有struct类型吧,好啦,序列从某种程度上来讲有点类似struct的作用,你可以试着如下输入:

?{person, Name, Age} = {person, “haiii”, 20}.

?Name.

?Age.

请注意,person是小写开头的,这就告诉erlang编译器,person是一个原子,而之后的Name和Age都是大写的,告诉erlang这是一个变量。很高兴,你开始接触变量了,变量是以大写字母开头的,变量可以被赋值,就像前面讲到Var1,Var2等。请看以下C程序

struct person

{

char[20] Name;

int Age;

}

在C语言总,要给struct对象赋值,应该写为:

https://www.wendangku.net/doc/4a3439654.html, = “haiii”;

person.Age = 20;

相比之下,Erlang则是上面的书写形式。最主要的是,你有没有发现,erlang 中定义person和给person赋值时一步完成的。你可能会奇怪,为什么要一步完成呢?如果想再定义一个person对象该怎么办呢?如下:

?{person, Name2, Age2} = {person, “erlang”, 30}.

怎么样,你可以再次输入以下代码查看结果。

?Name2.

?Age2.

既然有了序列(Tuple),那为什么还要有列表(List)呢?再我看来,序列主要用于参数传递,而列表则用于数据运算。在erlang中,有这样一个语法[H|T],比如对于列表[1,2,3],输入如下:

?[Head | Tail] = [1,2,3].

?Head.

?Tail.

?[Head2 | Tail2] = Tail.

你会发现Head被赋值为[1],T被复制为[2,3], erlang语法中,那个中分线“|”的左右就是把列表按照“头”和“尾”进行拆分,执行第四句后,Head2的值就是[2]了,这对于数据运算有点作用,暂不讨论。

erlang中有没有函数呢?当然有,不过,在我们了解函数之前,先来看看.erl 文件。

前面已经介绍过,.erl文件是erlang程序的源文件,就像.c文件一样,然而我们却一直在跟shell玩儿,那么接下来让我们进入标准的程序开发:源文件编辑 -> 编译 -> 执行三步。我建议大家使用Edit plus编写源文件,同时下载一个erlang的语法文件“erlang.stx”,这样可以增强代码的可读性。

第一步,编写一个类似于hello world的源程序吧,你可以在erlang的系统目

录下的\bin目录下建立这个文件prac.erl,如果你使用的Edit Plus的编辑器,并带有erlang语法文件,那么效果将如下图

图表一:

好,让我们逐个理解一下上面程序所描述的内容吧。

“%”是注释符。

-module是erlang的关键字,erlang的源文件都是以函数为单位的,-module 告诉编译器,该文件将要生成一个prac2的模块儿。

-export关键字定义了该模块儿中那些函数可以被外部调用,一个module中可以包含多个函数,因为有些函数可能只是其他函数的子函数,而不需要导出。请注意-export里面的参数,[helloWorld/0]表示,要导出的函数名称为helloWorld,参数的个数是0.

上面这些语句都是以“点”结束的。

接下来就是函数的主体部分了。注意符号 “->”,这是一个函数的标准定义。函数名称后面加这样一个附后,紧接着是函数体,并且以“点”结束。

io:format是一个函数调用,代表io模块儿中的format函数,可以想象,如果接下来我们编译顺利的话,也将生成一个prac2的模块儿,要调用helloWorld 函数,可以输入 prac2:helloWorld().

第二步,编译。

当然,erlang有自己的编译器,名为erlc.exe,你可以在dos命令下使用它,不过,erlang shell也提供了一个快捷使用编译器的方法,我们就用这个。在shell 命令行下输入:

?c(prac).

如果你由于大意,输入代码有误,那么shell会提示你代码的哪一行出错,你可以修改一下,确保无误,再次编译。

怎么回事!你可能遇到如下的错误:

** Module name 'prac2' does not match file name 'prac' **

很好,这就是我要告诉你的,在.erl代码中,-module所定义的模块儿名称必须和该文件名一致,所以,从程序架构的角度来讲,一个模块儿应该按照大的功能命名,比如,在我们这个教学版本中,prac代表了练习practice。你也可以看

到helloWorld函数里面调用的io:format,模块儿名称叫做io. 这是一个很好的命名规范。

这时,请把prac.erl中的 –module里面的prac2改为prac. 再次编译一下。

恭喜!你又错了!(当然,我跟你开了个玩笑)

Shell提示你已经编译成功,你可以在.erl文件所在目录下发现一个prac.beam 的文件,这正是erlang虚拟机可以执行的文件。那么尝试运行一下,在shell中输入

?prac:helloWorld().

你已经看到了输出的结果了吧。好,让我们尝试改造一下这个模块儿,做下面几个小练习。

1,再增加一个函数

2,给函数增加两个参数

3,获得函数的返回值

打开刚才的prac.erl,增加以下代码:

add(X,Y)->

X+Y.

同时在文件开头增加导出说明,-export([add/2]). 然后再shell中编译执行,如下:

?c(prac).

?prac:add(20,10).

你会看到返回的值是30。记得之前说过,erlang语法中,顺序执行的代码之间,用逗号分隔,如果你对此不理解,可以再做以下这个测试。在add函数的源码中增加以下语句:

add(X,Y)->

X+Y,

X + Y + 90.

然后再次编译运行,这是,再次输入:

?prac:add(20, 10).

你得到的返回结果是120,我们看一下add函数。该函数中有两个执行语句,第一个X+Y,这是一个可以返回的值,第二句又执行了X + Y + 90,而erlang 总是返回最后一个可以返回的结果,因此,add的返回值是120。我们可以再尝试返回一个原子。更改代码如下

add(X,Y) ->

X + Y,

X + Y + 90,

iloveyou.

你会发现,add的输出竟然是iloveyou. 没错,这就是逗号的使用方法。逗号之间的表达式会顺序执行,而函数的返回值总是返回最后一个可以输出的值,这些值包括:原子,序列,列表,整数,浮点数等。

然后我们在shell中这样调用一下这个函数:

?T = prac:add(3,4).

?T.

此时T的值已经是iloveyou了。接下来你可以自己更改任何其它的函数返回值了。

希望你此时没有被这些语法搞晕头,静一下,让我们忘记刚才所了解的这些,从另一个角度来看erlang的基本语法。

准备好了吗?让我们从基本的程序结构角度来总结一下erlang的语法吧。众所周知,对于任何一门程序语言来讲,要完成的任务基本上包含三个大的部分。如下图所示:

程序必须从外部获得数据,包括键盘、磁盘、网络等,然后进行必要的加工,最后输出到显示器或者保存到磁盘文件,或者通过以太网传输到其它设备。erlang 也不例外。

除此之外,大家可能还想到,erlang是否可以和其他语言程序进行通信呢?比如,一个exe文件可以和erlang程序通信吗?或者是java程序,php等?

答案是肯定的。

完成数据输入或者输出一般都是erlang虚拟机的库完成的,叫做BIF (build-in-function),即内置函数,这些函数表面上可以被erl语言调用,而实际上,它们不是用erlang语言写的,而很可能是用c语言写的。

erlang语言本身侧重于进行数据处理,因此,这里我们主要总结erlang的数据处理的语法,而关于数据的输入输出会在后续的章节中讨论。

对于数据处理来讲,基本语法一般包括:

1,数据格式

2,数学运算符

3,逻辑运算符

4, 比较运算符

5,逻辑控制

我们先来看erlang的数据格式。总的来讲,erlang的数据格式包括:

1,数据格式

a, 原子(Atom)。比如a, as, cat, person,这些都是原子,原子必须以小写字母开头。

b, 序列(Tuple)。比如{person, 1, 10, 20, name, Age}等,序列中的元素可以是原子,变量或者数值。

c, 列表(List)。比如[person, 10, 20, T ],列表有[H|L]这样的操作方式。

d, 数值。比如20, 20.12,包括整形和浮点型,erlang不明显区分整形和浮点型数据,而是自适应的,如果表达式是20 + 10,那么返回30,如果表达式是20 + 10.9,那么表达式返回30.90。

e, 未知数(variable)。比如X1,Y1, Uroot等,未知数必须以大写字母开头,未知数可以被绑定某个值,但是,一旦绑定后,将不能更改。从这点上说,未知数有点像变量,但实际上不可变。

f, 字符串。用双引号表示“hello”, A = “Hello”,字符串实际上是一个二进制

的列表。比如A = “Hello”和A=[‘H’, ‘e’, ‘l’, ‘l’, ‘o’].是一样的。

g, 变量。很遗憾,erlang中没有变量,比如C 语言中的int i; int count等,erlang的创造者说,由于变量的值是可以改变的,这意味着存贮器里面的值允许被更改,因此,导致很多不安全性,我觉得这个有点太过牵强。实际上,C语言中的const关键字就可以实现某个变量不能更改。

天哪,没有变量,程序怎么设计啊!请使用未知数,程序员要做的是定义更多的未知数,这也不能解决全部问题,比如,在C语言中,有for循环:for(i=0; i

对于这样的语句,erlang怎么完成呢?

别担心,erlang自有他的办法,但对于你来讲,别试图让erlang去实现C语言的方方面面,否则就用C完成好了。

接下来再看数学运算符,这个很简单

2,数学运算符

a,加法。A + B

b, 减法。A – B

c, 乘法。A*B

d,除法 A/B

e, 取余 A rem B.

3,逻辑运算符。这不是位运算符

a, 与: X and Y, 比如X为true, Y 为false,则返回false, true和false是erlang 的关键字

b, 或:X or Y.

c, 非: not Y.

d, 异或: X xor Y

4,比较运算符

a, 大于: > 或者 >=, 比如A > B

b, 小于: < 或者 <=,比如A <= B

c, 等于: 比如A == B, 注意,

d, 全等于: 比如A =:= B

5,逻辑控制

不知道erlang是不是喜欢追求标新立异,它总想弄点和别的语言不一样的外表,尽管肚子里装一样的东西。

a, case... of ... end. 完全等效于C 语言中的switch case语句。

case Expression of

pattern1 [when Guard] ->Expr_seq1;

patter2 [when Guard] -> Expr_seq2;

...

end.

我想你一定能猜出来它是怎么用的,不过,请注意,在每一个具体执行的语句后面都是分号,尽管erlang中没有bread关键字,但在每一个分号前面的语句执行完毕后,都会退出case语句,就像有break一样。

b, if.. end.

if

Guard1 ->

Expr_seq1;

Guard2 ->

Expr_seq2;

end.

好了,我想,你已经对erlang有了一个大致的认识,也了解它的语法结构,先别着急去实践这些知识,请问一下自己以下这些问题?尽管暂时你可能想不到答案,但强迫自己思考一下。

1,erlang把自己的语法搞的这么怪异,为什么?如果只是为了学习这些语法,那么不如去公园走走,那么erlang的创造者到底想用这些东西干什么呢?

2,如果erlang的价值不在于语法以及内置函数(BIF),而是在于所谓的并发程序设计,那么它与基于操作系统的多线程程序又有什么区别呢?有没有数据表明两者之间有巨大差别?为什么微软或者Linux社区不去改造自己的操作系统以适应并发程序的执行呢?

第三、 并发编程及其效率

在Erlang中,进程的概念类似于win32的线程。每个独立的进程如果需要彼此联络,只有一种方法,那就是向进程发消息。传统多线程中的“临界区”、“信号量”、“共享区”等概念在erlang的进程中不存在,记着,只有发消息一种方法。

为什么Erlang要这么固守呢?要知道,“临界区”、“信号量”、“共享区”等概念也不是天生就有的,这是程序员为了解决实际的需求而创造出来的方式,erlang既然不用这个,那他怎么变得高效呢?

我不知道erlang的进程中是否有时间片的概念,ArmStrong(Erlang的作者)在它的著作中也没有提到,不过我猜应该是按照时间片运行的,否则,如果一个进程崩溃,系统将很难恢复。

好,现在假定Erlang的进程是按照时间片彼此运行,那么在这种情况下,我们来考虑一下是否需要“临界区”、“信号量”、“共享区”等。

首先来看“临界区”,它的用途主要是用于独占某种物理设备时,告诉操作系统别中断这个操作,否则不可恢复。比如,你的程序正在读写硬盘,要知道,读写硬盘和读写内存是不一样的,它是一个操作序列,包括告诉硬盘要读哪个磁面,哪个扇区,如果中途中断后,下次再继续操作,硬盘将不理解程序。所以,在windows等机器语言(c,c++)下,需要临界区,然而,Erlang没有这个,在Erlang中,你只能去访问文件,Erlang没有提供可以直接访问磁盘某个扇区的方法,也就是说,Erlang中不存在假设的物理设备,所有的资源访问都是可恢复的,比如读写文件、端口访问等。因此,Erlang不需要临界区,你可能会问,如果某段代码不允许中断怎么办?那么,请再问一下什么情况下代码不能被中断,就我所知,目前还没有,ArmStrong先生也没有提到过,暂时把它放一边吧,遇到了再说。

再说“信号量”,信号量一般用于测试某种资源是否具备,比如如果两辆交叉汽车(进程)要经过中关村桥这个十字路口,此时该路口定义了一个信号量(红绿灯),如果汽车A要通过时,他必须看信号量是否具备(绿灯亮),如果不具备就暂时等待,如果具备的话,首先把信号量改变为红色,然后再通过,通过后再把信号量改为绿灯。这种方式在多线程程序中多用于线程同步,比如,只有两个线程同时执行到一个点(信号量)后,两个线程才能继续执行。由于Erlang 中的进程彼此独立,或者说,Erlang的设计者希望程序员把程序设计的独立一些,彼此不要互相影响,否则,一个线程崩溃后会殃及池鱼。

还有一种信号量方式,比如你和其它两个朋友约好去游乐场,然后你们约定周六早上先到公主坟相聚,再一起出发,而到游乐场后,你们可以各自分开,去玩自己喜欢的项目。你们一共三人,对应三个线程,公主坟就相当于一个信号量,要求你们三人同时到达才能一起出发,这就是线程同步的概念,而你们到游乐场后,又可以各自为乐去。

最后来看“共享区”,这是Erlang们最不愿使用的方法,因为他们连变量都排斥,而使用了未知数的概念,而且没有赋值之说,而是绑定,因此,在Erlang 中不会存在对一个存储区进行写操作超过1次。所以,共享区没有了。

了解了这些后,接下来让我们看看Erlang中如何创建一个线程,以及线程和线程之间如何传送消息。

还继续在刚才的prac.erl上增加代码吧。输入如下:

startProcess() ->

s pawn(fun process1/0).

process1() ->

r eceive

c1 ->

io:format("c1

received!"),

process1();

c2 ->

received!"),

io:format("c2

process1();

{condition, String} ->

[String]),

~p",

io:format("String

received:

process1()

e nd.

除此之外,你还需要在导出设置中增加如下

-export(startProcess/0).

注意,我们只导出startProcess函数,而不需要导出process1函数,因为process1函数仅在内部使用。

在erlang中,启动一个线程的语法很简单,spawn(fun 函数名/参数数目),其中spawn就是启动线程(Erlang不区分线程和进程,因此本文中所说的线程或者进程意义相同)的关键字,而fun关键字则是“函数引用”的关键字,如果要把函数作为参数,那么必须加上fun关键字,这和C语言中函数名直接可以作为函数引用有所不同。

然后我们来看一个线程的主体。线程的内部结构必须包含receive...end.关键字,所有的线程都有自己的一个邮箱,邮箱可以接受其它线程发送过来的消息。receive里面的结构其实是消息判别,对于上面这个例子,我们可以给该线程发送三种不同的消息,注意,小写字母开头的是原子,大写开头的是未知数,原子是不能再绑定其它值的。

先来试试这个进程的执行情况,切换到shell工具,一步一步如下输入:?c(prac).

?Pid = prac:startProcess().

?Pid ! c1.

?Pid ! c2.

?Pid ! {condition, iloveyou}.

?Pid ! {condition, 23}.

请仔细看看你输入完每句后,shell的返回。我将给你逐一解释。

Pid = prac:startProcess(). 这是执行startProcess函数,由于startProcess函数只有一句话,那就是spawn,启动一个线程,因此,该函数的返回值就是spawn函数的返回值,spawn总是会返回进程的ID,因此,Pid这个未知数会绑定到该线程的ID。

接下来Pid ! c1.则是向刚创建的这个线程发一个消息,消息的内容是一个原子c1。回到prac.erl的源码中,程序是如何处理c1消息的。没错,只是简单输出。消息的内容可以是任意值,因此Pid ! {condition, iloveyou},则是发了两个原子,再回到源码中,该消息可以和{condition, String}匹配,因为String是一个未知数,可以被一次性绑定到某个值,于是String就被绑定到iloveyou了,所以,

io:format("String received: ~p", [String]),就会输出该值,其中的~p是一个通配符,就像C语言中Printf中的%d一样,只不过erlang中的~p可以通配到任何数据类型。另外,请注意,这里对应~p的值要用中括弧[]包起来,先不用管这是为什么。

这就是整个创建进程,进程接受消息,并匹配消息的过程。的确是比较简单,接下来,稍微改进一下,让我们把发送消息的事情也交给源代码吧,否则你会觉得Pid ! Msg是shell提供的命令。

代码改变如下:

startProcess(Msg, Pid) ->

c ase Msg of

start -> spawn(fun process1/0);

stop -> Pid ! stop, exited

e nd.

process1() ->

r eceive

c1 ->

received!"),

io:format("c1

process1();

c2 ->

received!"),

io:format("c2

process1();

{condition, String} ->

[String]),

~p",

io:format("String

received:

process1();

stop ->

void

e nd.

同时,更改导出函数的参数为 –export(startProcess/2),因为这里有两个参数了。更改后的源代码可以启动一个线程,同时终止一个线程。当调用startProcess 的Msg参数为start的时候就启动一个线程,当参数为stop,同时参数Pid为刚才创建的线程ID,那么就会停止该线程,因为process1收到stop参数后,没有继续循环,那就意味着退出了。

切换到shell里面,执行以下输入:

?c(prac).

?ID = prac:start(start, 0). //注意,由于启动一个进程时,参数Pid是无所谓的,所以这里我们写了一个0

?ID !c1.

?ID !c2.

?ID !{condition, loveyou}.

仔细看看输出的结果。然后,请注意,我们要发送一个让它停止的消息了。

?prac:startProcess(stop, ID). //用ID作为刚才创建的ID值,stop是一个原子。

?ID !{condition, loveyou}.

此时,你会发现,该消息已经不能被process1处理了,原因是ID对应的线程已经不存在,可为什么不存在的情况下也没有提示我们一个发送失败的消息?

这个暂时我也没理解,先放下吧。

现在,大家应该对erlang的并发和消息有所了解了,但是还未触及erlang最敏感的神经,那就是erlang的多线程管理到底有优势吗?我们说一个线程管理机制是否优秀有以下几个条件:

1,线程创建的时间较短

2,线程调度的时间较短

3,线程之间彼此友好,而不能互相破坏

在ArmStrong先生的著作里,对第一项做了一个测试,我很关心这个,于是,我在win32的平台下做了一个类似的测试,大家可以对照一下,Erlang和window 到底谁创建线程的时间更短?大家其实更应该关心最后的数据,而不要被其中不理解的代码阻碍不前。

本例中,我们创建一万个线程测试一下,先让erlang上场。

代码如下,当然,我们还是可以把这部分代码加入到prac.erl文件中。

procCreateTime() ->

s tatistics(runtime),

s tatistics(wall_clock),

N = 10000,

L = for(1, N, fun() ->spawn(fun() ->wait() end) end),

{_, Time1} = statistics(runtime),

{_,Time2} = statistics(wall_clock),

l ists:foreach(fun(Pid) -> Pid !die end , L),

U1 = Time1 * 1000/N,

U2 = Time2 * 1000/N,

i o:format("Porcess create Time = ~p(~p)microsecond", [U1, U2]).

wait() ->

r eceive

die ->void

e nd.

for(N, N, F) -> [F()];

for (I, N, F) ->[F() | for(I+1, N, F)].该测试用例下面有两个小函数,其中wait()函数,当然也是一个进程,只处理die消息,当然,你可以把这个消息命名为任何原子,比如hisdie, herdie, bird等,这都无所谓。如果该进程的邮箱中没有任何消息,那么该消息就被挂起。

下面的for其实也是一个函数,只是,这两个句子之间是靠分号分隔的,表面上看不像一个函数,而是两个函数,这就是分号的作用,这个分号的左右和前面讲到的case of每一个分支中的分号作用一样。你可以先不用管这个for函数里面的具体实现,只要知道,该for函数是执行N次F所代表的函数,然后返回一个包含N个元素的列表,每个元素是对应的F函数的返回值,在这里其实是创建每个进程后的进程ID。

statistics函数的作用你可能会猜得出来,即统计上次调用和本次调用时的时间差。procCreateTime函数正是计算创建10000个线程所用的时间。让我们来编译运行一下,看看结果。

在我的电脑上运行结果为

65> prac:procCreateTime().

Porcess create Time = 10.9000(6.30000)microsecond

实际时间是6.3微妙,但是其中的runtime时间则每次执行时变化比较大,你可以测试一下。

接下来,让我们看看window平台下,创建10000个线程所需要的时间。源码如下:

//thread1 program

void Thread(PVOID pvoid)

{

Sleep(INFINITE);

_endthread();

}

//winmain

int WINAPI WinMain (HINSTANCE hInstance, HINSTANCE hPrevInstance,

PSTR szCmdLine, int iCmdShow)

{

TCHAR buff[100];

DWORD icount;

icount = GetTickCount();

for(int i=0; i<10000; i++)

{

_beginthread(Thread, 0, 0);

}

icount = GetTickCount() - icount;

wsprintfW(buff, TEXT("%d"), icount);

MessageBox(0, buff, TEXT("Proccess create time"),MB_OK);

}

输出结果如下图

我的天哪,12.188秒,这和erlang完全不是一个数量,如果erlang是6.3微秒的话,这大概是多少倍呢!天哪,1934603倍,近200万倍,太不可思议了,是不是我的C程序中for循环占用太多的时间呢?好,我单独计算一下for循环的时间,如下图输出。

也就是说,for循环没有占用任何时间,OK,这下erlang们可以很自豪的说,erlang的线程管理的确是来自超太空的,很酷。

我本打算要测试一下线程调度的时间对比,然而,现在发现已经不需要了,原因是我必须在1万个线程中,让他们彼此互发消息一次,也就是说先给1发一个消息,1把消息传给2,2再传给3,以此类推,一直到1万,然后统计这个过程中所花费的时间,但是看到上面这个测试的巨大差异之后,我想把这个工作留给你来,或许过些天当我有兴趣的时候再做这样一个测试。

关于第三点,线程之间彼此友好,不能回想破坏。window或者Linux的线程管理要民主的多项对于erlang来讲。这也不是必须的,否则机器语言也就不能称其为机器语言了,erlang很专制,因为它不允许代码需修改任何内存中的值,因此关于安全性,各有千秋,不过erlang的确是完全切断了破坏的道路,你可能觉得这个有点因噎废食,不过erlang不是针对所有应用程序的,它的这个不足或许已经可以支撑所谓的并发消息应用了吧。慢慢学习吧。

第四、 Erlang应用

前面我们曾对数据的输入和输出忽略没谈,现在可以看看了。和erlang进行交互数据有以下几种方式

1,通过文件方式

2,通过其他语言写的程序

3,通过数据库

4,通过网络

既然erlang的数据交互有这么多方式,那么它的应用可以联想一下。

1,比如从文件中读取一个数据,然后进行编码或者解码再存入文件。从这点上来将,erlang可以完全代替传统的C语言的文件处理。你可以在Erlang programming阅读详细的Erlang文件操作函数。这些完全是类似手册的内容,不需多讲。

2,erlang还可以和其他语言写的程序进行数据交互,比如你用C语言写了一个自定义的程序用于特定的数据处理,然后erlang可以实时调用这个程序。为什么要这样呢?毕竟erlang的语法限定了erlang的特殊性,erlang对于序列、列表的数学处理可能比较擅长,然而还是有很多缺陷,于是,用户可以用C语言写一些底层的机器代码,然后供erlang调用,还有另一种原因就是C语言有很多现成的库应用,可以基本上不加修改的拿来使用。

Erlang Programming也对C语言如何跟Erlang交互数据给出了一个例子,然而,那个例子很糟糕,作者并没有讲清楚Erlang是如何找到唯一的那个exe可执行文件。我有空的时候再补上这个特别的细节。

3,erlang有多个数据库接口,我了解到的就包括Mysql和Mnisea, Mysql可能大家比较熟悉,而Mnisea据说是有着很高性能,支持并发式应用的数据库引擎,既然erlang有这些数据库,你是不是想着让erlang做一个电子商务网站呢?

4,通过网络。也就是TCP协议,在erlang中创建一个TCP端口,然后收发信息,都很简单。既然erlang的优势在于并发性,你自然可以联想到,对于一个Web服务器来讲,要应对的最大挑战就是能够支持大量的并发页面请求,好了,Erlang就是干这个的,又有TCP端口函数。

在Programming Erlang那本书中,ArmStrong给出了一个例子用于介绍分布式程序的搭建。过程如下。

第一步,在本地计算机上创建一个服务器程序,比如可以是一个搜索引擎程序。

第二步,在本地计算机上,开启两个节点,一个运行服务器,另一个运行客户端。注意,erlang中,一个节点对应的是一个虚拟机,如果你开两个shell的话,就意味着启动了两个虚拟机,VM绝对是软件,你可别以为它是芯片或者硅。

第三步,在局域网内的不同计算机上分别运行服务器节点和客户端节点。

第四步,在广域网中运行。

看完这些,你大概也能感觉到Erlang似乎可以干什么了吧?

我很关注的一个用Erlang写的开源项目叫做Ejabberd,https://www.wendangku.net/doc/4a3439654.html,,这个网站的后台就是基于Ejabberd的,当然我是说它的聊天部分,也就是说,改聊天服务器支持标准XMPP通信协议,可以跟Gtalk互通,然而,我还并不清楚

Ejabberd的软件架构,希望有兴趣的朋友可以一起交流,仔细分析这个项目,并对其进行改造,定制一个更适合我们的即时聊天服务器。

第五、 对Erlang的点评

1,Erlang的BIF命名很糟糕

Erlang当初的设计估计是没有考虑这个问题,由于erlang内置了很多函数,然而其命名却非常普通比如stastics(),等等,这些函数既没有特别的标注,也没有特别的格式,而这很容易和我们自己写的函数产生重命名的错误,如果当初设计者么在BIF函数之前加上bif_这样的前缀可能会更好一些。所以说,Erlang还只是一个专家语言,不过或许以后的情况能有所改变。

2,Erlang Programming的几个例子写的不够好

Programming Erlang中的例子,总的来讲,不好。

第一,程序代码量太大。既然我们只是想了解语言,那么例子中,代码越少越好,然而在这本书中,其中的“接口技术”部分,嵌套多层函数,转移读者注意力。更糟糕的是,在“IRL Lite”章节中,那个例子更是让人却步。在“顺序编程”章节中,那个高级比特语法介绍中,作者给出的find_sync函数后面的多层函数调用,包括is_header, unpack_eader, get_word等函数,为什么不把这些放在一个简单的函数中呢,从而方便理解比特语法,这些都是这本书中不足的地方。

3,Erlang中还存在很多特别的语法,比如宏定义和宏引用,如下:

-define(MY_MACRO, haiii).

T = {?MY_MACRO, erlang, php}.

还有匿名未知数,用下划线表示。比如:

{person, Name, _} = {person, xiaoke, 23}.

{person, Name2, _} = {person, xiaoli, 30}.

下划线由于是匿名未知数,所以不存在多次绑定的问题,这能够帮助我们减少不需要的未知数命名。

另外,对于一些数值的表示,比如16#2a, 表示的是16进制的值,还有2#1001, 32#1g, 8#23等等。

在使用shell的过程中,由于未知数的值被绑定后,不能重新绑定,不利用调试,因此你可以在shell中使用f(). 改函数告知erlang取消所有的绑定。

当然,还有很多语法的细节,这些只能在你深入了解erlang的过程中慢慢学习。

好了,先讲这些吧,我们慢慢一起进步,如果对https://www.wendangku.net/doc/4a3439654.html,平台后的Ejabberd有兴趣,可以联系我,文中所言不当之处,欢迎指正。joinwithyou@https://www.wendangku.net/doc/4a3439654.html,小柯

西方思想经典导读 有中文

Chapter 9 Romanticism 1. Romanticism refers to an attitude or intellectual orientation that characterizes many works of literature , painting, music, architecture, criticism, and historiography in western civilization over a period from the late 18th to the mid-19th century.浪漫主义指的是一种态度或知识取向,刻画出了许多作品的文学、绘画、音乐、建筑、批评和史学在西方文明在一段时间内从18世纪末到19世纪中叶。 2. The "Preface" to Lyrical Ballads by William Wordsworth, known as the manifesto of romanticism, addresses the subjects, aim and style of romantic poetry as well as the essential characteristics of a romantic poet.威廉·华兹华斯是一个浪漫的诗人,他写的抒情诗集的“卷首语”,被称为浪漫主义宣言,讨论了浪漫主义诗歌的主题,目的和风格以及基本特征的。 3. William Wordsworth was an early leader of Romanticism in English poetry, who ranks as one of the greatest lyric poets in the history of English literature.威廉·华兹华斯是英语诗歌中早期浪漫主义的领袖,他在英语文学的历史位列最伟大的抒情诗人之一。 4. William Wordsworth focused on nature, children, the poor, and ordinary people, and used plain words to express his personal feelings. His definition of poetry was "the spontaneous

2020年智慧树知道网课《中国现当代文学经典导读(吉林联盟)》课后章节测试满分答案

第一章测试 1 【单选题】(10分) 1918年,鲁迅在《新青年》第4卷第5号发表了他的第一篇白话小说()。 A. 《呐喊》 B. 《彷徨》 C. 《狂人日记》 D. 《阿Q正传》 2 【单选题】(10分) 祥林嫂是鲁迅哪部作品中的人物()。 A. 《孔乙己》 B. 《药》 C. 《离婚》 D. 《祝福》

3 【单选题】(10分) 《阿Q正传》收入鲁迅的小说集()。 A. 《朝花夕拾》 B. 《故事新编》 C. 《呐喊》 D. 《彷徨》 4 【单选题】(10分) 《故事新编》中哪篇作品原题《不周山》?() A. 《采薇》 B. 《奔月》 C. 《铸剑》 D. 《补天》

5 【单选题】(10分) 《野草》出版前发表于《语丝》上的散文诗有()首。 A. 23 B. 21 C. 22 D. 20 6 【单选题】(10分) 《凤凰涅槃》是郭沫若哪部诗集中的诗作()。 A. 《前茅》 B. 《恢复》 C. 《女神》 D. 《星空》

7 【单选题】(10分) 中国现代文学史上第一部短篇小说集是()。 A. 《呐喊》 B. 《彷徨》 C. 《沉沦》 D. 《女神》 8 【单选题】(10分) 《再别康桥》的作者是()。 A. 陈梦家 B. 闻一多 C. 徐志摩 D. 朱湘

9 【单选题】(10分) 《再别康桥》实现“中和之美”的方式是()。 A. 虚实结合 B. 动静结合 C. 去粗取精 D. 快慢结合 10 【单选题】(10分) 最能代表周作人冲淡平和艺术风格的散文集是()。 A. 《谈龙集》 B. 《泽泻集》 C. 《雨天的书》 D. 《谈虎集》

西方经典书目汇总

1.《尼各马可伦理学(The Nicomachean Ethics of Aristotle)》作者:亚里士多德(Aristotle)分类号: 2.《道德情操论(The Theory of Moral Sentiments)》作者:亚当·斯密(Adam Smith)分类号:B82-02/S642 3.《论人类不平等的起源和基础(A Discourse on Inequality)》作者:卢梭()分类号:D081/R864 4.《实践理性批判(Critique of Practical Reason)》作者:康德(Kant)分类号:K16 5.《道德形而上学基础(Foundations of the Metaphysics of Morals)》作者:康德(Kant)分类号:K16 6.《功利主义(Utilitarianism)》作者:穆勒(Mill)分类号:D081/R864 7.《伦理学原理(Principia Ethica)》作者:摩尔()分类号:M822 8.《正义论(A Theory of Justice)》作者:罗尔斯(John Rawls)分类号: 9.《无政府、国家与乌托邦(Anarchy, State and Utopia)》作者:诺齐克(Robert Nozick)分类号:B82-069/N961 10.《追寻美德(After Virtue)》作者:麦金太尔(Alasdair MacIntyre) 哲学: 1.《理想国(Republic)》作者:柏拉图(Plato)分类号:P718 2.《形而上学(Metaphysics)》作者:亚里士多德 (Aristotle)分类号:A716 3.《诗学(On the Art of Poetry)》作者:亚里士多德 (Aristotle)分类号:A716 4.《诗艺(On the Art of Poetry)》作者:贺拉斯(Horace)分类号:A716 5.《论崇高(On the Sublime Longinus)》作者:朗吉奴斯(Longinus)分类号:A716 6.《第一哲学沉思录(Meditations on First Philosophy)》作者:笛卡尔(Rene Descartes)分类号:D445 7.《思想录(Pascal’s Penssees)》作者:帕斯卡尔(Blaise Pascal)分类号: D445 8.《人性论(A Treatise of Human Nature)》作者:休谟(David Hume)分类号:H921 9.《纯粹理性批判(Critique of Pure Reason)》作者:康德(Kant)分类号:K16 10.《判断力批判(Critique of Judgment)》作者:康德(Kant)分类号:K16 11.《精神现象学(The Phenomenology of Mind)》, 作者:黑格尔(Hegel)分类号:H462 12.《小逻辑(The Logic of Hegel)》作者:黑格尔(Hegel)分类号:H462 13.《作为意志和表象的世界(The World as Will and Representation)》, 作者:叔本华(Schopenhauer)分类号:S373 14.《查拉图斯特拉如是说(Thus Spake Zarathustra)》作者:尼采(Friedrich Nietzsche)分类号:N677 15.《非此即彼(Either/Or)》, 作者:克尔凯郭尔(Kierkegaard)分类号:B534/K47 16.《普通语言学教程(Course in General Linguistics)》作者:索绪尔( Saussure)分类号:H0/S255 17.《纯粹现象学导论(Ideas: General Introduction to Pure Phenomenology)》作者:胡塞尔(Edmund Husserl)分类号:H972 18.《逻辑哲学论(Tractatus Logico Philosophicus)》作者:维特根斯坦()分类号:B521/W831 19.《哲学研究(Philosophical Investigations)》作者:维特根斯坦()分类号:B521/W831 20.《存在与时间(Being and Time)》作者:海德格尔(Martin Heidegger)分类号:H465 21.《诗·语言·思(Poetry, Language, Thought)》作者:海德格尔(Martin Heidegger)分类号:H465

文学经典导读

1.兼容并包,英华荟萃——回忆北京大学什么是兼容并包呢?作者举了两个著名的例子。五四四期,是一个推翻了千年帝制的革命风云的时期,也是新学盛行的时期,但,仍有两位“大反动派”在北大公开任教,一是辜鸿铭,一是刘师培。“辜鸿铭在民国已经成立了几年之后,还是带着辫子,穿着清朝衣冠,公开主张帝制”;刘师培是鼓吹复辟帝制的臭名昭著的“筹安会”“六君子”之一,但他们俩,一个“英文在当时说是水平很高的”,一个“出身于一个讲汉学的世家”,讲中国中古文学史“上课既不带书,也不带卡片,随笔谈起来,就是头头是道。援引资料,都是随口背诵。当时学生都很佩服”,所以,北大就请他们任教,因为在北大看来,“教授之所以为教授,在于他在学术上有所贡献,在他本行中是个权威,并不在于他在政治上有什么主张”。北大所以能有这样的选聘教授的观念,是与北大对大学性质的认识分不开的。在北大看来:“学校的任务,基本上是传授知识,大学尤其如此。一个大学应该是各种学术权威集中的地方,只要是世界上已有的学问,不管它是什么科,一个大学里面都应该有些权威学者,能够解答这种学科的问题。大学应该是国家的知识库,民族的智囊团。”正因为如此,所以北大才能认定“学校是一个…尚贤?的地方,谁有知识,谁就在某一范围内有发言权,他就应该受到尊重”。辜鸿铭、刘师培在北大能够受到尊重,原因在此。西方的系统论认为,每一个系统在其自身的发展过程中,只有汲取异质的他系统的资源,才能调整自身的内在矛盾,从而使自身得以健全。北大的兼容并包,有利于各思想、学术、知识系统,在相互的竞争、对抗、汲取的过程中,发展、健全了自身,也只有兼容并包,才能使思想、学术、

知识系统的精英人物,荟萃于北大。兼容并包,英华荟萃,这确实是北大可引以为骄傲的啊 2十八岁出门远行在经历这场浩劫之后,文中写出了“我”和汽车、的哪些相同感受?作者把二者结合起来写有什么好处?经历了这场浩劫后,“我”和汽车都遍体鳞伤,浑身冰凉,无限悲伤,但心窝还是暖和的。作者把他们结合在一起,因为两者有相似的经历,更重要的是作者借汽车这一有形的实体,用它的遭遇来表现“我”在这场经历后的感受。化抽象为具体,变无形为有形,让人真实可感。我无限悲伤地看着汽车,汽车也无限悲伤地看着我。。。作者把汽车当做人来写,通过“我”和汽车的对视,写出了远行遭遇挫折后、理想破灭之时的无奈之情。象征手法:“红色的背包”象征了青春。青春的色彩是鲜红的,充满着热烈的激情。“红色的背包”的被抢,暗示了青春理想的破灭。文中寻找旅店的过程,也同样充满了象征意味。“我”一路上不停地寻找旅店,然而却始终没有找到,最后只能在破车里暂且安身。人的一生不也就是这样永远处于漂泊之中吗?理想的“旅店”,安定的归宿,温暖的港湾,也许并不存在。我感到这汽车虽然遍体鳞伤,可它心窝还是健全的,还是暖和的。我知道自己的心窝也是暖和的。。。这里采用了拟人的手法,同时也是象征的手法,汽车的“心窝”是“健全”“暖和”的,字面上是照应前面驾驶室里的座椅没有被撬去,劫难相对要小,也可理解为少年对世界没有彻底的绝望,还抱有一点幻想,所以说“自己的心窝也是暖和的”。文章最后才写“我”出门时的情景,分析这样写的用意和好处。。。这是一种倒叙手法,不仅照应了文章开头,使故事更加完整,而且进一步深化了文章的

《西方思想经典》复习资料

1. What does the word ―BIBLE‖ mean? book 2. In Plato’s allegory of the cave, what does the sun represent?Truth 3. Who came up with the sardonic讽刺的theory of humor?Thomas Hobbes 4. According to genesis, god created how many days?Six days 5. Who once attended Plato’s academy学院?Aristotle 6. Which writer was imprisoned被囚禁during World WarⅡ?Jean-Paul Sartre 7. According to genesis, what is the name of the place where Eve and Atom lived?The Garden of Eden 8. Nicolo Machiavelli was what nationality? Italian 9. According to genesis, which part does god use to create Eve from Atom?Rib 10. What is the Sabbath day? The day of rest 11. What is a leviathan?Sea monster 12. Who said love your enemies?Jesus 13. Who does Saul murder in Acts of the Apostles? Stephen (Stoned) 14. What may be seen as an irrationalist revolt against traditional Western philosoph y, idealism in particular, as it rejects epistemology and the attempt to ground human knowledge?Jean-Paul Sartre: Existentialism 15. What is a saint?A saint is a holy person.In the Christian Bible, only one person is expressly called a saint: "They envied Moses also in the camp, and Aaron the saint of the LORD." 16. Which female writer lived a ―free, lifelong association‖ with Jean-Paul Sartre?Simone de Beauvoir 17. What is a centurion百夫长?Roman soldier 18. It is much safer to be feared than loved.Machiavelli: The Prince 19. Men living together according to reason with out a common superior or earth, with authority to judge between them is properly the state of Nature.John Locke: Of Civil Government 20. Our Father, which art in heaven/hallowed be thy name;thy kingdom come;thy will be done,in earth as it is in heaven.Give us this day our daily bread.And forgive us our trespasses,as we forgive them that trespass against us.And lead us not into temptation;but deliver us from evil.[For thine is the kingdom,the power, and the glory,for ever and ever.]Amen.Matthew 21. In the beginning god created the heaven and the earth.Genesis 22. Rather, it declares that even if god did exist, that would change nothing. Jean-Paul Sartre: Existentialism 23. Behold! Human beings living in a underground den, which has a mouth open towards the light and reaching all along the den; here they have been from their childhood, and have their legs and necks chained so that they cannot move, and can only see before them, being prevented by the chains from turning round their heads. Above and behind them a fire is blazing at a distance, and between the fire and the prisoners there is a raised way;Plato: The Republic 24. Blessed are the meek, for they shall inherit the earth.Matthew 25. God is a useless and costly hypothesis假设.Jean-Paul Sartre: Existentialism 26. This human animal—prescient, sagacious, complex, acute, full of memory, reason and counsel, which we call man,—is generated by the supreme God in a more transcendent condition than most of his fellow–creatures. For he is the only creature among the earthly races of animated beings endued with superior reason and thought, in which the rest are deficient. And what is there, I do not say in man alone, but in all heaven and earth, more divine than reason, which, when it becomes ripe and perfect, is justly termed wisdom?Cicero: On the Laws 27. Thus humanity is male and man defines woman not in herself but as relative to him; she is not regarded as an autonomous being.Simone de Beauvoir: The Second Sex 28. Religion is based, I think, primarily and mainly upon fear. It is partly the terror of the unknown and partly, as I have said, the wish to feel that you have a kind

中国经典导读课后感想

中国经典导读课后感想 电子1201 文化是一个国家文明的象征,浓缩了民族的智慧。中华文化其浩瀚的典籍记录了 悠久的历史,铸就了中华民族知书达礼的品德,其传统伦理延续了几千年,奠定了中 华的凝聚力和向心性。其独特的思维方法影响了世世代代,构成了东方思维的模式, 形成了中华民族的整体性及和-谐性,从而使中国成为了一个能包容多种文化及融合数十个民族组成的泱泱大国。 而在这次的选修课中在老师的带领下我队许多中国经典名著有了一定的了解。《周易》《礼》《诗经》《论语》《道德经》等中国家喻户晓的的经典名著中包含了古人的无穷智慧,他们的观念即使是到了现代还是具有非凡的意义。 《周易》是一部论“变”法的奇书。《周易》的变法序列是用形象表达出来的。这些 看似神奇的形象不是凭心灵的任意创造、而是有它物化基础及其实践这个认识环节。 这本书有着太多的神奇,传说里面的卦象可以预知事情的过去未来。其实个人认为里 面包含高深的生活哲理,当我们对事情的产生疑惑然后根据书上记载的现象对号入座,就可以预知事情发展的方向。 在宗教意识不甚发达的古代中国,祭祀等原始宗教仪式并未象其他一些民族那样发展成为正式的宗教,而是很快转化为礼仪、制度形式来约束世道人心,共有一百多 卷的《仪礼》便是一部详细的礼仪制度章程,告诉人们在何种场合下应该穿何种衣服、站或坐在哪个方向或位置、第一第二第三……每一步该如何如何去做等等。据《仪礼》载,天子、诸侯、大夫、士日常所践行的礼有:士冠礼、士昏礼、士相见礼、乡饮酒礼、乡射礼、燕礼、大射礼、聘礼、公食大夫礼、觐礼、士丧礼、丧服、既夕礼等等。《礼》就是一本古代人用来巩固统治约束人民的一种工具。 《诗经》是中国最早的一部诗歌总集,它收集了自西周初年至春秋中叶大约五百多年 的三百零五篇诗歌。在里面的有些篇目之中让人感到了淳朴的民风让人感到了当时诗 人生活美好心情愉悦。 《论语》是儒家学派的经典著作之一,由孔子的弟子及其再传弟子编撰而成。它以语录体和对话文体为主,记录了孔子及其弟子言行,集中体现了孔子的政治主张、论 理思想、道德观念及教育原则等,对后世影响之大不言而喻。 《道德经》,又称《老子》、《老子五千文》,相传是道教的创始人老子所著,所以《道德经》就被奉为道教最高经典。其实,该经典还是中国古代重要的哲学著作 之一,全面地体现了古代中国人的一种世界观和人生观,对中国人的生活产生了很大 影响。 《道德经》原文分上下两篇,上篇《道经》从第1章到第37章,下篇《德经》从 第38章至第81章。《道德经》的全部内容,主要是阐述“道”和“德”的深刻含义,它代表了老子的哲学思想。第一次深入学习《老子》,发现老子的思想并非如我从前

西方思想经典导读中文翻译,孙有中,外语教学与研究社

Chapter 1 Greek Culture(希腊文化) 古希腊是用来描述在古代讲希腊语世界的术语。它不仅指目前希腊国家的领土,还包括那些希腊人定居的地区: 塞浦路斯、土耳其爱琴海海岸(当时称为lonia),西西里和意大利南部(被称为大希腊),希腊定居点分散在海岸上,即现在的阿尔巴尼亚,保加利亚、埃及、利比亚、罗马尼亚、西班牙、法国和乌克兰。 传统意义上,古希腊时期被认为以西元前776年第一次奥运会为开端,但大多数历史学家现在把开端扩展到西元前1000年左右。传统的古希腊时期以西元前323年亚历山大大帝的去世为结束。接下来的时期被称为希腊化,一直持续到西元前146年——希腊半岛和岛屿被罗马兼并。 希腊的民族,在分割的地理环境和各种各样族群的影响下,发展为城邦——小定居点成长为小王国。这些城市分别独立发展。然而,存在一种普遍的发展模式,即情况在每个特定阶段多多少少会有所不同。君主制屈从于贵族制,贵族制接着被僭政取代。在希腊大陆的僭政很快屈从于寡头政体或政体,并通过有限的公和奴隶主予以缓和;在希腊的政治的理念便应运而生。梭伦在雅典创立制。军事化的斯巴达有独特的宪制和社会发展。交战的城邦有一种团结的意识;他们所有的公民认为他们自己都是古希腊人。 特别是雅典戏剧性地成长。戏剧,诗歌,雕塑,建筑学和哲学繁荣起来,并且这里有蓬勃的智识生活。一些西方文化名鼎鼎的和在雅典思想史上享誉盛名的人在这一时期诞生:剧作家埃斯库罗斯,阿里斯多芬尼斯,欧里庇得斯和索福克里斯,哲学家亚里士多德,柏拉图和格拉底,历史学家希罗多德,修西得底斯和色诺芬,诗人西蒙尼戴斯和雕刻家菲迪亚斯。这座城市成为如伯里克里所说“希腊人的学校”。 古希腊被大多数历史学家视作西方文明的奠基文化。希腊文化对罗马帝国有强大的影响,他把这种版本带到欧洲的许多地方。古希腊文明已经极影响了现代世界的语言、政治、教育体制、哲学、艺术和建筑学,尤其是在西欧文艺复兴期间,并在18、19世纪各种新古典主义的复兴时期再次影响了欧洲和美洲。 Plato 柏拉图 格拉底曾是西方文明最受尊崇的人之一。他是雅典制度兴衰的见证者——从伯里克利的改革到宽容的衰退——在西元前404年雅典在佛罗奔尼萨战争蒙受耻辱的失败后。 作为石匠的儿子,格拉底最终离开家庭,去探寻一种高尚的事业的路径,亦即对真理和智慧的追求。他对自己使命的激情为他赢得了一大批的追随者,尤其在年轻人当中,而恰恰就是这种精神导致了他的殉难。对他的审判标志着雅典理想和崇高原则的崩溃,而且他的死亡标志着雅典制度的衰退。

中国古代文学经典书目导读

馆藏中国古代经典书目导读 前言 中国古代文化典籍凝聚了中国传统文化的精髓,是祖先留给我们的丰厚精神财富。经典是人类精神宝库中最灿烂的组成部分,它们凝聚了作者对人生、社会和时代的思考,具有永恒的艺术魅力和深刻的思想内涵,是每个人一生中都不应错过的精神驿站。 世代中国人通过经典阅读而汲取了多方面的营养,传承了中华文化,创造了新的生活经验。阅读经典可以给人以智慧的启迪,可以提高一个人的修养,从而为走向成功的人生打下坚实的基础。经典阅读在今天仍然是我们提高自身素质、保持民族自信的一条有效途径。 中国古代文化典籍浩如烟海,不能一一赘述。这里精选了几部有代表性、流传较广、影响较大的作品,通过“必读理由”、“作者简介”、“内容提要”、“名家汇评”、“延伸阅读”等栏目帮助读者多角度解读经典,为深入阅读提供指导。使读者在提高阅读效率的同时,获得更多的想象空间和文化熏陶。

馆藏中国古代经典书目 1.《周易》——群经之首,大道之源。 索书号:B22/120 馆藏:社科书库 2.《诗经》——我国第一部诗歌总集。 索书号:I222.2/19 馆藏:文学书库 3.《尚书》——纪言述事之祖。 索书号:B22/9 馆藏:社科书库 4.《春秋左传》——我国第一部叙事详备的编年体史书。 (春秋)左丘明 索书号:K225/57 馆藏:社科书库 5.《国语》——我国现存第一部国别体史书。 (春秋)左丘明 索书号:K225/52 馆藏:社科书库 6.《战国策》——我国第一部记录策士谋臣言行的专集。(西汉)刘向 索书号:K231/22 馆藏:社科书库 7.《孙子兵法》——我国第一部军事著作,世界古代第一兵书。 (春秋)孙武 索书号:E892/11 馆藏:社科书库 8.《论语》——我国第一部语录体散文作品。 索书号:B222/171 馆藏:社科书库 9.《孟子》——是儒家学说的经典著作之一。(战国)孟轲 索书号:B22/121 馆藏:社科书库 10.《荀子》——先秦重要的哲学著作和散文集。 (战国)荀况 索书号:B222/169 馆藏:社科书库 11.《大学中庸》——儒家经典,列入“四书”。 (春秋)曾参、子思 索书号:B222/523 馆藏:社科书库 12.《墨子》——中国逻辑学的代表作。 (春秋)墨翟 索书号:B224/22 馆藏:社科书库 13.《道德经》(《老子》)——是中国历史上首部完整的哲学著作,被誉为“万经之王”。(春秋)老子 索书号:B223/72 馆藏:社科书库 14.《庄子》——推进道家思想而具有集大成意味的著作。 (战国)庄周

《西方思想经典》复习

1. W h a t d o e s t h e w o r d“B I B L E”m e a n?b o o k 2. In Plato’s allegory of the cave, what does the sun represent?Truth 3. Who came up with the sardonic讽刺的theory of humor?Thomas Hobbes 4. According to genesis, god created how many days?Six days 5. Who once attended Plato’s academy学院?Aristotle 6. Which writer was imprisoned被囚禁during World WarⅡ?Jean-Paul Sartre 7. According to genesis, what is the name of the place where Eve and Atom lived? The Garden of Eden 8. Nicolo Machiavelli was what nationality? Italian 9. According to genesis, which part does god use to create Eve from Atom?Rib 10. What is the Sabbath day? The day of rest 11. What is a leviathan?Sea monster 12. Who said love your enemies?Jesus 13. Who does Saul murder in Acts of the Apostles? Stephen (Stoned) 14. What may be seen as an irrationalist revolt against traditional Western philosoph y, idealism in particular, as it rejects epistemology and the attempt to ground human knowledge?Jean-Paul Sartre: Existentialism 15. What is a saint?A saint is a holy person.In the Christian Bible, only one person is expressly called a saint: "They envied Moses also in the camp, and Aaron the saint of the LORD." 16. Which female writer lived a “free, lifelong association” with Jean-Paul Sartre?Simone de Beauvoir 17. What is a centurion百夫长?Roman soldier 18. It is much safer to be feared than loved.Machiavelli: The Prince 19. Men living together according to reason with out a common superior or earth, with authority to judge between them is properly the state of Nature.John Locke: Of Civil Government 20. Our Father, which art in heaven/hallowed be thy name;thy kingdom come;thy will be done,in earth as it is in heaven.Give us this day our daily bread.And forgive us our trespasses,as we forgive them that trespass against us.And lead us not into temptation;but deliver us from evil.[For thine is the kingdom,the power, and the glory,for ever and ever.]Amen.Matthew 21. In the beginning god created the heaven and the earth.Genesis 22. Rather, it declares that even if god did exist, that would change nothing. Jean-Paul Sartre: Existentialism 23. Behold! Human beings living in a underground den, which has a mouth open towards the light and reaching all along the den; here they have been from their childhood, and have their legs and necks chained so that they cannot move, and can only see before them, being prevented by the chains from turning round their heads. Above and behind them a fire is blazing at a distance, and between the fire and the prisoners there is a raised way;Plato: The Republic 24. Blessed are the meek, for they shall inherit the earth.Matthew 25. God is a useless and costly hypothesis假设.Jean-Paul Sartre: Existentialism 26. This human animal—prescient, sagacious, complex, acute, full of memory, reason and counsel, which we call man,—is generated by the supreme God in a more transcendent condition than most of his fellow–creatures. For he is the only creature among the earthly races of animated beings endued with superior reason and thought, in which the rest are deficient. And what is there, I do not say in man alone, but in all heaven and earth, more divine than reason, which, when it becomes ripe and perfect, is justly termed wisdom?Cicero: On the Laws 27. Thus humanity is male and man defines woman not in herself but as relative to him; she is not regarded as an autonomous being.Simone de Beauvoir: The Second Sex 28. Religion is based, I think, primarily and mainly upon fear. It is partly the terror of

《中国现代文学经典导读》课程学习心得1

《中国现代文学经典导读》课程学习心得我喜欢文学,从小就喜欢。在高中之前,我一直以为我可能会做个作家。可是命运鬼使神差的让政治课绊了我的脚,于是我毅然决然的投靠了理科。在化学元素、物理公式的摧残下,我仅存的一点文学气息一点点消失。即使偷偷的恶补几本名著,也还是阻扰不了理性思维的形成。就这样,我与文学渐行渐远。再后来就是来到大学,被调济的专业注定没什么趣味。直到看到这门《中国现代经典导读》,我便扑身过来。 刚开始,我对这门课是挺失望的。本以为会专注于讲解作品的我觉得,这门课东拉西扯,不知所谓。可后来我逐渐意识到自己的浅薄,没有作家生平的介绍怎么能更好的理解作品本身呢?于是我便喜欢上了这门课,以至于找不到逃课的理由。而后我便从这门课中学到很多很多。 记忆有限,我只能尽我所能写下些我记忆犹深的东西。 第一节课介绍的是我们熟悉的现代文学家——鲁迅。90后是摆脱不了鲁迅的,并不是我们有多爱鲁迅,而是因为从小学到初中到高中的语文课本,无论是什么版本也无论怎么改革,都绝对不会少了鲁迅的作品。鲁迅是中国现代文学家中我最为熟悉的一个了,他的为救国救民弃医从文的勇气鼓舞了很多当代人,为救国救民弃医从文的爱国精神、拿笔杆为武器捍卫国家尊严的爱国精神感染了很多当代人。这些都是从小学就形成的对鲁迅先生的印象。可我不喜欢他,虽然他横眉冷对,狠狠鞭挞中国人的劣性,可谓是“中国的一面照镜子”。因为他的作品苦涩难懂,还总打着官方正统的旗号。当然他苦大仇深,跟有人欠他钱似的表情也是一个原因。 上了这次的选修课,我对鲁迅有了新的认识。特别是鲁迅给许广平的情书,那么甜密,那么开放,一点都不似那个苦大仇深的鲁迅,真是让我笑掉了大牙。当然鲁迅先生对孩子的热爱也都一点一点的给了我一个立体的鲁迅——很有爱,很可爱。另外老师还讲了鲁迅与朱安的事。鲁迅现在对朱安的薄情,曾被很多人拿来与胡适做比较,被很多人诟病过,但我认为继续维持不幸的婚姻更是一种折磨,两个没有共同话题,没有共同理念的人,该如何扶持走完一生。经老师介绍也了解到,鲁迅也并非对朱安薄情,为了保全朱安的名声,并没有与朱安离婚。当然这也从另一方面体现了许广平的伟大。鲁迅与朱安的婚姻是不幸的,与许广

西方思想经典名词解释整理

西方思想经典名词解释整理

智者 智者是在希腊城邦中涌现出的一批职业教师,他们自称智者,对社会政治和伦理问题进行了广泛的探讨,阐述了许多新颖的主张和见解,智者以人的眼光去考察社会政治和法律问题,将希腊学术研究的主题从对自然和神的研究转向和社会;智者关注自然与约定的关系,有的智者肯定习俗和法律的价值,认为其符合自然和正义,主张人们应维护和遵守城邦的习俗和法律;也有的智者将自然和法律对立起来,主张变更或废弃与人性相悖的法律和习俗;这已经蕴含了自然法思想的萌芽。从“自然”与“法律”的对立出发,一些智者引伸出了十分激进的平等思想。它成为斯多葛派平等思想的先声。 2、 苏格拉底 苏格拉底是与智者同时代的人,他与智者一起推动了希腊哲学研究由自然向人和社会的转向。他特别关注伦理道德问题的讨论,他喜欢研究“什么是??”的问题,也即探讨事物的本质,这使他

成为西方哲学和科学理性主义主流传统的开拓者。他突出强调道德是城邦政治的基础,而知识和教育是城邦政治的根本,并提出了“美德即知识”的著名论断。他认为治国是一门专门的知识,认为政治家应当是具有这种相应知识的人,并由此主张贤人政治和专家政治。 3、柏拉图 柏拉图是古希腊城邦时代的政治哲学家。他对理想国的基本原则和基本制度生活方式进行了阐述,论证了合乎正义的城邦的基本原则,描绘了城邦的基本结构和城邦生活。在柏拉图那里,所谓正义的城邦即理想国贯穿着整体主义的精神,和严格的社会分工的原则,柏拉图理想国的核心内容是哲学家执政治国,柏拉图以社会分工理论为基础,主张把政治统治权交给哲学家,把现实国家改造成理想国家。 4、哲学王 柏拉图理想国家的核心内容是哲学家执政。他认

中国现当代文学名著导读教学大纲

中国现当代文学名著导读教学大纲 (2001年10月7日审定通过) 第一部分大纲说明 一、课程的性质和教学目的 《中国现当代文学名著导读》是文科小国语言文学类汉语言文学专业本科教学的一门限选课程。本课程的教学目的,是让学生通过对所选文学作品的认真研读,学握其要义与艺术特色,达到对现当代文学成就的深一层认识,并提高阅读与鉴赏文学作品的能力。 本课程课内学时为108,共6学分,开设两个学期。 二、教学内容及要求 木课程按中国现当代文学的发展脉络,分小说、戏剧、散文、诗歌等不同体裁,精选冇代表性的若干名篇,组织学生阅读,教师就作品的要义及艺术特色进行评折。 学习本课程,要求学生必须阅读所选作品。由于篇幅所限,许多作品只是节选,冇条件的学生应阅读所选作品的全部内容。 三、教学媒体的使用 (一)文字教材 本课程以钱理群主编的《中国现当代文学名苦导读》为基本教材。《导读》是编制教学媒体、组织教学和复习考试的主要依据。 (二)音像教材 木课程录像课为重点辅导型,主要讲授学生难以理解的產点、难点问题,以及需要通过电视手段直观演示的内容,使学生通过电视课的直观教学加深对作家作品的认识。录像课为IP 电视,学生可以通过互联网收看并下载存储。 (三)计算机课件 本课程计算机课件(CAT)为网络版,主要用于网上教学辅导。 网络课件的主要内容由三部分构成:一是重点难点问题分析,二是各章综合 练习题与自测,三是拓宽学生知识面的内容,以使学生开启视野,扩展知识,提高水平。

四、教学建议 (一)主教材《屮国现当代文学名著导读》是以作家、作品这两个概念为纲组织相关的内容,尽可能使复杂的文学现象条理化、系统化。因此,教学中要紧扌II这两个概念,使学生能以此为视角去观察作家的创作思路和艺术结构,培养欣赏和分析作品的能力。 (二)与本课程相关联的课程有:专科阶段的《屮国现代文学》、《中国当代文学》、《外国文学》、《文学概论》,本科阶段的《中国现当代文学专题》、《20世纪外国文学专题》等。尤其是冇关中国现当代文学史的知识,学生必须具备。如果学生在专科阶段学的是非中文专业,一定要补修有关课程,否则很难学好木课程。 (三)"中国现当代文学名著导读”课程以中国现当代文学史上的名著为研究对彖,I 犬I而涉及的文学现彖比较多。学习中国现当代文学名著,需要了解足够的作家作品和文学基本知识,并对当前文学研究现状有所涉及。 (I川)木课程同其它文学课程和比,实践性较强,抽象的问题较多,因此教学中,教师要尽量多结合实例进行深入浅出的讲解,学生则要多注意实践练习,通过必要的练习去掌握有关的知识,同时还应注意综合利用本课程多种教学媒体,加强自学。 五、阅读建议 1. 主教材《中国现当代名著导读》,以精选作品为主,引导学生对文学名著作文木细读,进行“鉴赏性阅读”,即强调学习者心灵的投入,与作者进行精神的对话;不仅注意作者“写什么”,更着重体味作者“怎么写”,反复揣摩作品的言语,行文结构与文体风格;并提倡对作品的多样化的阐释。 2. 在鉴赏性阅读的基础上,还可以引导部分幕础与条件较好的学主进行“研究性阅读”,即进入文本乂跳出文本,进行质疑与乳观评价。要引导学生把作品放冋到“文学史”中,进行比较性的阅读(不同时代相类作品的比较,同一时代相类作品的比较,同一作家不同时期作品的比较,等等)。要指导学生学会发现 问题,查找资料,进行独立思考,写出分析性、研究性的文章。 3. 文学史知识不是本课程的重点,却是学好本课程的前提;也就是说,它是在专科阶段《中国现代文学》、《中国当代文学》、《外国文学》、《文学概论》及本科阶段《中国现当代文学专题》、《2 0世纪外国文学专题》等课程的基础上,着重于捉高学生的鉴赏与分析文学作

相关文档