第一次作业。

什么是图灵测试:
图灵测试(The Turing test)由艾伦·麦席森·图灵发明,指测试者与被测试者(一个人和一台机器)隔开的情况下,通过一些装置(如键盘)向被测试者随意提问。
进行多次测试后,如果有超过30%的测试者不能确定出被测试者是人还是机器,那么这台机器就通过了测试,并被认为具有 人类智能。图灵测试一词来源于计算机科学和 密码学的先驱阿兰·麦席森·图灵写于1950年的一篇论文《计算机器与智能》,其中30%是图灵对2000年时的机器思考能力的一个预测,目前我们已远远落后于这个预测
10个编程语言

C语言:

C语言是介于汇编语言和高级语言之间的语言,属于高级语言,也称为中级语言,是集汇编和高级语言优点于一身的程序设计语言。于1972年在美国贝尔实验室里问世。早期的C语言主要用于UNIX系统。由于C语言的强大功能和各方面的优点逐渐为人们认识,到了九十年代,C语言开始进入其他操作系统,并很快在各类大、中、小和微型计算机上得到广泛的应用。成为当代最优秀的程序设计语言之一。

C的特点

1. 是一种结构化语言。层次清晰,便于按模块化方式组织程序,易于调试和维护。

2. C语言的表现能力和处理能力极强。不仅具有丰富的运算符和数据类型,便于实现各类复杂的数据结构,它还可以直接访问内存的物理地址,进行位级别的操作。

3. 由于C语言实现对硬件的编程操作,所以既可用于系统软件的开发,也适合于应用软件的开发。C语言还具有效率高,可移植性强等特点。因此广泛地移植到了各类计算机上,从而形成了多种版本的C语言。

4. 由于C语言允许直接对位、字节和地址进行操作,能实现汇编语言的大部分功能。

5. 目标代码质量高,程序执行效率高。

总体上来说,C语言的优点是简洁、紧凑、使用方便、灵活、易于学习和应用。仅有32个关键字。9种控制语句,程序的书写形式也很自由。

C语言的弱点:非强类型;语法限制不严格,使得编程者无法过多地依赖C编译程序去查错;缺少实时检查,如数组越界等。从严格上来说,C语言是块结构语言,这是因为它在结构上类似于ALGOL、Pascal和Modula-2。从技术上讲,块结构语言允许在过程和函数中定义过程和函数。因为C语言不允许在函数中定义函数,所以不能称为通常意义上的块结构语言。

C语言作为一门面向过程的计算机语言,至今已有三十多年历史,应用广泛,无论是Windows还是Linux,你所看到的底层都是用C写的。大部分的网络协议也都是用C实现的。你看到的最漂亮的游戏画面也是用C实现的,工业控制程序也是用C实现的。不过C不是万能,只是某些方面它适用而已。

C++语言

C++是于1986年由AT&T贝尔实验室开发的,语言开发的目的在于通过数据封装减少程序变量的副作用,从而降低程序的复杂性并提高程序的可靠性。C++是C语言的直接扩展,C++的多继承机制能更好地描述对象的属性和行为是C++是C的扩展,但C++可以作为一种全新的语言来看。C++的特点:面向对象、继承、封装、多态性。由于C++是C的扩展,所以也具有C的特点。C++在C的基础上,加入了面向对象编程思想,也就决定了C++的效率在某一方面是不如C的。比如定义一种类型,C++用类(Class)来封装,而C可能就直接几个变量的组合就成了一个结构体(Struct),类不仅具有成员变量,还具有成员函数等,在精细的比较其效率时,C会比C++的效率要高。但由于时代的发展,项目或工程的庞大化,基于面向对象的思想显然更能适应。即C++在这方面能比C要做得更漂亮。现在不少系统级编程都是用C++实现,许多应用级别的软件也是用C++实现。这里要注意一点,就是C++并不是完全的面向对象语言。它是提供了面向对象的模型以及思路,但是同时兼容了面向过程的模型。

Java语言

Java语言来自于Sun公司的一个叫Green的项目,其原先的目的是为家用消费电子产品开发一个分布式代码系统,这样我们就可以把email发给电冰箱、电视机等家用电器。对他们进行控制和信息交流。开始,准备用C++,但C++太复杂,安全性差,最后用一种新的语言Oak(Java的前身),Oak是一种用于网络的精巧而安全的语言,Sun公司曾依此投标一个交互式电视项目,但被SGI打败。可怜的Oak几乎无家可归,恰巧这时Mark Ardreesen开发的Mosaic和Netscape启发了Oak项目组成员,他们用(Java)编制了HotJava浏览器,得到了Sun首席执行官Scott McNealy的支持,触发了Java进军Internet。Java的取名有一段趣闻:有一天,几位Java成员组的会员正在讨论给这个新的语言取什么名字,当时他们正在咖啡馆喝着Java(爪哇)咖啡,有一个人灵机一动说就叫Java怎样,得到了其他人的赞赏,于是,Java这个名字就这样传开了。

Java的特点:

1. 简单性:风格类似于C++,Java摒弃了C++中容易引发程序错误的地方,如指针和内存管理。

2. 面向对象:Java是一种完全面向对象语言。从这点来看,Java类似于SmallTalk,但其特性、尤其是适用于分布式计算环境的特性远远超越了SmallTalk。

3. 分布式:Java包括一个支持HTTP和FTP等基于TCP/IP协议的子库。因此,Java应用程序可凭借URL打开并访问网络上的对象,其访问方式与访问地文件系统几乎完全相同。

4. 健壮:Java致力于检查程序在编译和运行时的错误。类型检查帮助检查出许多开发早期出现的错误。Java自己操纵内存减少了内存出错的可能性。

5. 结构中立:Java将程序编译成一种结构中立的中间文件格式。只要有Java运行系统的机器都执行这种中间代码。这种中间语言被设计在虚拟机上运行,由机器相关的运行调试器实现执行。

6. 安全:

1)删除了香指针和手动释放内存等功能,避免了非法内存操作。

2)当Java用来创建浏览器时,语言功能和浏览器本身提供的功能结合起来。

Java在机器上执行前,要经过很多测试,它经过代码校验,检查代码段的格式,检测指针操作,对象操作是否过分以及试图改变一个对象的类型。

7. 可移植的:同体系结构无关的特性使得Java应用程序可以在配备Java解释器和运行环境的任何计算机系统上运行。任何Java代码会被解释成一种中间语言,然后通过不同机子的特定环境(如机器指令)运行程序。实现方便移植的特点。

8. 解释性。Java解释器能直接运行目标代码指令。链接程序通常比编译程序所需资源少。

9. 高性能。如果解释器速度不慢,Java可以在运行时直接将目标代码翻译成机器指令。Sun用直接解释器一秒钟内可调用300,000个过程。

10. 多线程:Java提供的多线程功能使得在一个程序里可同时执行多个小任务。多线程带来的更大好处是更好的交互性能和实时控制性能。

11. 动态:动态特性允许程序动态地装入运行过程中所需要的类。在运行时确定引用的好处是可以使用已被更新的类,而不必担心会影响原有的代码。如果程序连接了网络中另一系统中的某一类,该类的所有者也可以自由地对该类进行更新,而不会使任何引用该类的程序崩溃。Java在诞生之后不久,便受到广大群众的欢迎,甚至有人说出有了Java,可以不要C/C++了。一度把Java提到了很高的地位。这当然是对Java的一种赞赏,只是有点过了。到今天,Java依然不能取代C,C++,而且还出现了新的对手――.Net(后面将会介绍)。

Java目前主要应用:Web浏览器、网络应用系统。

C#语言

C#是一种精确、简单、类型安全、面向对象的语言。说到C#,就不得不先简单介绍一下.net。到底什么是.net呢,按照微软总裁兼首席执行官Steve Ballrner把它定义为:.Net代表一个集合,一个环境,它可以作为平台支持下一代Internet的可编程结构。C#是.net的代表语言。

C#的特点:

1. 完全面向对象。

2. 支持分布式,之所以有C#,是因为微软相信分布式应用程序是未来的趋势,即处理过程分布在客户机和服务器上。所以C#一出生就注定了能很好解决分布式问题。

3. 跟Java类似,C#代码经过编译后,成为了一种IL(中间语言)。在运行时,再把IL编译为平台专用的代码。

4. 健壮,C#在检查程序错误和编译与运行时错误一点也不逊于Java,C#也用了自动管理内存机制。

5. C#不像Java那样完全摒弃了指针和手动内存管理。C#默认情况下是不能使用指针的,程序员在有必要时可以打开指针来使用。这样可以保证编程的灵活性。

6. 安全性:C#的安全性是有.net平台来提供的。C#代码编译后成为IL语言。是一种受控代码,.net提供类型安全检查等机制保证代码是安全的。

7. 可移植性:由于C#使用类似Java的中间语言机制。使得C#也跟Java类似,可以很方便的移植到其他系统。在运行时,再把中间代码编译为适合特定机器的代码。

8. 解释性:C#也是一种特殊的解释性语言。

9. 高性能:C#把代码编译成中间语言后,可以高效的执行程序。

10. 多线程:与Java类似,可以由一个主进程分出多个执行小任务的多线程。

11. 组件模式:C#很适合组件开发。各个组件可以由其他语言实现的,然后集成在.net中。

C#是在Java流行起来后所诞生的一种新的语言。由于微软在操作系统上占有很大的优势。在以往的开发中累积了不少经验,所形成的.net平台,所以C#在Windows方面可以说比Java具有更大的优势。如果单纯从技术上来讲,C#在网络编程上可以与Java匹敌。C#还在WindowsForms也有一定的优势。

C#是一种非常类似于C++的语言,风格是更接近于Java,不管是C++程序员还是Java程序员,都可以很方便的转到C#上来。

C#的强大是依赖于.net的发展,而.net的发展是看微软在.net上的决心和投入有多少。从Windows 2003和Vista系统可以看出(前者内置.net1.1,后者内置.net2.0。).Net在Windows编程中具有重要的战略意义。

C#目前主要是应用在网络编程上,其他领域比如数据库、窗体编程,都逐渐在增大

Visual Basic 语言

Visual Basic(VB)是一种由微软公司开发的包含协助开发环境的事件驱动编程语言。从任何标准来说,VB都是世界上使用人数最多的语言——不仅是盛赞VB的开发者还是抱怨VB的开发者的数量。它源自于BASIC编程语言。VB拥有图形用户界面(GUI)和快速应用程序开发(RAD)系统,可以轻易的使用DAO、RDO、ADO连接数据库,或者轻松的创建ActiveX控件。程序员可以轻松的使用VB提供的组件快速建立一个应用程序。
一个典型的VB进程VB的中心思想就是要便于程序员使用,无论是新手或者专家。VB使用了可以简单建立应用程序的GUI系统,但是又可以开发相当复杂的程序。VB的程序是一种基于窗体的可视化组件安排的联合,并且增加代码来指定组建的属性和方法。因为默认的属性和方法已经有一部分定义在了组件内,所以程序员不用写多少代码就可以完成一个简单的程序。过去的版本里面VB程序的性能问题一直被放在了桌面上,但是随着计算机速度的飞速增加,关于性能的争论已经越来越少。
  窗体控件的增加和改变可以用拖放技术实现。一个排列满控件的工具箱用来显示可用控件(比如文本框或者按钮)。每个控件都有自己的属性和事件。默认的属性值会在控件创建的时候提供,但是程序员也可以进行更改。很多的属性值可以在运行时候随着用户的动作和修改进行改动,这样就形成了一个动态的程序。举个例子来说:窗体的大小改变事件中加入了可以改变控件位置的代码,在运行时候每当用户更改窗口大小,控件也会随之改变位置。在文本框中的文字改变事件中加入相应的代码,程序就能够在文字输入的时候自动翻译或者阻止某些字符的输入。
  VB的程序可以包含一个或多个窗体,或者是一个主窗体和多个子窗体,类似于操作系统的样子。有很少功能的对话框窗口(比如没有最大化和最小化按钮的窗体)可以用来提供弹出功能。
  VB的组件既可以拥有用户界面,也可以没有。这样一来服务器端程序就可以处理增加的模块。
  VB使用参数计算的方法来进行垃圾收集,这个方法中包含有大量的对象,提供基本的面向对象支持。因为越来越多组建的出现,程序员可以选用自己需要的扩展库。和有些语言不一样,VB对大小写不敏感,但是能自动转换关键词到标准的大小写状态,以及强制使得符号表入口的实体的变量名称遵循书写规则。默认情况下字符串的比较是对大小写敏感的,但是可以关闭这个功能。
  VB使得大量的外界控件有了自己的生存空间。大量的第三方控件针对VB提供。VB也提供了建立、使用和重用这些控件的方法,但是由于语言问题,从一个应用程序创建另外一个并不简单。

 

Perl语言

Perl一般被认为是Practical Extraction and Report Language(实用获取与报表语言)的缩写,是由C以及sed、awk、Unix shell及其它语言演化而来的一种语言。它由语言学家Larry Wall最初发明及实现。Perl是一种为扫描任意的文本文件,从这些文本文件中获取信息,基于这些信息打印报表而优化的语言。它也很适合于完成许多系统管理的任务。Perl是一种粘合性语言,旨在实用(易用、高效、完整)而不是漂亮(优美、小巧)。其吉祥物是骆驼,取其虽并不漂亮却任劳任怨、能干活之特点。 
Perl不随意限制数据的大小,只要你有充足的内存。递归的深度也不受限制。关联数组使用可以根据需要扩展以避免性能衰退。Perl能利用复杂的模式匹配技巧来快速扫描大量数据。尽管善于处理文本,Perl也能处理二进制数据。 
Perl 5增加了模块化处理、面向对象编程、引进引用以处理多维数组等复杂的数据结构、Unicode支持、多线程支持等功能,使得Perl成为一种更加完备强大的语言。(以上编译自Perl manpage的Perl语言简介) 
Perl语言的座右铭是:There’s More Than One Way To Do It(TMTOWTDI,有多种方法可以完成一件事,或者“条条道路通北京”)。Perl是一种自然和智能语言,它能根据上下文环境解释执行,同时有大量省略写法。 
如果你通常想使用sed、awk或sh来解决的问题,但是却发现它们的能力不够,或者想运行得更快一点,却不想傻傻地用C来写,Perl将是很好的选择。Perl擅长于文本处理和系统管理,不适合于实时嵌入式系统编程、操作系统底层开发(比如驱动程序开发)、复杂的多线性共享内存应用以及极度大的应用。 
Perl语言的长处: 
*强大的正则表达式和模式匹配功能(接近理想的正则表达式语言) 
*复杂灵活的数据结构(Array of Array, Array of Hash,Hash of Array, Hash of Hash等) 
*Unicode支持(相对AWK与C) 
其不足是: 
*动态类型语言,不是很可靠 
*自然语言,是优点也是缺陷,使得Perl语言代码可能晦涩难懂; 
*智能语言,是优点也产生不足:根据上下文解释编程者之意,可能产生臆断;也因此产生种种编程陷阱。 
*不是很优美。多种方法做事,有时会让编程者无所适从。 
*性能问题。Perl灵活的数据结构和处理性能通常不是很高(相对C/C++),若需要高性能的处理有时需要使用其它语言重写。 
Perl语言的学习曲线浅而长。只要看看《Learning Perl》,就可以编写简单的Perl程序了,然而要深入掌握Perl,要使用Perl的复杂数据结构,进行面向对象编程、多线程编程则不是那么容易的事,需要很长的时间学习和实践。 

PHP语言

优点
1.入门快,有其它语言基础的程序员二周左右的时间就可以入门,一个月左右的时间基本上就可以开发简单的项目了。
2.开发成本低,PHP最经典的组合就是:Linux +Apache + MySQL + PHP。非常适合开发中小型的web应用,因为上手容易,所以开发的速度比较快。而且所有的软件都是开源免费的,可以减少投入。 
3.PHP是解释性的脚本语言,写完代码以后即可以执行,不像c,java,c++等语言还需要去编译执行,相对来说比较节省时间。
4.相对来说,PHP程序员的薪水的平均工资要比c,c++,java程序员的平均工资要低一些,特别是对于中小型企业来说可以节约一些成本。
5.配置及部署相对简单一些,对比JAVA开发来说,JAVA开发的配置就复杂多了,什么Structs、Spring、Hibernate、Tomcat等等很多地方都需要配置,甚至你在程序中每写一个SQL语句都需要先在Hibernate中配置一下,有时重新部署一个class文件或jar文件还可能需要重启Web服务器(Tomcat或Resin或其它的Web服务器)使新部署的库文件生效。PHP开发中主要是PHP自身的配置文件及Web服务器的配置(如Apache或Nginx或Lighttpd等),相对于JAVA来说还是简单一些,而且新修改了文件以后不需要重新启动Web即可以立即生效。
6.有很多开源的框架或开源的系统可以使用,比如比较知名的开源框架有Zend Framework、CakePHP、CodeIgniter、symfony等,开源论坛有Discuz!、Phpwind等,开源博客WordPress,开源网店系统如Ecshop、ShopEx等,开源的SNS系统如UCHome、ThinkSNS等。

缺点
1.对多线程支持不太好,大多数时候我们只能简单的模拟去实现的,Via
2.对面向对象的支持也不太好,相对来说PHP5的面向对象有了不少的提升。
3.编码规范不太统一,如删除用户,有的人用delete_user,而有的人可能用deleteUser,如果不提前制定编码规范,这种情况可能会经常发生,因为每个人都有自己的编码习惯。
4.语法不太严谨,比如变量不需要定义就可以使用,在c,java,c++中变量是必须先定义以后才可以使用的。

Python语言

 ⑴作为初学python的科班出身的小白,python非常简单,非常适合人类阅读。阅读一个良好的Python程序就感觉像是在读英语一样,尽管这个英语的要求非常严格!Python的这种伪代码本质是它最大的优点之一。它使你能够专注于解决问题而不是去搞明白语言本身。

⑵易学。python虽然是用c语言写的,但是它摈弃了c中非常复杂的指针,简化了python的语法。

⑶Python是FLOSS(自由/开放源码软件)之一。简单地说,你可以自由地发布这个软件的拷贝、阅读它的源代码、对它做改动、把它的一部分用于新的自由软件中。Python希望看到一个更加优秀的人创造并经常改进。

⑷可移植性————由于它的开源本质,Python已经被移植在许多平台上(经过改动使它能够工作在不同平台上)。如果你小心地避免使用依赖于系统的特性,那么你的所有Python程序无需修改就可以在下述任何平台上面运行。这些平台包括Linux、Windows、FreeBSD、Macintosh、Solaris、OS/2、Amiga、AROS、AS/400、BeOS、OS/390、z/OS、Palm OS、QNX、VMS、Psion、Acom RISC OS、VxWorks、PlayStation、Sharp Zaurus、Windows CE甚至还有PocketPC、Symbian以及Google基于linux开发的Android平台!

⑸在计算机内部,Python解释器把源代码转换成称为字节码的中间形式,然后再把它翻译成计算机使用的机器语言并运行。事实上,由于你不再需要担心如何编译程序,如何确保连接转载正确的库等等,所有这一切使得使用Python更加简单。由于你只需要把你的Python程序拷贝到另外一台计算机上,它就可以工作了,这也使得你的Python程序更加易于移植。

 ⑹Python既支持面向过程的函数编程也支持面向对象的抽象编程。在面向过程的语言中,程序是由过程或仅仅是可重用代码的函数构建起来的。在面向对象的语言中,程序是由数据和功能组合而成的对象构建起来的。与其他主要的语言如C++和Java相比,Python以一种非常强大又简单的方式实现面向对象编程。

 ⑺ 可扩展性和可嵌入性。如果你需要你的一段关键代码运行得更快或者希望某些算法不公开,你可以把你的部分程序用C或C++编写,然后在你的Python程序中使用它们。你可以把Python嵌入你的C/C++程序,从而向你的程序用户提供脚本功能。

⑻丰富的库。Python标准库确实很庞大。python有可定义的第三方库可以使用。它可以帮助你处理各种工作,包括正则表达式、文档生成、单元测试、线程、数据库、网页浏览器、CGI、FTP、电子邮件、XML、XML-RPC、HTML、WAV文件、密码系统、GUI(图形用户界面)、Tk和其他与系统有关的操作。记住,只要安装了Python,所有这些功能都是可用的。这被称作Python的“功能齐全”理念。除了标准库以外,还有许多其他高质量的库,如wxPython、Twisted和Python图像库等等。

 ⑼ Python确实是一种十分精彩又强大的语言。它合理地结合了高性能与使得编写程序简单有趣的特色。

 ⑽规范的代码。Python采用强制缩进的方式使得代码具有极佳的可读性。

python语言的缺点

 很多时候不能将程序连写成一行,如import sys;for i in sys.path:print i。而perl和awk就无此限制,可以较为方便的在shell下完成简单程序,不需要如Python一样,必须将程序写入一个.py文件。(对很多用户而言这也不算是限制)

 ⑴运行速度,有速度要求的话,用C++改写关键部分吧。不过对于用户而言,机器上运行速度是可以忽略的。因为用户根本感觉不出来这种速度的差异。

 ⑵既是优点也是缺点,python的开源性是的Python语言不能加密,但是目前国内市场纯粹靠编写软件卖给客户的越来越少,网站和移动应用不需要给客户源代码,所以这个问题就是问题了。国随着时间的推移,很多国内软件公司,尤其是游戏公司,也开始规模使用他。

 ⑶ 构架选择太多(没有像C#这样的官方.net构架,也没有像ruby由于历史较短,构架开发的相对集中。Ruby on Rails 构架开发中小型web程序天下无敌)

Ruby语言

优点:
1
采用虚拟机实现跨平台
2
支持垃圾回收
3
脚本语言,灵活,容易扩展
4
支持面向对象
5
基于脚本语言,易于同Linux Shell进行交互
6
拥有功能强大和完善的标准类库
7
拥有良好的交互式运行环境:IRB,方便进行开发和调试
8
语言内置对规则表达式(Regular Express)的支持
9
直观的Block语法来实现循环遍历和函数回调
10
开放源代码
11
支持异常机制
12
同Perl和Python相比更容易用C语言扩展(来自Ruby官方网站)
13
支持动态载入类库
14
因为是解释型语言,不需要编译,修改后马上就可以执行
15
拥有一个完善的Web开发框架Rails

缺点
1
性能不如纯静态编译语言,例如C,但可以通过用C语言来扩展来解决
2
完全没有类型检查,灵活但容易隐藏潜在的问题
3
使用Module来实现多重继承,不如JAVA所采用的接口(Interface)方式清晰,而且由于没有严格的类型检查,所以框架层的设计无法对实现有很严格的约束
4
没有很完善的开发,重构的工具,虽然现在Eclipse已经提供Ruby的开发插件,但还没有实现重构,跳转和自动代码生成等很有用的功能,主要原因是由于Ruby支持动态类型
5
依然保留部分非面向对象的语法,例如全局变量,全局方法
6
允许在扩展代码中随意替换现有类的方法定义或变量,非常灵活,但可能会因为错误地修改了框架逻辑而引发难以发现的错误,但可以用freeze方法来组织被修改
7
不支持真正的多线程,多线程环境是通过在虚拟机环境中模拟出来的,不能充分发挥多CPU的功能,如果一个线程在执行底层调用被Block住则整个应用程序也被Block住。
8
对Unicode和多国语言的支持不好

 

Objective-C语言

Objective-C是非常“实际”的语言。它使用一个用C写成、很小的运行库,只会令应用程序的大小增加很小,和大部分OO系统使用极大的VM执行时间会取代了整个系统的运作相反。ObjC写成的程序通常不会比其原始码大很多。而其函式库(通常没附在软件发行本)亦和Smalltalk系统要使用极大的内存来开启一个窗口的情况相反。 Objective-C的最初版本并不支持垃圾回收。在当时这是争论的焦点之一,很多人考虑到Smalltalk回收时有漫长的“死亡时间”,令整个系统失去功用。Objective-C为避免此问题才不拥有这个功能。虽然某些第三方版本已加入这个功能(尤是GNUstep), Apple在其MacOS X 10.3中仍未引入这个功能。

  另一个问题是ObjC不包括命名空间机制(namespace mechanism)。取而代之的是程序设计师必须在其类别名称加上前缀,时常引致冲突。在2004年,在Cocoa编程环境中,所有MacOS X类别和函式均有“NS”作为前缀,例如NSObject或NSButton来清楚分别它们属于Mac OS X核心;使用“NS”是由于这些类别的名称在NeXTSTEP开发时定下。
  
  虽然Objective-C是C的母集,但它也不视C的基本型别为第一级的对象。 和C++不同,Objective-C不支援运算子多载(它不支持ad-hoc多型)。亦与C++不同,但和Java相同,Objective-C只容许对象继承一个类别(不设多重继承)。Categories和protocols不但可以提供很多多重继承的好处,而且没有很多缺点,例如额外执行时间过重和二进制不兼容。

 


你可能感兴趣的:(第一次作业。)