jsjyy

W
Document Sample
scope of work template
							                   计算机语言


  1. 机器语言


     电子计算机所使用的是由―0‖和―1‖组成的二进制数,二进制是计算机的语
言的基础。计算机发明之初,人们只能降贵纡尊,用计算机的语言去命令计算机
干这干那,一句话,就是写出一串串由―0‖和―1‖组成的指令序列交由计算机执行,
这种语言,就是机器语言。使用机器语言是十分痛苦的,特别是在程序有错需要
修改时,更是如此。而且,由于每台计算机的指令系统往往各不相同,所以,在
一台计算机上执行的程序,要想在另一台计算机上执行,必须另编程序,造成了
重复工作。但由于使用的是针对特定型号计算机的语言,故而运算效率是所有语
言中最高的。机器语言,是第一代计算机语言。


     2. 汇编语言


     为了减轻使用机器语言编程的痛苦,人们进行了一种有益的改进:用一些
简洁的英文字母、符号串来替代一个特定的指令的二进制串,比如,用―A D D‖
代表加法,―M O V‖代表数据传递等等,这样一来,人们很容易读懂并理解程序
在干什么,纠错及维护都变得方便了,这种程序设计语言就称为汇编语言,即第
二代计算机语言。然而计算机是不认识这些符号的,这就需要一个专门的程序,
专门负责将这些符号翻译成二进制数的机器语言,这种翻译程序被称为汇编程
序。


     汇编语言同样十分依赖于机器硬件,移植性不好,但效率仍十分高,针对
计算机特定硬件而编制的汇编语言程序,能准确发挥计算机硬件的功能和特长,
程序精炼而质量高,所以至今仍是一种常用而强有力的软件开发工具。


     3. 高级语言
     从最初与计算机交流的痛苦经历中,人们意识到,应该设计一种这样的语
言,这种语言接近于数学语言或人的自然语言,同时又不依赖于计算机硬件,编
出的程序能在所有机器上通用。经过努力,1 9 5 4 年,第一个完全脱离机器硬
件的高级语言—F O RT R A N 问世了,4 0 多年来,共有几百种高级语言出现,
有重要意义的有几十种,影响较大、使用较普遍的有 F O RT R A N、A L G O L、
C O B O L、B A S I C、L I S P、S N O B O L、P L / 1、P a s c a l、C、P R O
L O G、A d a、C + +、V C、V B、D e l p h i、J AVA 等。


     高级语言的发展也经历了从早期语言到结构化程序设计语言,从面向过程
到非过程化程序语言的过程。相应地,软件的开发也由最初的个体手工作坊式的
封闭式生产,发展为产业化、流水线式的工业化生产。


     6 0 年代中后期,软件越来越多,规模越来越大,而软件的生产基本上是
人自为战,缺乏科学规范的系统规划与测试、评估标准,其恶果是大批耗费巨资
建立起来的软件系统,由于含有错误而无法使用,甚至带来巨大损失,软件给人
的感觉是越来越不可靠,以致几乎没有不出错的软件。这一切,极大地震动了计
算机界,史称―软件危机‖。人们认识到:大型程序的编制不同于写小程序,它应
该是一项新的技术,应该像处理工程一样处理软件研制的全过程。程序的设计应
易于保证正确性,也便于验证正确性。1 9 6 9 年,提出了结构化程序设计方法,
1 9 7 0 年,第一个结构化程序设计语言—P a s c a l 语言出现,标志着结构化程
序设计时期的开始。8 0 年代初开始,在软件设计思想上,又产生了一次革命,
其成果就是面向对象的程序设计。在此之前的高级语言,几乎都是面向过程的,
程序的执行是流水线似的,在一个模块被执行完成前,人们不能干别的事,也无
法动态地改变程序的执行方向。这和人们日常处理事物的方式是不一致的,对人
而言是希望发生一件事就处理一件事,也就是说,不能面向过程,而应是面向具
体的应用功能,也就是对象(o b j e c t)。其方法就是软件的集成化,如同硬件
的集成电路一样,生产一些通用的、封装紧密的功能模块,称之为软件集成块,
它与具体应用无关,但能相互组合,完成具体的应用功能,同时又能重复使用。
对使用者来说,只关心它的接口(输入量、输出量)及能实现的功能,至于如何
实现的,那是它内部的事,使用者完全不用关心,C + +、V B、D e l p h i 就是
典型代表。 高级语言的下一个发展目标是面向应用,也就是说:只需要告诉程
序你要干什么,程序就能自动生成算法,自动进行处理,这就是非过程化的程序
语言。


   vc++和 java 是面向对象的高级语言
   PB


   计算机语言 power builder 的缩写是美国 Sybase 公司推出的数据库开发工
具,历经多年的发展,它由 1991 年的 1.0 版发展到了目前的 11.0 版。PowerBuilder
采用面向对象技术、图形化的开发环境和第四代(4GL)编程语言,可以使应用
程序的开发效率更高,成本更低,质量更好,功能更强,因此它一经推出,就受
到了广大开发人员的欢迎。PowerBuilder 开发语言简称(pb 语言)受到众多程序
员喜爱。
   MFC 微软基础类
      MFC,微软基础类(Microsoft Foundation Classes),同 VCL 类
似,是一种 Application Framework,随微软 Visual C++ 开发工具发布。
目前最新版本为 9.0(截止 2008 年 11 月)。该类库提供一组通用的可重
用的类库供开发人员使用。大部分类均从 CObject 直接或间接派生,只有
少部分类例外。
      MFC 应用程序的总体结构通常由开发人员从 MFC 类派生的几个
类和一个 CWinApp 类对象(应用程序对象)组成。MFC 提供了 MFC Ap
pWizard 自动生成框架。
      Windows 应用程序中,MFC 的主包含文件为"Afxwin.h"。
      此外 MFC 的部分类为 MFC/ATL 通用,可以在 Win32 应用程序
中单独包含并使用这些类。
      由于它的易用性,初学者常误认为 VC++开发必须使用 MFC。这
种想法是错误的。作为 Application Framework,MFC 的使用只能提高某
些情况下的开发效率,只起到辅助作用,而不能替代整个 Win32 程序设计。
      MFC,微软基础类(Microsoft Foundation Classes),实际上是微
软提供的,用于在 C++环境下编写应用程序的一个框架和引擎,VC++是 Win
DOS 下开发人员使用的专业 C++ SDK(SDK,Standard SoftWare Devel
op Kit,专业软件开发平台),MFC 就是挂在它之上的一个辅助软件开发包,M
FC 作为与 VC++血肉相连的部分(注意 C++和 VC++的区别:C++是一种程序
设计语言,是一种大家都承认的软件编制的通用规范,而 VC++只是一个编译
器,或者说是一种编译器+源程序编辑器的 IDE,WS,PlatForm,这跟 Pascal
和 Delphi 的关系一个道理,Pascal 是 Delphi 的语言基础,Delphi 使用 Pasca
l 规范来进行 Win 下应用程序的开发和编译,却不同于 Basic 语言和 VB 的关
系,Basic 语言在 VB 开发出来被应用的年代已经成了 Basic 语言的新规范,
VB 新加的 Basic 语言要素,如面向对象程序设计的要素,是一种性质上的飞
跃,使 VB 既是一个 IDE,又成长成一个新的程序设计语言),MFC 同 BC++集
成的 VCL 一样是一个非外挂式的软件包,类库,只不过 MFC 类是微软为 VC
++专配的..
     MFC 是 Win API 与 C++的结合,API,即微软提供的 WinDOS 下应
用程序的编程语言接口,是一种软件编程的规范,但不是一种程序开发语言
本身,可以允许用户使用各种各样的第三方(如我是一方,微软是一方,Borlan
d 就是第三方)的编程语言来进行对 WinDOS 下应用程序的开发,使这些被开
发出来的应用程序能在 WinDOS 下运行,比如 VB,VC++,Java,Dehpi 编程语
言函数本质上全部源于 API,因此用它们开发出来的应用程序都能工作在 Wi
nOS 的消息机制和绘图里,遵守 WinDOS 作为一个操作系统的内部实现,这
其实也是一种必要,微软如果不提供 API,这个世上对 Win 编程的工作就不会
存在,微软的产品就会迅速从时尚变成垃圾,上面说到 MFC 是微软对 API 函
数的专用 C++封装,这种结合一方面让用户使用微软的专业 C++ SDK 来进
行 Win 下应用程序的开发变得容易,因为 MFC 是对 API 的封装,微软做了大
量的工作,隐藏了好多程序开发人员在 Win 下用 C++ & MFC 编制软件时的
大量内节,如应用程序实现消息的处理,设备环境绘图,这种结合是以方便为
目的的,必定要付出一定代价(这是微软的一向作风),因此就造成了 MFC 对
类封装中的一定程度的的冗余和迂回,但这是可以接受的..
     最后要明白 MFC 不只是一个功能单纯的界面开发系统,它提供的
类绝大部分用来进行界面开发,关联一个窗口的动作,但它提供的类中有好
多类不与一个窗口关联,即类的作用不是一个界面类,不实现对一个窗口对
象的控制(如创建,销毁),而是一些在 WinDOS(用 MFC 编写的程序绝大部分
都在 WinDOS 中运行)中实现内部处理的类,如数据库的管理类等,学习中最
应花费时间的是消息和设备环境,对 C++和 MFC 的学习中最难的部分是指
针,C++面向对像程序设计的其它部分,如数据类型,流程控制都不难,建议学
习数据结构 C++版。
     MFC 是微软封装了的 API。什么意思呢?windows 作为一个提供
功能强大的应用程序接口编程的操作系统,的确方便了许多程序员,传统
的 win32 开发(直接使用 windows 的接口函数 API)对于程序员来说非常
的困难,因为,API 函数实在太多了,而且名称很乱,从零构架一个窗口动
辄就是上百行的代码。MFC 是面向对象程序设计与 Application framewor
k 的完美结合,他将传统的 API 进行了分类封装,并且为你创建了程序的一
般框架,
       MFC 是对 WindowsAPI 的封装,大大简化了我们的工作;学 VC
主要就是要学 MFC,大约有 100 多个类,但常用的也就二三十个。应该象
背 4 级单词一样将这些常用类搞懂;当然不要死记,要通过看帮助、看例
子、动手练习来学会它们;而且,并非每个类的内部的所有函数都要学会,
要日积月累。如果真的想成为高手,做个笔记本把自己认为重要的类、函
数记下来,随时学习,也是很好的突击方法。
       下面介绍最重要的 MFC。
       CWnd:窗口,它是大多数―看得见的东西‖的父类(Windows 里几
乎所有看得见的东西都是一个窗口,大窗口里有许多小窗口),比如视图 C
View、框架窗口 CFrameWnd、工具条 CToolBar、对话框 CDialog、按钮
CButton,etc;一个例外是菜单(CMenu)不是从窗口派生的。该类很大,
一开始也不必学,知道就行了。
       CDocument 文档,负责内存数据与磁盘的交互。最重要的是 On
OpenDocument(读入),OnSaveDocument(写盘),Serialize(读写)
       CView 视图,负责内存数据与用户的交互。包括数据的显示、用
户操作的响应(如菜单的选取、鼠标的响应)。最重要的是 OnDraw(重画
窗口),通常用 CWnd::Invalidate()来启动它。另外,它通过消息映射表处理
菜单、工具条、快捷键和其他用户消息。你自己的许多功能都要加在里面,
你打交道最多的就是它。
       CDC 设备文本。无论是显示器还是打印机,都是画图给用户看。
这图就抽象为 CDC。CDC 与其他 GDI(图形设备接口)一起,完成文字和
图形、图像的显示工作。把 CDC 想象成一张纸,每个窗口都有一个 CDC
相联系,负责画窗口。CDC 有个常用子类 CClientDC(窗口客户区),画
图通常通过 CClientDC 完成。
       CDialog 对话框
        CWinApp 应用程序类。似于 C 中的 main 函数,是程序执行的入
口和管理者,负责程序建立、消灭,主窗口和文档模板的建立。最常用函
数 InitInstance():初始化。
        CGdiObject 及子类,用于向设备文本画图。它们都需要在使用前选
进 DC。
        CPen 笔,画线
        CBrush 刷子,填充
        CFont 字体,控制文字输出的字体
        CBitmap 位图
        CPalette 调色板
        CRgn 区域,指定一块区域可以用于做特殊处理。
        CFile 文件。最重要的不外是 Open(打开),Read(读入),Write
(写)
        CString 字符串。封装了 C 中的字符数组,非常实用。
        CPoint 点,就是(x,y)对
        CRect 矩形,就是(left,top,right,bottom)
        CSize 大小,就是(cx,cy)对(宽、高)MFC 是在 1992 年的 Mi
crosoft 16 位版的 C/C++编译器的 7.0 版本中作为一个扩展轻量级的 Wind
ows API 面向对象的 C++封装库而引入的。此时,C++因为它在和 API 方
面的卓越表现,刚刚开始被用来取代 C 应用于开发商用软件。因此,他们
推出了替代早期的老式的字符界面的集成开发环境(IDE)的 PWB。
        有趣的是,MFC 使用―Afx‖作为所有的全局函数的前缀,―afx‖作为
全局变量的前缀。因为在 MFC 的早期开发阶段它叫―Application Framewo
rk Extensions‖缩写为―AFX‖。AFX 提供了对 Windows API 的高度抽象,
建立了全新的面向对象的 AFX API,但它对于新手来说太复杂了,所以 A
FX 小组不得不重新开始。后来他们创建了一组 C++类,这就是 MFC。MF
C 这个名字被采用得太晚了以至于没来得及修改这些引用。
        最近,MFC8.0 和 Visual Studio 2005 一起发布了;MFC9.0 和 V
isual Studio 2008 一起发布。在免费的 Express 版本的 Visual Studio 20
05/2008 中没有包含 MFC。
        作为一个强有力的竞争对手,为 Borland 的 Turbo C++编译器设
计 OWL(Object Windows Library)在同一时间也发布了。但最后,Borl
and 停止了对 OWL 的继续开发并且不久就从 Microsoft 那里购买了 MFC 头
文件,动态链接库等的授权,微软没有提供完整的 MFC 的集成支持。之后
Borland 发布了 VCL(Visual Component Library)来替换 OWL 框架。


          版本更新


      新产品版本 MFC 版本
        Microsoft C/C++ 7.0 MFC 1.0
        Visual C++ 1.0 MFC 2.0
        Visual C++ 1.5 MFC 2.5
        Visual C++ 2.0 MFC 3.0
        Visual C++ 2.1 MFC 3.1
        Visual C++ 2.2 MFC 3.2
        Visual C++ 4.0 MFC 4.0 (mfc40.dll included with Windows
95)
        Visual C++ 4.1 MFC 4.1
        Visual C++ 4.2 MFC 4.2 (mfc42.dll included with the Windo
ws 98 original release)
        eMbedded Visual C++ 3.0 MFC 4.2 (mfc42.dll)
        Visual C++ 5.0 MFC 4.21 (mfc42.dll)
        Visual C++ 6.0 MFC 6.0 (mfc42.dll)
        eMbedded Visual C++ 4.0 none
        Visual C++ .NET 2002 MFC 7.0 (mfc70.dll)
        Visual C++ .NET 2003 MFC 7.1 (mfc71.dll)
        Visual C++ 2005 MFC 8.0 (mfc80.dll)
         Visual C++ 2008 MFC 9.0.21022 (mfc90.dll)
         Visual C++ 2008 with Feature Pack MFC 9.0.30411 (mfc90.
dll)


       MFC 质量流量控制
         MFC 为 Mass Flow Controller 的缩写,即质量流量控制。流体在
旋转的管内流动时会对管壁产生一个力,它是科里奥利在 1832 年研究水轮
机时发现的,简称科氏力。质量流量计以科氏力为基础,在传感器内部有
两根平行的 T 型振管,中部装有驱动线圈,两端装有拾振线圈,变送器提
供的激励电压加到驱动线圈上时,振动管作往复周期振动,工业过程的流
体介质流经传感器的振动管,就会在振管上产生科氏力效应,使两根振管
扭转振动,安装在振管两端的拾振线圈将产生相位不同的两组信号,这两
个信号差与流经传感器的流体质量流量成比例关系。计算机解算出流经振
管的质量流量。不同的介质流经传感器时,振管的主振频率不同,据此解
算出介质密度。安装在传感器器振管上的铂电阻可间接测量介质的温度。
         质量流量计直接测量通过流量计的介质的质量流量,还可测量介质
的密度及间接测量介质的温度。由于变送器是以单片机为核心的智能仪表,
因此可根据上述三个基本量而导出十几种参数供用户使用。质量流量计组
态灵活,功能强大,性能价格比高,是新一代流量仪表。
         测量管道内质量流量的流量测量仪表。在被测流体处于压力、温
度等参数变化很大的条件下,若仅测量体积流量,则会因为流体密度的变
化带来很大的测量误差。在容积式和差压式流量计中,被测流体的密度可
能变化 30%,这会使流量产生 30~40%的误差。随着自动化水平的提高,
许多生产过程都对流量测量提出了新的要求。化学反应过程是受原料的质
量(而不是体积)控制的。蒸气、空气流的加热、冷却效应也是与质量流量成
比例的。产品质量的严格控制、精确的成本核算、飞机和导弹的燃料量控
制,也都需要精确的质量流量测量。因此质量流量计是一种重要的流量测
量仪表。
     质量流量计可分为两类:一类是直接式,即直接输出质量流量;
另一类为间接式或推导式,如应用超声流量计和密度计组合,对它们的输
出再进行乘法运算以得出质量流量。
     直接式质量流量计 直接式质量流量计有多种类型,如量热式、角
动量式、陀螺式和双叶轮式等。
     (1) 主要参数:
     质量流量精度: ±0.002×流量±零点漂移
     密度测量精度: ±0.003g/cm3
     密度测量范围: 0.5~1.5g/cm3
     温度测量范围: ±1°C
     (2) 传感器相关数据:
     环境温度: -40~60°C
     介质温度: -50~200°C
     防爆类型: iBⅡBT3
     关联设备: 配套变送器
     (3) 变送器相关数据:
     工作温度: 0~60°C
     相对湿度: 95%以下
     电 源: 220±10%VAC,50Hz 或 24±5%VDC,40W
  MFC 三聚氰胺贴面板
     三聚氰胺环保板,一种以刨花板为基材,表面经―三聚氰胺‖(MEL
AMINE)专业加工处理,具耐磨,抗刻划,耐高温,易清洁,耐酸碱等优
点的复合型饰板,英文简称为 MFC(三聚氰胺贴面板)。MFC 广泛被采用
为板式家具,办公家具及厨房家具的主要用材。
  MFC
     Multi Format Codec 的缩写,是 ARM 微处理器内部一种支持多
种硬件编码方式的硬件电路,能够编码/解码 MPEG-4/H.263/H.264(30fp
s)等多种格式的多媒体影像。
  Moncton Flight College
       Moncton Flight College 缩写为 MFC
       蒙顿飞行学院是 加拿大最古老的飞行学院之一 从 1929 年开始,
蒙顿飞行学院就致力于为航空业培养专业及高素质的飞行员。
       蒙顿飞行学院位于加拿大 New Brunswick 省 Moncton 市 机场
第四停机坪旁边
       地址 Moncton Flight College 1719 Champlain St. Dieppe, N
B Canada, E1A 7P5
       从 1929 年起开始以蒙顿航空俱乐部培训飞行员,曾改名为 蒙顿
飞行俱乐部,蒙顿飞行中心,最后于 1997 年 引进两年制的学位课程,成
为了蒙顿飞行学院。
       蒙顿飞行学院是中国培养飞行员的主要航校之一
       2006 年北京航空航天大学飞行学院开始往蒙顿飞行学院送飞行学
员,毕业后于南方航空公司签订就业合同。
       2007 年蒙顿飞行学院在 New Brunswick 省 省会城市 Frederict
on 成立了分校 陆续有深航,川航,东航,国航,北航,厦航等公司送学
院前往学习。
       2008 年 5 月 厦门航空公司送出加拿大蒙顿第一批飞行学员。
       蒙顿飞行学院主要的培训机型是 DA20 Diamond Eclipse 两座
单发螺旋桨飞机 17 架 CESSNA 172 5 架 PA-44 Piper Seminole 双发 3
架 Kingair c-90 一架
       这里的培训周期平均是 14 个月 从 10 到 22 个月不等
       蒙顿飞行学院对中国学员的课程安排主要是
       PPL 私人飞行员执照
       Night Rating 夜航等级
       CPL 商业飞行员执照
       Multi Rating 双发等级
       IFR 仪表飞行等级
       ATPL 航线飞行员执照
   MFC 麦肯基(快餐)
       在广东某些地区很流行的一种中式快餐,其风格类似于麦当劳、
肯德基。
  MFC 在物业中的应用
       (1)物业管理信息应包括:
       小区资料(小区名称,楼宇总数等),房型资料(房型编号、房
型、建筑面积等),住户资料(住户编号、住户姓名、联系电话、联系地
址、预付金额、欠费金额等),住户报修管理,住户投诉管理,住户停车
车位管理(车位编号,住户信息等),住户物业收费管理(收费名称、收
费金额、收费单位、收费周期等)等。
       (2)需要实现的功能
       1) 用户需要输入口令进入物业管理系统
       2) 实现物业管理信息的建立
       3) 计算小区的房型种类,查询住户的欠费状况
       4) 显示住户投诉报表
       5) 按照欠费金额进行排序,显示用户相关信息
       6) 查找住户的车位信息
       7) 将小区的所有相关信息内容存为文件。
       (3)界面友好,输入信息符合逻辑如收费周期应至少以月为单位




 扩展阅读:
         1.http://baike.baidu.com/view/1291106.htm
         2.http://www.designtech.cn/Photo_Show.asp?PhotoID=222
         3.http://www.szbaijia.com/news.asp?NewsId=231
         4.http://www.mfc.nb.ca/about.php
                计算机语言




目录


 • 词条简介


 • 计算机语言之父尼盖德


 • 计算机语言分类


 • 计算机语言发展历史


 • 计算机语言特点


 • 常见语言及优缺点


 • 参考资料及相关链接
  词条简介




计算机语言(Computer Lnguage)指用于人与计算机之间通讯的语言。语言分为
自然语言与人工语言两大类。自然语言是人类在自身发展的过程中形成的语言,
是人与人之间传递信息的媒介。人工语言指的是人们为了某种目的而自行设计的
语言。计算机语言就是人工语言的一语。计算机语言是人与计算机之间传递信息
媒介。计算机系统最大特征是指令通过一种语言传达给机器。为了使电子计算机
进行各种工作,就需要有一套用以编写计算机程序的数字、字符和语法规划,由
这些字符和语法规则组成计算机各种指令(或各种语句)。这些就是计算机能接受
的语言。


  计算机语言之父尼盖德


    尼盖德帮助因特网奠下了基础,为计算机业做出了巨大贡献。


尼盖德是奥斯陆大学的教授,因为发展了 simula 编程语言,为 ms-dos 和因特
网打下了基础而享誉国际。克里斯汀·尼盖德于 1926 年在奥斯陆出生,1956 年毕
业于奥斯陆大学并取得数学硕士学位,此后致力于计算机计算与编程研究。


1961 年~1967 年,尼盖德在挪威计算机中心工作,参与开发了面向对象的编程
语言。因为表现出色,2001 年,尼盖德和同事奥尔·约安·达尔获得了 2001 年
a.m.图灵奖及其它多个奖项。当时为尼盖德颁奖的计算机协会认为他们的工
作为 java,c++等编程语言在个人电脑和家庭娱乐装置的广泛应用扫清了道路,
“他们的工作使软件系统的设计和编程发生了基本改变,可循环使用的、可靠的、
可升级的软件也因此得以面世。”


尼盖德因其卓越的贡献,而被誉为“计算机语言之父”,其对计算机语言发展趋势
的掌握和认识,以及投身于计算机语言事业发展的精神都将激励我们向着计算机
语言无比灿烂的明天前进。
  计算机语言分类


   计算机语言的种类非常的多,总的来说可以分成机器语言,汇编语言,
高级语言三大类。




  电脑每做的一次动作,一个步骤,都是按照以经用计算机语言编好的程序来
执行的,程序是计算机要执行的指令的集合,而程序全部都是用我们所掌握的语
言来编写的。所以人们要控制计算机一定要通过计算机语言向计算机发出命令。


计算机所能识别的语言只有机器语言,即由 0 和 1 构成的代码。但通常人们编程
时,不采用机器语言,因为它非常难于记忆和识别。


  目前通用的编程语言有两种形式:汇编语言和高级语言。


汇编语言的实质和机器语言是相同的,都是直接对硬件操作,只不过指令采用了
英文缩写的标识符,更容易识别和记忆。它同样需要编程者将每一步具体的操作
用命令的形式写出来。汇编程序通常由三部分组成:指令、伪指令和宏指令。汇
编程序的每一句指令只能对应实际操作过程中的一个很细微的动作,例如移动、
自增,因此汇编源程序一般比较冗长、复杂、容易出错,而且使用汇编语言编程
需要有更多的计算机专业知识,但汇编语言的优点也是显而易见的,用汇编语言
所能完成的操作不是一般高级语言所能实现的,而且源程序经汇编生成的可执行
文件不仅比较小,而且执行速度很快。


高级语言是目前绝大多数编程者的选择。和汇编语言相比,它不但将许多相关的
机器指令合成为单条指令,并且去掉了与具体操作有关但与完成工作无关的细
节,例如使用堆栈、寄存器等,这样就大大简化了程序中的指令。同时,由于省
略了很多细节,编程者也就不需要有太多的专业知识。


高级语言主要是相对于汇编语言而言,它并不是特指某一种具体的语言,而是包
括了很多编程语言,如目前流行的 VB、VC、FoxPro、Delphi 等,这些语言的语
法、命令格式都各不相同。


  高级语言所编制的程序不能直接被计算机识别,必须经过转换才能被执行,
按转换方式可将它们分为两类:


(1):解释类:执行方式类似于我们日常生活中的“同声翻译”,应用程序源代码一
边由相应语言的解释器“翻译”成目标代码(机器语言),一边执行,因此效率比较
低,而且不能生成可独立执行的可执行文件,应用程序不能脱离其解释器,但这
种方式比较灵活,可以动态地调整、修改应用程序。


(2):编译类:编译是指在应用源程序执行之前,就将程序源代码“翻译”成目标代
码(机器语言),因此其目标程序可以脱离其语言环境独立执行,使用比较方便、
效率较高。但应用程序一旦需要修改,必须先修改源代码,再重新编译生成新的
目标文件(* .OBJ)才能执行,只有目标文件而没有源代码,修改很不方便。现
在大多数的编程语言都是编译型的,例如 Visual C++、Visual Foxpro、Delphi
等。
  计算机语言发展历史


      1、计算机语言的发展历史:二十世纪四十年代当计算机刚刚问世的时候,
程序员必须手动控制计算机。当时的计算机十分昂贵,唯一想到利用程序设计语
言来解决问题的人是德国工程师楚泽(konradzuse)。几十年后,计算机的价格大
幅度下跌,而计算机程序也越来越复杂。也就是说,开发时间已经远比运行时间
来得宝贵。于是,新的集成、可视的开发环境越来越流行。它们减少了所付出的
时间、金钱(以及脑细胞)。只要轻敲几个键,一整段代码就可以使用了。这也
得益于可以重用的程序代码库。随着 c,pascal,fortran,等结构化高级语言的诞生,
使程序员可以离开机器层次,在更抽象的层次上表达意图。由此诞生的三种重要
控制结构,以及一些基本数据类型都能够很好的开始让程序员以接近问题本质的
方式去思考和描述问题。随着程序规模的不断扩大,在 60 年代末期出现了软件
危机,在当时的程序设计模型中都无法克服错误随着代码的扩大而级数般的扩
大,以至到了无法控制的地步,这个时候就出现了一种新的思考程序设计方式和
程序设计模型-----面向对象程序设计,由此也诞生了一批支持此技术的程序设计
语言,比如 eiffel,c++,java,这些语言都以新的观点去看待问题,即问题就是
由各种不同属性的对象以及对象之间的消息传递构成。面向对象语言由此必须支
持新的程序设计技术,例如:数据隐藏,数据抽象,用户定义类型,继承,多态
等等。


2、计算机语言的发展现状:目前通用的编程语言有两种形式:汇编语言和高级
语言。


汇编语言的实质和机器语言是相同的,都是直接对硬件操作,只不过指令采用了
英文缩写的标识符,更容易识别和记忆。用汇编语言所能完成的操作不是一般高
级语言所能实现的,而且源程序经汇编生成的可执行文件不仅比较小,而且执行
速度很快。
高级语言是目前绝大多数编程者的选择。和汇编语言相比,它不但将许多相关的
机器指令合成为单条指令,并且去掉了与具体操作有关但与完成工作无关的细
节,例如使用堆栈、寄存器等,这样就大大简化了程序中的指令。同时,由于省
略了很多细节,编程者也就不需要有太多的专业知识。


高级语言主要是相对于汇编语言而言,它并不是特指某一种具体的语言,而是包
括了很多编程语言,如目前流行的 vb、vc、foxpro、delphi 等,这些语言的语法、
命令格式都各不相同。


高级语言所编制的程序不能直接被计算机识别,必须经过转换才能被执行,按转
换方式可将它们分为两类:解释类和编译类。


3、计算机语言的发展趋势:面向对象程序设计以及数据抽象在现代程序设计思
想中占有很重要的地位,未来语言的发展将不在是一种单纯的语言标准,将会以
一种完全面向对象,更易表达现实世界,更易为人编写,其使用将不再只是专业
的编程人员,人们完全可以用订制真实生活中一项工作流程的简单方式来完成编
程。




计算机语言发展的特性:


简单性
提供最基本的方法来完成指定的任务,只需理解一些基本的概念,就可以用它编
写出适合于各种情况的应用程序。


面向对象


提供简单的类机制以及动态的接口模型。对象中封装状态变量以及相应的方法,
实现了模块化和信息隐藏;提供了一类对象的原型,并且通过继承机制,子类可
以使用父类所提供的方法,实现了代码的复用。


安全性


用于网络、分布环境下有安全机制保证。


平台无关性


与平台无关的特性使程序可以方便地被移植到网络上的不同机器、不同平台。
  计算机语言特点




在没有程序语言以前,计算机科学家们写程序都是以开关电闸(即用二进制)来实
现(表示)的,后来有了汇编,在后来有了 C,直到今天有了 C++、JAVA、VB、
Delphi 等等各种各样的编程语言层出不穷。


可就在计算机语言不断的演化过程中,每一种语言都有一些共性是不变的.。这
些共性可概括为以下三点:


其一是:内存电位的设置.(置 1 或 0)


其二是:条件判断(if....else....)该功能可通过逻辑门实现.


其三是:循环,也就是程序下一条指令地址可设置。
  常见语言及优缺点


     1、C 语言




如果说 FORTRAN 和 COBOL 是第一代高级编译语言,那么 C 语言就是它们的
孙子辈。 语言是 Dennis Ritchie 在七十年代创建的,
    C                            它功能更强大且与 ALGOL
保持更连续的继承性,而 ALGOL 则是 COBOL 和 FORTRAN 的结构化继承者。
C 语言被设计成一个比它的前辈更精巧、更简单的版本,它适于编写系统级的程
序,比如操作系统。在此之前,操作系统是使用汇编语言编写的,而且不可移植。
C 语言是第一个使得系统级代码移植成为可能的编程语言。


C 语言支持结构化编程,也就是说 C 的程序被编写成一些分离的函数呼叫(调用)
的集合,这些呼叫是自上而下运行,而不像一个单独的集成块的代码使用 GOTO
语句控制流程。因此,C 程序比起集成性的 FORTRAN 及 COBOL 的“空心粉式
代码”代码要简单得多。事实上,C 仍然具有 GOTO 语句,不过它的功能被限制
了,仅当结构化方案非常复杂时才建议使用。


正由于它的系统编程根源,将 C 和汇编语言进行结合是相当容易的。函数调用
接口非常简单,而且汇编语言指令还能内嵌到 C 代码中,所以,不需要连接独
立的汇编模块。


优点:有益于编写小而快的程序。很容易与汇编语言结合。具有很高的标准化,
因此其他平台上的各版本非常相似。


缺点:不容易支持面向对象技术。语法有时会非常难以理解,并造成滥用。


移植性:C 语言的核心以及 ANSI 函数调用都具有移植性,但仅限于流程控制、
内存管理和简单的文件处理。其他的东西都跟平台有关。比如说,为 Windows
和 Mac 开发可移植的程序,用户界面部分就需要用到与系统相关的函数调用。
这一般意味着你必须写两次用户界面代码,不过还好有一些库可以减轻工作量。


资料:C 语言的经典著作是《TheCProgrammingLanguage》,它经过多次修改,已
经扩展到最初的三倍大,但它仍然是介绍 C 的优秀书本。一本极好的教程是
《TheWaiteGroup'sCPrimerPlus》。


2、C++
C++语言是具有面向对象特性的 C 语言的继承者。面向对象编程,或称 OOP 是
结构化编程的下一步。 程序由对象组成,
          OO       其中的对象是数据和函数离散集合。
有许多可用的对象库存在,这使得编程简单得只需要将一些程序“建筑材料”堆在
一起(至少理论上是这样)。比如说,有很多的 GUI 和数据库的库实现为对象的
集合。


C++总是辩论的主题,尤其是在游戏开发论坛里。有几项 C++的功能,比如虚拟
函数,为函数呼叫的决策制定增加了一个额外层次,批评家很快指出 C++程序将
变得比相同功能的 C 程序来得大和慢。C++的拥护者则认为,用 C 写出与虚拟
函数等价的代码同样会增加开支。这将是一个还在进行,而且不可能很快得出结
论的争论。


C++的额外开支只是使用更好的语言的小付出。同样的争论发生在六十年代高级
程序语言如 COBOL 和 FORTRAN 开始取代汇编成为语言所选的时候。批评家正
确的指出使用高级语言编写的程序天生就比手写的汇编语言来得慢,而且必然如
此。而高级语言支持者认为这么点小小的性能损失是值得的,因为 COBOL 和
FORTRAN 程序更容易编写和维护。


优点:组织大型程序时比 C 语言好得多。很好的支持面向对象机制。通用数据
结构,如链表和可增长的阵列组成的库减轻了由于处理低层细节的负担。


缺点:非常大而复杂。与 C 语言一样存在语法滥用问题。比 C 慢。大多数编译
器没有把整个语言正确的实现。
移植性:比 C 语言好多了,但依然不是很乐观。因为它具有与 C 语言相同的缺
点,大多数可移植性用户界面库都使用 C++对象实现。


资料:最新版的《TheC++ProgrammingLanguage》非常好。作为教程,有两个阵
营,一个假定你知道 C,另外一个假定你不知道。到目前为止,最好的 C++教程
是《Who'sAfraidofC++》。


3、汇编语言(Assembly)




汇编是第一个计算机语言。汇编语言实际上是你计算机处理器实际运行的指令的
命令形式表示法。这意味着你将与处理器的底层打交道,比如寄存器和堆栈。如
果你要找的是类英语且有相关的自我说明的语言,这不是你想要的。


特别注意:语言的名字叫“汇编”。把汇编语言翻译成真实的机器码的工具叫“汇
编程序”。把这门语言叫做“汇编程序”这种用词不当相当普遍,因此,请从这门
语言的正确称呼作为起点出发。


优点:最小、最快的语言。汇编高手能编写出比任何其他语言能实现的快得多的
程序。你将是利用处理器最新功能的第一人,因为你能直接使用它们。


缺点:难学、语法晦涩、坚持效率,造成大量额外代码—不适于心脏虚弱者。


移植性:接近零。因为这门语言是为一种单独的处理器设计的,根本没移植性可
言。如果使用了某个特殊处理器的扩展功能,你的代码甚至无法移植到其他同类
型的处理器上(比如,AMD 的 3DNow 指令是无法移植到其它奔腾系列的处理
器上的)。


资料:如果你正在找一门汇编语言的文档,你主要要找芯片的文档。网络上如
Intel、AMD、Motorola 等有一些关于它们的处理器的资料。对于书籍而言,
《AssemblyLanguage:Step-By-Step》是很值得学习的。


4、Pascal 语言




Pascal 语言是由 NicolasWirth 在七十年代早期设计的,因为他对于 FORTRAN 和
COBOL 没有强制训练学生的结构化编程感到很失望,“空心粉式代码”变成了规
范,而当时的语言又不反对它。Pascal 被设计来强行使用结构化编程。最初的
Pascal 被严格设计成教学之用,最终,大量的拥护者促使它闯入了商业编程中。
当 Borland 发布 IBMPC 上的 TurboPascal 时,Pascal 辉煌一时。集成的编辑器,
闪电般的编译器加上低廉的价格使之变得不可抵抗,Pascal 编程了为 MS-DOS
编写小程序的首选语言。然而时日不久,C 编译器变得更快,并具有优秀的内置
编辑器和调试器。Pascal 在 1990 年 Windows 开始流行时走到了尽头,Borland
放弃了 Pascal 而把目光转向了为 Windows 编写程序的 C++。TurboPascal 很快被
人遗忘。
基本上,Pascal 比 C 简单。虽然语法类似,它缺乏很多 C 有的简洁操作符。这
既是好事又是坏事。虽然很难写出难以理解的“聪明”代码,它同时也使得一些低
级操作,如位操作变得困难起来。


优点:易学、平台相关的运行(Dephi)非常好。


缺点:“世界潮流”面向对象的 Pascal 继承者(Modula、Oberon)尚未成功。语言
标准不被编译器开发者认同。


移植性:很差。语言的功能由于平台的转变而转变,没有移植性工具包来处理平
台相关的功能。


5、Visual Basic




BASIC。回到八十年代的石器时代,它是程序初学者的第一个语言。最初的 BASIC
形式,虽然易于学习,却是可怕的无组织化,它义无返顾的使用了 GOTO 充斥
的“空心粉式代码”。


快速前进到九十年代早期,虽然不是苹果公司所希望的巨人,HyperCard 仍然是
一个在 Windows 下无法比拟的吸引人的小型编程环境。Windows 下的 HyperCard
克隆品如 ToolBook 又慢又笨又昂贵。为了与 HyperCard 一决高下,微软取得了
一个小巧的名为 Thunder 编程环境的许可权,并把它作为 VisualBasci1.0 发布,
其用户界面在当时非常具有新意。              (
               这门语言虽然还叫做 Basic 不再是全部大写),
但更加结构化了,行号也被去除。实际上,这门语言与那些内置于 TRS-80、AppleII
及 Atari 里的旧的 ROMBASIC 相比,更像是带 Basic 风格动词的 Pascal。


优点:整洁的编辑环境。易学、即时编译导致简单、迅速的原型。大量可用的插
件。虽然有第三方的 DirectX 插件,DirectX7 已准备提供 VisualBasic 的支持。


缺点:程序很大,而且运行时需要几个巨大的运行时动态连接库。虽然表单型和
对话框型的程序很容易完成,要编写好的图形程序却比较难。调用 Windows 的
API 程序非常笨拙,因为 VB 的数据结构没能很好的映射到 C 中。有 OO 功能,
但却不是完全的面向对象。


移植性:非常差。因为 VisualBasic 是微软的产品,你自然就被局限在他们实现
它的平台上。


6、Java




Java 是由 Sun 最初设计用于嵌入程序的可移植性“小 C++”。在网页上运行小程序
的想法着实吸引了不少人的目光,于是,这门语言迅速崛起。事实证明,Java
不仅仅适于在网页上内嵌动画—它是一门极好的完全的软件编程的小语言。“虚
拟机”机制、垃圾回收以及没有指针等使它很容易实现不易崩溃且不会泄漏资源
的可靠程序。


虽然不是 C++的正式续篇,Java 从 C++中借用了大量的语法。它丢弃了很多 C++
的复杂功能,从而形成一门紧凑而易学的语言。不像 C++,Java 强制面向对象编
程,要在 Java 里写非面向对象的程序就像要在 Pascal 里写“空心粉式代码”一样
困难。


优点:二进制码可移植到其他平台。程序可以在网页中运行。内含的类库非常标
准且极其健壮。自动分配合垃圾回收避免程序中资源泄漏。网上数量巨大的代码
例程。


缺点:使用一个“虚拟机”来运行可移植的字节码而非本地机器码,程序将比真正
编译器慢。有很多技术(例如“即时”编译器)很大的提高了 Java 的速度,不过
速度永远比不过机器码方案。早期的功能,如 AWT 没经过慎重考虑,虽然被正
式废除,但为了保持向后兼容不得不保留。越高级的技术,造成处理低级的机器
功能越困难,Sun 为这门语言增加新的“受祝福”功能的速度实在太慢。


移植性:最好的,但仍未达到它本应达到的水平。低级代码具有非常高的可移植
性,但是,很多 UI 及新功能在某些平台上不稳定。


资料:Sun 的官方 Java 页面有一些好的信息。IBM 也有一个非常好的 Java 页面。
JavaLobby 是一个关于 Java 新闻的最好去处。


7、创作工具


上面所提及的编程语言涵盖了大多数的商业游戏。但是也有一个例外,这个大游
戏由于它的缺席而变得突出。


“神秘岛”。卖得最好的商业游戏不是使用以上任何一门语言编的,虽然有人说“神
秘岛”99%是使用 3D 建模工具制作的,其根本的编程逻辑是在 HyperCard 里完成
的。


多数创作工具有点像 VisualBasic,只是它们工作在更高的层次上。大多数工具使
用一些拖拉式的流程图来模拟流程控制。很多内置解释的程序语言,但是这些语
言都无法像上面所说的单独的语言那样健壮。


优点:快速原型—如果你的游戏符合工具制作的主旨,你或许能使你的游戏跑得
比使用其他语言快。在很多情况下,你可以创造一个不需要任何代码的简单游戏。
       如
使用插件程序, Shockware 及 IconAuthor 播放器,你可以在网页上发布很多创
作工具生成的程序。


缺点:专利权,至于将增加什么功能,你将受到工具制造者的支配。你必须考虑
这些工具是否能满足你游戏的需要,因为有很多事情是那些创作工具无法完成
的。某些工具会产生臃肿得可怕的程序。


移植性:因为创作工具是具有专利权的,你的移植性以他们提供的功能息息相关。
有些系统,如 Director 可以在几种平台上创作和运行,有些工具则在某一平台上
创作,在多种平台上运行,还有的是仅能在单一平台上创作和运行。


资料:Director、HyperCard、SuperCard、IconAuthor、Authorware。
    参考资料及相关链接


       1.《计算机语言与计算机程序发展历史》博客中国网
2.《计算机发展史》上海科学技术出版社
3.《软件发展与社会进步》蔡希尧
4.《数据库发展新技术》磊哲
http://www.class.com.cn/scrp/bookdetail.cfm?iBookNo=305&sYc=2-3&sDirType=C
http://www.yeshare.com/LW/1/qq-sun12406/
   ML 语言


        ML 语言
        ML (which stands for Meta-Language) is a functional langu
age which, unlike conventional (procedural) languages, is mathemati
cally "pure". Assignment to variables in the way that it is done in
procedural languages is not possible; a variable is defined as in m
athematics as being equal to a particular value, so a statement suc
h as "X = X + 1" would make no sense, as there is no value of
X which is equal to X + 1. There are also no explicit control flow
operations (loops, goto statements and so on); recursive function d
efinitions are used to achieve the same effect.
        ML 是一个通用的函数式编程语言,它是由爱丁堡大学的 Robin
Milner 及他人在二十世纪七十年代晚期开发的。它的语法是从 ISWIM 得到
的灵感。作为元语言的 ML 是为了帮助在 LCF 定理证明机中寻找证明策略
而构想出来的。(之前的元语言是 pplambda,它联合了一阶逻辑演算、多
态及 Λ 演算)。它使用了 Hindley-Milner 类型推论算法来推测大多数值的类
型,而不需要四处使用注解。
        ML 一般被归为非纯函数式编程语言,因为它允许副作用和指令式
编程。这一点和纯函数是编程语言??例如 Haskell??很不一样。
        ML 特性有惰性求值的求值策略,一阶类型函数, 带有垃圾收集
的自动内存管理, 参数多态,静态数据类型,类型推断,代数数据类型,
模式匹配和异常处理。
        不像 Haskell,ML 使用热情求值,也就是说所有的子表达式总是
被求值。导致的一个结果是你不能使用无穷表。然而,惰性求值产生的无
穷表可以通过使用匿名函数来模拟。
        今天在 ML 家族中有好几种语言:两种主要的方言是 Standard M
L 和 Caml,其他的包括 F# - 针对 Microsoft .NET 平台的开放研究项目。
 ML 中的思想影响了众多的语言,例如 Haskell,Cyclone 和 Nemerle。
      ML 的实力大多被用于语言设计和操作(编译器、分析器、定理证
   ,
明机) 但是它作为通用语言也被用于生化,金融系统,和宗谱数据库,
一个 P2P 的客户/服务器程序等等。
      ML 简介
      我是从翻译 John C. Mitchell 的著作 Concepts in Programming
Langugaes 开始接触和学习 ML 语言的。很快就被它那和数学系统一样严
谨的类型系统吸引。后来发现 ML 确实是为了解编程语言设计思想应当学习
的一种语言。作为一个 ML 初学者,我把自己学到的一点东西整理出来,作
为阶段小节。如果对其他初学 ML 的朋友们能稍微有点帮助,就是意外收获
了。如果有其他对 ML 感兴趣的朋友,很希望和你联系。
      ML 可以算一种具备命令式语言特点的函数型语言,或者说面向函
数的命令型语言。和 Lisp 一样,ML 具有非常灵活的函数功能。例如一个
表达式的值可能就是一个函数,这个函数可以被作为参数传递给另一个函
数,或者函数的返回值就是一个函数。同时和 Algol 类的语言比较接近的是,
ML 的语法象命令型的,而且用起来象用 Algol 家族的很多比较新的后代们
一样方便。而且 ML 有并行扩展,可以用来写并行系统;甚至还有面向对象
扩展。
      John C. Mitchell 在他的 Concepts in Programming Langugaes
一书中使用 ML 来展示 Algol 类语言、Lisp 类语言、以及并行语言和面向对
象语言中的概念。
      ML 是 Robin Milner 主管 LCF 项目时设计的。LCF 项目是受 Dan
a Scott 给出的一组逻辑原则启发而设立的,致力于开发一种 ―可计算函数
  (
逻辑‖ Logic of Computable Functions)。Robin Milner 的目标是构造一
个方便实用的系统,来自动的或者半自动的证明函数程序中一些有趣的性
质。他的 LCF 项目于 1970 年在 Standford 开始,并于 1980 年代在 Edinb
urge 继续进行。期间取得了很多重要进展,并且激发了相关领域的一系列
研究工作。
      ML 是作为 LCF 项目的元语言(Meta Language)设计的,这也
是其名字的来历。它的最初用途是写一些可以生成数学证明的程序。今天,
大多数著名的推理系统都是用 ML 写的。
        目前 ML 有两个发展分支:Standard ML 和 Caml。我不会 Caml,
本文专注于 SML。
        大多数 SML 编译器的行为方式都是交互式的:用户一条一条输入
语句,编译器一一给出反馈。看起来象 Logo 或者 Basic 解释器一样。但是
其实用户输入的程序是被先编译再执行的(其中细节大家可以从 SML/NJ
编译器的相关文档和论文中找到)。
        ML 的相关资源
        这里是我找到的一些 ML 相关的资源:
        SML New Jersey --> http://www.smlnj.org/
        最著名的 SML 编译器——Standard ML New Jersey 的官方网
站。其中还可以找到很多 SML 相关的内容
        Programming in Standard ML --> http://www.cs.cmu.edu/af
s/cs/usr/rwh/public/www/introsml/
        我喜欢的一本 Carnegie Mellon University 使用的 ML 教科书——
Programming in Standard ML。你也可以从我这里下载。
        将 Emacs 作为 SML 的开发环境
        目前有两个常用的 SML 的 Emacs mode。一个是 Stefan Monni
er 写的,功能强大一些。可以从这里下载。SML/NJ 的网站上有它的文档。


        一个在线教程
        Programming in Standard ML '97: On-line Tutorial --> htt
p://www.dcs.ed.ac.uk/home/stg/NOTES/
        SML 的 Basic Library 文档
        如果要用 ML 写能实际干点事情的程序,离了 Standard ML Basi
c Library 是不行的。SML/NJ 编译器安装时已经包含了 Basic Library,你
可以直接使用。如果需要查文档(其实是必然需要的:-)),请看这里。
        ML 编程环境的配置
        我在 Windows 环境下使用 Emacs 作为 ML 的集成开发环境。下面
关于 Emacs 和 SML 在 Windows 下的配置说明其实同样适合于各种 Unix
类操作系统)。这里有一副抓图:在左边的 frame 中编辑好 SML 源程序后,
按下 C-c C-b,程序就交付给运行在右边 frame 中的 SML 编译器了。你也
可以直接在右边的 frame 中交互式的输入 SML 程序。
       为了配置这个环境我安装了 GNU Emacs for Windows(你也可
以用 XEmacs for Windows)、SML 编译器 SML/NJ(你也可以用其他编译
器,比如 Moscow ML,Poly/ML)、Emacs 的 SML mode。安装和配置步
骤如下:
       下载和安装 GNU Emacs for Windows
       下载和安装 SML New Jersey 编译器
       下载和安装 Emacs 的 SML major mode。具体的方法如下:
       在你的 Emacs 安装目录(例如 F:\Program Files\emacs-21.3)下
建一个子目录叫 site-lisp。如果已经有了就不用建了。
       在其中建一个子目录叫 sml-mode
       将你下载的 SML major mode 压缩包解开,将其中所有.el 文件拷
贝到 site-lisp/sml-mode 子目录下
       编辑 site-lisp 中的 site-start.el,加入两行:
       (add-to-list 'load-path "F:/Program Files/emacs-21.3/site-lisp/s
ml-mode")
       (load "sml-mode-startup")
       在 PATH 环境变量里包含 SML 编译器所在的目录。我的是 f:\sml\
bin。
       启动 Emacs 后,敲 M-x run-sml 就可以在 Emacs 中启动一个 S
ML 交互环境。
       如果用 M-x sml-mode 就将当前 buffer 的 major mode 设置为 s
ml-mode,你会发现其中的 SML 代码被语法高亮显示了。如果没有语法高
亮,你可以在 Emacs 的配置文件(对于 Windows 版本的 GNU Emacs 和
XEmacs 而言是 C:\.emacs,对 Unix 版本的是~/.emacs)中加入一行:
       ; Syntax highlight
       (global-font-lock-mode t)
      著作节选
      John C. Mitchell 在他的 Concepts in Programming Langugaes
一书中使用 ML 来展示 Algol 类语言、Lisp 类语言、以及并行语言和面向对
象语言中的概念。应清华大学出版社的要求,我参与翻译了此书中的部分
内容,其中包括介绍 ML 语言(和其他 Algol 类语言)的第 5 章。没有经过
校对的翻译结果可以从这里下载。请大家帮我多提意见。谢谢。
      从例子看 ML 编程风格
      通常大家学习编程都是从命令式语言开始的。和函数示语言不同,
命令式语言以语句作为基本单位。Algol 家族的所有语言都是命令式语言,
ML 也不例外。因此学习 ML 不像学习 Scheme 那样需要完全转换一套思路。
但是 ML 继承了函数式语言的很多特征,而且也有自己的一些特点。
      我修改了网上找到的一个求解 n 皇后问题的程序,用来展示 ML
编程的一些基本手段:
      查看源程序
      上面程序中使用了 option。如果要改用 exception 可以将其中 add
queen 函数的定义改成这样。
      程序注解和说明
      线性数据结构
      程序中总要定义数据结构。常用的定长线性结构包括:Pascal 的
record,C 的 struct,C++和 Java 的 class。在 ML 中我们通常用 tuple,即
用圆括号括起来的,用逗号分隔的若干项元素。
      Tuple 是个线性结构,可以用整数索引。比如
      #1(1, 2.0, "apple") = 1
      #2(1, 2.0, "apple") = 2.0
      #3(1, 2.0, "apple") = "apple"
      和 Algol 类语言的数组不同的是,tuple 中各个元素的类型可以不
一样。
      C++的 boost 模板库中提供了一个模板 tuple,模仿 ML/Scheme
的 tuple,使 C++程序员可以将不同类型的数据组织成一个便于访问的线性
结构。
      函数的嵌套定义
      ML 和大多数 Algol 类语言一样支持函数的嵌套定义(包括 Algol
60、Algol 68 和 Pascal,但是 C 是例外)。
      如果函数 A 和函数 B 互相嵌套调用(indirect recursion),则源程
序中可以将 B 的函数体定义在 A 的函数体内,或者 A 的定义在 B 的函数体
内。具体采用那一种,要看外界是调用 A 还是 B。
      函数 addqueen 和其内部函数 try 就是这样的例子。显然 addquee
n 是要被外部调用的。
      用尾部递归(tail recursion)代替循环
      如果用 Algol 类语言(例如 Pascal 和 C)来写函数 addqueen,
其中需要一个循环,从某行的第一个位置开始,判断如果在这个位置上放
一个皇后是否可以使得其不和前面已经放上的皇后冲突,而且后面还可以
继续放满皇后。而 ML 中这个循环用递归函数 tryARow 表示。
      纯表达式(pure expression)风格,避免副作用(side effect)


      大多数 Algol 类语言对机器的抽象是以内存为中心的,即变量和对
象(object)对应内存中的存储区域,赋值语句对应机器的访存操作,所以
程序中有大量的赋值语句。ML 也支持赋值,但是通常建议采取的风格是类
似 Lisp 和 Scheme 的纯表达式风格,避免赋值操作。
      例如如果用 C 来描述 n 皇后问题,通常我们会设计一个数据结构
描述棋盘(和 ML 程序一样),然后定义这个数据结构的一个实例(可能是
个全局变量)。算法的主要工作是通过赋值修改这个实例的内容。
      而例子中的 ML 代码中经典的一段是函数 place。这是修改棋盘数
据结构的代码。但是并没有使用赋值,而是产生了一个新的数据结构实例,
其内容和参数略有区别(放上了一个新的皇后)。
      纯表达式的使用要求程序员先对程序考虑得非常细致才能动笔
(动手?),因此使得程序逻辑更加清晰。(这和 literate programming 的
思想是一致的。)但是目前的硬件机器是以内存为中心设计的,所以纯表达
式语言的实现(编译器和解释器)的效率依靠于设计者多费心思。ML 就是
通过静态作用域(statically scoping)和 uniform data representation 等
特点结合起来达到高效的。
   Scheme


       Scheme 语言是 Lisp 的一个现代变种、方言,诞生于 1975 年,
由 MIT 的 Gerald J. Sussman and Guy L. Steele Jr. 完成。与其他 li
sp 不同的是,scheme 是可以编译成机器码的。
       Lisp 语言的历史很久,几乎与 Fortran 一样长。二十世纪五十年
代,计算机科学家先是发明了针对数字计算的 Fortran 语言,后来针对符
    由
号计算, MIT 的 John McCarthy 于 1960 年开发出了 Lisp(List process
ing)语言。该语言原来是为表处理而设计的编程语言,后来广泛用于处理人
工智能问题。Lisp 程序中充满了一对对嵌套的小括号,这些嵌套的符号表
达式体现着递归。递归是数学上的基本概念之一,从递归理论出发,一切
可以计算的函数最终都可以划归为几种基本的递归函数的种种组合。
       1994 年时众多 Lisp 版本又得到了相当的统一,统一之后的版本
称为 Common LISP。Common Lisp 含有非常丰富的库,仅仅语言的规范
就长达千页以上,包括面向对象的 CLOS。
       Scheme 语言的规范很短,总共只有 50 页,甚至连 Common Lis
p 规范的索引的长度都不到,但是却被称为是现代编程语言王国的皇 后。
它与以前和以后的 Lisp 实现版本都存在一些差异,但是却易学易用。
       Scheme 的一个主要特性是可以像操作数据一样操作函数调用。S
cheme 是 MIT 在 70 年代创造出来,其的主要目的是训练人的机器化思
维。以其简洁的语言环境和大量的脑力思考而著称。
       正由于 lisp 语言的历史悠久,所以最初接触 scheme 的语法,我
们常会感到一头雾水。但是这种语言自有它独特的魅力。


      Scheme 特点




       括号嵌套
       Lisp 程序中充满了一对对嵌套的小括号,这些嵌套的符号体现了
最基本的数学思想——递归。
     语法简洁
     Scheme 语言的规范很短,总共只有 50 页。
     函数编程语言
     一个函数(Function)是这个编程语言中所谓的第一等的公民。也
就是说函式可以像一个 int 或者 float 一样被很方便的传递来传递去。这
也就是所谓―Functional 编程语言‖中,Functional 一词的由来。
     自动内存管理
     自动内存管理可不是 JAVA 的专利呦。
     支持尾递归
     提高了递归效率
     支持高级控制结构 continuation
     可移植性好
     Scheme 开发的程序有很好的可移植性,这是由于 Scheme 是一
种解释语言,在不同的平台都可以有相应的解释器。
     适合作为脚本语言和嵌入语言
     由于 scheme 语法简洁,一个 Scheme 解释器可以非常的小巧。S
cheme 可以作为脚本语言而内嵌于一些工具之中,如:GNU Emacs。
     关键字对大小写不敏感


     数据结构




     数字
     下面都是合法的数字表示方法:47,1/3,2.3,4.3e14,1+3i。
     字符
     字符前面需要用#\做前缀。如下面都是合法字符:
     #\a #\A #\b #\B #\space #\newline
     字符串
           由双引号括起来的字符组成字符串。如:"A little string"
           布尔值
           布尔值 True 和 False 分别用 #t 和 #f 表示。
           列表
           用圆括号括起来的,可以包含任何数据类型的称为列表。如: (a
little (list of) (lists))
           数组(vector)
           用#为前缀,如: #(1 2 "string" #\x 5)
           函数(或称为过程)
           把函数作为一种数据类型,是 Scheme 语言的特色。
           符号
           符号除了不能够以数字开头的任何字符可组成符号。如: Symbol
s: this-is-a-symbol foo a32 c$23*4&7+3-is-a-symbol-too!


          注释




           分号开始一段注释。如:
           (+ 3 1) ;return 4


          常量表达式




           常量表达式返回本身的值。如:
           3.14 ; 返回 3.14
           #t ; 返回布尔值 #t
           #\c ; 返回字符 #\c
           "Hi!" ; 返回字符串 "Hi!"
    引用(Quotation)




    语法:(quote obj) 或者简写为 'obj
    (+ 2 3) ; 返回 5
    '(+ 2 3) ; 返回列表 (+ 2 3)
    (quote (+ 2 3)) ; 返回列表 (+ 2 3)


    表达式记法




    Scheme 的表达式的写法有些特别,表达式用括号括起来。括号里
面的第一个出线的是函数名或者操作符,其它是参数。Scheme 的这种表达
式写法可以叫做前置式。下面是一些 Scheme 的表达式的例子以及其对应
的 C 语言的写法。
    Scheme C
    ------------------------------------------------------------------
    (+ 2 3 4) (2 + 3 + 4)
    (< low x high) ((low < x) && (x < high))
    (+ (* 2 3) (* 4 5)) ((2 * 3) + (4 * 5))
    (f x y) f(x, y)
    (define (sq x) (* x x)) int sq(int x) { return (x * x) }


    对象绑定、赋值和函数定义




    let 表达式语法糖果
    语法:(let ((var val) ...) exp1 exp2 ...)
    说明:let 表达式是 lambda 表达式的语法糖果,即:(let ((var
val) ...) exp1 exp2 ...),为 ((lambda (var ...) exp1 exp2) val ...)
        示例:
        (let ((x 2) (y 3)) (+ x y))
        ; 先绑定: x=2, y=3,再计算 x+y 的值,结果为 5。注意 (x 2)
和 (y 3) 外还有一层括号。
        更多的示例:
        (let ((f +))
        (f 2 3)) ; return 5
        (let ((f +) (x 2))
        (f x 3)) ; return 5
        (let ((f +) (x 2) (y 3))
        (f x y)) ; return 5
        用 define 绑定对象和 set! 赋值
        语法:(define var exp) , (set! var exp)
        说明:define 绑定的对象在当前作用域中有效。define 和 set!
的区别是 define 既能赋值又能定义变量,而 set!只能对已经定义的变量赋
值。
        示例:
        (define a 1)
        a ; return 1
        (set! a 2)
        a ; return 2
        (let ((a 3)) a) ; return 3
        a ; return 2
        (let ((a 3)) (set! a 4) a) ; return 4
        a ; return 2
        (let ((a 3)) (define a 5) a) ; return 5
        a ; return 2
        (set! b 1) ; 错误,b 尚未定义
      lambda 表达式和函数定义
      语法:(lambda (var ...) exp1 exp2 ...)
      说明:lambda 表达式用于定义函数。var ... 是参数,exp1 exp
2 ...是函数的执行 部分。通常需要结合局部定义 let 或者全局定义表达式
define,再进行函数调用。
      示例:
      ((lambda (x) (+ x x)) (* 3 4)) ; return 24
      说明:先用 lambda 定义了函数,参数是 x,函数返回 x+x。同时
该语句也完成了函数调用,实参是 12 (等于 3*4),因此返回值是 24 (等
于 12+12)。
      在 let 表达式中定义函数。
      Scheme 语言中,函数作为一种数据类型,通过赋值语句,将 la
mbda 表达式赋值给相应的函数。
      示例:
      (let ((double (lambda (x) (+ x x))))
      (list (double (* 3 4))
      (double (/ 99 11))
      (double (- 2 7)))) ; return (24 18 -10)
      说明:let 表达式将 lambda 定义的函数赋值给 double,参数是 x,
返回 x+x。接下来分别三次调用 double 函数,并将结果以列表形式返回。
list 表达式负责生成列表。
      用 define 全局定义表达式来定义函数。
      用 let 定义的函数只能在 let 表达式中有效,如果想定义在整个
程序中有效的函数定义,需要用到全局定义表达式——define。
      示例:
      (define double (lambda (x) (+ x x)))
      (double 12) ; return 24
      (double (* 3 4)) ; return 24
      说明:define 表达式定义了全局有效的函数 double。两次调用 d
ouble 的返回值都是 24。
      定义函数的简写
      用 define 定义的函数的语法可以简化,即将 lambda 去掉。即
将语法
      (define var0
      (lambda (var1 ... varn)
      e1 e2 ...))
      简写为:
      (define (var0 var1 ... varn)
      e1 e2 ...)
      示例:
      (define (double x) (+ x x))
      (double 12) ; return 24
      (double (* 3 4)) ; return 24
      说明:本例是前一个例子的简化版本。更简介,明了。


      顺序计算表达式




      语法:(begin exp1 exp2 ...)
      说明:顺序执行表达式 exp1, exp2, ...,返回最后一个表达式的
结果
      示例:
      (define x 3)
      (begin
      (set! x (+ x 1))
      (+ x x)) ; 返回结果 8
      说明:begin 表达式,依次先用 set!表达式为 x 赋值为 4,在运算
x+x,返回结果 8。
  主要的 Scheme 环境有:MIT Scheme、DrScheme




扩展阅读:
   1.http://www.schemers.org/
  lisp 语言


     lisp 语言
     Lisp 语言最早是在 20 世纪 50 年代末由麻省理工学院(MIT)
为研究人工智能而开发的。Lisp 语言的强大使它在其它方面诸如编写编辑
命令和集成环境等显示其优势。而 GNU Emacs Lisp 主要由 Maclisp 发
展而来,该语言由 MIT 在 20 世纪 60 年代写成。它在某种程度上继承
了 Common Lisp,而 Common Lisp 在 20 世纪 80 年代成了一种标
准。
     Lisp 代表 LISt Processing,即表处理,这种编程语言用来处理
           )
由括号(即―(‖和―)‖ 构成的列表。
     Lisp 之根源
     保罗格雷厄姆
     约翰麦卡锡于 1960 年发表了一篇非凡的论文,他在这篇论文中对
编程的贡献有如欧几里德对几何的贡献.[1] 他向我们展示了,在只给定几个
简单的操作符和一个表示函数的记号的基础上 , 如何构造出一个完整的编
程语言. 麦卡锡称这种语言为 Lisp, 意为 List Processing, 因为他的主要
思想之一是用一种简单的数据结构表(list)来代表代码和数据.
      值得注意的是,麦卡锡所作的发现,不仅是计算机史上划时代的大
事, 而且是一种在我们这个时代编程越来越趋向的模式 .我认为目前为止只
有两种真正干净利落, 始终如一的编程模式:C 语言模式和 Lisp 语言模式.
此二者就象两座高地, 在它们中间是尤如沼泽的低地.随着计算机变得越来
越强大,新开发的语言一直在坚定地趋向于 Lisp 模式. 二十年来,开发新编
程语言的一个流行的秘诀是,取 C 语言的计算模式,逐渐地往上加 Lisp 模式
的特性,例如运行时类型和无用单元收集.
      在这篇文章中我尽可能用最简单的术语来解释约翰麦卡锡所做的
发现. 关键是我们不仅要学习某个人四十年前得出的有趣理论结果 , 而且
展示编程语言的发展方向. Lisp 的不同寻常之处--也就是它优质的定义--是
它能够自己来编写自己. 为了理解约翰麦卡锡所表述的这个特点,我们将追
溯他的步伐,并将他的数学标记转换成能够运行的 Common Lisp 代码.
        七个原始操作符
        开始我们先定义表达式 .表达式或是一个原子 (atom),它是一个字
母序列(如 foo),或是一个由零个或多个表达式组成的表 (list), 表达式之间
用空格分开, 放入一对括号中. 以下是一些表达式:
        foo
        ()
        (foo)
        (foo bar)
        (a b (c) d)
        最后一个表达式是由四个元素组成的表 , 第三个元素本身是由一
个元素组成的表.
        在算术中表达式 1 + 1 得出值 2. 正确的 Lisp 表达式也有值. 如
果表达式 e 得出值 v,我们说 e 返回 v. 下一步我们将定义几种表达式以及它
们的返回值.
        如果一个表达式是表 ,我们称第一个元素为操作符 ,其余的元素为
自变量.我们将定义七个原始(从公理的意义上说)操作符: quote,atom,eq,c
ar,cdr,cons,和 cond.
        (quote x) 返回 x.为了可读性我们把(quote x)简记 为'x.
        > (quote a)
        a
        > 'a
        a
        > (quote (a b c))
        (a b c)
        (atom x)返回原子 t 如果 x 的值是一个原子或是空表,否则返回().
在 Lisp 中我们按惯例用原子 t 表示真, 而用空表表示假.
        > (atom 'a)
        t
        > (atom '(a b c))
       ()
       > (atom '())
       t
       既然有了一个自变量需要求值的操作符 , 我们可以看一下 quote
的作用. 通过引用(quote)一个表,我们避免它被求值. 一个未被引用的表作
为自变量传给象 atom 这样的操作符将被视为代码:
       > (atom (atom 'a))
       t
       反之一个被引用的表仅被视为表, 在此例中就是有两个元素的表:


       > (atom '(atom 'a))
       ()
       这与我们在英语中使用引号的方式一致. Cambridge(剑桥)是一个
位于麻萨诸塞州有 90000 人口的城镇. 而``Cambridge''是一个由 9 个字母
组成的单词.
       引用看上去可能有点奇怪因为极少有其它语言有类似的概念 . 它
和 Lisp 最与众不同的特征紧密联系:代码和数据由相同的数据结构构成, 而
我们用 quote 操作符来区分它们.
       (eq x y)返回 t 如果 x 和 y 的值是同一个原子或都是空表, 否则返
回().
       > (eq 'a 'a)
       t
       > (eq 'a 'b)
       ()
       > (eq '() '())
       t
       (car x)期望 x 的值是一个表并且返回 x 的第一个元素.
       > (car '(a b c))
       a
      (cdr x)期望 x 的值是一个表并且返回 x 的第一个元素之后的所有
元素.
      > (cdr '(a b c))
      (b c)
      (cons x y)期望 y 的值是一个表并且返回一个新表,它的第一个元
素是 x 的值, 后面跟着 y 的值的各个元素.
      > (cons 'a '(b c))
      (a b c)
      > (cons 'a (cons 'b (cons 'c '())))
      (a b c)
      > (car (cons 'a '(b c)))
      a
      > (cdr (cons 'a '(b c)))
      (b c)
      (cond (...) ...(...)) 的求值规则如下. p 表达式依次求值直到有一
个返回 t. 如果能找到这样的 p 表达式,相应的 e 表达式的值作为整个 cond
表达式的返回值.
      > (cond ((eq 'a 'b) 'first)
      ((atom 'a) 'second))
      second
      当表达式以七个原始操作符中的五个开头时,它的自变量总是要求
值的.[2] 我们称这样 的操作符为函数.
      函数的表示
      接着我们定义一个记号来描述函数 .函数表示为(lambda (...) e),
其中 ...是原子(叫做参数),e 是表达式. 如果表达式的第一个元素形式如上
      ((lambda (...) e) ...)
      则称为函数调用.它的值计算如下.每一个表达式先求值,然后 e 再
求值.在 e 的求值过程中,每个出现在 e 中的的值是相应的在最近一次的函数
调用中的值.
      > ((lambda (x) (cons x '(b))) 'a)
      (a b)
      > ((lambda (x y) (cons x (cdr y)))
      'z
      '(a b c))
      (z b c)
      如果一个表达式的第一个元素 f 是原子且 f 不是原始操作符
      (f ...)
      并且 f 的值是一个函数(lambda (...)),则以上表达式的值就是
      ((lambda (...) e) ...)
      的值. 换句话说,参数在表达式中不但可以作为自变量也可以作为
操作符使用:
      > ((lambda (f) (f '(b c)))
      '(lambda (x) (cons 'a x)))
      (a b c)
      有另外一个函数记号使得函数能提及它本身,这样我们就能方便地
定义递归函数.[3] 记号
      (label f (lambda (...) e))
      表示一个象(lambda (...) e)那样的函数,加上这样的特性: 任何出
现在 e 中的 f 将求值为此 label 表达式, 就好象 f 是此函数的参数.
      假设我们要定义函数(subst x y z), 它取表达式 x,原子 y 和表 z
做参数,返回一个象 z 那样的表, 不过 z 中出现的 y(在任何嵌套层次上)被 x
代替.
      > (subst 'm 'b '(a b (a b c) d))
      (a m (a m c) d)
      我们可以这样表示此函数
      (label subst (lambda (x y z)
      (cond ((atom z)
      (cond ((eq z y) x)
      ('t z)))
      ('t (cons (subst x y (car z))
      (subst x y (cdr z)))))))
      我们简记 f=(label f (lambda (...) e))为
      (defun f (...) e)
      于是
      (defun subst (x y z)
      (cond ((atom z)
      (cond ((eq z y) x)
      ('t z)))
      ('t (cons (subst x y (car z))
      (subst x y (cdr z))))))
      偶然地我们在这儿看到如何写 cond 表达式的缺省子句. 第一个元
素是't 的子句总是会成功的. 于是
      (cond (x y) ('t z))
      等同于我们在某些语言中写的
      if x then y else z
      一些函数
      既然我们有了表示函数的方法,我们根据七个原始操作符来定义一
些新的函数. 为了方便我们引进一些常见模式的简记法. 我们用 cxr,其中 x
是 a 或 d 的序列,来简记相应的 car 和 cdr 的组合. 比如(cadr e)是(car (cd
r e))的简记,它返回 e 的第二个元素.
      > (cadr '((a b) (c d) e))
      (c d)
      > (caddr '((a b) (c d) e))
      e
      > (cdar '((a b) (c d) e))
      (b)
      我们还用(list ...)表示(cons ...(cons '()) ...).
      > (cons 'a (cons 'b (cons 'c '())))
      (a b c)
      > (list 'a 'b 'c)
     (a b c)
     现在我们定义一些新函数. 我在函数名后面加了点,以区别函数和
定义它们的原始函数,也避免与现存的 common Lisp 的函数冲突.
     (null. x)测试它的自变量是否是空表.
     (defun null. (x)
     (eq x '()))
     > (null. 'a)
     ()
     > (null. '())
     t
     (and. x y)返回 t 如果它的两个自变量都是 t, 否则返回().
     (defun and. (x y)
     (cond (x (cond (y 't) ('t '())))
     ('t '())))
     > (and. (atom 'a) (eq 'a 'a))
     t
     > (and. (atom 'a) (eq 'a 'b))
     ()
     (not. x)返回 t 如果它的自变量返回(),返回()如果它的自变量返回 t.


     (defun not. (x)
     (cond (x '())
     ('t 't)))
     > (not. (eq 'a 'a))
     ()
     > (not. (eq 'a 'b))
     t
     (append. x y)取两个表并返回它们的连结.
     (defun append. (x y)
     (cond ((null. x) y)
     ('t (cons (car x) (append. (cdr x) y)))))
     > (append. '(a b) '(c d))
     (a b c d)
     > (append. '() '(c d))
     (c d)
     (pair. x y)取两个相同长度的表,返回一个由双元素表构成的表,双
元素表是相应位置的 x,y 的元素对.
     (defun pair. (x y)
     (cond ((and. (null. x) (null. y)) '())
     ((and. (not. (atom x)) (not. (atom y)))
     (cons (list (car x) (car y))
     (pair. (cdr) (cdr y))))))
     > (pair. '(x y z) '(a b c))
     ((x a) (y b) (z c))
     (assoc. x y)取原子 x 和形如 pair.函数所返回的表 y,返回 y 中第一
个符合如下条件的表的第二个元素:它的第一个元素是 x.
     (defun assoc. (x y)
     (cond ((eq (caar y) x) (cadar y))
     ('t (assoc. x (cdr y)))))
     > (assoc. 'x '((x a) (y b)))
     a
     > (assoc. 'x '((x new) (x a) (y b)))
     new
     一个惊喜
     因此我们能够定 义函数来连接表,替换表达式等等.也许算是一个
优美的表示法, 那下一步呢? 现在惊喜来了. 我们可以写一个函数作为我
们语言的解释器:此函数取任意 Lisp 表达式作自变量并返回它的值. 如下所
示:
     (defun eval. (e a)
     (cond
((atom e) (assoc. e a))
((atom (car e))
(cond
((eq (car e) 'quote) (cadr e))
((eq (car e) 'atom) (atom (eval. (cadr e) a)))
((eq (car e) 'eq) (eq (eval. (cadr e) a)
(eval. (caddr e) a)))
((eq (car e) 'car) (car (eval. (cadr e) a)))
((eq (car e) 'cdr) (cdr (eval. (cadr e) a)))
((eq (car e) 'cons) (cons (eval. (cadr e) a)
(eval. (caddr e) a)))
((eq (car e) 'cond) (evcon. (cdr e) a))
('t (eval. (cons (assoc. (car e) a)
(cdr e))
a))))
((eq (caar e) 'label)
(eval. (cons (caddar e) (cdr e))
(cons (list (cadar e) (car e)) a)))
((eq (caar e) 'lambda)
(eval. (caddar e)
(append. (pair. (cadar e) (evlis. (cdr e) a))
a)))))
(defun evcon. (c a)
(cond ((eval. (caar c) a)
(eval. (cadar c) a))
('t (evcon. (cdr c) a))))
(defun evlis. (m a)
(cond ((null. m) '())
('t (cons (eval. (car m) a)
(evlis. (cdr m) a)))))
       eval.的定义比我们以前看到的都要长. 让我们考虑它的每一部分
是如何工作的.
       eval.有两个自变量: e 是要求值的表达式, a 是由一些赋给原子的
值构成的表,这些值有点象函数调用中的参数. 这个形如 pair.的返回值的表
叫做环境. 正是为了构造和搜索这种表我们才写了 pair.和 assoc..
       eval.的骨架是一个有四个子句的 cond 表达式. 如何对表达式求值
取决于它的类型. 第一个子句处理原子. 如果 e 是原子, 我们在环境中寻找
它的值:
       > (eval. 'x '((x a) (y b)))
       a
       第二个子句是另一个 cond, 它处理形如(a ...)的表达式, 其中 a 是
原子. 这包括所有的原始操作符, 每个对应一条子句.
       > (eval. '(eq 'a 'a) '())
       t
       > (eval. '(cons x '(b c))
       '((x a) (y b)))
       (a b c)
       这几个子句(除了 quote)都调用 eval.来寻找自变量的值.
       最后两个子句更复杂些. 为了求 cond 表达式的值我们调用了一个
叫 evcon.的辅助函数. 它递归地对 cond 子句进行求值,寻找第一个元素返
回 t 的子句. 如果找到了这样的子句, 它返回此子句的第二个元素.
       > (eval. '(cond ((atom x) 'atom)
       ('t 'list))
       '((x '(a b))))
       list
       第二个子句的最后部分处理函数调用. 它把原子替换为它的值(应
该是 lambda 或 label 表达式)然后对所得结果表达式求值. 于是
       (eval. '(f '(b c))
       '((f (lambda (x) (cons 'a x)))))
      变为
      (eval. '((lambda (x) (cons 'a x)) '(b c))
      '((f (lambda (x) (cons 'a x)))))
      它返回(a b c).
      eval.的最后 cond 两个子句处理第一个元素是 lambda 或 label 的
函数调用.为了对 label 表达式求值, 先把函数名和函数本身压入环境, 然
后调用 eval.对一个内部有 lambda 的表达式求值. 即:
      (eval. '((label firstatom (lambda (x)
      (cond ((atom x) x)
      ('t (firstatom (car x))))))
      y)
      '((y ((a b) (c d)))))
      变为
      (eval. '((lambda (x)
      (cond ((atom x) x)
      ('t (firstatom (car x)))))
      y)
      '((firstatom
      (label firstatom (lambda (x)
      (cond ((atom x) x)
      ('t (firstatom (car x)))))))
      (y ((a b) (c d)))))
      最终返回 a.
      最后,对形如((lambda (...) e) ...)的表达式求值,先调用 evlis.来求
得自变量(...)对应的值(...),把()...()添加到环境里, 然后对 e 求值. 于是
      (eval. '((lambda (x y) (cons x (cdr y)))
      'a
      '(b c d))
      '())
        变为
        (eval. '(cons x (cdr y))
        '((x a) (y (b c d))))
        最终返回(a c d).
        后果
        既然理解了 eval 是如何工作的, 让我们回过头考虑一下这意味着
什么. 我们在这儿得到了一个非常优美的计算模型. 仅用 quote,atom,eq,c
ar,cdr,cons,和 cond, 我们定义了函数 eval.,它事实上实现了我们的语言,用
它可以定义任何我们想要的额外的函数.
        当然早已有了各种计算模型 --最著名的是图灵机 . 但是图灵机程
序难以读懂. 如果你要一种描述算法的语言 , 你可能需要更抽象的 , 而这
就是约翰麦卡锡定义 Lisp 的目标之一.
        约翰麦卡锡于 1960 年定义的语言还缺不少东西. 它没有副作用,
没有连续执行 (它得和副作用在一起才有用), 没有实际可用的数,[4] 没有
动态可视域. 但这些限制可以令人惊讶地用极少的额外代码来补救 . Steel
e 和 Sussman 在一篇叫做``解释器的艺术''的著名论文中描述了如何做到这
点.[5]
        如果你理解了约翰麦卡锡的 eval, 那你就不仅仅是理解了程序语
言历史中的一个阶段. 这些思想至今仍是 Lisp 的语义核心. 所以从某种意
义上, 学习约翰麦卡锡的原著向我们展示了 Lisp 究竟是什么. 与其说 Lisp
是麦卡锡的设计,不如说是他的发现. 它不是生来就是一门用于人工智能,
快 速 原 型 开 发 或 同等 层 次 任 务 的 语 言 . 它 是 你 试 图 公 理 化 计算 的 结 果 (之
一).
        随着时间的推移 , 中级语言, 即被中间层程序员使用的语言, 正
一致地向 Lisp 靠近. 因此通过理解 eval 你正在明白将来的主流计算模式会
是什么样.
        注释
        把约翰麦卡锡的记号翻译为代码的过程中我尽可能地少做改动 .
我有过让代码更容易阅读的念头, 但是我还是想保持原汁原味.
      在约翰麦卡锡的论文中,假用 f 来表示, 而不是空表. 我用空表表
示假以使例子能在 Common Lisp 中运行. (fixme)
      我略过了构造 dotted pairs, 因为你不需要它来理解 eval. 我也没
有提 apply, 虽然是 apply(它的早期形式, 主要作用是引用自变量), 被约翰
麦卡锡在 1960 年称为普遍函数, eval 只是不过是被 apply 调用的子程序来
完成所有的工作.
      我定义了 list 和 cxr 等作为简记法因为麦卡锡就是这么做的. 实际
上 cxr 等可以被定义为普通的函数. List 也可以这样, 如果我们修改 eval,
这很容易做到, 让函数可以接受任意数目的自变量.
      麦卡锡的论文中只有五个原始操作符. 他使用了 cond 和 quote,但
可能把它们作为他的元语言的一部分. 同样他也没有定义逻辑操作符 and
和 not, 这不是个问题, 因为它们可以被定义成合适的函数.
      在 eval.的定义中我们调用了其它函数如 pair.和 assoc.,但任何我
们用原始操作符定义的函数调用都可以用 eval.来代替. 即
      (assoc. (car e) a)
      能写成
      (eval. '((label assoc.
      (lambda (x y)
      (cond ((eq (caar y) x) (cadar y))
      ('t (assoc. x (cdr y))))))
      (car e)
      a)
      (cons (list 'e e) (cons (list 'a a) a)))
      麦卡锡的 eval 有一个错误. 第 16 行是(相当于)(evlis. (cdr e) a)
而不是(cdr e), 这使得自变量在一个有名函数的调用中被求值两次 . 这显
示当论文发表的时候, eval 的这种描述还没有用 IBM 704 机器语言实现.
它还证明了如果不去运行程序, 要保证不管多短的程序的正确性是多么困
难.
      我还在麦卡锡的论文中碰到一个问题. 在定义了 eval 之后, 他继
续给出了一些更高级的函数 --接受其它函数作为自变量的函数 . 他定义了
maplist:
           (label maplist
           (lambda (x f)
           (cond ((null x) '())
           ('t (cons (f x) (maplist (cdr x) f))))))
           然后用它写了一个做微分的简单函数 diff. 但是 diff 传给 maplist
一个用 x 做参数的函数, 对它的引用被 maplist 中的参数 x 所捕获.[6]
           这是关于动态可视域危险性的雄辩证据 , 即使是最早的更高级函
数的例子也因为它而出错. 可能麦卡锡在 1960 年还没有充分意识到动态可
视域的含意. 动态可视域令人惊异地在 Lisp 实现中存在了相当长的时间--
直到 Sussman 和 Steele 于 1975 年开发了 Scheme. 词法可视域没使 eva
l 的定义复杂多少, 却使编译器更难写了.
           About this document ...
           Lisp 之根源
           This document was generated using the LaTeX2HTML trans
lator Version 2K.1beta (1.48)
           Copyright &copy; 1993, 1994, 1995, 1996, Nikos Drakos, C
omputer Based Learning Unit, University of Leeds.
           Copyright &copy; 1997, 1998, 1999, Ross Moore, Mathemat
ics Department, Macquarie University, Sydney.
           The command line arguments were:
           latex2html -split=0 roots_of_lisp.tex
           The translation was initiated by Dai Yuwen on 2003-10-24
           --------------------------------------------------------------------------------
           Footnotes
           [1] 欧几里德对几何的贡献.
           ``Recursive Functions of Symbolic Expressions and Their C
omputation by Machine, Part1.'' Communication of the ACM 3:4, Ap
ril 1960, pp. 184-195.
        [2]当表达式以七个原始操作符中的五个开头时,它的自变量总是要
求值的.
        [3]以另外两个操作符 quote 和 cond 开头的表达式以不同的方式求
值. 当 quote 表达式求值时, 它的自变量不被求值,而是作为整个表达式的
值返回. 在 一个正确的 cond 表达式中, 只有 L 形路径上的子表达式会被求
值.
        [4]逻辑上我们不需要为了这定义一个新的记号 . 在现有的记号中
用 一个叫做 Y 组合器的函数上的函数, 我们可以定义递归函数. 可能麦卡
锡在写 这篇论文的时候还不知道 Y 组合器; 无论如何, label 可读性更强.
        没有实际可用的数,
        在麦卡锡的 1960 年的 Lisp 中, 做算术是可能的, 比如用一个有 n
个原子的表表示数 n.
        ... 的艺术''的著名论文中描述了如何做到这点.5
        Guy Lewis Steele, Jr. and Gerald Jay Sussman, ``The Art
of the Interpreter, or the Modularity Complex(Parts Zero,One,and Tw
o),'' MIT AL Lab Memo 453, May 1978.
        ... 对它的引用被 maplist 中的参数 x 所捕获.6
        当代的 Lisp 程序 员在这儿会用 mapcar 代替 maplist. 这个例子
解开了一个谜团: maplist 为什 么会在 Common Lisp 中. 它是最早的映射
函数, mapcar 是后来增加的.
        --------------------------------------------------------------------------------
        Common Lisp 语言快速入门:
        Lisp 是软件领域的分裂力量。一方面,Lisp 爱好者誓言 Lisp 比软
件领域内的其它语言都更加快捷、整洁和强大;而反对者则辩称,不可靠
的执行和库支持不足使得开发者难以在其中编写任何真正的软件。事实上,
他们都有各自的道理。
        第一版 Lisp 于大约 50 年前推出,这使得它和 FORTRAN 一样,
成为现在仍在使用的最古老的编程语 言之一。可以证明,它拥有(它们将
会拥有)最庞大的特性列表,它也是第一种包括一整套今天我们全都认为
是标准语言特性的语言,如垃圾收集、递归、函数作为对象、甚至是普通
的 if-then-else 子句。同时,人们也认为它是一款优秀的教学语言:MIT 使
用方案、Lisp 衍生物,传授它们的介绍性编程类。
      我们将一起学习最强大和项目就绪的 Lisp 版本:Common Lisp,
使其正常运行,并了解一些 Lisp 应用。
      为何选择 Lisp?
      代码和数据并无差异——在 Lisp 中,代码只是一个函数对象列表。
源代码和数据源之间不存在区别,允许 Lisp 把它的内在呈现给编译器、注
释器和程序员。这允许你方便地本地读入和评估代码,甚至可以允许你使
用宏。
      宏——定义和重新定义任何语言元素。不喜欢条件、或循环或函数
的运行方式吗?好,你可以定义自己的注释。如果你在代码中多次执行某
个特定的任务,把那个特性添加到语言中不是更加方便吗?应用 Lisp,你
可以实现上述功能。
      速度——虽然在许多情况下 Common Lisp 不如 C 或 OCaml 这类
速度巨人快捷,但它在一系列测试中表现良好,特别是在执行一小段程序
的情况下。了解一些基本的编译器知识, 你就能够编写出处理列表和大型
数字的代码,在执行速度和内存使用方面都要优于其它语言。
      简化——Lisp 的一切功能都基于一些基本的理念——一旦你了解
那些理念,你就几乎能够处理任何问题。Lisp 程序员常常自夸说,仅仅用
几百行代码,你就能在几乎任何语言(如 C++或 Haskell)中执行一个 Lis
p 注释器。
      灵活——以你喜欢的任何方式编写代码。更喜欢功能性的编程方法
吗?没问题!想要完全反复编程吗?草草写下几个快速的宏就可以完成任
务。你可以用最方便最高效的方式编写程序,而且这些程序都能良好地运
行。
      好,行了!我购买了 Lisp,我如何进行安装呢?
      这是棘手的问题。不像是 Python 或 C#一样,Common Lisp 没有
标准执行——该语言由一个规范,而不是执行来定义。Common Lisp 也没
有 C 语言的优势:在每一个平台上都是一种支配性的执行或流行的执行。
每个版本都应执行上述标准,但有一些细节要由编译器或注释器来处理,
这使得每个执行都稍有不同。
      你可以使用几种选项——在本文中我使用 CLISP,它在 Windows、
Linux 和 Mac(仅 PPC)上运行良好。如果你使用英特尔 Mac,则必须使
用其它执行,如 Allegro Common Lisp 或 SBCL。对于这篇快速入门中的
简单例子,你使用哪个执行都不要紧。
      使用 Lispbox 可以快速安装 Common Lisp 系统,Lispbox 为你提
供一个 Common Lisp 执行、Emacs 和 SLIME——Emacs 高级 Lisp 整合模
式,许多 Lisp 程序员会告诉你说,它是使用 Lisp 的唯一方法。如果你并非
Emacs 用户(我本人也和你一样),不要担心,它并非必要条件,只是使得
编写 Common Lisp 程序更加简便。
      安装过程因平台而异,在 Windows 中你只能运行安装程序,多数
Linux 软件包管理器提供安装包等。选择一个执行并遵循安装指令即可。打
开 REPL(交互式提示符)之后再返回这里,我们继续往后讲。
      REPL
      REPL 代表―阅读-评估-打印-循环‖(Read-Evaluate-Print-Loop),它
简单表示注释器的一个交互式提示符。你可以从这里输出一些简单的 Lisp
代码。如果你使用另一种注释器提示符,你可以在这里使用提示符作为计
算器输出一些基本的数学表达式——但它不能正常运行。在 CLISP 中输入
5*2 不会返回任何有意义的结果:
      [1]> 5 * 2
      5
      [2]>
      5
      [3]>
      2
      Lisp 并非以那种方式运行,运算符,如―+‖不是在数字之间,而是
在数字前面,就好像它们是函数名称一样。因此,如果你想将 REPL 当作
计算器使用,你必须输入:
      [1]> (* 5 2)
      10
      [2]> (+ 1 2 3 4)
      10
      [3]> (+ (* 5 2) (* 10 3) (/ 100 4))
      65
      对你来说,理解这种用法可能更难一些,但它拥有一些优势:它
便于编译器解析、它对所有函数和运算符都一样、它让你给函数添 加尽可
能多的自变量——例如,在上面的第二个例子中,你可以任意扩充加数,使
得加法函数和总计函数完全一样。
      另外你会注意到,函数名在括号内,而不像许多其它语言一样函
数名在括号以外。这表示你要写(函数自变量)而不是函数(自变量)。
      每个 Lisp 表达式会返回一个值,一个函数总是返回最后一个表达
式的结果——即使是 NIL,NULL 在 Java 或 C++中的对等值也是这样。因
此在 Lisp 中显示―Hello World‖相当简单:
      [3]> "Hello World"
      "Hello World"
      如果你希望在屏幕上打印一些内容,并返回其它内容,你应该使
用打印函数:
      [4]> (print "Hello World")
      "Hello World"
      "Hello World"
      这个字符串显示两次,一个是打印结果,一个是函数返回的结果。
      Lisp 表示 LIST Processor(列表处理器),Lisp 中的几乎所有内
容都以列表的形式存在,因此有时你必须处理列表。定义列表非常容易:
      [5]> (list 1 2 3 4 5)
      (1 2 3 4 5)
      [6]> '(1 2 3 4 5)
      (1 2 3 4 5)
    第二种定义方法叫做引用,除定义简单的列表外,它还有更多用
途,不过我们必须在后面的另一篇文章中讨论那个主题。
    控制流程
    Lisp 拥有全部标准控制流程方法。定义一个重复一个值的简单循
环相当容易:
    [7]> (dotimes (i 10) (print i))0
    1
    2
    3
    4
    5
    6
    7
    8
    9
    NIL
    同样,重复一个列表也很简单:
    [8]> (dolist (i '(0 1 2 3 4 5 6 7 8 9)) (print i))
    0
    1
    2
    3
    4
    5
    6
    7
    8
    9
    NIL
     以上两个函数都是 DO 函数的特殊版本,它就像在其它语言中组
合使用 while 和 for 函数一样。它由三个部分组成:循环变更定义、终止条
件和语句主体:
     [9]> (do ((i 0 (+ 1 i))) ((> i 10)) (print i))
     0
     1
     2
     3
     4
     5
     6
     7
     8
     9
     10
     NIL
     在这个例子中,变更定义部分为((i 0 (+ 1 i))),它定义变量 i 为 0,
并在每次循环时调用函数(+ 1 0)。终止条件为((> i 10)),表示在 i 大于 1
0 时函数终止运行。最后主体部分打印 i 的值。
     Lisp 中也有条件函数,最基本的条件函数为 if 函数:
     [10]> (if (> 10 20) (print "Hello") (print "World"))
     "World"
     "World"
     if 函数由三部分组成:条件、then 语句和 else 语句。如果条件为
真,则执行 then 语句,否则就执行 else 语句。
     你可能已经注意到,到现在为止我们仅使用了单个的语句——但如
果你需要把几个语句连接在一起,那该怎么办呢?在 Lisp 中,要将几个语
句连接起来,你需要使用 progn 这个特殊的控制流程函数:
     [11]> (progn (print "Hello") (print "World"))
     "Hello"
    "World"
    "World"
    例如,上例允许你在条件函数和循环中使用几个语句。
    好了,以上内容已足以让你初步认识 Common Lisp 语言:通过你
了解的内容,你可以编写出一些微型程序,对 Lisp 语言进行测试。请密切
关注本系列的下一篇文章,到时我们将介绍 Lisp 独特的列表处理机制。




  扩展阅读:
     1.http://daiyuwen.freeshell.org/gb/rol/roots_of_lisp.html
   smalltalk


   目录[隐藏]


         什么是 Smalltalk ?
         Smalltalk 中的对象
         Smalltalk 的历史
         Smalltalk-80



       Smalltalk 被公认为历史上第二个面向对象的程序设计语言和第
一个真正的集成开发环境 (IDE)。由 Alan Kay,Dan Ingalls,Ted Kaehl
er,Adele Goldberg 等于 70 年代初在 Xerox PARC 开发。
       Smalltalk 对其它众多的程序设计语言的产生起到了极大的推动作
用,主要有:Objective-C,Actor, Java 和 Ruby 等。90 年代的许多软件
开发思想得利于 Smalltalk,例如 Design Patterns, Extreme Programmi
ng(XP)和 Refactoring 等。
   [编辑本段]
   什么是 Smalltalk ?
       Smalltalk 和许多程序设计语言不同,它不仅仅是一门语言。
       一种面向对象的程序设计语言 :它是一种面向对象的语言,包含
语言的语法和语义。一些编译器可以通过 Smalltalk 源程序产生可执行文件。
这些编译器通常产生一种能在虚拟机上运行的二进制代码。Smalltalk 语言
本身非常精炼。
       一种程序设计环境:这里指的是一种提供许多 对象 的系统,而
不是某种特殊的开发环境。和许多语言不同(包括 C++),Smalltalk 附带有
一个巨大的、相当标准的类库。这些 类 使得开发 Smalltalk 程序的效率非
常高。在其它语言(例如 Ada , C 和 Pascal )中通常被作为语言的一
部分的功能(例如条件判断,循环等),在 Smalltalk 由特定的类提供。
       一个应用开发环境(ADE):由于 Smalltalk 的历史原因,它具有一
个非常优秀的高度集成、开放的应用开发环境。由于开发环境中的浏览器、
监视器以及调试器都由同样的源程序衍生出来的,不同的版本之间也具有
相当好的兼容性。此外,这些工具的源程序都可以在 ADE 直接存取。
  [编辑本段]
  Smalltalk 中的对象
     在 Smalltalk 中所有的东西都是对象,或者应该被当作对象处理。
     例如下面的表达式:
     2 + 3
     应当被理解为:向对象 2 发送消息+,参数为对象 3。
     纯面向对象使得 Smalltalk 在语言结构方面有许多与其他语言不同
的特点,例如在 Smalltalk 语言中没有条件语句,取而代之的是一些发送给
对象 true 或者 false 的消息,因此它们不属于语言部分,而属于 Smalltalk
的类库;也没有循环重复语句(C 语言中的 for while),Smalltalk 用向数
字对象或块对象发送消息来实现重复执行。
  [编辑本段]
  Smalltalk 的历史
     最早的 Smalltalk 原型由 Alan Kay 于 70 年代初提出。类(来自 S
imula-67)、海龟绘图(来自 MIT 的 LOGO )以及 图形界面 等概念的有
机组合,构成了 Smalltalk 的最初的蓝图。
     在 1971 年到 1975 年之间,Kay 在 Xerox PARC 的小组设计并实
现了第一个真正的 Smalltalk 语言系统。这个系统具有以下几个技术创新:


     语言完全基于 Simula 的类和消息的概念。
     语言没有固定的语法,语法分析由类本身完成。
     开发环境的革新相当迅速。
     虽然当时的位图显示器十分昂贵,但是 Kay 却说服了 PARC 让他
使用这些位图显示器,这使得 Kay 和他的小组能够实现不同大小和字体的
文字,使用多窗口环境,以及一些对图像处理的高端支持。
     1975-76 年间,Kay 小组认识到应当对执行效率和规模进行优化。
于是他们在许多重要方面重新设计了 Smalltalk 系统,在语言上:
       引入了继承和子类的概念。
       确定了语言的语法,这使得编译器能够产生高效、可执行、精炼
的二进制代码。
       Larry Tesler 设计了浏览器,这极大地提高了 Smalltalk 程序员的
编程效率。
       前述的所有 Smalltalk 系统都是在特殊的硬件上实现的,直到 197
7-78 年,Bruce Horn 和 Ted Kaehler 把 Smalltalk-76 移植到由 Intel 80
86 处理器和自定显示器所组成的硬件环境(被称为 NoteTaker)上。虽然
这种硬件环境只生产了 10 台,但是它证明了在通常的处理器上实现 Small
talk 的可能性。
   [编辑本段]
   Smalltalk-80
       在 1979-80 年,部分受 NoteTaker 项目的影响,Smalltalk 小组的
注意力转移到 Smalltalk 的销售可行性上。小组设计并实现了新一代的 Sma
lltalk 系统,这次修改的目标着重于在标准硬件上的移植性等方面,包括:
       采取 ASCII 码集,摒弃了原先在 Smalltalk-72 和-76 中使用的特
殊字符。
       取消了原始(primitive)方法直接存取内存的能力。取而代之的是引
入一系列的原始方法提供相应的功能。
       引入了元类的概念。
       引入 MVC(Model-View-Controller)系统以方便交互式应用软件的
开发。
       程序实例
       数学计算:
       (15 * 19) + (37 squared)
       可以理解为:向 15 发送消息'*',参数为 19;向 37 发送消息 squ
ared; 最后向 15*19 的结果发送消息'+',参数为 37 squared 的结果。
c++


目录[隐藏]


      【C++概述】
      【子语言】
      【语言发展】
      【C++入门】
      【C++的设计原则】
      【C++的 Hello World 程序】
      【C++程序员的数量】
      【C++语言的应用】
      【C++概述】
      【子语言】
      【语言发展】
      【C++入门】
      【C++的设计原则】
      【C++的 Hello World 程序】
      【C++程序员的数量】
      【C++语言的应用】
         【C++编程技巧】
         【C++的集成开发环境】
         【C++著作】
                            c++
     [编辑本段]
     【C++概述】
                                   ,
       C++这个词在中国大陆的程序员圈子中通常被读做―C 加加‖ 而西
方的程序员通常读做―C plus plus‖ ―CPP‖ 它是一种使用非常广泛的计算
                     ,     。
机编程语言。C++是一种静态数据类型检查的,支持多重编程范式的通用程
序设计语言。它支持过程化程序设计、数据抽象、面向对象程序设计、制
作图标等等泛型程序设计等多种程序设计风格。
       C++发展历史简单介绍
                    ,
       C 语言之所以要起名为―C‖ 是因为它是主要参考那个时候的一门
叫 B 的语言,它的设计者认为 C 语言是 B 语言的进步,所以就起名为 C 语
言;但是 B 语言并不是因为之前还有个 A 语言,而是 B 语言的作者为了纪
念他的妻子,他的妻子名字的第一个字母是 B; 当 C 语言发展到顶峰的时
刻,出现了一个版本叫 C with Class,那就是 C++最早的版本,在 C 语言
中增加 class 关键字和类,那个时候有很多版本的 C 都希望在 C 语言中增
加类的概念;后来 C 标准委员会决定为这个版本的 C 起个新的名字,那个
时候征集了很多种名字,最后采纳了其中一个人的意见,以 C 语言中的++
运算符来体现它是 C 语言的进步,所以就叫 C++,也成立了 C++标准委员
会;
       美国 AT&T 贝尔实验室的本贾尼·斯特劳斯特卢普(Bjarne Strous
trup)博士在 20 世纪 80 年代初期发明并实现了 C++(最初这种语言被称
作―C with Classes‖ 。一开始 C++是作为 C 语言的增强版出现的,从给 C
                )
语言增加类开始,不断的增加新特性。虚函数(virtual function)、运算符
重载(operator overloading)、多重继承(multiple inheritance)、模板(t
emplate)、异常(exception)、RTTI、命名空间(name space)逐渐被加
入标准。1998 年国际标准组织(ISO)颁布了 C++程序设计语言的国际标
准 ISO/IEC 1488-1998。C++是具有国际标准的编程语言,通常称作 ANSI
/ISO C++。1998 年是 C++标准委员会成立的第一年,以后每 5 年视实际
需要更新一次标准,下一次标准更新将是在 2009 年,目前我们一般称该标
准 C++0x。遗憾的是,由于 C++语言过于复杂,以及他经历了长年的演变,
直到现在(2009 年)只有 Visual C++ 2010 CTP 开发环境的编译器完全
符合这个标准。
      另外,就目前学习 C++而言,可以认为他是一门独立的语言;他
并不依赖 C 语言,我们可以完全不学 C 语言,而直接学习 C++。根据《C
++编程思想》(Thinking in C++)一书所评述的,C++与 C 的效率往往相
差在正负 5%之间。所以有人认为在大多数场合 C++ 完全可以取代 C 语言
(然而我们在单片机等需要谨慎利用空间、直接操作硬件的地方还是要使用
C 语言)。
  [编辑本段]
  【子语言】
      根据 Effective C++第三版第一条款的描述,现在 C++由以下四个
―子语言‖组成:
      1、C 子语言。C++支持 C 语言的几乎全部功能,在语法上与 C 语
言仅有极微妙的差别(如括号表达式的左右值性,具体请参考 C++标准文
献)。
      2、面向对象的 C++。C++首先作为一门面向对象的语言而闻名,
这个特点在这里不再详述。
      3、泛型编程语言。C++强大(但容易失控的)模板功能使它能在
编译期完成许多工作,从而大大提高运行期效率。
      4、STL(C++标准模板库)。随着 STL 的不断发展,它已经逐渐
成为 C++程序设计中不可或缺的部分,其效率可能比一般的 naive 代码低
些,但是其安全性与规范性使它大受欢迎。
  [编辑本段]
  【语言发展】
     C++语言发展大概可以分为三个阶段:第一阶段从 80 年代到 199
5 年。这一阶段 C++语言基本上是传统类型上的面向对象语言,并且凭借着
接近 C 语言的效率,在工业界使用的开发语言中占据了相当大份额;第二
阶段从 1995 年到 2000 年,这一阶段由于标准模板库(STL)和后来的 Boos
t 等程序库的出现,泛型程序设计在 C++中占据了越来越多的比重性。当然,
同时由于 Java、C#等语言的出现和硬件价格的大规模下降,C++受到了一
定的冲击;第三阶段从 2000 年至今,由于以 Loki、MPL 等程序库为代表
的产生式编程和模板元编程的出现, C++出现了发展历史上又一个新的高
峰,这些新技术的出现以及和原有技术的融合,使 C++已经成为当今主流
程序设计语言中最复杂的一员。
  [编辑本段]
  【C++入门】
     C++是一种语言,仅仅是它的语法、特性、标准类库就已经是一门
非常高深的课程,所以在开始学习的时候,必须先要打好基础。在市面上
有很多 Visual C++的书,虽然其中可能会花 1-2 章来介绍 C++的基本特性,
但是那绝对不会让你入门。因此,初学者学习 C++应该选择针对 C++语言
本身的书籍,而不能是针对 Visual C++、MFC 或者 Windows API 的。
     学习 C++应该由易至难,循序渐进。以前经常有人说学习 C++之
前应该学习 C 语言。事实上那不是必须的,C++和 C 语言虽然有关系,但
仍然是两种不同的语言。当然,在学习 C++之前学习过其他编程语言是很
有好处的。那会使学习 C++的速度更快,毕竟很多计算机语言的概念都是
相通的。而对于零基础的初学者来说,则是应该静下心来,不要急躁。要
成为 C++的高手,不是那么容易的,必须要花很大的努力。
     从入门教材的选择上,主要看学习者的自身情况。如果已经有过
学习高级语言的经历,那么推荐使用谭浩强的《C++程序设计》。注意是 04
年版的,06 年版的那本书是阉割版,上来就面向对象。虽然说 C 和 C++是
相似的,但是前面已经说了,C 和 C++应该作为两种语言来学习,所以 06
年的那本内容就稍微欠缺一点了。谭浩强 04 版的这本书内容比较规整的,
条理也很清晰。如果有过其他高级语言的基础,那么估计半年就能对 C++
的概况有个了解了。谭浩强老师的书已经成为了全国各大高等院校的教科
书,是比较受到认可的。
       如果是从零基础开始学 C++,那么推荐使用潘嘉杰的《易学 C++》。
这本书是 2008 年出的新书,听说是个学生在读书的时候写的。这本书网上
有下载免费的电子版。。这本书主要就是针对初学者的,讲得也比较生动有
趣,比较提得起学习的兴趣。所以没有基础的初学者选这本书也是不错的,
就是想要很快成为高手,可能看这本书还不够。
       至于看完入门的书之后,就应该看一些高层次的书了。比如 The
C++ Programming Language 和 C++ Primer,同时也可以向 STL、MFC、
API 等各个方向发展。如果对别的语言感兴趣,还能去看看 C#和 Java,它
们和 C++从语法和很多概念上都是类似的。
   [编辑本段]
   【C++的设计原则】
       • C++设计成静态类型、和 C 同样高效且可移植的多用途程序设
计语言。
       • C++设计成直接的和广泛的支援多种程序设计风格(程序化程序
设计、资料抽象化、面向对象程序设计、泛型程序设计)。
       • C++设计成给程序设计者更多的选择,即使可能导致程序设计者
选择错误。
       • C++设计成尽可能与 C 兼容,籍此提供一个从 C 到 C++的平滑
过渡。
       • C++避免平台限定或没有普遍用途的特性。
       • C++不使用会带来额外开销的特性。
       • C++设计成无需复杂的程序设计环境。
       出于保证语言的简洁和运行高效等方面的考虑,C++的很多特性都
是以库(如 STL)或其他的形式提供的,而没有直接添加到语言本身里。
关于此类话题,C++之父的《C++语言的设计和演化》 里做了详尽的陈述。


   [编辑本段]
   【C++的 Hello World 程序】
       在使用兼容 C89 标准(也称为 ANSI C)的编译器时,下面这个
程序显示―Hello, world!‖然后结束运行:
       (事实上这并不是符合 98 标准[ISO C++]的 C++程序,而且在多
数编译器上这个程序也不能运行,若要在比较旧的编译器上编译该程序,
应将 iostream 改为 iostream.h)
       #include <iostream>
       int main()
       {
       printf("Hello, world!\n");
       return 0;
       }
       在使用兼容 C++98 标准(ISO/IEC 14882-1998)的编译器时,
下面的程序也是可以的:
       #include <iostream.h>
       int main()
       {
       cout << "Hello, world!" << endl;
       return 0;
       }
       在使用兼容 C++ STL 的编译器时,应当是:
       #include <iostream>
       using namespace std;
       int main()
       {
       cout<<"Hello,world!"<<endl;
       return 0;
       }
       根据 ISO C++的规定,main 函数的形式只能是
       int main(void)
       {
       ...
       }
       以及
       int main(int argc,char * argv[])
       {
       ...
       }
       尽管如此,但在 Visual C++ 2003 以前的 Microsoft Studio 编译
器上,
       void main()
       {
       ...
       }
       也被支持,但这并不正确,也不标准。这样的写法会使程序代码
丧失跨平台的特性。每年都有专业人士规定 c++的语法,这也是 c++由于其
他编程语言的原因之一,由它衍生的 Java 已成为通用编程语言中广受欢迎
的一种。
   [编辑本段]
   【C++程序员的数量】
       分析机构 EvansData 定期对开发人员展开调查,其调查结果与 St
roustrup 提出的 C++正在扩张的说法相违背。EvansData 的数据显示,以
C++为工具的开发人员在整个开发界所占的比例由 1998 年春天的 76%下降
至 2004 年秋的 46%。
       Forrester 最新的调查显示,C++、微软 VisualBasic 和 Java 是众
多公司产品体系的首选语言。对 100 家公司的调查显示,C/C++、VisualB
asic 和 Java 在产品体系中的使用比例分别是 59%、61%和 66%。
       传统上认为,C++相对于目前一些新潮的语言,如 Java、C#,优
势在于程序的运行性能。这种观念并不完全。如果一个人深信这一点,那
么说明他并没有充分了解和理解 C++和那个某某语言。同时,持有这种观
念的人,通常也是受到了某种误导(罪魁祸首当然就是那些财大气粗的公
司)。对于这些公司而言,他们隐藏了 C++同某某语言间的核心差别,而把
现在多数程序员不太关心的差别,也就是性能,加以强化。因为随着 CPU
                            。
性能的快速提升,性能问题已不为人们所关心。这叫―李代桃僵‖ 很多涉世
不深的程序员,也就相信了他们。于是,大公司们的阴谋也就得逞了。
    一般认为,使用 Java 或 C#的开发成本比 C++低。但是,如果你
能够充分分析 C++和这些语言的差别,会发现这句话的成立是有条件的。
这个条件就是:软件规模和复杂度都比较小。如果不超过 3 万行有效代码
(不包括生成器产生的代码),这句话基本上还能成立。否则,随着代码量
和复杂度的增加,C++的优势将会越来越明显。造成这种差别的就是 C++
的软件工程性。在 Java 和 C#大谈软件工程的时候,C++实际上已经悄悄
地将软件工程性提升到一个前所未有的高度。这一点被多数人忽视,并且
被大公司竭力掩盖。
    语言在软件工程上的好坏,依赖于语言的抽象能力。从面向过程
到面向对象,语言的抽象能力有了一个质的飞跃。但在实践中,人们发现
面向对象无法解决所有软件工程中的问题。于是,精英们逐步引入、并拓
展泛型编程,解决更高层次的软件工程问题。(实际上,面向对象和泛型编
程的起源都可以追溯到 1967 年,但由于泛型编程更抽象,所以应用远远落
后于面向对象)。
  [编辑本段]
  【C++语言的应用】
    哪些程序是用 C++写的:
    主流的 3 种操作系统 Windows,Linux,Unix,内核都是用 C 语言和汇
编写的,上层高级特性是用 C++写的。
    《魔兽世界》等几乎所有的网络游戏,百度搜索引擎(Baidu.com),
我们所用的大多数软件都是用 C++写的(硬件也有很多用到 C++的)。
    C++之父 Bjarne Stroustrup 列举的 C++应用:
    Amazon.com:Software for large-scale e-commerce
    Apple: OS X is written in a mix of language, but a few i
mportant parts are C++. The two most interesting are
        AT&T:The largest US telecommunications provider.
        o provisioning systems
        o systems for rapid network recovery after failure
        Autodesk: A large number of major number of application i
n the CAD domain
        Ericsson:o server platform.
        o TDMA-CDMA HLR
        o GSM-TDMA-CDMA mobility gateway
        Google: web search engine, etc。
        HP: Here is a tiny fraction of HP's C++ apps:
        o C, C++, Fortran90 compilers, and linker for the new HP
IA64 platform (these add to more than 1 million lines of C++ cod
e).
        IBM: o OS/400.
        o K42: a high performance, open source, general -purpose
operating system kernel for cache-coherent multiprocessors.
        Intel:o Vtune performace analysis software
        o compilers and optimizers
        o lots of chip design and manufacturing software
        JPL (Jet Propulsion Lab, NASA): Mars rover autonomous d
riving system (incl. scene analysis and route planning). C++ on Mar
s! Also lots of supporting software "on the ground" (i.e. Earth).
        Microsoft:o Windows XP
        o Windows NT (NT4 and 2000)
        o Windows 9x (95, 98, Me)
        o Microsoft Office (Word, Excel, Access, PowerPoint, Outlo
ok)
        o Internet Explorer (including Outlook Express)
        o Visual Studio
           o SQL
           Mozilla: Firefox browser and Thunderbird mail client (open
source)
           MySQL: MySQL Server (about 250,000 lines of C++) and
MySQL Cluster. Arguably the world's most popular open source dat
abase
           Nokia: o Mobile Communications radio-station/internet bridg
es: FlexiGGSN (Gateway GPRS Support Node) and FlexiSGSN (Ser
ver GPRS Support Node).
           o MSC/HLR
           Sun: o The HotSpot Java Virtual Machine is written in C++
           Symbian OS: rationale: "[...] using C++ for all system code,
 from the kernel upwards." This is one of the most widespread OS'
s for cellular phones
           KDE from linux is written in C++.
           telephone systems: I think it would be almost easier to li
st the systems which aren't written in C++
           更详细的应用列表 1:http://www.research.att.com/~bs/applicati
ons.html
           更详细的工业列表 2:http://www.lextrait.com/vincent/implement
ations.html
    [编辑本段]
    【C++编程技巧】
              一、使用 new 和 delete 进行动态内存分配和释放
           运算符 new 和 delete 是 C++新增的运算符,提供了存储的动态分
配和释放功能。它的作用相当于 C 语言的函数 malloc()和 free(),但是
性能更为优越。使用 new 较之使用 malloc()有以下的几个优点:
           (1)new 自动计算要分配类型的大小,不使用 sizeof 运算符,比
较省事,可以避免错误。
      (2)自动地返回正确的指针类型,不用进行强制指针类型转换。


      (3)可以用 new 对分配的对象进行初始化。
      使用例子:
      (1)int* p;
      p=new int[10]; //分配一个含有 10 个整数的整形数组
      delete[] p; //删除这个数组
      (2)int* p;
      p=new int (100);//动态分配一个整数并初始化
       二、使用 inline 内联函数替代宏调用
      对于频繁使用的函数,C 语言建议使用宏调用代替函数调用以加
快代码执行,减少调用开销。但是宏调用有许多的弊端,可能引起不期望
的副作用。例如宏:#define abs(a) (          :   )
                         (a)<0?(-a) (a) , 当使用
abs(i++)时,这个宏就会出错。
      所以在 C++中应该使用 inline 内联函数替代宏调用,这样既可达
到宏调用的目的,又避免了宏调用的弊端。
      使用内联函数只须把 inline 关键字放在函数返回类型的前面。例
如:
      inline int Add(int a,int b);//声明 Add()为内联函数
      这样编译器在遇到 Add()函数时,就不再进行函数调用,而是直接
嵌入函数代码以加快程序的执行。
       三、使用函数重载
      在 C 语言中,两个函数的名称不能相同,否则会导致编译错误。
而在 C++中,函数名相同而参数数据类型不同的两个函数被解释为重载。
例如:
      void PutHz(char* str);//在当前位置输出汉字
                                     在 x,y 处输入数字
      使用函数重载可以帮助程序员处理更多的复杂问题,避免了使用
诸如 intabs()、fabs()、dabs()等繁杂的函数名称;同时在大型程序中,使
函数名易于管理和使用,而不必绞尽脑汁地去处理函数名。同时必须注意,
参数数据类型相同,但是函数返回类型不同的两个函数不能重载。
         四、使用引用(reference)代替指针进行参数传递
     在 C 语言中,如果一个函数需要修改用作参数的变量值的时候 ,
参数应该声明为指针类型。例如:
     void Add(int *a)
     {
     (*a)++;
     }
     调用时则使用
     Add(&x); //其中 x 为 int 或可以转化为 int 的类型,如 unsigned i
nt, 但这时候编译器通过回给出 warning
     对于复杂的程序,使用指针容易出错,程序也难以读懂。在 C++
中,对于上述情况 可以使用引用来代替指针,使程序更加清晰易懂。引用
就是对变量取的一个别名,对引用进行操作,这就相当于对原有变量进行
操作。例如使用引用的函数定义为:
     void Add(int& a)
     {
     a++;   //a 为一个整数的引用
     }
     调用时使用
     Add(x);     //其中 x 为 int
     这个函数与使用指针的上一个函数的功能是一样的,然而代码却
更为简洁和清晰易懂。
     五、使用缺省参数
     在 C++中函数可以使用缺省参数,例如:
     void PutHzxy(char *str,int x=-1, int y=-1)
     {
     if(x==-1)
     x=wherex();
      if(y==-1)
      x=wherex();
      moveto(x,y);
      PutHx(str);
      }
      可以有三种方式调用函数 PutHzxy(),例如:
      PutHzxy("C++语言");//使用缺省参数 在当前位置输出
      PutHzxy("C++语言",10,10);//没有使用缺省参数
      PutHzxy("C++语言",10);//对 y 使用缺省参数,指定 x 的位置
      通常的情况下,一个函数应该具有尽可能大的灵活性。使用缺省
参数为程序员处理更大的复杂性和灵活性问题提供了有效的方法,所以在 C
++的代码中都大量地使用了缺省参数。
      需要说明的是,所有的缺省参数必须出现在不缺省参数的右边。
亦即,一旦开始定义缺省参数,就不可再说明非缺省的参数。
      例如:
      void PutHzxy(char*str,int x=-1,int y=-1)//正确
      void PutHzxy(int x=-1,int y=-1,char*str)//错误
          六、使用 STL
      STL(Standard Template Library,标准模板库), STL 的代码从
广义上讲分为三类:algorithm(算法)、container(容器)和 iterator(迭
代器),并包括一些工具类如 auto_ptr。几乎所有的代码都采用了模板类和
模版函数的方式,这相比于传统的由函数和类组成的库来说提供了更好的
代码重用机会。
      #include<vector>// 包含相关的头文件/
      typedef std::vector<int> intvector;//使用 typedef 使代码看起来
更简洁
      int main()
      {
      intvector vi;
      for(int i=0;i<10,i++)
      vi.push_back(i);//使用 push_back 添加元素
      for(int i=0;i<vi.size();i++)
      std::cout<<vi[i]<<" ";//[]操作符被重载,使得我们可以像访问数组
一样访问 vector 中的元素
      }
    [编辑本段]
    【C++的集成开发环境】
      1.visual studio ( visual C++ )
      2.Borland C++ Builder
      3.eclipse(CDT)
      4.Dev-C++
      5.Code::Blocks
      6.Codelite
      7.C-Free
      8.linux 系统 pc 上的编译工具链为 gcc、 objcopy、
                                 ld、      objdump 等,
它们编译出来的程序在 x86 平台上运行
      ……
    [编辑本段]
    【C++著作】
      《The C++ Standard Library: A Tutorial and Reference》原文
版
      中文版:《C++标准程序库:自修教程与参考手册》
      这是一本百科全书式的 C++标准库著作,是一本需要一再查阅的
参考大全。它在完备性、细致性以及精确性方面都是无与伦比的。本书详
细介绍了每一标准库组件的规格和用法,内容涵盖包括流和本 地化在内的
整个标准库而不仅仅是 STL。正如本书副标题所示,它首先适合作为教程
阅读,尔后又可用作参考手册。
      浅显易懂的写作风格使得这本书非常易读。如果你希望学习标准
库的用法并尽可能地发挥其潜能,那你必须拥有这本书。正如网络上所言,
这本书不仅仅应该摆在你的书橱中,更应该放到你的电脑桌上。我向每一
位职业 C++程序员强烈推荐。
       《Standard C++ IOStreams and Locales: Advanced Program
mer's Guide and Reference》原文版
       中文版《标准 C++输入输出流与本地化》
       C++标准库由 STL、流和本地化三部分构成。关于 STL 的书市面
上已经有不少,但罕见流和本地化方面的专著。本书是这两个领域中最优
秀的一本,迄今为止没有任何一本书比这一本更全面详尽地讨论了流和本
地化。如果你不满足于停留在―会用‖流库的层面,千万不要错过它。
       2001 年夏天,我草草翻阅过这本书的中文版,从内容到包装都给
我留下了比较深刻的印象——不过负面的居多一些。2003 年秋天,无意中
得知某网络书店正以超低价格甩卖这本书的中译本,情不自禁,一阵唏嘘。


       《Effective STL》影印版、中文版
       读完 Scott 的《Effective C++》和《More Effective C++》的中
译本之后,我一直期待这本书的中文版。我从潘爱民先生的个人主页上了
解到,他和他的合作伙伴似乎早已完成了这本书的翻译工作,可惜至今市
面上仍不得见。幸运的是,我们可以看到它的原版。
       本书是使用 STL 的程序员必读之作。在这本书中,Scott 向我们讲
述 STL 容器和算法的工作机制以及如何以最佳方式使用它们。和 Scott 的
其他作品一样,这本书的写作风格清晰、精确,具有极佳的可读性。 看过
这本书以后,我想你也许会和我以及其他 C++程序员一样产生这样的想法:
Scott 什么时候会写出一本―More
       Effective STL‖?
       《Generic Programming and the STL: Using and Extending
the C++ Standard Template Library》影印版、中文版《泛型编程与 STL》


       关于 STL,我还提醒你留心 Matthew H. Austern 的《Generic P
rogramming and the STL: Using and Extending the C++ Standard T
                (
emplate Library》 《泛型编程与 STL》,中国电力出版社)。这本书散发着
浓厚的学院气息。Andrew Koenig 和 Barbara Moo 在《Accelerated C++:
 Practical Programming by Example》一书末尾郑重推荐另外两本进阶好
书(除了他们自己的《Ruminations on C++》外),其中一本是 TCPL,另
外一本就是本书!
       网络编程
       在网络编程时代,C++应该扮演着怎样的角色,让 ACE(Adaptiv
e Communications Environment)来告诉你。
       Douglas C. Schmidt, Stephen D. Huston,《C++ Network Pro
gramming》Volume 1: Mastering Complexity with ACE and Patterns、
Volume 2: Systematic Reuse with ACE and Frameworks
       中文版:,《C++网络编程》卷 1:运用 ACE 和模式消除复杂性、
卷 2:基于 ACE 和框架的系统化复用
       采用 C++进行企业级网络编程,目前 ACE(以及这两本书)是一
个值得考虑的选择。ACE 是一个面向对象、跨平台、开放源码的网络编程
框架,目标在于构建高性能网络应用和中间件。Douglas 是 ACE 的创始人,
Stephen 则已为 ACE 提供了数年的技术支持和顾问服务,两位都是 ACE
社群(是的,ACE 的影响和实际应用的程度已经形成了一个社群)的专家。


       ACE 并不单单被大学和研究所追捧,它已经被成功地应用于世界
上成千上万个商业应用中。在电信、宇航、医药和财经领域的网络系统中,
ACE 已经并继续发挥着重要的作用。如果你准备开发高性能通讯系统,你
应该考虑考虑这一汇集世界顶尖专家智慧的成果。
       除了使用 C++面向对象设计技术和模板等高级语言特性外,ACE
         《C++网络编程》卷 1 和卷 2 并不仅仅教你关于 ACE
还运用了大量的模式。
的方方面面,它还会教给你模式和通用框架设计等高级技术等。所以,作
为一名中、高级 C++程序员,即使你很少进行正儿八经的 C++网络程序设
计,阅读这两本书同样可以从中受益。
       是的,并非所有网络应用都要使用 Web 服务器(以及其他应用服
务器)和重量级组件模型,换个思路,它们或许也可以从轻量级的 ACE 组
件中获益。
       杂项
       以下几本书所以被列入―杂项‖单元,是因为我没有考虑到合适的归
类方法,它们和上面的书籍一样,值得一读。
       Bruce Eckel,《Thinking in C++》影印版二版、三版(又名卷二)


       中文《C++编程思想》二版、卷一:标准 C++导引 卷二:实用编
程技术
       《Thinking in C++》的第 1 版于 1996 年荣获―软件研发‖杂志评
选的图书震撼大奖。最新推出的第 2 版对内容进行了大幅改写和调整,以
反 映 C++标准化 带 来 的影 响以及 近几 年 面向对 象领域 最新 研 究和实 践成
果。―输入输入流‖ ―多重继承‖ ―异常处理‖和―运行时类型识别‖等高级主题连
        、      、
同 C++标准化以后增加的一些内容则被放入第二卷中。Bruce 是一名经验
丰富的 C++讲师和顾问,其培训和写作经验都是世界一流水准,他的作品
比那些―玩票‖的技术人员写的东西更能吸引读者。事实上,在同类图书中,
对于大多数读者而言,这本书的可读性要超过 TCPL 和《C++ Primer》。顺
带一提,访问作者的站点,你可以先睹第二卷的风采。
       Andrew Koenig, Barbara E. Moo,,《Ruminations on C++: A
Decade of Programming Insight and Experience》原版、中文版《C++
沉思录》
       Andrew 是世界上屈指可数的 C++专家。这是一本关于 C++编程思
想和程序设计技术而非语言细节的著作。如果你已经具有一定的基础,这
本书将教你在进行 C++编程时应该怎样思考,应该如何表达解决方案。整
本书技术表达透彻,文字通俗易懂。Bjarne 这样评价这本书:本书遍布―C+
+是什么?C++能够做什么?‖的真知灼见。
       Stanley B. Lippman,《 Inside The C++ Object Model》影印版、
中文版《深度探索 C++对象模型》
       从编译器的角度观察 C++可以使你知其然并知其所以然。本书探
讨了大量的 C++面向对象程序设计的底层运作机制,包括构造函数、函数、
临时对象、继承、虚拟、模板的实例化、异常处理、运行期类型识别等,
另外还介绍了一些在实现 C++对象模型过程中做出的权衡折衷。喜欢刨根
问底的 C++程序员不要错过这本书。
        Erich Gamma, Richard Helm, Ralph Johnson, John Vlisside
s, Design Patterns:
        Elements of Reusable Object-Oriented software
        Erich Gamma, Richard Helm, Ralph Johnson, John Vlisside
s,《Design Patterns:
        Elements of Reusable Object-Oriented software》影印版、中
文版《设计模式:可复用面向对象软件的基础》
        设计可复用的面向对象的软件,你需要掌握设计模式。本书并非
专为 C++程序员而写,但它采用了 C++(以及 Smalltalk)作为主要示例语
言,C++程序员尤其易于从中受益。四位作者都是国际公认的面向对象软件
领域专家,他们将面向对象软件的设计经验作为设计模式详细记录下来。
这本书影响是如此深远,以至于四位作者以及本书都被昵称为 GoF(Gang
 of Four)。本书学院气息浓厚,行文风格严谨简洁,虽然它不如某些讲解
模式的书籍易读,但真正要精准地理解设计模式,本书是终极权威。学习
设计模式,这本书需要一而再、再而三的咀嚼。顺带一句:请将设计模式
化作开拓思维的钥匙,切莫成为封闭思维的枷锁。
        John Lakos,《Large-Scale C++ Software Design》中文版《大
规模 C++程序设计》、候捷:《STL 源码剖析》
        还有一些 C++好书值得一读,恕此处无法一一列出。例如 John L
                                         (
akos 的著作《Large-Scale C++ Software Design》 《大规模 C++程序设
计》,中国电力出版社)和侯捷先生的《STL 源码剖析》(华中科技大学出
版社)等。
        《STL 源码剖析》是一本很有特色的书,但我认为它还可以更好。
我个人期待侯捷先生自第一版发行以来经过对模板技术的沉淀和再思考之
                          。
后,再写一本剖析得更深入、更透彻并且更全面的―第二版‖ 遗憾的是,侯
捷先生在完成《C++ Templates: The Complete Guide》一书的翻译后似
乎决定暂时告别模板、泛型编程和 STL 领域。
         使用 C++成功开发大规模软件系统,不仅需要很好地理解大多数
C++书籍中讲述的逻辑设计问题,更需要掌握《大规模 C++程序设计》中
讲述的物理设计技术。当然,这本书的确有点过时了,不过,如果你的精
力和金钱都比较宽绰,买一本看看并无坏处。
         至此,我想有必要声明一下,有一些(好)书没有得到推荐,主
要原因如下:
         以上这些书已经足够多、足够好了。
         我不会 推荐通过 正常渠道很 难购买到 的书籍 ——不管 是 中文版
还是英文版。
         作(译)者名气大小不影响我的推荐。我们是在看书,不是看人。


         我不会推荐我从来没有看过的书。我至少要看过其中的某个版本
(包括电子档)     ,         ,              。
       。这个―看‖ 一般指―认真阅读‖ 不过有一些也只能算是―浏览‖


         结语
         作为一名普通技术写译者,我深知技术创作和翻译的艰辛(和快
乐),并多多少少了解一些有关技术书籍创作、翻译、制作、出版以及市场
推介背后的细节。今天,我不会再对一本看上去差强人意的图书信口开河。
罗列同一本书的各种版本的用意只在于为你多提供一些信息,让你多一种
选择。
         在本文成文的后期,我给 Bjarne 写了一封信,请教如果他来写这
篇文章会怎么写。他给了我简明扼要的建议。在肯定以上列出的绝大部分
图书都是世界顶尖水平的 C++著作的同时,Bjarne 提醒我别忘了向专家级
程序员推荐《The C++ Standard : Incorporating Technical Corrigendu
m No. 1》
         《The C++ Standard : Incorporating Technical Corrigendum
No. 1》
      Bjarne 还友好地提醒我,在我的推荐列表中没有哪一本有助于 C+
+程序员进行 Windows 编程——这正是我的本意。在这篇文章中,我只推
荐、点评平台中立的 C++著作(网络编程除外)——和操作系统无关,和
集成开发环境无关,我甚至幻想它们和编译器也无关。你可以根据业务开
发需要,选读自己喜爱的领域相关的 C++书籍。
                  ,
      说到―系统无关、平台中立‖ 我不由得想起了―抽象层‖的概念。开
发实际应用的 C++程序员通常工作于特定操作系统、特定开发环境和特定
业务领域之中,而对标准 C++和 C++标准库扎实而深刻的把握,无疑是你
得以在不同的操作系统、不同的开发环境以及不同的业务领域之间纵横驰
骋的―抽象‖本钱。
      C++面向对象程序设计(作者:Walter Savitch) 这本书是老外出的
书,从基础到深入,很容从 C 过渡到 C++
      C++ Primer 中文版(第 4 版)(一本久负盛名的 C++经典教程)
      作   者: (美)Stanley B. Lippman Barbara E. Moo Josée
LaJoie 著,李师贤 等译
      出 版 社: 人民邮电出版社
      出版时间: 2006-3-1 字     数: 1149000 版   次: 1 页    数:
745 印刷时间: 2006/03/01 开    本: 印    次: 纸    张: 胶版纸 I S
B N : 9787115145543 包   装: 平装
      【C++名人坊】
      有两位 Google Maps API 的初学者向我请教他们按照最简单例
子写的程序为什么不能正常的运行。
      其中一位用 GTalk 跟我交流,我仔细了看了他的代码,没看出问
题,把代码保存在本地,打开 Firefox 的错误控制台,用 Firefox 打开他的
页面。出错的那一行被清晰的显示出来,我再仔细端详那句话,原来有两
个应该是英文逗号的地方,写上了中文逗号。
      另一位,在我的论坛跟我交流他的 Google Maps API 中遇到的问
题,我看他代码的时候也没有马上发现问题。然而,同样在用 Firefox 打开
后,问题很明显的找到了,原来是一个方法 openInfoWindow 被他写成 Op
enInfoWindow 了。
       在我帮助别人解决的程序调试问题中,这是非常常见的。人人都
可能打出中文逗号,人人都可能把大小写 写错。但是在我帮助他们解决问
题以后,他们总是感慨的说,谢谢我解决了这个问题,这个问题困扰了他
们几个小时,甚至是几天。
       这其实并不是只有初学者才会遇到的问题,我还帮助过些有非常
丰富经验的工程师解决问题,有时候问题仅仅出自某个参数没有传递进来,
或者是拼接字符串的时候少些了一个冒号,或者是拼接地址的时候漏掉了 h
ttp:。我甚至帮助一些人调试一些我根本不懂的语言的程序,因为多半出现
的问题,都和语言特性无关,不是程序员写错了字符,就是写错了逻辑,
或者是错误理解了一个函数。
       出问题是正常的,写程序是一个复杂的边 思考边打字的过程,笔
误和一时糊涂都是难以避免的。程序员一般把这种问题叫做低级问题,因
为这类问题跟你的智商完全无关,任何人都可能犯。
       但是,问题在于,有时候即使是很优秀的程序员,也会被一个低
级错误困扰,可能会几天都解决不了。所以,关键在于,如何找到问题。
       遇到问题的时候:
       1,不要怨天怨地。出了问题,当然有可能是系统的 bug,API 的
问题,但是那些几率往往比你犯低级错误的几率要低多了,先从自己身上
找原因,是不是自己写错了。
       2,要掌握工具。最低限度你要会写 Log,最好是 Log 和调试器结
合。好 的工具可以大大的提高效率。以前有人跟我说,Dll 不能调试,我
发现可以;有人说多线程不能调试,我发现可以;有人说 COM 不能调试,
我发现可以;有人说 IE 插件不能调试,我发现可以;有人说 OE 插件不能
调试,我发现也可以。当然,你确实会遇到不能调试的时候,当年我们做
东芝芯片的嵌入程序,一个组都没有 一个仿真器和调试器,但是至少可以
用 Log 嘛,无非是麻烦点。
       3,分析问题要有逻辑。遇到问题可以先把所有的可能性都列出来,
然后一个一个分析,肯定能找到原因的。
     4,要学会隔离问题。问题涉及到的代码越多,越难以理解,问题
越难以解决。遇到这样的情况,可以利用 Log 或者调试器,一行代码一行
代码的给它们洗清嫌疑,这样很快你就可以找到出问题的地方。如果代码
特别长,程序特别复杂,可以用二分法来做,效率很高。
     5,千万不要懒惰,不要事事求别人。一次复杂的调试过程就像一
部侦探剧,如果你有非常好的逻辑性,那这部剧的主角就是福尔摩斯,剧
情一定非常精彩。我说这个是有巨大风险的,说真的我帮人调东西挺上瘾
的,很有意思。但是我还是要告诉大家,一次高难度的调试之后,你的满
足感绝对不亚于写了一个伟大的程序。
     要想不遇到问题,写代码的时候:
     1,要对写出来的代码负责。我很佩服那些写代码写 100 行都不执
行一次的 高手,如果他们最后不被低级错误困扰的话我就更加的佩服了。
我写程序几乎是写一行两行就要执行一次,每句话我都要确保执行效果跟
我的预期一致。没错这样写的时候 可能慢一些,但是调试的时候很轻松,
我可以很简单的确定哪些代码绝对没有问题。所以我写代码整体速度比一
般人高。很多人学习新东西的时候喜欢把例子抄一遍,运行一下,改改,
再运行。我喜欢一句一句的抄例子,抄一句两句执行一次,这样可以把例
子透彻的理解,而且很难会遇到出现了问题找不到原因的时候 。
     2,函数体功能块不要过长。我认为我的智商并不高,我很难接受
一个程序的一个函数体或者一个功能块超越 3 屏(当然逻辑真的有那么复
杂除外,你会发现越是简单的逻辑越是容易被人写的冗长)。很多人对面向
对象耳熟能详,对封装继承看起来驾轻就熟。但是动不动就写出来个函数
体超长的程序。这就像写本书从头到尾不点句号一样,会累死读者的。自
己看的时候,估计也会被累的喘不过来气。这是我对基础教育的微词所在,
他们连教会学生写函数都没教会,虽然表面上他们连面向对象这么高深的
东西都教。
     3,缩进要对。这点很重要,虽然大部分语言不是像 Python 那样
用缩进来决定逻辑块的位置,但是人看到缩进的时候,总是会以为这些缩
进位置跟逻辑相关。尤其是在有大量的 ifelse 或者 for 循环等等的嵌套逻辑
的时候,如果缩进错了,可能会直接让人把程序的逻辑读错。所以我拿到
别人的代码,第一件事情就是整理缩进。我见过一些比较优秀的页面工程
师,他们会在 div 结束的位置用注释写上这个 div 的 id,这样层级关系就一
目了然了。
     4,不断重构。随着程序的不断修改,有些部分会不断的增长,原
来看着清晰的架构可能因为问题的复杂而慢慢模糊,也可能被修正 bug 的
权宜之计弄的面目全非。不信你找一个经过多次修改的程序看看,是不是
满目疮痍,是不是都很难认出是你自己的作品了。这在多人参与的项目中
更加严重,每个人有不同的代码风格,经过多次杂交后,你肯定认不出你
的代码是骡子是马,还是四不像了。随着程序的慢慢成长,原来有些函数
体会慢慢膨胀,需要拆分;有些原来简单的功能块四处都需要,应该被提
炼成函数或者方法,等等。现在不重构,未来等到代码复杂到无法控制的
时候,重构的工作就会变得更加困难。我见过最强的案例是,一个几千行
的电子辞典配套联机软件,经过无数次的改版,变成了一个几乎无法维护
的主窗体的 cpp 有 1 万 8 千行的怪物。最后经过复杂的重构,才变成一个
出新版本只需要新增一个驱动程序的可以维护的几千行的程序。
     郝培强:银杏技术咨询创始合伙人,网名 Tinyfool,技术方向是全
文检索,搜索引擎优化,网站架构设计等。 银杏技术咨询的主要业务是帮
助客户的网站改进技术,提高网站性能和反应速度,解决门槛性技术问题,
从而提高用户满意度。
     【CSDN 独家专访】有的时候我们对一款产品表现出难以名状的
喜爱之情,往往我们就会想像做出这样功能的程序员他应该是多么的伟大,
是什么样的天才,对他就如同造物主一般的崇拜 ,所以很多人会把成为一
个程序员作为自己的理想,然而很少有人会知道,在这样一款产品的背后,
其实还有一个更加强健的团队在护送着他前行。
     而这个团队的领军人物就是产品经理。近日,我们都很熟悉的暴
风影音发布了它最新的 3.1 版本,这距离上次的 3.0 版仅过了 45 天。暴风
影音做为一个日使用量在千万级别之上的客户端软件,产品里的任何一个
角落有瑕疵,任何一个细节有 Bug,被用户识别到的几率非常大,这和普
通的应用软件是不能比的。所以需要做大量的用户反馈,数据分析,数据
挖掘的工作,来提升软件本身的性能,那么,如果作为暴风影 音的产品经
理,他的身上又发生着什么样的故事呢?我们带着这样的好奇心采访了暴
风影音的产品经理王志鹏。
    王志鹏是一个很健谈的人,但在倾听的时候却很真诚。―也许这就是
做一名产品经理所必备的基本素质。‖王志鹏对我们的赞赏这样回答道,―判
断自己适不适合做一名产品经理,你需要为自己做一个这样的测试,如果
有十个人分别提出了十种功能改进的方案,那么你是否能够发自内心的把
这十套方案都耐心、认真的听完,并且能够真正领会到他们的意图,即使
这其中有不切实际的方案、有令人哭笑不得的方案,但是如果你是有兴趣
去做这件事,而且付出的都不会成为你的心理负担,那么你就具备了成为
           。
一名产品经理的基本素质‖
    在做产品经理之前王志鹏也是一名技术人员,他也很喜欢做技术,
那么是什么让他实现了从一名技术人员到一名产品经理这样的一次转型
呢?―其实我很早就立志我要做技术开发,大学毕业以后我在一家公司做 E
RP 软件,由于 ERP 软件的特殊性,是需要跟很多的业务部门进行沟通来
了解他们的运作状况之后才能够编写软件代码的,所以渐渐的我发现,我
的编程技术或者说是一些技巧并不是最好的,但我是最懂得我们业务人员
需求,最懂得他们要什么的人。‖也许就是这样的一段时间,让王志鹏考虑了
自己的特长可能会在这里有更好的发挥。
    也许就是凭着良好的沟通和理解能力,不久,王志鹏就被一家知
名的国际软件厂商看中收入麾下,并担任项目管理的工作。―这段时间里我主
要是在做项目甲方和乙方之间的桥梁,做时间、人员和资源方面的协调分
配‖王志鹏说,―在这段时间里我已经不做具体代码的编写工作了,这也让我
有机会在抽离了具体的代码编写工作之后看清楚了一名技术人员在项目实
施过程中会出现的问题,更重要的是让我深刻的体验到了这样的一家国际
软件厂商他在软件产品生产的过程中积累下来的流程和规则,在这样的流
程和规则下运作的软件生产活动,不管是谁都可以很好的完成高质量的产
 。
品‖ 也正是在这里,王志鹏完成了他的转型。
    ―其实在这个转变的过程中,我也有过挫败感的时候。‖王志鹏说,
―曾经我认为从一个技术人员转型到产品经理是容易的,其实不然。在有过
                             。
失败之后,我开始反思我这样的想法,非常幸运的是我找到了出口‖ 从王
志鹏感悟中我们找到了转型过程中最核心的三点:
    1、敬畏之心。无论是技术人员面对产品经理还是产品经理面对技
术人员,大家一定要抱有敬畏之心,要尊重和重视别人的意见,不要认为
自己就是正确的,一个人提出任何一种想法一定是经过了 思考的,不能单
纯的认为这个想法―幼稚‖ ―不可能‖ 更多要想的是为什么他会有这种想法。
           、     ,
    2、主动沟通。技术人员和产品经理其实各自运行的是两套逻辑。
技术人员在考虑问题的时候最先是从后台着眼,继而考虑架构然后开始编
写代码的过程;而产品经理在考虑问题的时候首先是从用户开始,继而是
用户体验、完全以市场驱动为主导。这样两种完全不同的思考方式造就了
不同的工作习惯。
    程序员完全可以只考虑自己技术实现的这一部分,做到精美、高
效那他就是一个合格的技术人员,而产品经理需要的是 Open 的方式,需要
和不同的人沟通他们各自的感受,因为代码的对和错有明显的界限,而用
户体验没有对和错,只有好和更好,而自己的习惯并不能代表大家习惯,
所以要通过主动的沟通和倾听来知道各种各样的体验是怎样的。
    3、大量阅读。不仅仅要阅读相关专业类书籍更要有广泛阅读的习
惯。因为这样能够培养人文的思维习惯,这也是单一研究理工科类的技术
人员所欠缺的,编程需要逻辑思维的缜密,而阅读能够让你看事情的时候
更换另一种逻辑,也让你的思维变得更加全面。
    获得成功是每个人都需要的,但是成功并没有一条可以遵循的路
线可以走。并不是说程序员到了一个规定的阶段就一定需要转型 ,一定需
要专向产品经理,或者一定需要出去创业。―我并不赞同每个技术人员都要考
虑自己该如何转型,真正要考虑的是看请自己突出的特点在哪里。‖王志鹏
说,―在我们的工作过程中,并不是像升学考试一样,要一张桌子四条腿一样
长,所谓的全面发展,如果数学能考 120 分,语文能考 60 分,而继续学数
学就能考 130 分,同样的力气学语文可能可以靠 90 分,那毫不犹豫的应该
去学语文;但是在工作中,如果我写代码能得 80 分的认可,做管理、做沟
通能得 60 分的认可,而继续努力写代码就能到 95 分,继续努力尝试管理
和沟通能得到 80 分,那么,奉劝大家还是要继续向 95 分的代码去努力。
因为这就是你的特长,如果为了全面而放弃了你的特长,将是一个巨大的
浪费。‖
       王志鹏的经验令我觉得这应该就是社会分工的规律所在,每个人
都有自己的角色,要认清的是自己的核心竞争力,而在这里木桶效应是失
效的。如果要打破这种规律的话,那可能会付出很大的代价 。




  参考资料:
            1.   C++图书
  扩展阅读:
       1.C++专业介绍与交流 http://www.itpxzn.com/
       2.C++培训和就业机会:http://www.5itjob.com
       3.《C++程序设计》:http://www.china-pub.com/20193
       4.CSDN《易学 C++》:http://club.book.csdn.net/book/248402.html
VB


目录[隐藏]


     Visual Basic 编程语言
     价键理论
     虚拟网桥(Virtual Bridge)
     VB 的特点
     Visual Basic 编程语言
          1.    由 VB 派生的语言
          2.    VB 编程语言历史
     价键理论
     虚拟网桥(Virtual Bridge)
     VB 的特点
          1.    1.面向对象
          2.    2.事件驱动
          3.    3.软件 Software 集成式开发
          4.    4.结构化设计语言
          5.    5.强大数据库访问功能
          6.    6.支持对象链接和嵌入技术
          7.    7.网络功能
          8.    8.多个应用向导
          9.    9.支持动态交换、动态链接技术.
          10.   lO.联机帮助功能
                  Visual Basic .NET 2008
   [编辑本段]
   Visual Basic 编程语言
      1991 年,美国微软公司推出了 Visual Basic (可简称 VB)1.0,
1992 年,Microsoft 公司又推出了 vb 1.0 的升级版 vb 2.0……目前的最
新版本是 VB 2010 测试版。
      Visual 意即可视的、可见的,指的是开发像 Windows 操作系统
的图形用户界面(Graphic User Interface,GUI)的方法,它与其他编程
软件不同的是不需要编写大量代码去描述界面元素的外观和位置,只要把
预先建立好的对象拖放到屏幕上相应的位置即可。应该说,这是一次质的
飞跃,是一次编程技术的革命。
      Basic 实际上是一个短语的缩写,这个短语就是 Beginners all
_purpose symbolic instruction code ,其中文意思为“初始者通用符
       。
号指令代码语言”
      Visual Basic 6 有学习版、专业版和企业版三种版本,以满足不
同的开发需要。学习版适用于普通学习者及大多数使用 Visual Basic 开
发一般 Windows 应用程序的人员;专业版适用于计算机专业开发人员,
包括了学习版的全部内容功能以及 Internet 控件开发工具之类的高级特
性;企业版除包含专业版全部的内容外,还有自动化构件管理器等工具,
使得专业编程人员能够开发功能强大的组骨子里分布式应用程序。
      Visual Basic 是一种可视化的、面向对象和采用事件驱动方式的
结 构 化高级程序设计 语言,可用于开发 Windows 环境下的各类应用程
序。它简单易学、效率高,且功能强大可以与 Windows 专业开发工具 S
DK 相媲美。在 Visual Basic 环境下,利用事件驱动的编程机制、新颖易
用的可视化设计工具,使用 Windows 内部的广泛应用程序接口( API)函
数,动态链接库(DLL)、对象的链接与嵌入(OLE)、开放式数据连接(O
DBC)等技术,可以高效、快速地开发 Windows 环境下功能强大、图形
界面丰富的应用软件系统。随着版本的提高,Visual Basic 的功能也越来
越强。5.0 版以后,Visual Basic 推出了中文版,与前个版本相比,其功
能有了很大提升。
       但是,功能再强大,Visual Basic 仍然有一个缺点:在没有 MS
VBVM**.DLL 的计算机上必须安装所需的 DLL 文件。用它可设计操作系统,
不过,比较困难。
       在 21 世纪初,Microsoft 公司推出 Visual Studio .NET 2003,
它与 Visual Basic 之间有了重大变化,Visual Studio 为各种编程工具
做了一个平台,Visual Basic.NET 可在这种平台上运行。相对于传统 VB,
有很大的不同。VB .Net,首次使用.Net 构架进行可视化编程,并且能很
好地与 COM 构架兼容,Visual Studio .NET 2003 应用 .NET Framew
ork 1.1 。
       2005 年 Visual Studio 2005 则运用了 NET 2.0 的技术,更加
的方便了程序员的工作。可是新的程序对系统配置要求也较高,需要微软 .
Net Framework 2.0 以上的.Net 构架支持。
       2007 年 12 月,微软(Microsoft)推出了 Visual Studio 2008 Bet
a 2 发生了重大的变化(见附图)在代码输入的时候,可以比 VB2005 快很多,
在非特殊的情况下,VB2008 都会自动开启 自动完成关键字 这个命令 而
且支持最新的 .NET Framework 3.5 SP1 Beta


      由 VB 派生的语言




       微软开发了一系列有关 VB 的脚本语言:
       Visual Basic for Applications,即 VBA,包含在微软的应用程
序中(比如 Microsoft Office),以及类似 WordPerfect Office 这样第三
方的产品里面。VBA 这样嵌入在各种应用程序中看起来有些矛盾,但是它
的功能和 VB 一样强大。
        VBScript 是 ASP 的默认语言,还可以用在 Windows 脚本编写(S
hell Script)和网页编码(HTML)中。尽管它的语法类似于 VB,但是它
却是一种完全不同的语言。VBS 不使用 VB 运行库运行,而是由 Windows
脚本宿主(wscript.exe - Microsoft Windows Based Script Host)解
释执行。这两种语言之中的不同点影响 ASP 网站的表现。
        当微软准备开发一种新的编程工具的时候,第一决定就是利用最
抢手的 VB6 来进行修改,或者就是重新组建工程开发新工具。微软后来
开发了 VB 的继任者 Visual Basic .NET,同时也是.NET 平台的一部分。
VB.NET 编程语言是一种真正的面向对象编程语言(VB4-VB6 只能称为基
于对 象而 不是 面向 对 象, 最明 显的 特征 就 是 VB4-VB6 都不 支持 类的继
承),和传统 Visual Basic 并不完全兼容。 [1]




        VB 编程语言历史




        Visual Basic 从 1991 年诞生以来,现在已经 18 年了。BASIC
是微软的起家产品,微软当然不忘了这位功臣。随着每一次微软技术的浪
潮,Visual Basic 都会随之获得新生。可以预见,将来无论微软又发明了
什么技术或平台,Visual Basic 一定会首先以新的姿态登上去的。如果你
想紧跟微软,永远在最新的技术上最快速地开发,你就应该选择 Visual B
asic。
        1991-西雅图夜空的雷电
      随着 Windows 3.0 的推出,越来越多的开发商对这个图形界面
的操作系统产生了兴趣,大量的 Windows 应用程序开始涌现。但是,Wi
ndows 程序的开发相对于传统的 DOS 有很大的不同,开发者必须将很多
精力放在开发 GUI 上,这让很多希望学习 Windows 开发的人员却步。19
91 年,微软公司展示了一个叫 Thunder 的产品,所有的开发者都惊呆了,
它竟然可以用鼠标“画”出所需的用户界面,然后用简单的 BASIC 语言编写
业务逻辑,就生成一个完整的应用程序。这种全新的 “Visual”的开发就像
雷电(Thunder)一样,给 Windows 开发人员开辟了新的天地。这个产品
最终被定名为 Visual Basic,采用事件驱动,Quick BASIC 的语法和可
视化的 IDE。Visual Basic 1.0 带来的最新的开发体验就是事件驱动,它
不同于传统的过程式开发。同时,VBX 控件让可视化组件的概念进入 Visu
al Basic。Visual Basic 1.0 是革命性的 BASIC,它的诞生也是 VB 史上
的一段佳话。
      Visual Basic 1.0
      1992-渐入佳境的 Visual Basic
      由于 Windows 3.1 的推出,Windows 已经充分获得了用户的认
可,Windows 开发也进入一个新的时代。Visual Basic 1.0 的功能过于
简单,相对于 Windows 3.1 的强大功能没有发挥出来。所以,微软在 19
92 年推出了新版本 Visual Basic 2.0。这个版本最大的改进就是加入了对
象型变量,比如
      Dim b As CommandButton
      Dim c As Control
      而且有了最原始的“继承”概念,对象型变量分为一般类型(Cont
rol 和 Form)和专有类型(CommandButton 和 Form1 等),一般类型的变
量可以引用专有类型的实例,甚至通过后期绑定访问专有类型的属性和方
法。还可以通过 TypeOf…Is 运算符获取对象实例的运行时类型信息(这个
功能就是当今 C#的 is 运算符或 Java 的 instanceof 运算符)。除了对语言
的改进和扩充,Visual Basic 2.0 对 VBX 有了很好的支持,许多第三方控
件涌现出来,极大地丰富了 Visual Basic 的功能。微软还为 Visual Basi
c 2.0 增加了 OLE 和简单的数据访问功能。
      Visual Basic 2.0 标准版
      Visual Basic 2.0 专业版
      1993-数据库组件新添力量
      Visual Basic 2.0 推出没几个月,微软就发布了新版本的 Visual
Basic 3.0,可以看出 VB 这时候旺盛的生命力。乍一看,Visual Basic
3.0 的界面没有太大的变化,但其实这个版本是非常及时的。它增加了最新
的 ODBC2.0 的支持,Jet 数据引擎的支持和新版本 OLE 的支持。最吸引
人的地方是它对数据库的支持大大增强了,Grid 控件和数据控件能够创建
出色的数据窗口应用程序,而 Jet 引擎让 Visual Basic 能对最新的 Acce
ss 数据库快速地访问。Visual Basic 3.0 还增加了许多新的金融函数。此
外还增加了相当多的专业级控件,可以开发出相当水平的 Windows 应用程
序。Visual Basic 3.0 是 98 年以前中国最流行的 Visual Basic 版本,因
为它开发出来的可执行文件非常小,通常能用一张软盘装下。不过,Visu
al Basic 采用虚拟机运行 P 代码的做法也让很多开发者不满,他们认为这
样程序运行的效率很低,这时候 Visual Basic 的竞争者 Delphi 也诞生了。


      Visual Basic 3.0 标准版
      Visual Basic 3.0 特别版
      1995-第二次革命性变化,向 COM 进军。
      从 1993 年到 1995 年年中,Visual Basic 一直没有新的动静,焦
急的开发者都想一窥这个神秘的新版本到底发生了什么变化。Visual Basi
c 4.0 的 BETA 最后终于和大家见面了。这个版本包含了 16 位和 32 位两
个版本,16 位的版本就像是 Visual Basic 3.0 的升级版,而 32 位版则是
一场新的革命。首先,人们发现 VBX 控件不见了,全部换成了 OCX 控件,
这个 OCX 可能是指 OLE Custom Controls,这个 OLE 已经不是传统的
OLE 了,用现在的话说,它就是 COM 控件。第二个最大变化是 Visual B
asic 4.0 所用的语言换成了 Visual Basic For Application,这就和 Off
ice 95 所采用的宏语言统一起来,这个新语言有很多亮点:
                。
      1、 加入了“类模块” 这是面向对象最重要的封装性的基础。
      2、 加入了属性过程,加上函数过程,子程序过程,VB 已经有组
件开发所需的封装性特征。
      3、 加入了 Byte 类型、Boolean 类型和 Object 类型。这大大完
善了 VB 的类型系统。
      4、 For Each 语句和 Collection 对象。For Each 语句给遍历
集合类型提供了极大的方便,现在可以在动态增长的 Collection 上使用 F
or Each,而不用担心集合内容的总数或烦人的下标问题。
      这个版本的 Visual Basic 还能够开发 DLL 工程,其实就是 COM
的 DLL,可以将书写好的类用这种方式和其他语言共享。
      总之,这个 4.0 的版本为 Visual Basic 成为一种 COM 语言奠定
    用
了基础。 Visual Basic 4.0 开发基于 COM 的 DLL 比任何一种开发工具
都方便。但是,Visual Basic 4.0 的性能问题变得更加严重了,P-代码的
组件成为 Visual Basic 4.0 严重的性能瓶颈,而且巨大的运行库也让用户
感到不满。Visual Basic 4.0 对以前版本的支持也不好,使用了大量 VBX
的项目很难移植到 Visual Basic 4.0 中。因此,Visual Basic 4.0 在中国
的普及程度非常低。
      Visual Basic 4.0
      1997-Visual Basic 的丰收年
      1997 年,微软推出了 Visual Basic 5.0,这个版本的重要性几乎
和 4.0 一样高。COM(这时候叫 ActiveX)已经相当成熟,Visual Basic
5.0 当然对它提供了最强的支持。不过,国内还没有意识到 COM 的重要性
前主要对这个版本另一个最大的亮点十分关注:本地代码编译器。Visual
Basic 5.0 终于在用户的呼声中加入了一个本地代码编译器,它可以让应用
程序的效率大大提升。除了这个大家都知道的改进以外,Visual Basic 5.
0 对 Visual Basic For Application 语言有重大的完善和丰富:
      5、 事件。Visual Basic 5.0 终于允许用户自己创建事件,而且
这事件的语法相当强健和完善,这在一种不支持函数回调的语言中是很难
得的。现在,VB 拥有属性、方法和事件的完整封装性。
      6、 接口。这是 VB 实现多态性的基础。同时为编写 COM 组件提
供了更多方便。
      7、 枚举。在 Visual Basic 5.0 中枚举作为 Long 整型的子类型
出现,用枚举可以对常量进行完善的封装。
      8、 类模块的改进。通过类模块的属性可以 指定类模块具有多种
指定的行为,如私有构造函数等,可以通过这个功能创建符合 Singleton
和 Monostate 模式的设计。
      9、 Debug.Assert。虽然这个断言系统有点鸡肋,但是总算是给
调试带来了方便。
      10、 Visual Basic 5.0 支持创建自己的集合类。可以创建用于 F
or Each 语句的集合类型。
      11、新的数据类型 Decimal,可以精确地处理有效数位较多的计
算。
                                    ,
      Visual Basic 5.0 的 IDE 支持“智能感知” 这是一项非常方便开
                             ,
发者的功能,可以不必记住很长的成员名称和关键字,只要按“.” 想要的东
西统统弹出来。
      Visual Basic 5.0 还支持开发自己的 ActiveX 控件、进程内的 C
OM DLL 组件、进程外的 COM EXE 组件以及在浏览器中运行的 ActiveX
文档。这极大丰富了 Visual Basic 的开发能力,在 Internet 开发上,Vis
ual Basic 5.0 也能有所建树。
      1998-企业真正高效的源泉
      Visual Basic 6.0 作为 Visual Studio 6.0 的一员发布,证明微
软正在改变 Visual Basic 的产品定位,他想让 Visual Basic 成为企业级
快速开发的利器。Visual Basic 6.0 在数据访问方面有了很大的改进,新
的 ADO 组件让对大量数据快速访问成为可能。数据环境和新的报表功能也
让数据开发有了全新的体验。Visual Basic 借助 COM/COM+强大的功能,
可以开发具有 N 层结构的分布式应用程序。同时,Visual Basic 还可以在
IIS 上开发性能超群的 Web 应用程序。Visual Basic 6.0 在语言方面和 I
DE 方面的改进都不大,但是许多新增的组件成为 Visual Basic 开发人员
手中的利器,如 File System Object 等。新的字符串函数 Split 和 Repl
ace 等也给 Visual Basic 的程序员带来很大方便。
      总之 Visual Basic 6.0 已经是非常成熟稳定的开发系统,能让企
业快速建立多层的系统以及 Web 应用程序,成为当前 Windows 上最流
行的 Visual Basic 版本。
      Visual Basic 6.0
      2002-第三次革命性变化,向.NET 进军
      从 1998 年发布到 2002 年正式推出 Visual Basic. NET 简直吊足
了开发者的胃口。从 2000 年就开始传言的具有继承、Try…Catch 语句等
新功能的全新 VB7.0 一直没有露面。直到 2001 年,Visual Studio.NET
的第一个 BETA 版问世的时候,所有人都呆了——这是 Visual Basic 吗?
And 语句变成了 BitAnd,数组只能从 0 下标开始,而且连 Dim 语句的意
义都变了,几乎所有的窗体控件都变了,Long 变成了 Integer 而 Integer
变成了 Short,Variant 不见了,Static 不能用了……简直是翻天覆地,人
们已经无暇关注这个版本有什么改进,转而担心我怎么才能接受这个版本
了。其实 Visual Basic. NET 完全是为了.NET Framework 这一全新的平
台而设计的,Visual Basic. NET 的设计者一开始没有掌握好新平台和旧
语言的平衡。到了 BETA2 中,很多东西回归了 6.0,如 BitAnd 又变回了
And,数组的定义语句也变回了原有的意义,Static 也回到了 Visual Bas
ic 中。但是 BETA1 惊人的变化让所有的 VB 开发者怕了,他们觉得这种语
言被改的千疮百孔,有些人干脆转去研究传说中的新语言 C#。但是 Visua
l Basic. NET 渡过几个 BETA 版本之后还是找到了正确的定位。Visual
Basic. NET 有对 CLR 最完善的支持,同时尽量保留着 BASIC 易懂的语法
风格和易用性。这个版本新增加的功能已经数不清,最重要的几个是:
      1、 继承。至此,Visual Basic 完成了向面向对象转变的道路。


      2、 共享成员。
      3、 Try…Catch 结构化异常处理。
      4、 Delegate 和 Interface。
      5、 名称空间。
      6、 对自由线程的支持。
      特别的是,Visual Basic. NET 大大减少了 Visual Basic 语言的
关键字,如 GoSub、PSet 等等。原先的 Visual Basic 有多达 120 个关键
字,这给写程序带来了很大的不便,现在经过精简,Visual Basic 脱下了
这个沉重的包袱。
      Visual Basic. NET 现在是一门现代的、强壮的、面向对象的、
简单的可视化开发语言。强大的语言功能吸引了很多开发者。历史是在不
断重演的,Visual Basic. NET 如今的处境和 Visual Basic 4.0 很相似,
由于兼容性变差,人气也降低了。同时由于依附于.NET Framework,程
序发布造成了一定的困难。现在国内使用 Visual Basic. NET 的人相对于
Visual Basic 6.0 来讲显得很少。但是凭借 Visual Basic. NET 强大的语
言功能和 MS 的支持,Visual Basic. NET 一定会显出它的光辉来。
      2003-稳中求变的新版本
      Visual Basic. NET 2003 是一个相当稳重的版本,改变很少,
但对小处有很多改进。首先 Visual Basic 6.0 升级向导做了很大改进,这
给从老版本痛苦升级的人带来了更多一些的希望。其次在 IDE 方面,Visu
al Basic. NET 2003 修正了许多错误,还让事件处理恢复了 6.0 的开发体
验。语言方面只有两项改进:
      1、 在 For、For Each 语句中声明循环变量。
      2、 增加了数学移位运算符<<和>>。
      在这个比较成熟稳定的新版本下,许多 Visual Basic 的爱好和开
始重新了解 Visual Basic. NET,社区里面也渐渐热闹起来。但是,有些
使用 C#的开发者坚持认为 Visual Basic. NET 是垃圾,尽管 Visual Bas
ic. NET 拥有比 C#更多的功能和更好的 IDE。这说明不了解 Visual Basi
c. NET 成为它普及的最大障碍。
      2005-完美主义的 Visual Basic,能否再现辉煌?
      为了让 Visual Basic 有最佳的开发体验,Visual Basic 2005 的
设计者绞尽了脑汁。这次 Visual Basic 2005 光语言上的改进就足以让 Vi
sual Basic 的开发人员高兴一阵子。大家可以去看看我那篇介绍 Visual
Basic 2005 新增功能的贴子。挑重要的列在下边:
       1、 泛型
       2、 运算符重载
       3、 Partial Type
       4、 窗体的默认实例(让你用 VB6 的语法使用窗体)
       5、 语法的多种改进
       6、My 关键字
       现在用 Visual Basic 2005 只要一行代码就可以读写注册表、访
问文件、读写串口、获取应用程序信息…… 用 Visual Basic 2005 完全可
以称作享受开发。而泛型、运算符重载等功能又可以让 Visual Basic 的开
发人员深入.NET Framework 的全部功能,开发出最优秀的应用程序。
       2008-功能极强且最易用的 Visual Basic
       新版本的 VB2008 具有下列新功能和加强功能
       1、Language-integrated query: 可以让使用者在 VB2008 中进
行资料查询。
       2、物件关联式设计工具会协助开发人员建立和编辑,使应用程序
连接至资料库的 link to sql 类别。
       ---
  [编辑本段]
  价键理论
       valence-bond theory
       一种获得分子薛定谔方程近似解的处理方法。又称电子配对法。
历史上最早发展起来的化学键理论。主要描述分子中的共价键和共价结合,
其核心思想是电子配对形成定域化学键。
       1927 年 W.H.海特勒和 F.W.伦敦首次完成了氢分子中电子对键的
量子力学近似处理,这是近代价键理论的基础。L.C.鲍林等加以发展,引入
杂化轨道概念,综合成价键理论,成功地应用于双原子分子和多原子分子
的结构。
     价键理论是海特勒伦敦处理氢分子方法的推广,要点如下: ①若
两原子轨道互相重叠,两个轨道上各有一个电子,且电子自旋方向相反,
则电子配对给出单重态,形成一个电子对键。②两个电子相互配对后,不
能再与第三个电子配对,这就是共价键的饱和性。 ③遵循最大重叠原则,
共价键沿着原子轨道重叠最大的方向成键。共价键具有方向性。原子轨道
通常在某个特定方向上有最大值,只有在此方向上轨道间才有最大重叠而
形成共价键。不同原子轨道有不同成键能力。原子轨道的最大值作为原子
轨道成键能力的度量,鲍林给出 s、p、d、f 等原子轨道成键能力依次为 1、
3、5、7。在主量子数相同时,成键能力大的轨道形成的共价键较牢固。
     价键理论与化学家所熟悉的经典电子对键概念相吻合,一出现就
得到迅速发展。但价键理论计算比较复杂,使得后来发展缓慢。随着计算
技术日益提高,该理论还会有新发展。
  [编辑本段]
  虚拟网桥(Virtual Bridge)
     VB 其实是为了管理方便对管理域的一个划分,相当于一个虚拟的
L2 Lanswitch。在城域网的应用中,VB 是基于用户划分的。即:每个用户
都有自己独立的 VB,其中包含多个 vlan 标签和 mac 地址。由于各个 VB
之间相互隔离,不同的 VB 可分配相同的 vlan 而互不影响,而基于 vlan 划
分 VB 的 L2 芯片不能区分不同用户的相同 vlan。
  [编辑本段]
  VB 的特点


    1.面向对象




     VB 采用了面向对象设计思想它基本思路是把复杂设计问题分解为
个个能够完成独立功能相对
     简单对象集合所谓―对象‖就是个可操作实体如窗体、窗体中命令按
钮、标签、文本框等面向对
    象编程就好像搭积木样员可根据和界面设计要求直接在屏幕上―画
\"出窗口、菜单、按钮等区别
    类型对象并为每个对象设置属性


    2.事件驱动




    在 Windows 环境下是以事件驱动方式运行每个对象都能响应多个
区别事件每个事件都能驱动段
    代码——事件过程该代码决定了对象功能通常称这种机制为事件
驱动事件可由用户操作触发也可
    以由系统或应用触发例如单击个命令按钮就触发了按钮 Click(单
击)事件该事件中代码就会被执行
    若用户未进行任何操作 (未触发事件 )则就处于等待状态整个应用
就是由彼此独立事件过程构成


    3.软件 Software 集成式开发




    VB 为编程提供了个集成开发环境在这个环境中编程者可设计界
面、编写代码、调试直至把应
    用编译成可在 Windows 中运行可执行文件并为它生成安装 VB 集
成开发环境为编程者提供了很大方便


    4.结构化设计语言




    VB 具有丰富数据类型是种符合结构化设计思想语言而且简单易学
此外作为种设计语言 VB 还有
       许多独到的处


       5.强大数据库访问功能




       VB 利用数据 Control 控件可以访问多种数据库 VB 6.O 提供 AD
OControl 控件不但可以用最少代
       码实现数据库操作和控制也可以取代 DataControl 控件和 RDOCo
ntrol 控件


       6.支持对象链接和嵌入技术




       VB 核心是对对象链接和嵌入(OLE)技术支持它是访问所有对象种
思路方法利用 OLE 技术能够开
       发集声音、图像、动画、字处理、Web 等对象于体


       7.网络功能




       VB 6.O 提供了 DltTML(Dynamic}tTML)设计工具利用这种技术
可以动态创建和编辑 Web 页面使
       用户在 VB 中开发多功能网络应用软件 Software


       8.多个应用向导




       VB 提供了多种向导如应用向导、安装向导、数据对象向导和数据
窗体向导通过它们可以快速
      地创建区别类型、区别功能应用


     9.支持动态交换、动态链接技术.




      通过动态数据交换(DDE)编程技术 VB 开发应用能和其他 Window
s 应用的间建立数据通信通过动态
      链接库技术在 VB 中可方便地用 C 语言或汇编语言编写也可 Wind
ows 应用接口(.API)


     lO.联机帮助功能




      在 VB 中利用帮助菜单和 F1 功能键用户可随时方便地得到所需要
帮助信息 VB 帮助窗口中显示了有
      关举例代码通过复制、粘贴操作可获 取大量举例代码为用户学习
和使用提供方便




  参考资料:
           1.    VB 语言特性简介
  c#


  目录[隐藏]


       C#简介
       C#从 Java 继承而来的特点
       C#从 C 和 C++继承的特点
       C#独有的特点
       C# 简史——摘自《程序员》杂志 2005-12 月刊
       C#关键字完整列表
       微软 MSDN 提供 C#全系列课程
       C#与 C++、JAVA 的区别
       C#简介
       C#从 Java 继承而来的特点
       C#从 C 和 C++继承的特点
       C#独有的特点
       C# 简史——摘自《程序员》杂志 2005-12 月刊
       C#关键字完整列表
       微软 MSDN 提供 C#全系列课程
       C#与 C++、JAVA 的区别
          C#的前途如何?



  [编辑本段]
  C#简介
       C#(读做 "C sharp",中文译音暂时没有.专业人士一般读"C shar
p",现在很多非专业一般读"C 井"。C#是微软公司发布的一种面向对象的、
运行于.NET Framework 之上的高级程序设计语言。并定于在微软职业开
发者论坛(PDC)上登台亮相。C#是微软公司研究员 Anders Hejlsberg 的最
新成果。C#看起来与 Java 有着惊人的相似;它包括了诸如单一继承、接口、
与 Java 几乎同样的语法和编译成中间代码再运行的过程。但是 C#与 Java
有着明显的不同,它借鉴了 Delphi 的一个特点,与 COM(组件对象模型)是直
接集成的,而且它是微软公司.NET windows 网络框架的主角。
     C#是一种安全的、稳定的、简单的,由 C 和 C++衍生出来的面向
对象的编程语言。它在继承 C 和 C++强大功能的同时去掉了一些它们的复
杂特性(例如没有宏和模版,不允许多重继承)。C#综合了 VB 简单的可视
化操作和 C++的高运行效率,以其强大的操作能力、优雅的语法风格、创
新的语言特性和便捷的面向组件编程的支持成为.NET 开发的首选语言。
     并且 C#成为 ECMA 与 ISO 标准规范。C#看似基于 C++写成,但
又融入其它语言如 Delphi、Java、VB 等。
     在本文中 ,我将考察创建一种新计算机语言的一般动机 ,并将特别
指明是什么原因导致了 C#的出现.然后我将介绍 C#和它与 Java,c,c++的相
似之处.其次我将讨论一些存在于 Java 和 C#之间的高层次的,和基础的差别.
我将以衡量在用多种语言开发大型应用程序的时候所需的知识(或者对这种
知识的缺乏程度)来结束本文,而这正是.NET 和 C#的一个主要战略.目前,C#
和.NET 还只能以 C#语言规则,以及 Windows 2000 的一个"d 预览版本",还
有 MSDN 上迅速增多的文档集子的形式获得(还没有最终定型).
     微软 c#语言定义主要是从 C 和 C++继承而来的,而且语言中的许多
元素也反映了这一点.C#在设计者从 C++继承的可选选项方面比 Java 要广
泛一些(比如说 struts),它还增加了自己新的特点(比方说源代码版本定义).
但它还太不成熟,不可能挤垮 Java.C#还需要进化成一种开发者能够接受和
采用的语言.而微软当前为它的这种新语言大造 声势也是值得注意的 .目前
大家的反应是:"这是对 Java 的反击."
     C#更象 Java 一些,虽然微软在这个问题上保持沉默.这也是意料中
的事情,我觉得,因为 Java 近来很成功而使用 Java 的公司都报告说它们在生
产效率上比 C++获得了提高.
     Java 所带来的巨大影响和大家对它的广泛接受已经由工作于这种
语言和平台之上的程序员数量明显的说明了(估计世界范围内共有两百五十
万程序员使用 Java).由这种语言写成的应用程序的数量是令人惊讶的并已
经渗透了每一个级别的计算,包括无线计算和移动电话(比如日本发明的 Jav
a 电话).C#能够在用户领域获得这样的礼遇吗?我们必须等待并观望,就象已
经由 SSI 公司的 CEO 和主席 Kalpathi S. Suresh 指出来的那样,"我发现所
有这些都是渐进的.如果 C#不存在,我们总能回到 Java 或 C 和 C++.这些都
不完全是新技术;它们在更大的意义上来说只是大公司制造的市场噱头 .我
们必须给他们时间安顿下来看看这些是不是真的对 IT 工业有什么影响."
   [编辑本段]
   C#从 Java 继承而来的特点
      类:在 C#中类的申明与 Java 很相似.这是合理的因为经验告诉我们
Java 模型工作得很好.Java 的关键字 import 已经被替换成 using,它起到了
同样的作用.一个类开始执行的起点是静态方法 Main().下面的 Hello World
程序展示了基本的形式:
      using System;
      class Hello
      {
      static void Main()
      {
      Console.WriteLine("Hello, world");
      }
      }
      在这个例子中,System 这个名字指向一个包括了基本 C#实用类集
合的命名空间(namespace).这个命名空间包括了 Console 类,它在这个例子
中被用来输出一个字符串.类可以是抽象的和不可继承的:一个被申明成 abs
tract 的类不能被实例化;它只能被用做一个基类.C#关键字 sealed 就象 Jav
a 关键字 final,它申明一个类不是抽象的,但是它也不能被用做另一个类的基
类.接口:就象在 Java 中一样,一个接口是一组方法集合的抽象定义.当一个
类或结构体实现一个接口的时候 ,它必须实现这个接口中定义的所有方法 .
一个单一的类可以实现几个接口 .也许以后会出现一些微妙的差别 ,但是这
个特点看起来与 Java 相比没有变化.布尔运算:条件表达式的结果是布尔数
据类型,布尔数据类型是这种语言中独立的一种数据类型 .从布尔类型到其
他类型没有直接的转换过程.布尔常量 true 和 false 是 C#中的关键字.错误
处理:如 Java 中那样,通过抛出和捕捉异常对象来管理错误处理过程.内存管
理:由底层.NET 框架进行自动内存垃圾回收.
  [编辑本段]
  C#从 C 和 C++继承的特点


     编译


  程序直接编译成标准的二进制可执行形式.但 C#的源程序并不是被编
译成二进制可执行形式,而是一种中间语言,类似于 JAVA 字节码。如果前
面的 Hello World 程序被保存成一个文本文件并被命名为 Hello.cs,它将被
编译成命名 Hello.exe 的可执行程序.


     结构体


  一个 C#的结构体与 C++的结构体是相似的,因为它能够包含数据声明
和方法.但是,不象 C++,C#结构体与类是不同的而且不支持继承.但是,与 Jav
a 相同的是,一个结构体可以实现接口.


     预编译


  C#中存在预编译指令支持条件编译,警告,错误报告和编译行控制.可用
的预编译指令有:
     #define
     #undef
     #if
     #elif
     #else
     #endif
      #warning
      #error
      #line []
      没有了#include 伪指令.你无法再用#define 语句对符号赋值,所
以就不存在源代码替换的概念--这些符号只能用在#if 和#elif 伪指令里.在#li
ne 伪指令里的数字(和可选的名字)能够修改行号还有#warning 和#error 输
出结果的文件名.


     操作符重载


   一些操作符能够被重载,而另一些则不能.特别的是,没有一个赋值运算
符能够被重载.能够被被重载的单目操作符是:
      + - ! ~ ++ -- true false
      能够被重载的二元运算符是:
      + - * / % & | ^ << >> == != > < >= <=
   [编辑本段]
   C#独有的特点
      C#最引人入胜的地方是它和 Java 的不同,而不是相似的地方.这一
节(和这个系列第二部分的大部分地方)讲述了 C#实现的和 Java 不同的地方
或者 Java 根本没有的特点.


     中间代码


    微软在用户选择何时 MSIL 应该编译成机器码的时候是留了很大的余
地.微软公司很小心的声称 MSIL 不是解释性的,而是被编译成了机器码.它也
明白许多--如果不是大多数的话--程序员认为 Java 程序要不可避免的比 C
编写的任何东西都要慢.而这种实现方式决定了基于 MSIL 的程序(指的是用
C#,Visual Basic,"Managed C++"--C++的一个符合 CLS 的版本--等语言编
写的程序)将在性能上超过"解释性的"Java 代码.当然,这一点还需要得到事
实证明,因为 C#和其他生成 MSIL 的编译器还没有发布.但是 Java JIT 编译
器的普遍存在使得 Java 和 C#在性能上相对相同.象"C#是编译语言而 Java
是解释性的,"之类的声明只是商业技巧.Java 的中间代码和 MSIL 都是中间
的汇编形式的语言,它们在运行时或其它的时候被编译成机器代码.


        命名空间中的申明


     当你创建一个程序的时候,你在一个命名空间里创建了一个或多个类.
同在这个命名空间里(在类的外面)你还有可能声明接口,枚举类型和结构体.
必须使用 using 关键字来引用其他命名空间的内容.


        基本的数据类型


     C#拥有比 C,C++或者 Java 更广泛的数据类型.这些类型是 bool, byt
e, ubyte, short, ushort, int, uint, long, ulong, float, double, 和 decimal.
象 Java 一样,所有这些类型都有一个固定的大小.又象 C 和 C++一样,每个数
据类型都有有符号和无符号两种类型.与 Java 相同的是,一个字符变量包含
的是一个 16 位的 Unicode 字符.C#新的数据类型是 decimal 数据类型,对于
货币数据,它能存放 28 位 10 进制数字.


        两个基本类


     一个名叫 object 的类是所有其他类的基类.而一个名叫 string 的类也
象 object 一样是这个语言的一部分.作为语言的一部分存在意味着编译器有
可能使用它--无论何时你在程序中写入一句带引号的字符串 ,编译器会创建
一个 string 对象来保存它.


        参数传递
   方法可以被声明接受可变数目的参数.缺省的参数传递方法是对基 本
数据类型进行值传递.ref 关键字可以用来强迫一个变量通过引用传递,这使
得一个变量可以接受一个返回值.out 关键字也能声明引用传递过程,与 ref
不同的地方是,它指明这个参数并不需要初始值.


    与 COM 的集成


   C#对 Windows 程序最大的卖点可能就是它与 COM 的无缝集成了,C
OM 就是微软的 Win32 组件技术.实际上,最终有可能在任何.NET 语言里编
写 COM 客户和服务器端.C#编写的类可以子类化一个以存在的 COM 组件;
生成的类也能被作为一个 COM 组件使用,然后又能使用,比方说,JScript 语
言子类化它从而得到第三个 COM 组件.这种现象的结果是导致了一个运行
环境的产生,在这个环境里的组件是网络服务,可用用任何.NET 语言子类化.




    索引下标


   一个索引与属性除了不使用属性名来引用类成员而是用一个方括号
中的数字来匿名引用(就象用数组下标一样)以外是相似的.
     public class ListBox: Control
     {
     private string[] items;
     public string this[int index]
     {
     get
     {
     return items[index];
     }
     set
     {
       items[index] = value;
       Repaint();
       }
       }
       }
       可以用一个循环器来匿名引用字符串内部数组成员,就象下面这样:


       ListBox listBox = ...;
       listBox[0] = "hello";
       Console.WriteLine(listBox[0]);


       代理和反馈


   一个代理对象包括了访问一个特定对象的特定方法所需的信息 .只要
把它当成一个聪明的方法指针就行了 .代理对象可以被移动到另一个地方 ,
然后可以通过访问它来对已存在的方法进行类型安全的调用 .一个反馈方法
是代理的特例.event 关键字用在将在事件发生的时候被当成代理调用的方
法声明.
  [编辑本段]
  C# 简史——摘自《程序员》杂志 2005-12 月刊
       编者按:时间过得真快,居然现在就可以写 C#的简史了。但是想
想也不奇怪,C#可谓起点高、发展快的新一代语言,它的这五年走过了很
多前辈十几年的路。公允地说,C#是目前兼顾系统开发和应用开发的最佳
实用语言,并且很有可能成为编程语言历史上的第一个―全能‖型语言。看过
这篇简史,我们都应该明白,不要再把 C#看成年轻后生了——只要是―马
          ,        。
       拉多纳‖ 就早晚当―球王‖


       C# 1.0,纯粹的面向对象
      回溯到 1998 年底,微软正在忙于新一代 COM 的设计工作。此前,
COM 一直是组件化开发中非常成功的一种技术;但由于它仅提供了二进制
层面上的统一,因此无法将类型信息和用于支持基础平台和开发工具的信
息放到组件中。这时,Java 正在逐步走向成熟。于是,微软学习 Java 的
做法,将虚拟机的概念引入到了 COM 领域;同时,微软提出了―元数据‖的
概念,用于描述组件的类型信息和工具支持信息,并决定将其放入到组件
当中。这种―COM 虚拟机‖的名字在经历了若干争论后,最终被定为 CLR(C
ommon Language Runtime,公共语言运行时)。与此同时,微软提出了
在该运行时上运作的语言应该遵循的一些规则,以及该虚拟机的类型系统
和指令集——所有这些规范形成了最终的 C L I(Common Language Inf
rastructure,公共语言基础设施),并提交给了 ECMA 委员会。同时,微软
开发了 CLI 的一个实现,这就是大名鼎鼎的.NET 了。
      1998 年 12 月,微软启动了一个全新的语言项目——COOL,这是
一款专门为 CLR 设计的纯面向对象的语言,也正是本文的主角——C#的前
身。历时半年有余,1999 年 7 月份,微软完成了 COOL 语言的一个内部版
本。直到 2000 年 2 月份,微软才正式将 COOL 语言更名为 C#。据说起这
个名字是因为 C#开发小组的人很讨厌搜索引擎,因此把大部分搜索引擎无
法识别的―#‖ 字符作为该语言名字的一部分;还有一种 说法是在音乐当中
―#‖是升调记号,表达了微软希望它在 C 的基础上更上一层楼的美好愿望—
—当然这些都只是传说,无从考证。又是历经了一系列的修改,微软终于
在 2000 年 7 月发布了 C#语言的第一个预览版。因此人们一般认为 C#是 2
                    。
000 年发布的,并以此来计算它的―年龄‖ 在此后的一年多时间里,微软一
直在修补各个测试版本中的 BUG。直到 2002 年 2 月,微软终于推出了迟
迟未上市的 Visual Studio 7.0,并将其定名为―VisualStudio .NET 2002‖
                                                     。
随着这套开发环境的出炉,开发者们终于看到了 C#语言的第一个正式版本
——C# 1.0。此后,微软马不停蹄,Visual Studio 也恢复了往日的开发进
度。在 2003 年 5 月,微软如期推出了 Visual Studio .NET 2003,同时也
发布了 C#的改进版本——C# 1.1。
      这一时期的 C#(以下称为 C# 1.x)提出了纯粹的面向对象概念,
并在语言特性中展现得淋漓尽致。C++并非纯面向对象的,为了和 C 兼容
以及提供更高的执行效率,它保留了很多模块化的东西。Java 尽管号称是
面向对象的,但实际上,对于对象所应该具备的三种构成结构 ——属性、方
法和事件,Java 仅提供了方法,其它两种结构都要通过方法来模拟。在 C
# 1.x 中,所有面向对象的概念都在语言中得到了非常好的体现。同时, C
#还通过类类型、值类型和接口类型的概念形成了统一的类型系统。C#使用
了大家所熟知的语法实现了方法,以至于很多人认为 C#和 Java、C++等面
          ,
向对象语言―非常相像‖ 这使得从使用其他面向对象语言转到使用 C#的过程
非常简单。此外,C#还通过无参数列表的方法声名语法,结合 get/set 访问
器实现了优雅的属性语法。其中的 get 访问器相当于获取属性值的方法,可
以通过一些运算返回最终的结果,而不是简单地返回一个变量的值;而 set
访问器相当于设置属性值的方法,在其中可以进行一系列检测,最后将属
性值赋给相应的变量。同时,通过同时提供 get 和 set 访问器、只提供 get
访问器和只提供 set 访问器,还可以很方便地实现可写、只读和只写的属性。
C#的这种属性语法,使得一个属性在提供该属性的类的内部看来,非常像
一组方法;而对于外部调用类看来,访问一个对象的属性和访问它的公共
域没有任何区别。通过委托(稍后介绍),结合关键字 event,C#提供了优
雅的事件概念。使用+=运算符,开发者可以非常方便地将一个事件处理器
关联到一个事件上,这个过程称之为―订阅‖一个事件。由于委托内部封装了
一个调用链表,因此可以方便地为一个事件添加多个事件处理器,这些处
理器会自动地依次调用。多年的开发语言进化证明,函数指针是非常重要
也是非常危险的语言特征之一。同时,基于函数指针的回调机制也 Windo
ws 核心概念之一。然而,由于函数指针很难验证参数的类型准确性,因此
C#(确切地说是 CLI)提出了―委托‖的概念,这是一种类型安全的函数指针
链表。这意味着,C#不仅可以提供回调机制,同时调用回调的一方还无需
在其内部维护函数指针列表,所要做的仅仅是声名一 个具有恰当委托类型
的公共成员即可;而提供回调的一方也只需通过构造一个带有指定方法的
相应委托实例,并通过―+=‖运算符添加到回调列表即可。
     尽管 C# 1.x 提供了如此多的新鲜概念,但实际上,这些概念都是
由 CLI 提出的。因此当将一个 C#源程序编译为可执行文件时,编译器做的
工作相对而言并不多。需要编译器代劳的是要将一个简单的委托定义语句
翻译为一个继承 System.MulticastDelegate 类型定义。


      C# 2.0,泛型编程新概念




      微软本打算继续保证开发进度,并在 2004 年推出 Visual Studio .
NET 2004,但由于其间软件工程学尤其是软件管理学的大规模进步,微软
所提供的这种仅具备开发和调试功能的 IDE 已经无法满足团队开发的需求。
因此微软决定在项目设计和管理工具方面进行了进一步研发,并将其集成
到 Visual Studio 中,以赢回原有的市场。因此,微软将 Visual Studio.NE
T 2004―改名‖为 Visual Studio 2005,并决定推迟一年发布。不过,微软
还是坚持在 2004 年的 6 月份发布了 Visual Studio2005 的第一个 Beta 版,
同时向开发者展示了 C#语言的 2.0 版本。2005 年 4 月,微软发布了 Visua
l Studio 2005 Beta2,这已经是具备了几乎全部功能的 VisualStudio,包
括的产品有 SQL Server2005、Team Foundation Server 和 TeamSuite。
这时的 C#编译器已经能够处理 C# 2.0 中所有的新特性。
      C# 2.0 为开发者带来的最主要的特性就是泛型编程能力。和面向
对象思想一样,泛型思想也是一种已经成熟的编程思想,但依然是没有哪
一种主流开发语言能够支持完备的泛型概念。这主要是因为泛型 的概念在
一定程度上对面向对象概念进行冲击,同时,由于在编译期间对类型参数
的完全检测很难做到,很多问题会被遗留到运行时。C# 2.0 别出心裁,对
泛型类型参数提出了―约束‖的新概念,并以优雅的语法体现在语言之中。有
了约束,结合编译器强大的类型推断能力,可以在编译时发现几乎所有―危
险‖的泛型应用。C# 2.0 的另一个突出的特性就是匿名方法,用来取代一些
短小的并且仅出现一次的委托,使得语言结构更加紧凑。匿名方法除了可
以使得事件处理器的编写更加精简以外,还将开发者带入了程序设计的一
个新的领域——函数式编程,曾经有高人就用匿名方法结合泛型编程实现了
函数式编程中的重要结构—— Lambda 表达式。尽管这种实现显得很繁琐
而且不易理解,但毕竟是实现了。最终,函数式编程还是被引入到了 C#语言
中,这将在下一节中为大家讲述。
     此外,C# 2.0 还进一步增强了语言的表达能力。在 C# 2.0 中,
属性语法中的 get 和 set 访问器可以拥有不同的权限,这就使得定义一个在
库的内部可读写,而在库的外部只读的属性成为可能。同时, C# 2.0 还提
供了迭代器的概念,这使得一个类无需实现 IEnumerator 和 IEnumerable
接口即可实现一个可以进行遍历的类型,并且无需在类型中维护迭代状态。
此时的.NET 已经得到了很广泛的认可,并且因为元数据为组件带来了强大
的自我描述能力,许多程序库厂商被吸引到.NET 平台上来。随着.NET 程
序库数量的增长,逐渐暴露了命名的问题。在面向对象技术广泛发展后,
人们就意识到名字的管理问题,因此几乎所有的面向对象语言都提出了―命
名空间‖的概念.而在 C# 1.x 时代,这个问题再一次出现。如果一个库厂商
XX 希望以 XX.System 来命名他们自己的系统基础库,那么当开发者使用
using System 语句时就会产生歧义。为此。C# 2.0 中提供了 global 关键
字,这为.NET 库中所有的命名空间提供了一个―根‖,通过指定 global::Syste
m 和 global::XX.System 就可以区别两个库了。这一时期的 C#编译器变得
非常复杂,泛型的引入使得编译器不得不具备超强的类型推断能力。同时,
迭代器的思想并非是在 CLI 层面上实现的,而是由编译器自动生成了实现 I
E n u m e r a t o r 和 IEnumerable 接口类型。在经历了一系列的改
进和完善后,微软决定于 2005 年 11 月发布 Visual Studio2005,该开发环
境将正式支持 C#2.0。由于此推出了数个预览版和测试版,大家的期待之情
似乎已经不是那么强烈了。


     C#3.0(研发代号“Orcas”——魔鬼)




     2005 年 9 月份的 PDC 大会则为开发者们带来了另外的惊喜——
C#3.0(研发代号―Orcas‖——魔鬼)的技术预览版。说到 C# 3.0,就不得
不提一下微软的 LINQ 项目,LINQ(语言集成查询,Language Integrate
d Query)提出了一种通过面向对象语法来实现对非面向对象数据源的查询
技术,可查询的数据源从关系型数据库延伸到一般意义上的集合(如数组
和列表)以及 XML。而 C# 3.0 则是率先实现了 LINQ 的语言。
     在 C# 3.0 中,我们可以用类似于 SQL 语句的语法从一个数据源
中轻松地得到满足一定条件的对象集合。例如要查找一个字符串数组 name
s 中所有长度大于 5 的字符串,就可以写:
     var longname = from n in names wheren.Length > 5 select
n;
     这样我们就得到一个新的字符数组 longname,其中包含了我们所
需要的结果。这种语句称作查询语句,与 SQL 语句唯一的区别是 C#中的
查询语句往往把 select 子句放到最后(这反而倒有些类似于中文的阅读顺
序了)。初次看到这样一个语句,我们可能会有很大疑问:这还是 C#语言
吗?这的确是合乎语法规则的 C#代码,而且编译器可以识别这种语法。然
而实际上,C#编译器并不会对这种语法进行实际的的编译,而是将其翻译
为正常的方法调用:
     var longname = names.Where(n => n.Length > 5).Select(n);
     然后再进行进一步的编译。在上面的例子中已经说明,names 是
一个存放有字符串的数组,而数组类型并没有 Where 的方法。的确,Whe
re 并非 names 的成员方法,微软也没有对数组类型进行任何改动。这是 C
# 3.0 中另外一个重要的新特性:扩展方法。扩展方法是定义在其他静态类
中的静态方法,其第一个参数的类型就是希望扩展的类型,并且这个参数
被冠以 this 修饰符。扩展方法是静态的,但可以像调用被扩展类型的实例
方法那样进行调用,看起来好像是被扩展类型自己的方法一样。这就为语
言带来了很大的灵活性,我们可以将一组近似的功能如上面的 Where 和 S
                            )
elect 等(这在 LINQ 中被称作―标准查询表达式‖ 定义在一个外部类中,这
样既无须修改现有类型,又可以将功能组织在一起。当然,为了做到面向
对象的封装性,扩展方法只能在被扩展类型的公共成员上进行操作,如果
需要从内部对类型进行改进,就必须改变现有类型的代码。在 Where 方法
的参数列表里,我们又发现了一种奇怪的语法:n => n.Length > 5。这就
是我们上文提到过的 Lambda 表达式。
     微软的官方规范中称,Lambda 表达式是匿名方法的一种自然进
化。因此 Lambda 表达式其实也是一种特殊的委托,由编译器负责生成一
个匿名的委托类型,它接受一个字符串类型的参数 n;返回值为布尔类型,
表示 n 的长度是否大于 5;其中的参数类型和返回值类型都是由编译器推断
而来的。说到类型推断,还要解释的一点就是上面的语句中出现的新关键
字 var。从出现的位置来看,var 应该是一个类型。然而这又不是一个 C#
                             ,
内建类型,也不是 CLI 提出的新类型;它只是一个―占位符‖ 它的确表示一
个类型,但具体是什么类型需要编译器在编译期间进行推断。Lamda 表达
式的真正意义不仅仅在于简化了委托的编写方式,更重要的是它把代码表
达式体现为了数据。换句话说,Lambda 表达式不仅可以被编译为一段可以
执行的代码(类似于匿名方法),也可以将其翻译为一个数据结构——表达
式树。而如何处理 Lambda 表达式,是由编译器根据 Lambda 表达式的使
用方式来自动确定的。当把一个 Lambda 表达式赋给一个具有委托类型的
域、属性或变量时,编译器像编译匿名方法一样将表达式体翻译成一段可
执行代码;而当把一个 L a m b d a 表达式赋给一个具有 Expression<T>
类型的域、属性或变量时,编译器就会将 Lambda 表达式解析为一个表达
式树。对于翻译为代码的 Lambda,可以向调用委托那样进行调用,而对于
翻译为表达式树的 Lambda 表达式,就不可以了,会得到一个编译错误。
但表达式树存在于一个由编译器生成的数据结构中,因此可以在运行时对
其进行分析甚至修改。
     除了上面提到的一些重大改进之外,C# 3.0 也对细微的语法进行
了一些改进,使 C#语言变得更加优雅和全面。值得说明的是,C# 3.0 经
过编译后生成的 IL 代码,完全是基于.NET 2.0 的,C#语言已经远远跑在
了他所栖生的平台前面。这一时期的 C#语言离 CLI 已经越来越远了,编译
器的工作也愈加繁重起来。首先很多语言结构(如查询表达式和 Lambda
表达式)都不是 CLI 中提供的特性,因此需要编译器进行大量的转译工作;
其次是这些语言结构带来的大量类型推断任务,也都是靠编译器来完成的。
C#走到了 3.0 以后,已经完全不再是当年那个―简单‖的语言了。它的开发者
      ,
称其为―魔鬼‖ 而琳琅满目的新特性也的确让开发者们眼花缭乱,甚至感到
恐惧。语言集成查询的引入,使得前一段时期内为开发者们广泛讨论的 OR
M 概念得到了更加深入地体现,尤其是它所支持的数据源之广泛,让 ORM
                              ,
理念变得已经不再必要了;而一些―.NET 中的 ORM 实现‖ 似乎也成了完全
不必要的扩展项目了。Lambda 表达式的引入,使得 C#将可以轻松地完成
特定领域(Domain-Specific)的开发。
     一个成功的开发人员在面对新鲜事物和新的困难时,兴奋是远大
于恐惧的。让魔鬼来得更猛烈些吧!
  [编辑本段]
  C#关键字完整列表
     abstract
     as
     base
     bool
     break
     byte
     case
     catch
     char
     checked
     class
     const
     continue
     decimal
     default
     delegate
     do
     double
     else
enum
ecent
explicit
extern
false
finally
fixed
float
for
foreach
get
goto
if
implicit
in
int
interface
internal
is
lock
long
namespace
new
null
object
out
override
partial
private
protected
public
readonly
ref
return
sbyte
sealed
set
short
sizeof
stackalloc
static
struct
switch
this
throw
true
try
typeof
uint
ulong
unchecked
unsafe
ushort
using
value
virtual
volatile
volatile
void
where
        while
        yield
        其中有几个比较容易弄错的
        关键字 描 述
        abstract 可以和类、方法、属性、索引器及事件一起使用,
        标识一个可以扩展但不能被实体化的、必须被实现的类或方法。
        as 一个转换操作符,如果转换失败,就返回 null。
        base 用于访问被派生类或构造中的同名成员隐藏的基类成员。
        catch 定义一个代码块,在特定类型异常抛出时,执行块内代码。
        参见 try 和 finally。
        checked 既是操作符又是语句。
        确保编译器运行时,检查整数类型操作或转换时出现的溢出。
        const 标识一个可在编译时计算出来的变量值,即一经指派不可修
改的值。
        delegate 指定一个声明为一种委托类型。委托把方法封装为可调
用实体,
        能在委托实体中调用。
        enum 表示一个已命名常量群集的值类型。
        event 允许一个类或对象提供通知的成员,他必须是委托类型。
        explicit 一个定义用户自定义转换操作符的操作符,
        通常用来将内建类型转换为用户定义类型或反向操作。
        必须再转换时调用显示转换操作符。
        extern 标识一个将在外部(通常不是 c#语言)实现的方法。
        finally 定义一个代码块,在程序控制离开 try 代码快后执行。参见
try 和 catch。
        fixed 在一个代码块执行时,在固定内存位置为一个变量指派一个
指针。
        foreach 用于遍历一个群集的元素。
        goto 一个跳转语句,将程序执行重定向到一个标签语句。
       implicit 一个操作符,定义一个用户定义的转换操作符。
       通常用来将预定义类型转换为用户定义类型或反向操作。
       隐式转换操作符必须在转换时使用。
       interface 将一个声明指定为接口类型,即实现类或构造必须遵循
的合同。
       internal 一个访问修饰符。
       namespace 定义一个逻辑组的类型和命名空间。
       operator 用来声明或多载一个操作符。
       out 标识一个参数值会受影响的参数,但在传入方法时,
       该参数无需先初始化。
       params 声明一个参数数组。如果使用,必须修改指定的最后一个
参数。
       允许可选参数。
       readonly 标识一个变量的值在初始化后不可修改。
       ref 标识一个参数值可能会受影响的参数。
       sealed 防止类型被派生,防止方法和 property 被覆载。
       sizeof 一个操作符,以 byte 为单位返回一个值类型的长度。
       stackalloc 返回在堆上分配的一个内存块的指针。
       struct struct 是一种值类型,可以声明常量、字段、方法、proper
ty、
       索引器、操作符、构造器和内嵌类型。
       throw 抛出一个异常。
       try 异常处理代码块的组成部分之一。try 代码块包括可能会
       抛出异常的代码。参阅 catch 和 finally 关键字。
       typeof 一个操作符,返回传入参数的类型。
       unchecked 禁止溢出检查。
       unsafe 标注包含指针操作的代码块、方法或类。
       using 当用于命名空间时,using 关键字允许访问该命名空间中的
类型,
        而无需指定其全名。也用于定义 finalization 操作的范围。
        virtual 一个方法修饰符,标识可被覆载的方法。
        volatile 标识一个可被操作系统、某些硬件设备或并发线程修改的
attribute。
     [编辑本段]
     微软 MSDN 提供 C#全系列课程
        C# 3.0 锐利体验系列课程(1):概览
        C# 3.0 锐利体验系列课程(2):Lambda 表达式
        C# 3.0 锐利体验系列课程(3):查询表达式 LINQ(1)
        C# 3.0 锐利体验系列课程(4):查询表达式 LINQ(2)
        C# 3.0 锐利体验系列课程(5):查询表达式 LINQ(3)
        C#2.0 锐利体验系列课程(1):泛型编程
        C#2.0 锐利体验系列课程(2):匿名方法、迭代器
        C#2.0 锐利体验系列课程(3):局部类型、空属类型、静态类
        C#2.0 锐利体验系列课程(4):杂项技术,以及 C#语言的未来发展
        C#面向对象设计模式纵横谈(1):面向对象设计模式与原则
        C#面向对象设计模式纵横谈(2):Singleton 单件(创建型模式)
        C#面向对象设计模式纵横谈(3):Abstract Factory 抽象工厂模式
(创建型模式)
        C#面向对象设计模式纵横谈(4):Builder 生成器模式(创建型模式)
        C#面向对象设计模式纵横谈(5):Factory Method 工厂方法模式
(创建型模式)
        C#面向对象设计模式纵横谈(6):Prototype 原型模式(创建型模
式)
        C#面向对象设计模式纵横谈(7):Adapter 适配器模式(结构型模
式)
        C#面向对象设计模式纵横谈(8):Bridge 桥接模式(结构型模式)
        C#面向对象设计模式纵横谈(9):Composite 组合模式(结构型模
式)
      C#面向对象设计模式纵横谈(10):Decorator 装饰模式(结构型模
式)
      C#面向对象设计模式纵横谈(11):Facade 外观模式(结构型模式)
      C#面向对象设计模式纵横谈(12):Flyweight 享元模式(结构型模
式)
      C#面向对象设计模式纵横谈(13):Proxy 代理模式(结构型模式)
      C#面向对象设计模式纵横谈(14):Chain of Responsibility 职责
链模式(行为型模式)
      C#面向对象设计模式纵横谈(15):(行为型模式) Command 命令
模式
      C#面向对象设计模式纵横谈(16):(行为型模式) Interpreter 解释
器模式
      C#面向对象设计模式纵横谈(17):(行为型模式) Mediator 中介者
模式
      C#面向对象设计模式纵横谈(18):(行为型模式) Iterator 迭代器
模式
      C#面向对象设计模式纵横谈(19):(行为型模式) Observer 观察者
模式
      C#面向对象设计模式纵横谈(20):(行为型模式) Chain Of Resp
onsibility 职责链模式
      C#面向对象设计模式纵横谈(21):(行为型模式) Memento 备忘录
模式
      C#面向对象设计模式纵横谈(22):(行为型模式) State 状态模式
      C#面向对象设计模式纵横谈(23):(行为型模式) Strategy 策略模
式
      C#面向对象设计模式纵横谈(24):(行为型模式) Visitor 访问者模
式
      C#面向对象设计模式纵横谈(25):设计模式总结
      DIY Starter Kit 系列(1):21 点游戏讲解 Card Game Starter Kit
         DIY Starter Kit 系列(2):Movie Collection Starter Kit
         跟我一起学 Visual Studio 2008 系列课程(1):C# 3.0 新增功能
介绍(上)
         跟我一起学 Visual Studio 2008 系列课程(2):C# 3.0 新增功能
介绍(下)
         跟我一起学 Visual Studio 2008 系列课程(3):语言集成查询(LIN
Q)之入门篇
         跟我一起学 Visual Studio 2008 系列课程(4):语言集成查询(LIN
Q)之 LINQ to Objects
         跟我一起学 Visual Studio 2008 系列课程(5):语言集成查询(LIN
Q)之 LINQ to DataSet
         跟我一起学 Visual Studio 2008 系列课程(6):语言集成查询(LIN
Q)之 LINQ to SQL
         跟我一起学 Visual Studio 2008 系列课程(7):语言集成查询(LIN
Q)之 LINQ to XML 入门篇
         跟我一起学 Visual Studio 2008 系列课程(8):语言集成查询(LIN
Q)之 LINQ to XML 高级篇
         跟我一起学 Visual Studio 2008 系列课程(9):认识 VS 2008 ID
E 针对 ASP.NET 所做的增强与改进
         跟我一起学 Visual Studio 2008 系列课程(10):ASP.NET 增强功
能介绍
         跟我一起学 Visual Studio 2008 系列课程(11):认识 IIS 7.0
         跟我一起学 Visual Studio 2008 系列课程(12):VSTO 新功能一
览
         跟我一起学 Visual Studio 2008 系列课程(13):STO 之利用 Outl
ook 对象模型自定义 Outlook
         跟我一起学 Visual Studio 2008 系列课程(14):VS2008 数据访问
概述
         跟我一起学 Visual Studio 2008 系列课程(15):全面剖析 TableA
dapter
          视频游戏开发系列课程(1):游戏开发过程预览
          视频游戏开发系列课程(2):基础编程概念及 C#简介
          视频游戏开发系列课程(3):游戏元素大观园
          视频游戏开发系列课程(4):介绍游戏中的―精灵‖和―动画‖
          视频游戏开发系列课程(5):Transformation and Collision of Sp
rites
          视频游戏开发系列课程(6):控制小精灵行为
          视频游戏开发系列课程(7):让你的游戏更―声‖动——音乐和音效
          视频游戏开发系列课程(8):开始创造游戏的―精灵‖的行为
          Modern C#系列课程(3):现代面向对象的程序设计
          Modern C#系列课程(4):C# 中的类的设计
          Modern C#系列课程(5):C# 中的异常处理
          Modern C#系列课程(6):使用 WinForms 进行 GUI 设计
          Modern C#系列课程(7):ADO.NET 进行数据库编程
          Modern C#系列课程(8):多层结构应用程序设计
          Modern C#系列课程(9):基于组件的程序设计
          Modern C#系列课程(10):C# 中的一些设计技巧
          Modern C#(11):深入―委托和事件‖
        [编辑本段]
        C#与 C++、JAVA 的区别
          C#(读做 "C sharp")是微软公司在去年六月发布的一种新的编程
语言,并定于在微软职业开发者论坛 (PDC)上登台亮相.C#是微软公司研究
员 Anders Hejlsberg 的最新成果.C#看起来与 Java 有着惊人的相似;它包括
了诸如单一继承,界面,与 Java 几乎同样的语法,和编译成中间代码再运行的
过程.但是 C#与 Java 有着明显的不同,它借鉴了 Delphi 的一个特点,与 CO
M(组件对象模型)是直接集成的,而且它是微软公司.NET windows 网络框
架的主角.
          微软 c#语言定义主要是从 C 和 C++继承而来的,而且语言中的许多
元素也反映了这一点.C#在设计者从 C++继承的可选选项方面比 Java 要广
泛一些(比如说 structs),它还增加了自己新的特点(比方说源代码版本定义).
但它还太不成熟,不可能挤垮 Java.C#还需要进化成一种开发者能够接受和
采用的语言.而微软当前为它的这种新语言大造声势也是值得注意的 .目前
大家的反应是:"这是对 Java 的反击."
       C#更象 Java 一些,虽然微软在这个问题上保持沉默.这也是意料中
的事情,我觉得,因为 Java 近来很成功而使用 Java 的公司都报告说它们在生
产效率上比 C++获得了提高.
       Java 所带来的巨大影响和大家对它的广泛接受已经由工作于这种
语言和平台之上的程序员数量明显的说明了(估计世界范围内共有两百五十
万程序员使用 Java).由这种语言写成的应用程序的数量是令人惊讶的并已
经渗透了每一个级别的计算,包括无线计算和移动电话(比如日本发明的 Jav
a 电话).C#能够在用户领域获得这样的礼遇吗?我们必须等待并观望,就象已
经由 SSI 公司的 CEO 和主席 Kalpathi S. Suresh 指出来的那样,"我发现所
有这些都是渐进的.如果 C#不存在,我们总能回到 Java 或 C 和 C++.这些都
不完全是新技术;它们在更大的意义上来说只是大公司制造的市场噱头 .我
们必须给他们时间安顿下来看看这些是不是真的对 IT 工业有什么影响."
                                    ,
       C++,这个词在中国大陆的程序员圈子中通常被读做―C 加加‖ 而
西方的程序员通常读做―C plus plus‖ 它是一种使用非常广泛的计算机编程
                      ,
语言。C++是一种静态数据类型检查的,支持多重编程范式的通用程序设计
语言。它支持过程序程序设计、数据抽象、面向对象程序设计、泛型程序
设计等多种程序设计风格。
       贝尔实验室的本贾尼·斯特劳斯特卢普(w:en:Bjarne Stroustrup)
博士在 20 世纪 80 年代发明并实现了 C++(最初这种语言被称作―C with
Classes‖ 。一开始 C++是作为 C 语言的增强版出现的,从给 C 语言增加类
       )
开始,不断的增加新特性。虚函数(virtual function)、运算符重载(oper
ator overloading)、多重继承(multiple inheritance)、模板(template)、
异常(exception)、RTTI、名字空间(name space)逐渐被加入标准。1
998 年国际标准组织(ISO)颁布了 C++程序设计语言的国际标准 ISO/IEC
14882-1998。遗憾的是,由于 C++语言过于复杂,以及他经历了长年的
演变,直到现在(2004 年)只有少数几个编译器完全符合这个标准。
     另外,就目前学习 C++而言,可以认为他是一门独立的语言;他
并不依赖 C 语言,我们可以完全不学 C 语言,而直接学习 C++。根据《C
++编程思想》(Thinking in C++)一书所评述的,C++与 C 的效率往往相
差在正负 5%之间。所以有人认为在大多数场合 C++ 完全可以取代 C 语言。


     C++语言发展大概可以分为三个阶段:第一阶段从 80 年代到 199
5 年。这一阶段 C++语言基本上是传统类型上的面向对象语言,并且凭借着
接近 C 语言的效率,在工业界使用的开发语言中占据了相当大份额;第二
阶段从 1995 年到 2000 年,这一阶段由于标准模板库(STL)和后来的 Boos
t 等程序库的出现,泛型程序设计在 C++中占据了越来越多的比重性。当然,
同时由于 Java、C#等语言的出现和硬件价格的大规模下降,C++受到了一
定的冲击;第三阶段从 2000 年至今,由于以 Loki、MPL 等程序库为代表
的产生式编程和模板元编程的出现, C++出现了发展历史上又一个新的高
峰,这些新技术的出现以及和原有技术的融合,使 C++已经成为当今主流
程序设计语言中最复杂的一员。
  [编辑本段]
  C#的前途如何?
     这世界上没有什么比编程工具更加牵动程序员的心。VC、VB、D
ELPHI、JAVA……这些耀眼的名字不仅占据了程序员的生活,而且似乎已
经成为了某种信仰。可是,伴随着新世纪的脚步,这些信仰又一次遭遇了
重大的挑战。微软,这头被法官和黑客们折腾得既疲惫又恼怒的狮子,发
誓要保住它头上的王冠,拼尽全力,拿出了看家的本事——.NET 战略。作
为 .NET 的核心开发语言,C# 顺理成章地浮出了水面。程序员们也就不得
不做出一个痛苦的选择,跟在谁的后面?要找出答案就不得不作一番比较
和预测。笔者作为一个资深的程序员,斗胆在此狂言,权作抛砖引玉。
     如果抛开一切非技术方面的因素,C# 无疑是这个星球上有史以来
最好的编程语言,它几乎集中了所有关于软件开发和软件工程研究的最新
成果。面向对象、类型安全、组件技术、自动内存管理、跨平台异常处理、
版本控制、代码安全管理……你不可能在另外的一种语言中找到所有这些特
性。尽管像很多人注意到的一样,当我罗列上述特性时,总是让人想到 JA
VA,然而 C# 确实走得更远。但现实的情况是,非技术的因素往往更能决
定一个产品的未来,尤其在计算机软件的历史上,技术卓越的产品,如 OS
/2、Mac OS、UNIX 等,都败在了 Windows 那漂亮的脸蛋儿下。而这一次,
微软的角色好像从一个赤手空拳的革命者变成了仗势欺人的老地主,如果
真是要变天,那 C# 这孩子岂不是投错了胎?可能情形并非如此糟糕,毕
竟瘦死的骆驼比马大,而且 C# 已经提交给了一个标准化组织,一旦成了
国际标准,说不准真有哪个手痒的大侠(也有可能是微软自己)给移植到 L
inux 和别的平台上。那样的话,JAVA 可就惨了。因为 JAVA 的用户主要是
网络服务的开发者和嵌入式设备软件的开发者,嵌入式设备软件不是 C#
的用武之地,而在网络服务方面,C# 的即时编译和本地代码 Cache 方案
比 JAVA 虚拟机具有绝对的性能优势。何况 C# 一旦成为一个像 C++ 一样
的公共的标准,软件开发商既可以省去 JAVA 的许可证费用,也不必担心成
为微软的奴隶,那些反微软的人士和主张厂商独立的人士可能也不会有什
么意见。这可能正是微软所期待的。
     如果把 C# 和 JAVA 在网络服务领域的争夺比作未来制空权的争
夺的话,那么 C# 和传统通用快速开发工具——VB、DELPHI 等的较量将
是地地道道的白刃战。可能最惨的程序员就是 VB 程序员,在微软,VB 就
像离任的克林顿,不但失去了所有的光辉,而且乱事缠身。想 想吧,VB6
写的项目必须用转换工具转换成基于.NET 的代码才能在 VB7 中调入,几乎
面目全非。由于 VB7 遵循为迎合.NET 而建立的通用语言规范(CLS),几
乎把所有原来只在 C++、JAVA 等语言中可以运用的特性统统加了进来,只
是语法和原来兼容。如果你是第一次在 VB7 中看到自己的旧 VB6 项目转换
之后的代码,一定要当心你的心脏!所以,努力吧,别告诉我你将就此退
休。DELPHI 的状况也好不到哪里去,原来的看家本领是做起应用来又快又
好,可现在看看最新的 VS.NET Beta 1, 你会感到如此熟悉,众多的属性
列表、组件……谁让你穷呢,连总设计师都养不住。
     其实在编程语言中真正的霸主多年来一直是 C++,所有的操作系
统和绝大多数的商品软件都是用 C++作为主要开发语言的。JAVA 的程序员
绝大多数也是 C++的爱好者,PHP 的成功里面也有类似 C++的语法的功劳。
在操作系统、设备驱动程序、视频游戏等领域,C++在很长的时间内仍将占
据主要地位,而在数量最大的应用软件的开发上,C# 很可能取代 C++的位
置。首先,C# 和 JAVA 一样,简直就是照搬了 C++的部分语法,因此,对
于数量众多的 C++程序员学习起来很容易上手,另外,对于新手来说,比
C++要简单一些。其次,Windows 是目前占垄断地位的平台,而开发 Wind
ows 应用,当然微软的声音是不能忽略的。最重要的是,相对于 C++,用
C# 开发应用软件可以大大缩短开发周期,同时可以利用原来除用户界面代
码之外的 C++代码。
      但是,C# 也有弱点。首先,在一些版本较旧的 Windows 平台上,
C# 的程序还不能运行,因为 C# 程序需要 .NET 运行库作为基础,而 .N
ET 运行库作为现在的的 Windows(XP 及以后版本)的一部分发行, Wi
ndows Me 和 Windows 2000 用户只能以 Service Pack 的形式安装使
用。其次,C# 能够使用的组件或库还只有 .NET 运行库等很少的选择,
没有丰富的第三方软件库可用,这需要有一个过程,同时各软件开发商的
支持也很重要。第三,JAVA 的成功因素里有一些是反微软阵营的吹捧,虽
然―只写一次,到处运行‖只是一句口号,但毕竟已经是一种成熟的技术。而
C# 的鼓吹者目前只有名声不佳的微软,且只能运行在 Windows 上。实际
上这两种语言都不是不可替代的,理智的说,对软件开发商而言,什么用
的最熟什么就是最好的工具。尤其对 C++的使用者,C# 没有带来任何新东
西,因为.NET 运行库在 C++中也可以使用,没有要换的绝对的理由。
      综上所述,我个人认为,近几年,C# 将不可避免地崛起,在 Wi
ndows 平台上成为主角,而 JAVA 将在 UNIX、Linux 等平台上成为霸主,C
++ 将继续在系统软件领域大展拳脚。非常有意思的是,这些语言的语法极
其接近,因为 JAVA 和 C# 都是由 C++发展而来的。其他的开发工具当然
还会在相当长的时间里继续他们的旅程,不过在市场份额上,将不可避免
地受到冲击。
扩展阅读:
      1.网罗设计:http://bbs.wlsj56.cn 电子书.书籍.光盘.素材.教程打包下
 载!
      2.http://zhidao.baidu.com/question/1772548.html
      3.http://www.web2bar.cn/Article/3057.aspx
      4.http://www.msdnwebcast.com/msdn/webcast.aspx?query=2074
 微软 MSDN 的 C#课程大全
  Microsoft Visual C++


       一、VC 是什么?学 VC 是学什么?


  首先 VC 是一个软件(IDE 集成开发环境)(编译、编辑、调试)
     C 和 C++。
     WindowsSDK(软件开发工具)
     VC 的灵魂:MFC(微软基础类库)
     ATL(ActiveX 模板类库)
     其他的 SDK,如 OpenGL,DirectX,ActiveMoive,DrawDib(WinG)
     VC 是许许多多技术的综合,就好像少林 72 般绝技,一般在应用
中学会其中很少一部分就够了。我们现在的目的,其实不过是学一套少林
长拳。这套长拳应包括:
     1、养成一种严谨的软件开发习惯,熟悉软件工程的基本原则。
     2、C 语言基础
     3、C++最基本内容:类、继承性、封装性、多态性的概念
     4、如何用向导建立一个程序框架
     5、设计菜单
     6、设计工具条
     7、设计和使用对话框,熟悉最常用的对话框控件:按钮、静态文
本、编辑框等
     8、知道怎样新建类、成员函数、成员变量、消息处理函数。
     9、了解最常用的 Windows 消息:如 WM_PAINT(重绘窗口),鼠
标按下、弹起、移动,初始化对话框,等。
     10、了解最简单的 GDI(图形设备接口):写文字、画框、画点、画
线、画圆,设置画笔、画刷。
     11、熟悉最常用的 MFC 类:
     CWnd
     CDocument
     CView
      CDC
      CDialog
      CWinApp
      CGdiObject 及子类
      CString、CPoint、CRect、CSize 等简单数据类型
      CFile
      以上提到的这些内容,是每个人都会用到的内容。


       二.MFC 简介


   上述主要内容都是与实际操作关系非常密切的,在此不可能讲清楚;
而且,这些在一般的书里都会讲到。我主要将最重要的 MFC 介绍一下。
      MFC 是对 WindowsAPI 的封装,大大简化了我们的工作;学 VC
主要就是要学 MFC,大约有 100 多个类,但常用的也就二三十个。应该象
背 4 级单词一样将这些常用类搞懂;当然不要死记,要通过看帮助、看例
子、动手练习来学会它们;而且,并非每个类的内部的所有函数都要学会,
要日积月累。如果真的想成为高手,做个笔记本把自己认为重要的类、函
数记下来,随时学习,也是很好的突击方法。
      下面介绍最重要的 MFC。
      CWnd:窗口,它是大多数―看得见的东西‖的父类(Windows 里几
乎所有看得见的东西都是一个窗口,大窗口里有许多小窗口),比如视图 C
View、框架窗口 CFrameWnd、工具条 CToolBar、对话框 CDialog、按钮
CButton,etc;一个例外是菜单(CMenu)不是从窗口派生的。该类很大,
一开始也不必学,知道就行了。
      CDocument 文档,负责内存数据与磁盘的交互。最重要的是 On
OpenDocument(读入),OnSaveDocument(写盘),Serialize(读写)
      CView 视图,负责内存数据与用户的交互。包括数据的显示、用
户操作的响应(如菜单的选取、鼠标的响应)。最重要的是 OnDraw(重画
窗口),通常用 CWnd::Invalidate()来启动它。另外,它通过消息映射表处理
菜单、工具条、快捷键和其他用户消息。你自己的许多功能都要加在里面,
你打交道最多的就是它。
        CDC 设备文本。无论是显示器还是打印机,都是画图给用户看。
这图就抽象为 CDC。CDC 与其他 GDI(图形设备接口)一起,完成文字和
图形、图像的显示工作。把 CDC 想象成一张纸,每个窗口都有一个 CDC
相联系,负责画窗口。CDC 有个常用子类 CClientDC(窗口客户区),画
图通常通过 CClientDC 完成。
        CDialog 对话框
        CWinApp 应用程序类。似于 C 中的 main 函数,是程序执行的入
口和管理者,负责程序建立、消灭,主窗口和文档模板的建立。最常用函
数 InitInstance():初始化。
        CGdiObject 及子类,用于向设备文本画图。它们都需要在使用前选
进 DC。
        CPen 笔,画线
        CBrush 刷子,填充
        CFont 字体,控制文字输出的字体
        CBitmap 位图
        CPalette 调色板
        CRgn 区域,指定一块区域可以用于做特殊处理。
        CFile 文件。最重要的不外是 Open(打开),Read(读入),Write
(写)
        CString 字符串。封装了 C 中的字符数组,非常实用。
        CPoint 点,就是(x,y)对
        CRect 矩形,就是(left,top,right,bottom)
        CSize 大小,就是(cx,cy)对(宽、高)


         三、用好 MSDN 和例子


   作为提高,推荐看的例子有:
    nHello 最简单的程序框架
    nScribble 鼠标绘图。教程:编程基础,GDI
    nDiblook 图像处理最简单范例
    nMFCIE 因特网浏览器
    nEnroll 数据库
    nDaoviewDao(数据访问对象)范例。树型和列视控件
    nCubeOpenGL 范例,画一个不断旋转的方块
    nHierSvrOLE 服务器
    nOclientOLE 包容器
    nDrawcli 鼠标绘图。也包括 OLE。
    nWordPad 写字板。OLE


      四.几点经验


  A.为什么要用 Windows 而不是 DOS 编程
    Windows 编程并不比 DOS 编程难很多,只是在刚刚接触的时候感
到头绪繁多,不知从何下手。实际上,如果你会 C 语言,你会发现 Windo
ws 编程的难度并不比当年学 C 语言时大。DOS 编程要想成为高手,也需
要学习几百个函数(无论是 TC、BC、MicrosoftC),并要深入了解汇编语
言级的 DOS 功能调用。而现在在 Windows 下,付出相同的工作量,你却
可以获得几倍的收益。如果你以前熟悉 DOS 编程,现在再搞 Windows 编
程,只要两个星期肯定会感到巨大的优越性:在 DOS 下,每一件事都要自
己干,而且还有 64K 内存、显示精度等的限制,实在是事倍功半了。
    B.为什么要用 VC 而不是其他 Windows 编程语言
    >大多数大型软件(包括 Windows 自己)都是用 C、C++编的,所
以可以利用的源代码特别多。例如 Photoshop,就有 VC 的编程接口。的其
他的语言都不如 VC 有历史优势。而且 VC 的开发工具特别多,从控件公司
到硬件开发商,其产品很少敢不提供 VC 接口的。
    >VC 适合组织大工程(VB 就不行)
      >BorlandC++或 C++Builder 也很不错,并不比 VC 差。但 BC 的
版本兼容性不好,从 3.1 到 4.0 就出现―代沟‖,而且 VC 提供了极为丰富的
文档和范例,VC 的参考资料也远比 BC 多。并且 VC 与其他的 VisualStudio
成员可以协调工作,对软件工程有利。
      C.开始不要学 WinAPI 编程,但以后最好学学 WinAPI
      特别要注意,开始不要买讲 WindowsSDK 编程的书。一个臭名昭
著的例子就是―HelloWorld‖。各种计算机语言在入门课中往往都给出一个例
子,显示一行文字―HelloWorld‖,无论是在 Basic、C、Pascal,甚至汇编
中,这个最简单的小程序都几行就可以写完。但在早期的 Windows 编程中,
刚才讲到的―HelloWorld‖这个有名的例子就要组织一个工程、写上几百行代
码才能实现。这就吓跑了很多想学 Windows 编程的人。实际上,在 Windo
ws 下显示―Helloworld‖,最简单的方法只要 5 行就够了:
      #include―windows.h‖
      voidWinMain()
      {
      MessageBox(NULL,‖HelloWorld!‖,‖MyFirstWindowsApplication‖,
MB_OK);
      }
      当然这个程序只建立了一个最简单的对话框,但这已经够了。
      如果你没有 SDK 编程的经验,学 VC 就是要利用 MFC 绕过 Wind
ows 编程的许多细节。有好的工具为什么不用呢?现在你在 VC 写一个‖He
lloWorld‖,只要写一行代码就可以了。
      voidCYourView::OnDraw(CDC*pDC)
      {
      //…….其他的代码
      pDC->TextOut(100,100,‖HelloWorld!‖);
      }
     但 MFC 不是万能的,WinAPI 和 VC 中有很多功能在 MFC 中并不
能反映出来。在入门后,要想发挥 VC 的完全能力,WindowsAPI 还是非常
重要的。而且,这些 API 在其他 Windows 语言中也用得到。
     学语言,与练武道理也差不多。VC、VB、Delphi、VFP,以及其
他的 Windows 编程语言,都属于同一个门派:Windows 门,虽然招式不同,
但内功都是一样的,这就是 WindowsAPI(应用编程接口),大概是两千个函
数。任何武功,招式即使再复杂,通常也能在很短时间内记下来;但内功
就不是一朝一夕的事。而且,各门派的内功不同,Unix、Linux 门有 Uinx
的内功,Apple(苹果)门有 Mac 的内功,Java 更是自成一派。我们这里说
的学 VC,只是学招式,学招式一个月差不多就够了,聪明的两个星期就可
以掌握。光学招式,吓唬人是够了,但和高手一过招,非出丑不可。要想
精通 VC,必须熟悉 WindowsAPI。
     D.高级语言与自然语言
     一门高级语言与一门自然语言是类似的。关键要素有三:
     语法:了解 C 和 C++基本语法,这是比较容易的。
     修辞:编程的艺术和风格。通常,这是与软件工程联系起来的。
算法上的小伎俩并非是关键的。严谨,严格按照规范去做,同时又能发挥
出极大的创造性,才是语言学家的本色。
     词汇:如何利用别人的工作?如何利用自己以前的工作?这是一
个软件工程师成功的关键。如果词汇量不丰富,就写不出好文章,就会有
想法表达不出。一个人的语法在上小学之前就基本上学成了,修辞水平也
在年轻时就确定了,惟有词汇量需要根据需要不断学习、不断扩充。VC 编
程中,拥有大的词汇量就意味着要掌握较多的类、函数和其他编程组件。
如:WindowsSDK,MFC,以及你所专攻的领域的现成的 SDK,比如 3D 编程
中的 OpenGL,多媒体编程中的 DirectX,图像处理中的 Victor 库。另外,A
ctiveX 控件的掌握往往也是成败的关键。我们这几年的工作也总结成了一
个类库,叫 IPX(图像处理框架),大大简化了图像处理的工作;不过现在
还有很多细节问题要解决,如果有同学感兴趣可以参与这方面的工作。
    学习 VC,千万不要用我们在学校里学英语的方法,而要用小孩学
说话的方法。所谓学英语的方法,就是我们在本科时学 C 语言的那种模式:
详细搞懂每一个细节,背大量的规则,很少上机实践,没有实际问题供解
决,最后由考试来断定学习成果。这种模式的后果大家都清楚:我们学了
十几年英语,可有不少人还只会四五千个单词,写百把字的文章,不会说,
不能听;尤其要命的是,看不懂 VC 的帮助文档。我们要象婴儿一样,在使
用中学会语法、修辞和词汇;一开始肯定只能编出最糟糕的,就好像小孩
开始只会说:―爸爸坐车车‖;但―爸爸‖―车车‖这些词对小孩是最需要的,学
习的效率反而最高。学 VC 的时候,应从我的需要出发,先做一个最简单的
东西,然后一点一点复杂起来,象滚雪球一样。
    学习 VC 尤其要和别人交流,你苦苦思考不明白的,也许别人早就
解决了。一定要善于学习:从书店找出有用的书;向身边的高手学习;寻
找可以利用的源代码、类库、组件、控件、库;如果能上互连网,那就更
加能解决问题了。
    ================================================
    Lchrennew:
    以下内容由于曾经进行编辑替换(Replace)不让通过,所以采用附
加(Append)的方式,在下面把我的版本加上,请大家对比:
    VC 是英文的缩写形式,其完整形式基本上包括如下几方面:
    1. 医学、药品学、生物化学:Vitamins C,简写 VC,音译―维他
命 C‖,中文意译为维生素 C,又被称为抗坏血酸。
    1907 年挪威化学家霍尔斯特在柠檬汁中发现。1934 年才获得纯
品,是无色晶体,属于水溶性维生素,易溶于水,水溶液呈酸性,所以称
它为抗坏血酸。在酸性溶液中稳定,在中性或碱性溶液中易被氧化分解。
铁、铜等金属离子能够加速其氧化速率。
    维生素 C 在人体内的主要功能是:参加体内的氧化还原过程,促
进人体的生长发育,增强人体对疾病的抵抗能力,促进细胞间质中胶原的
形成,维持牙齿、骨骼、血管和肌肉的正常功能,增强肝脏的解毒能力。
当人体中缺少维生素 C 时,就会出现牙龈出血、牙齿松动、骨骼脆弱、粘
膜及皮下易出血、伤口不易愈合等症状。近年来,科学家们还发现,维生
素 C 能阻止亚硝酸盐和仲胺在胃内结合成致癌物质——亚脱胺,从而减低
癌的发病率。
      2. 软件,计算机科学,Windows 开发:Visual C 以及 Visual C+
+,由微软开发的可视化集成开发环境(IDE)Visual Studio 中重要的一员,
其编程规范符合 ANSI C/C++标准,而其集成了微软开发的基础类库(MF
C,即 Microsoft Foundation Classes)以及可视化开发环境,VC 提供了
微软 Windows 操作系统的大量 API,从而使得开发效率较其他语言大大提
高。但是使用其 MFC 编写的程序只能运行在 Windows 操作系统下。
      3. 经济金融领域、公司运作:Venture Capitalist,风险投资商,
风险投资也叫―创业投资‖,一般指对高新技术产业的投资。 作为成熟市场以
外的、投资风险极大的投资领域,其资本来源于金融资本、个人资本、 公司
资本以及养老保险基金和医疗保险基金。就各国实践来看, 风险投资大多采
取投资基金的方式运作。
      风险投资具有与一般投资不同的特点,表现在:
      1)高风险性。 风险投资的对象主要是刚刚起步或还没有起步的
中小型高新技术企业,企业规模小,没有固定资产或资金作为抵押或担保。由
于投资目标常常是― 种子‖技术或是一种构想创意,而它们处于起步设计阶
段,尚未经过市场检验, 能否转化为现实生产力,有许多不确定因素。因此,
高风险性是风险投资的本质特征。
      2)高收益性。风险投资是一种前瞻性投资战略,预期企业的高成长、
高增值是其投资的内在动因。一旦投资成功,将会带来十倍甚至百倍的投资
回报。 高风险、高收益在风险投资过程中充分体现出来。
      3)低流动性。风险资本在高新技术企业创立初期就投入 ,当企业
发展成熟后, 才可以通过资本市场将股权变现,获取回报,继而进行新一轮的
投资运作。因此投资期较长,通常为 4~8 年。另外,在风险资本最后退出时,
若出口不畅,撤资将十分困难, 导致风险投资流动性降低。
      从本质上来讲, 风险投资是高新技术产业在投入资本并进行有效
使用过程中的一个支持系统,它加速了高新技术成果的转化,壮大了高新技
术产业, 催化了知识经济的蓬勃发展,这是它最主要的作用。当然,对于整个
国家经济而言, 风险投资在推动企业技术创新,促进产业机构的调整、改变
社会就业结构、 扩大个人投资的选择渠道、加强资本市场的深度等方面都
有重要的意义。
        VC 德国 vision components 公司的缩写,在业界名气很大。
        德国 vision components 公司是世界上公认的智能摄像机领导厂
商。其摄像机产品将图像采集、处理、I\O 控制及通信集于一体。并且采用
了当前性能最强大的图像处理专用 DSP,智能化程度高,搭建系统成本低,
是用户构造机器视觉系统的理想选择。
        VC 智能摄像机特征:
        1.与 PC 机相匹敌的运算速度
        2.与生产线上其它设备连接方便
        3.能直接在显示器上输出 SVGA 或 SXGA 的视频图像
        4.提供高度开放的图像处理库和一些常用库
        5.能进行源码级的二次开发
        6.工作过程可完全脱离 PC 机
        VC 还是 NBA 著名球员文斯-卡特(Vince Carter)的缩写
        有人来问"什么是 Portfolio Company,是否和 VC 是一个意思‖。
Portfolio 当然本意就是―公文包‖,Portfolio company 不是皮包公司,而是
指某个 VC 的投资包中的一个成员。从 VC 的角度来看,自己的 Portfolio
中有哪些公司就说明了这家 VC 的投资组合和投资战略。一般来说,我们或
使用―成员企业‖,或使用―机构企业‖来做 Portfolio company 的中文名称。
        * 在教育中,Portfolio 是一个学习者的个人档案袋,也就是一个
学习者的个人资料和学习纪录。Portfoilio 可以帮助教育者更全面评价学习
者的学习成效,而不是只靠考试成绩。


http://www.isaacmao.com/venture/2004/09/portfolio-companyvc.html
   Visual Studio




                        VS logo
   [编辑本段]
   Visual Studio 简介
       Visual Studio 是微软公司推出的开发环境。是目前最流行的 Wi
ndows 平台应用程序开发环境。目前已经开发到 10.0 版本,也就是 Vis
ual Studio 2010。
       Visual Studio 可以用来创建 Windows 平台下的 Windows 应
用程序和网络应用程序,也可以用来创建网络服务、智能设备应用程序和
Office 插件。
       1998 年,微软公司发布了 Visual Studio 6.0。所有开发语言的
开发环境版本均升至 6.0。这也是 Visual Basic 最后一次发布,从下一个
版本 (7.0) 开始,Microsoft Visual Basic 进化成了一种新的面向对象的
语言:Microsoft Visual Basic.NET。由于微软公司对于 Sun 公司 Java
语言扩充导致与 Java 虚拟机不兼容而 被 Sun 告上法庭,微软在后续的
Visual Studio 中不再包括面向 Java 虚拟机的开发环境。
       2002 年,随着 .NET 口号的提出与 Windows XP / Office XP
的发布,微软发布了 Visual Studio .NET(内部版本号为 7.0)。在这个版
本的 Visual Studio 中,微软剥离了 Visual FoxPro 作为一个单独的开发
环境以 Visual FoxPro 7.0 单独销售,同时取消了 Visual InterDev。与
此同时,微软引入了建立在 .NET 框架上(版本 1.0)的托管代码机制以
及一门新的语言 C# (读作 C Sharp,意为 C++++)。C# 是一门建立在
 C++ 和 Java 基础上的现代语言,是编写 .NET 框架的语言。
       .NET 的通用语言框架机制(Common Language Runtime, CL
R),其目的是在同一个项目中支持不同的语言所开发的组件。所有 CLR
支持的代码都会被解释成为 CLR 可执行的机器代码然后运行。
      Visual Basic、Visual C++ 都被扩展为支持托管代码机制的开发
环境,且 Visual Basic .NET 更是从 Visual Basic 脱胎换骨,彻底支持
面向对象的编程机制。而 Visual J++ 也变为 Visual J#。后者仅语法同
Java 相同,但是面向的不是 Java 虚拟机,而是 .NET Framework。
      2003 年,微软对 Visual Studio 2002 进行了部分修订,以 Vis
ual Studio 2003 的名义发布(内部版本号为 7.1)。Visio 作为使用统一
建模语言(UML)架构应用程序框架的程序被引入,同时被引入的还包括
移动设备支持和企业模版。.NET 框架也升级到了 1.1。
      2005 年,微软发布了 Visual Studio 2005。.NET 字眼从各种语
言的名字中被抹去,但是这个版本的 Visual Studio 仍然还是面向 .NET
框架的(版本 2.0)。它同时也能开发跨平台的应用程序,如开发使用微软
操作系统的手机的程序等。总体来说是一个非常庞大的软件,甚至包含代
码测试功能。
       这个版本的 Visual Studio 包含有众多版本,分别面向不同的开
发角色。同时还永久提供免费的 Visual Studio Express 版本。
      随着即将发布的 Windows Vista (内部名称:Longhorn) 和 Of
fice 2007,Visual Studio 9 也渐渐浮出水面。Visual Studio 9 目前可以
确定的是支持建立于 DHTML 基础上的 AJax 技术,这种微软在 Visual
InterDev 时代提出的基于异步的客户端动态网页技术在当年并没有像微软
预期中的那么流行起来,反而随着 GMail 等应用而东山再起,渐渐成为主
流网络应用之一。同时 Visual Studio 9 会强化对于数据库的支持以及微
软新的基于工作流(Workflow)的编程模型。预计为了保持与 Office 系列
的统一,Visual Studio 9 的名称为 Visual Studio 2008。
      2008 年,Visual Studio9 也就是 Visual Studio 2008 将和 Windo
ws Server 2008 同时发布
      创建满足关键性要求的多层次的智能客户端、Web、移动或基于 M
icrosoft Office 的应用程序。
      使用 Visual Studio 2005, 专业开发人员能够:
       使用改进后的可视化设计工具、编程语言和代码编辑器,享受高
效率的开发环境
        在统一的开发环境中,开发并调试多层次的服务器应用程序
        使用集成的可视化数据库设计和报告工具,创建 SQL Server 20
05 解决方案
        使用 Visual Studio SDK 创建可以扩展 Visual Studio IDE 的工具


        Microsoft 为单独工作或在小型团队中的专业开发人员提供了两种
选择,Visual Studio 2005 Professional Edition 和用于 Microsoft Office
系统的 Visual Studio 2005 工具。每种版本都在标准版的特性上进行了扩
展,包括用于远程服务程序开发和调试、SQL Server2005 开发的工具,以
及完整的、没有限制的开发环境。每种产品都可以单独购买或打包定购。
        专业开发人员喜欢自由的使用.NET Framework 2.0,它是一种稳
健的、功能齐备的开发环境,支持创建扩展 Visual Studio 集成开发环境的
工具。
        Visual Studio 2005 Professional Editions Features
        Visual Studio 2005 Professional with MSDN Premium Subsc
ription* Visual Studio 2005 Professional with MSDN Professional Su
bscription* Visual Studio 2005 Professional Visual Studio 2005 Tools
 for the Microsoft Office System
        Language support Visual Basic, C#, C++, J# Visual Basic,
C#, C++, J# Visual Basic, C#, C++, J# Visual Basic, C#
        Windows Forms Projects
        Web Projects
        Mobile Projects
        64 Bit support
        Enterprise templates
        Class Designer
        Server Explorer Full Full Full Full
        Excel, Word, InfoPath Projects
        Visio-based modeling
      Visual Source Safe
      SQL Server Developer Edition
      Operating Systems - Development and Test
      Servers - Development and Test
      Virtual PC
      Access Developer Extensions
      Office, InfoPath, OneNote, Visio, Project, MapPoint
   [编辑本段]
   Visual Studio 2008 概述
      Microsoft Visual Studio 2008 使开发人员能够快速创建高质量、
用户体验丰富而又紧密联系的应用程序,充分展示了 Microsoft 开发智能
客户端应用程序的构想。借助 Visual Studio 2008,采集和分析信息将变
得更为简单便捷,业务决策也会因此变得更为有效。任何规模的组织都可
以使用 Visual Studio 2008 快速创建能够利用 Windows Vista™ 和 20
07 Office system 的更安全、更易于管理并且更可靠的应用程序。
      Visual Studio 2008 在三个方面为开发人员提供了关键改进:
      1.快速的应用程序开发
      2.高效的团队协作
      3.突破性的用户体验
      Visual Studio 2008 提供了高级开发工具、调试功能、数据库功
能和创新功能,帮助在各种平台上快速创建当前最先进的应用程序。
      Visual Studio 2008 包括各种增强功能,例如可视化设计器(使
用 .NET Framework 3.5 加速开发)、对 Web 开发工具的大量改进,以
及能够加速开发和处理所有类型数据的语言增强功能。Visual Studio 200
8 为开发人员提供了所有相关的工具和框架支持,帮助创建引人注目的、
令人印象深刻并支持 AJAX 的 Web 应用程序。
      开发人员能够利用这些丰富的客户端和服务器端框架轻松构建以
客户为中心的 Web 应用程序,这些应用程序可以集成任何后端数据提供
程序、在任何当前浏览器内运行并完全访问 ASP.NET 应用程序服务和 M
icrosoft 平台。
       快速的应用程序开发
       为了帮助开发人员迅速创建先进的软件,Visual Studio 2008 提
供了改进的语言和数据功能,例如语言集成的查询 (LINQ),各个编程人员
可以利用这些功能更轻松地构建解决方案以分析和处理信息。
       Visual Studio 2008 还使开发人员能够从同一开发环境内创建面
向多个 .NET Framework 版本的应用程序。开发人员能够构建面向 .NET
Framework 2.0、3.0 或 3.5 的应用程序,意味他们可以在同一环境中支
持各种各样的项目。
       突破性的用户体验
       Visual Studio 2008 为开发人员提供了在最新平台上加速创建紧
密联系的应用程序的新工具,这些平台包括 Web、Windows Vista、Offic
e 2007、SQL Server 2008 和 Windows Server 2008。对于 Web,AS
P.NET AJAX 及其他新技术使开发人员能够迅速创建更高效、交互式更强
和更个性化的新一代 Web 体验。
       高效的团队协作
       Visual Studio 2008 提供了帮助开发团队改进协作的扩展的和改
进的服务项目,包括帮助将数据库专业人员和图形设计人员加入到开发流
程的工具。
       使用 Microsoft .NET Framework 3.5
       .NET Framework 提供了用于解决常见编程任务的构建基块(预
制的软件),从而能够快速构造具有出色的最终用户体验的紧密联系的应用
   在
程序。 .NET Framework 模型业务流程上有效构建的紧密联系的应用程
序有利于在异类环境中实现系统集成。
       Visual Studio 和 .NET Framework 的结合使用减少了对公用管
道代码的需要,从而缩短了开发时间并使开发人员能够集中精力解决业务
问题。
       .NET Framework 3.5 是在 .NET Framework 3.0 的基础上构
建的更高版本。得到增强的功能领域包括基类库、Windows workflow fou
ndation、Windows Communication Foundation、Windows Presentation
 Foundation 和 Windows CardSpace。
       开发人员使用 Visual Studio 2008 专业版能够:集成的单元测试
能够更有效的验证应用程序。 应用程序的单元测试能够帮助我们在开发过
程的早期轻松发现大量的问题。现在,Visual Studio 2008 专业版中集成
了单元测试功能,以前这个功能只在 Visual Studio Team System 产品中
提供。
       使用 Microsoft Office 系统开发用户熟悉的应用程序。Visual
studio 2008 专业版现在包括了 Visual Studio Tools For Office, 这意味
着我们的应用程序能够轻松融合世界上最流行的软件产品 -- -- Microsoft
 Office System。比如,开发人员能够直接将 ERP 的信息集成到 Office
Outlook 的任务面板,这样用户就能够更轻松的访问到商务决策。
       让您的用户能够使用到 Windows Mobile 的应用程序。Visual
Studio 2008 专业版让 Mobile 应用程序的开发变得更加简单。全新的设
备仿真器能够自动化测试场景,让您在近似于真实环境中进行应用程序的
开发,比如:信号衰弱或电量不足。Mobile 开发人员能够充分利用到一些
更高级的特性,比如:LINQ 和单元测试。开发人员现在能够扩展和整合用
户体验,将丰富的多媒体用户体验发布到任何能够访问 Internet 的设备
上。
     [编辑本段]
     系统要求
       1 支持的体系结构
       x86
       x64 (WOW)
       2. 支持的操作系统
       Microsoft Windows XP
       Microsoft Windows Server 2003 Service Pack 2
       Microsoft Windows Server 2008
       Windows Vista
     3. 硬件要求
     最低要求:1.6 GHz CPU,192 MB 内存,1024x768 显示器,
5400 RPM 硬盘
     建议配置:2.2 GHz 或更快的 CPU,384 MB 或更大的内存,1
280x1024 显示器,7200 RPM 或更快的硬盘
     在 Windows Vista 上:2.4 GHz CPU,768 MB 内存
     完全安装需要 1.3 GB 可用磁盘空间




  扩展阅读:
      1.http://www.microsoft.com/visualstudio/zh-cn/default.mspx
java


目录[隐藏]


       Java 简介
       JAVA-名字起源
       Java 语言特点
       Java 主要特性
       Java 相关技术
       Java 开源项目
       Java IDE
       Java 图书
       Java 简介
       JAVA-名字起源
       Java 语言特点
       Java 主要特性
       Java 相关技术
       Java 开源项目
       Java IDE
       Java 图书
          Java 版本历史
          Java 与 Internet
          Java 与电子商务
          Java 的八大基本数据类型及其包装类
          第一个 JAVA 程序 HelloWorld
          Java 新手入门很重要的几个基本概念
          Java 学习
   [编辑本段]
   Java 简介
       Java 是由 Sun Microsystems 公司于 1995 年 5 月推出的 Java 程
序设计语言(以下简称 Java 语言)和 Java 平台的总称。用 Java 实现的 H
otJava 浏览器(支持 Java applet)显示了 Java 的魅力:跨平台、动态的
Web、Internet 计算。从此,Java 被广泛接受并推动了 Web 的迅速发展,
常用的浏览器现在均支持 Java applet。另一方面,Java 技术也不断更新。
       Java 平台由 Java 虚拟机(Java Virtual Machine)和 Java 应用
编程接口(Application Programming Interface、简称 API)构成。Java
应用编程接口为 Java 应用提供了一个独立于操作系统的标准接口,可分为
基本部分和扩展部分。在硬件或操作系统平台上安装一个 Java 平台之后,
Java 应用程序就可运行。现在 Java 平台已经嵌入了几乎所有的操作系统。
这样 Java 程序可以只编译一次,就可以在各种系统中运行。Java 应用编
程接口已经从 1.1x 版发展到 1.2 版。目前常用的 Java 平台基于 Java1.4,
最近版本为 Java1.7。
       Java 分为三个体系 JavaSE(Java2 Platform Standard Edition,j
ava 平台标准版),JavaEE(Java 2 Platform,Enterprise Edition,java 平
台企业版),JavaME(Java 2 Platform Micro Edition,java 平台微型版)。
       2009 年 04 月 20 日,oracle(甲骨文)宣布收购 sun。
       1991 年,Sun 公司的 James Gosling。Bill Joe 等人,为电视、
控制烤面包机等家用电器的交互操作开发了一个 Oak(一种橡树的名字)
软件,他是 Java 的前身。当时,Oak 并没有引起人们的注意,直到 1994
年,随着互联网和 3W 的飞速发展,他们用 Java 编制了 HotJava 浏览器,
得到了 Sun 公司首席执行官 Scott McNealy 的支持,得以研发和发展。为
了促销和法律的原因,1995 年 Oak 更名为 Java。Java 的得名还有段小插
曲呢,一天,Java 小组成员正在喝咖啡时,议论给新语言起个什么名字的
问题,有人提议用 Java(Java 是印度尼西亚盛产咖啡的一个岛屿),这个
提议得到了其他成员的赞同,于是就采用 Java 来命名此新语言。很快 Jav
a 被工业界认可,许多大公司如 IBM Microsoft.DEC 等购买了 Java 的使用
权,并被美国杂志 PC Magazine 评为 1995 年十大优秀科技产品。从此,
开始了 Java 应用的新篇章。
     Java 的诞生时对传统计算机模式的挑战,对计算机软件开发和软
件产业都产生了深远的影响:
     (1)软件 4A 目标要求软件能达到任何人在任何地方在任何时间
对任何电子设备都能应用。这样能满足软件平台上互相操作,具有可伸缩
性和重要性并可即插即用等分布式计算模式的需求。
     (2)基于构建开发方法的崛起,引出了 CORBA 国际标准软件体
系结构和多层应用体系框架。在此基础上形成了 Java.2 平台和.NET 平台
两大派系,推动了整个 IT 业的发展。
     (3)对软件产业和工业企业都产生了深远的影响,软件从以开发
为中心转到了以服务为中心。中间提供商,构件提供商,服务器软件以及
咨询服务商出现。企业必须重塑自我,B2B 的电子商务将带动整个新经济
市场,使企业获得新的价值,新的增长,新的商机,新的管理。
     (4)对软件开发带来了新的革命,重视使用第三方构件集成,利
用平台的基础设施服务,实现开发各个阶段的重要技术,重视开发团队的
组织和文化理念,协作,创作,责任,诚信是人才的基本素质。
     总之,目前以看到了 Java 对信息时代的重要性,未来还会不断发
展,Java 在应用方面将会有更广阔的前景。
  [编辑本段]
  JAVA-名字起源
     Java 自 1995 诞生,至今已经 14 年历史。Java 的名字的来源:J
ava 是印度尼西亚爪哇岛的英文名称,因盛产咖啡而闻名。Java 语言中的
许多库类名称,多与咖啡有关,如 JavaBeans(咖啡豆)、NetBeans(网络豆)
以及 ObjectBeans (对象豆)等等。SUN 和 JAVA 的标识也正是一杯正冒着
热气的咖啡。
     据 James Gosling 回忆,最初这个为 TV 机顶盒所设计的语言在 S
un 内部一直称为 Green 项目。我们的新语言需要一个名字。Gosling 注意
到自己办公室外一棵茂密的橡树 Oak,这是一种在硅谷很常见的树。所以
他将这个新语言命名为 Oak。但 Oak 是另外一个注册公司的名字。这个名
字不可能再用了。
     在命名征集会上,大家提出了很多名字。最后按大家的评选次序,
将十几个名字排列成表,上报给商标律师。排在第一位的是 Silk(丝绸)。尽
管大家都喜欢这个名字,但遭到 James Gosling 的坚决反对。排在第二和
第三的都没有通过律师这一关。只有排在第四位的名字、得到了所有人的
认可和律师的通过,这个名字就是 Java。
     10 多年来,Java 就像爪哇咖啡一样誉满全球,成为实至名归的企
业级应用平台的霸主。而 Java 语言也如同咖啡一般醇香动人。
  [编辑本段]
  Java 语言特点
     Java 是一种简单的,面向对象的,分布式的,解释型的,健壮安
全的,结构中立的,可移植的,性能优异、多线程的动态语言。
     当 1995 年 SUN 推出 Java 语言之后,全世界的目光都被这个神奇
的语言所吸引。那么 Java 到底有何神奇之处呢?
     Java 语言其实最早诞生于 1991 年,起初被称为 OAK 语言,是 S
UN 公司为一些消费性电子产品而设计的一个通用环境。他们最初的目的只
是为了开发一种独立于平台的软件技术,而且在网络出现之前,OAK 可以
说是默默无闻,甚至差点夭折。但是,网络的出现改变了 OAK 的命运。
     在 Java 出现以前,Internet 上的信息内容都是一些乏味死板的 H
TML 文档。这对于那些迷恋于 WEB 浏览的人们来说简直不可容忍。他们
迫切希望能在 WEB 中看到一些交互式的内容,开发人员也极希望能够在 W
EB 上创建一类无需考虑软硬件平台就可以执行的应用程序,当然这些程序
还要有极大的安全保障。对于用户的这种要求,传统的编程语言显得无能
为力。SUN 的工程师敏锐地察觉到了这一点,从 1994 年起,他们开始将 O
AK 技术应用于 WEB 上,并且开发出了 HotJava 的第一个版本。当 SUN
公司 1995 年正式以 Java 这个名字推出的时候,几乎所有的 WEB 开发人
员都心生感叹:噢,这正是我想要的!于是 Java 成了一颗耀眼的明星,丑
小鸭一下子变成了白天鹅。
  [编辑本段]
  Java 主要特性
       1、Java 语言是简单的。Java 语言的语法与 C 语言和 C++语言很
接近,使得大多数程序员很容易学习和使用 Java。另一方面,Java 丢弃了
C++ 中很少使用的、很难理解的、令人迷惑的那些特性,如操作符重载、
多继承、自动的强制类型转换。特别地,Java 语言不使用指针,并提供了
自动的废料收集,使得程序员不必为内存管理而担忧。
       2、Java 语言是一个面向对象的。Java 语言提供类、接口和继承
等原语,为了简单起见,只支持类之间的单继承,但支持接口之间的多继
承,并支持类与接口之间的实现机制(关键字为 implements)。Java 语言
全面支持动态绑定,而 C++ 语言只对虚函数使用动态绑定。总之,Java
语言是一个纯的面向对象程序设计语言。
        3、Java 语言是分布式的。Java 语言支持 Internet 应用的开发,
在基本的 Java 应用编程接口中有一个网络应用编程接口(java.net),它提
供了用于网络应用编程的类库,包括 URL、URLConnection、Socket、 S
erverSocket 等。Java 的 RMI(远程方法激活)机制也是开发分布式应用的重
要手段。
        4、Java 语言是健壮的。Java 的强类型机制、异常处理、废料
的自动收集等是 Java 程序健壮性的重要保证。对指针的丢弃是 Java 的明
智选择。Java 的安全检查机制使得 Java 更具健壮性。
        5、Java 语言是安全的。Java 通常被用在网络环境中,为此,J
ava 提供了一个安全机制以防恶意代码的攻击。除了 Java 语言具有的许多
安全特性以外,Java 对通过网络下载的类具有一个安全防范机制(类 Clas
sLoader),如分配不同的名字空间以防替代本地的同名类、字节代码检查,
并提供安全管理机制(类 SecurityManager)让 Java 应用设置安全哨兵。
       6、Java 语言是体系结构中立的。Java 程序(后缀为 java 的文件)
在 Java 平台上被编译为体系结构中立的字节码格式(后缀为 class 的文件),
 然后可以在实现这个 Java 平台的任何系统中运行。这种途径适合于异构
的网络环境和软件的分发。
         7、Java 语言是可移植的。这种可移植性来源于体系结构中立
性,另外,Java 还严格规定了各个基本数据类型的长度。Java 系统本身也
具有很强的可移植性,Java 编译器是用 Java 实现的,Java 的运行环境是
用 ANSI C 实现的。
         8、Java 语言是解释型的。如前所述,Java 程序在 Java 平台
上被编译为字节码格式, 然后可以在实现这个 Java 平台的任何系统中运
行。在运行时,Java 平台中的 Java 解释器对这些字节码进行解释执行,
执行过程中需要的类在联接阶段被载入到运行环境中。
         9、Java 是高性能的。与那些解释型的高级脚本语言相比,Jav
a 的确是高性能的。事实上,Java 的运行速度随着 JIT(Just-In-Time)编译
器技术的发展越来越接近于 C++。
         10、Java 语言是多线程的。在 Java 语言中,线程是一种特殊
的对象,它必须由 Thread 类或其子(孙)类来创建。通常有两种方法来创
建线程:其一,使用型构为 Thread(Runnable) 的构造子将一个实现了 Ru
nnable 接口的对象包装成一个线程,其二,从 Thread 类派生出子类并重写
run 方法,使用该子类创建的对象即为线程。值得注意的是 Thread 类已经
实现了 Runnable 接口,因此,任何一个线程均有它的 run 方法,而 run 方
法中包含了线程所要运行的代码。线程的 活动由一组方法来控制。 Java
语言支持多个线程的同时执行,并提供多线程之间的同步机制(关键字为 s
ynchronized)。
         11、Java 语言是动态的。Java 语言的设计目标之一是适应于动
态变化的环境。Java 程序需要的类能够动态地被载入到运行环境,也可以
通过网络来载入所需要的类。这也有利于软件的升级。另外,Java 中的类
有一个运行时刻的表示,能进行运行时刻的类型检查。
      Java 语言的优良特性使得 Java 应用具有无比的健壮性和可靠性,
这也减少了应用系统的维护费用。Java 对对象技术的全面支持和 Java 平
台内嵌的 API 能缩短应用系统的开发时间并降低成本。Java 的编译一次,
到处可运行的特性使得它能够提供一个随处可用的开放结构和在多平台之
间传递信息的低成本方式。特别是 Java 企业应用编程接口(Java Enterpr
ise APIs)为企业计算及电子商务应用系统提供了有关技术和丰富的类库。


   [编辑本段]
   Java 相关技术
      1、JDBC(Java Database Connectivity)提供连接各种关系数
据库的统一接口,可以为多种关系数据库提供统一访问,它由一组用 Java
语言编写的类和接口组成。JDBC 为工具/数据库开发人员提供了一个标准
的 API,据此可以构建更高级的工具和接口,使数据库开发人员能够用纯
Java API 编写数据库应用程序,同时,JDBC 也是个商标名。
      2、EJB(Enterprise JavaBeans)使得开发者方便地创建、部署和
管理跨平台的基于组件的企业应用。
      3、Java RMI(Java Remote Method Invocation)用来开发分布式
Java 应用程序。一个 Java 对象的方法能被远程 Java 虚拟机调用。这样,
远程方法激活可以发生在对等的两端,也可以发生在客户端和服务器之间,
只要双方的应用程序都是用 Java 写的。
      4、Java IDL(Java Interface Definition Language) 提供与 COR
BA(Common Object Request Broker Architecture)的无缝的互操作性。
这使得 Java 能集成异构的商务信息资源。
      5、JNDI(Java Naming and Directory Interface)提供从 Java 平
台到的统一的无缝的连接。这个接口屏蔽了企业网络所使用的各种命名和
目录服务。
      6、JMAPI(Java Management API)为异构网络上系统、网络
和服务管理的开发提供一整套丰富的对象和方法。
      7、JMS(Java Message Service)提供企业消息服务,如可靠的消
息队列、发布和订阅通信、以及有关推拉(Push/Pull)技术的各个方面。
      8、JTS(Java transaction Service)提供存取事务处理资源的开放
标准,这些事务处理资源包括事务处理应用程序、事务处理管理及监控。
      在 Java 技术中,值得关注的还有 JavaBeans,它是一个开放的标
准的组件体系结构,它独立于平台,但使用 Java 语言。一个 JavaBean 是
一个满足 JavaBeans 规范的 Java 类,通常定义了一个现实世界的事物或
概念。一个 JavaBean 的主要特征包括属性、方法和事件。通常,在一个支
持 JavaBeans 规范的开发环境(如 Sun Java Studio 和 IBM VisualAge
for Java)中,可以可视地操作 JavaBean,也可以使用 JavaBean 构造出
新的 JavaBean。JavaBean 的优势还在于 Java 带来的可移植性。现在,E
JB (Enterprise JavaBeans) 将 JavaBean 概念扩展到 Java 服务端组件体
系结构,这个模型支持多层的分布式对象应用。除了 JavaBeans,典型的
组件体系结构还有 DCOM 和 CORBA,关于这些组件体系结构的深入讨论
超出了本书的范围。
      java-参见
      计算机科学课程列表
      JNI(Java Native Interface)Java 本地接口。
   [编辑本段]
   Java 开源项目
        Spring Framework 【Java 开源 J2EE 框架】
      Spring 是一个解决了许多在 J2EE 开发中常见的问题的强大框
架。 Spring 提供了管理业务对象的一致方法并且鼓励了注入对接口编程而
不是对类编程的良好习惯。Spring 的架构基础是基于使用 JavaBean 属性
的 Inversion of Control 容器。然而,这仅仅是完整图景中的一部分:Spr
ing 在使用 IoC 容器作为构建完关注所有架构层的完整解决方案方面是独一
无二的。 Spring 提供了唯一的数据访问抽象,包括简单和有效率的 JDBC
框架,极大的改进了效率并且减少了可能的错误。Spring 的数据访问架构
还集成了 Hibernate 和其他 O/R mapping 解决方案。Spring 还提供了唯一
的事务管理抽象,它能够在各种底层事务管理技术,例如 JTA 或者 JDBC
事务提供一个一致的编程模型。 Spring 提供了一个用标准 Java 语言编写
的 AOP 框架,它给 POJOs 提供了声明式的事务管理和其他企业事务--如果
你需要--还能实现你自己的 aspects。这个框架足够强大,使得应用程序能
够抛开 EJB 的复杂性,同时享受着和传统 EJB 相关的关键服务。Spring 还
                                 【SpringIDE:
提供了可以和 IoC 容器集成的强大而灵活的 MVC Web 框架。
Eclipse 平台下一个辅助开发插件】.
         WebWork 【Java 开源 Web 框架】
         WebWork 是由 OpenSymphony 组织开发的,致力于组件化和
代码重用的拉出式 MVC 模式 J2EE Web 框架。WebWork 目前最新版本是
2.1,现在的 WebWork2.x 前身是 Rickard Oberg 开发的 WebWork,但现
在 WebWork 已经被拆分成了 Xwork1 和 WebWork2 两个项目。 Xwork 简
洁、灵活功能强大,它是一个标准的 Command 模式实现,并且完全从 we
b 层脱离出来。 Xwork 提供了很多核心功能:前端拦截机(interceptor),
运行时表单属性验证,类型转换,强大的表达式语言(OGNL – the Obje
ct Graph Notation Language),IoC(Inversion of Control 倒置控制)容
器等。 WebWork2 建立在 Xwork 之上,处理 HTTP 的响应和请求。Web
Work2 使用 ServletDispatcher 将 HTTP 请求的变成 Action(业务层 Action
类), session(会话)application(应用程序)范围的映射,request 请求
参数映射。WebWork2 支持多视图表示,视图部分可以使用 JSP, Velocity,
FreeMarker, JasperReports,XML 等。在 WebWork2.2 中添加了对 AJA
X 的支持,这支持是构建在 DWR 与 Dojo 这两个框架的基础之上.【Eclips
eWork:用于 WebWork 辅助开发的一个 Eclipse 插件】
         Struts 【Java 开源 Web 框架】
       Struts 是一个基于 Sun J2EE 平台的 MVC 框架,主要是采用 Se
rvlet 和 JSP 技术来实现的。由于 Struts 能充分满足应用开发的需求,简单
易用,敏捷迅速,在过去的一年中颇受关注。Struts 把 Servlet、JSP、自
定义标签和信息资源(message resources)整合到一个统一的框架中,开发
人员利用其进行开发时不用再自己编码实现全套 MVC 模式,极大的节省了
时间,所以说 Struts 是一个非常不错的应用框架。【StrutsIDE:用于 Strut
s 辅助开发的一个 Eclipse 插件】
         Hibernate 【Java 开源 持久层框架】
       Hibernate 是一个开放源代码的对象关系映射框架,它对 JDBC
进行了非常轻量级的对象封装,使得 Java 程序员可以随心所欲的使用对象
编程思维来操纵数据库。 Hibernate 可以应用在任何使用 JDBC 的场合,
既可以在 Java 的客户端程序实用,也可以在 Servlet/JSP 的 Web 应用中使
用,最具革命意义的是,Hibernate 可以在应用 EJB 的 J2EE 架构中取代 C
MP,完成数据持久化的重任。Eclipse 平台下的 Hibernate 辅助开发工具:
【Hibernate Synchronizer】【MiddlegenIDE】
         Quartz 【Java 开源 Job 调度】
       Quartz 是 OpenSymphony 开源组织在 Job scheduling 领域又一
个开源项目,它可以与 J2EE 与 J2SE 应用程序相结合也可以单独使用。Qu
artz 可以用来创建简单或为运行十个,百个,甚至是好几万个 Jobs 这样复
杂的日程序表。Jobs 可以做成标准的 Java 组件或 EJBs。Quartz 的最新
版本为 Quartz 1.5.0。
         Velocity 【Java 开源 模板引擎】
       Velocity 是一个基于 java 的模板引擎(template engine)。它允
许任何人仅仅简单的使用模板语言(template language)来引用由 java 代
码定义的对象。当 Velocity 应用于 web 开发时,界面设计人员可以和 java
程序开发人员同步开发一个遵循 MVC 架构的 web 站点,也就是说,页面
设计人员可以只关注页面的显示效果,而由 java 程序开发人员关注业务逻
辑编码。Velocity 将 java 代码从 web 页面中分离出来,这样为 web 站点的
长期维护提供了便利,同时也为我们在 JSP 和 PHP 之外又提供了一种可选
的方案。 Velocity 的能力远不止 web 站点开发这个领域,例如,它可以从
模板(template)产生 SQL 和 PostScript、XML,它也可以被当作一个独
立工具来产生源代码和报告,或者作为其他系统的集成组件使用。Velocity
也可以为 Turbine web 开发架构提供模板服务(template service)。Velo
city+Turbine 提供一个模板服务的方式允许一个 web 应用以一个真正的 MV
C 模型进行开发。 【VeloEclipse :Velocity 在 Eclipse 平台下的一个辅助
开发插件】
      IBATIS 【Java 开源 持久层框架】
      使用 ibatis 提供的 ORM 机制,对业务逻辑实现人员而言,面对的
是纯粹的 Java 对象, 这一层与通过 Hibernate 实现 ORM 而言基本一致,
而对于具体的数据操作,Hibernate 会自动生成 SQL 语句,而 ibatis 则要
求开发者编写具体的 SQL 语句。相对 Hibernate 等 ―全自动‖ORM 机制而
言,ibatis 以 SQL 开发的工作量和数据库移植性上的让步,为系统设计提
供了更大的自由空间。作为―全自动‖ORM 实现的一种有益补充,ibatis 的
出现显 得别具意义。
      Compiere ERP&CRM 【Java 开源 ERP 与 CRM 系统】
      Compiere ERP&CRM 为全球范围内的中小型企业提供综合型解
决方案,覆盖从客户管理、供应链到财务管理的全部领域,支持多组织、
多币种、多会计模式、多成本计算、多语种、多税制等国际化特性。易于
安装、易于实施、易于使用。只需要短短几个小时,您就可以使用申购-采
购-发票-付款、报价-订单-发票-收款、产品与定价、资产管理、客户关系、
供应商关系、员工关系、经营业绩分析等强大功能了。
        Roller Weblogger 【Java 开源 Blog 博客】
      这个 weblogging 设计得比较精巧,源代码是很好的学习资料。它
支持 weblogging 应有的特性如:评论功能,所见即所得 HTML 编辑,Trac
kBack,提供页面模板,RSS syndication,blogroll 管理和提供一个 XML-
RPC 接口。
        Eclipse 【Java 开源 开发工具】
      Eclipse 平台是 IBM 向开放源码社区捐赠的开发框架,它之所以出
名并不是因为 IBM 宣称投入开发的资金总数 —4 千万美元,而是因为如此
巨大的投入所带来的成果:一个成熟的、精心设计的以及可扩 展的体系结
构。
      NetBeans 【Java 开源 开发工具】
      NetBeans IDE 是一个为软件开发者提供的自由、开源的集成开
发环境。您可以从中获得您所需要的所有工具,用 Java、C/C++ 甚至是
Ruby 来创建专业的桌面应用程序、企业应用程序、web 和移动应用程序。
此 IDE 可以在多种平台上运行,包括 Windows、Linux、Mac OS X 以
及 Solaris;它易于安装且非常方便使用。
        XPlanner 【Java 开源 项目管理】
       XPlanner 一个基于 Web 的 XP 团队计划和跟踪工具。XP 独特的
开发概念如 iteration、user stories 等,XPlanner 都提供了相对应的的管理
工具,XPlanner 支持 XP 开发流程,并解决利用 XP 思想来开发项目所碰
到的问题。 XPlanner 特点包括:简单的模型规划,虚拟笔记卡(Virtual n
ote cards),iterations、user stories 与工作记录的追踪,未完成 stories 将
自动迭代,工作时间追踪,生成团队效率,个人工时报表, SOAP 界面支
持。
        HSQLDB 【Java 开源 DBMS 数据库】
       HSQLDB(Hypersonic SQL)是纯 Java 开发的关系型数据库,并提
供 JDBC 驱动存取数据。支持 ANSI-92 标准 SQL 语法。而且他占的空间
很小。大约只有 160K,拥有快速的数据库引擎。
        Liferay 【Java 开源 Portal 门户】
       代表了完整的 J2EE 应用,使用了 Web、EJB 以及 JMS 等技术,
特别是其前台界面部分使用 Struts 框架技术,基于 XML 的 portlet 配置文
件可以自由地动态扩展,使用了 Web Services 来支持一些远程信息的获
取,使用 Apahce Lucene 实现全文检索功能。
        JetSpeed 【Java 开源 Portal 门户】
       Jetspeed 是一个开放源代码的企业信息门户(EIP)的实现,使用的
技术是 Java 和 XML。用户可以使用浏览器,支持 WAP 协议的手机或者其
它的设备访问 Jetspeed 架设的信息门户获取信息。Jetspeed 扮演着信息集
中器的角色,它能够把信息集中起来并且很容易地提供给用户。
        JOnAS 【Java 开源 J2EE 服务器】
                               在
       JOnAS 是一个开放源代码的 J2EE 实现, ObjectWeb 协会中开
发。整合了 Tomcat 或 Jetty 成为它的 Web 容器,以确保符合 Servlet 2.3
和 JSP 1.2 规范。JOnAS 服务器依赖或实现以下的 Java API:JCA、JD
BC、JTA 、JMS、JMX、JNDI、JAAS、JavaMail 。
         JFox3.0 【Java 开源 J2EE 服务器】
           JFox 是 Open Source Java EE Application Server,致力于
提供轻量级的 Java EE 应用服务器,从 3.0 开始,JFox 提供了一个支持模
块化的 MVC 框架,以简化 EJB 以及 Web 应用的开发! 如果您正在寻找一
个简单、轻量、高效、完善的 Java EE 开发平台,那么 JFox 正是您需要
的。
     [编辑本段]
     Java IDE
         当今最流行的是 Eclipse,Myeclipse,Jbuilder2006,Jdeveloper,Net
beans 等。
     [编辑本段]
     Java 图书


         Java 编程思想(第 4 版)


     作   者: (美)埃克尔 著,陈昊鹏 译




                        Java 编程思想(第 4 版)
     出 版 社: 机械工业出版社
         出版时间: 2007-6-1 字      数: 版    次: 1 页    数: 880 印刷
时间: 2007/06/01 开      本: 印    次: 纸     张: 胶版纸 I S B N :
9787111213826 包   装: 平装


      作者简介


   Bruce Eckel 是 MindView 公司的总裁,该公司向客户提供软件咨询和
培训。他是 C++标准委员会拥有表决权的成员之一,拥有应用物理学学士
和计算机工程硕士学位。除本书外,他还是《C++编程思想》的作者,并与
人合著了《C++编程思想 第 2 卷》(这两本书的英文影印版及中文版均已
由机械工业出版社引进出版)及其他著作。他已经发表了 150 多篇论文,
还经常参加世界各地的研讨会并进行演讲。
   [编辑本段]
   Java 版本历史
       1995 年 5 月 23 日,Java 语言诞生
       1996 年 1 月,第一个 JDK-JDK1.0 诞生
       1996 年 4 月, 个最主要的操作系统供应商申明将在其产品中嵌
                  10
入 JAVA 技术
       1996 年 9 月,约 8.3 万个网页应用了 JAVA 技术来制作
       1997 年 2 月 18 日,JDK1.1 发布
       1997 年 4 月 2 日,JavaOne 会议召开,参与者逾一万人,创当时
全球同类会议规模之纪录
       1997 年 9 月,JavaDeveloperConnection 社区成员超过十万
       1998 年 2 月,JDK1.1 被下载超过 2,000,000 次
       1998 年 12 月 8 日,JAVA2 企业平台 J2EE 发布
       1999 年 6 月,SUN 公司发布 Java 的三个版本:标准版(J2SE)、
企业版(J2EE)和微型版(J2ME)
       2000 年 5 月 8 日,JDK1.3 发布
       2000 年 5 月 29 日,JDK1.4 发布
       2001 年 6 月 5 日,NOKIA 宣布,到 2003 年将出售 1 亿部支持 J
ava 的手机
        2001 年 9 月 24 日,J2EE1.3 发布
        2002 年 2 月 26 日,J2SE1.4 发布,自此 Java 的计算能力有了大
幅提升
        2004 年 9 月 30 日 18:00PM,J2SE1.5 发布,成为 Java 语言发
展史上的又一里程碑。为了表示该版本的重要性,J2SE1.5 更名为 Java S
E 5.0
        2005 年 6 月,JavaOne 大会召开,SUN 公司公开 Java SE 6。
                            :
此时,Java 的各种版本已经更名,以取消其中的数字―2‖ J2EE 更名为 Jav
a EE,J2SE 更名为 Java SE,J2ME 更名为 Java ME
        2006 年 12 月,SUN 公司发布 JRE6.0
        目前 JDK7.0 已经在研发中.
   [编辑本段]
   Java 与 Internet
        我们知道,早先的 www 仅可以传送文本和图片,Java 的出现实
现了互动的页面,是一次伟大的革命。
        Java 并不是为 Internet、www 而设计的,它也可以用来编写独立
的应用程序。Java 是一种面向对象语言,Java 语言类似于 C++语言,所以
已熟练掌握 C++语言的编程人员,再学习 Java 语言就容易得多!Java 程
序需要编译,它被放置在 Internet 服务器上,当用户访问服务器时,Java
程序被下载到本地的用户机上,由浏览器解释运行。实际上有两种 Java 程
序:一种 Java 应用程序是一个完整的程序,如 Web 浏览器。另一种 Java
小应用程序是运行于 Web 浏览器中的一个程序。
        Java 程序和它的浏览器 HotJava,提供了可让你的浏览器运行程
序的方法。你能从你的浏览器里直接播放声音,你还能播放页面里的动画,
Java 还能告诉你的浏览器怎样处理新的类型文件。当我们能在 2400 baud
线上传输视频图象时,HotJava 将能显示这些视频。
   [编辑本段]
   Java 与电子商务
        电子商务是当今的热门话题,然而传统的编程语言难以胜任电子
商务系统,电子商务要求程序代码具有基本的要求:安全 、可靠、同时要
求能与运行于不同平台的机器的全世界客户开展业务。Java 以其强安全性、
平台无关性、硬件结构无关性、语言简洁同时面向对象,在网络编程语言
中占据无可比拟的优势,成为实现电子商务系统的首选语言。
  [编辑本段]
  Java 的八大基本数据类型及其包装类
     原始类型 包装类 原始类型所占的字节数
     short Short 2 个字节
     int Integer 4 个字节
     long Long 8 个字节
     float Float 4 个字节
     double Double 8 个字节
     byte Byte 1 个字节
     char Character 2 个字节
     boolean Boolean 这个试编译环境而定
  [编辑本段]
  第一个 JAVA 程序 HelloWorld
     //文件名 HelloWorld.java
     //声明一个类 public class HelloWorld {
     //声明一个方法
     public static void main(String[] args){ //程序的入口
     //输出
     System.out.println("hello world!");
     }
     }
     //例子
     package Text;
     public class Test{
     public static void main(String[] args){
       short d = 12; //短整型
       System.out.println(d); //输出 d
       long c = 144L; //长整型,要加 l
       System.out.println(c); //输出 c
       int z = 15; //整型
       System.out.println(z); //输出 z
       char e = '我'; //字符型"我"
       System.out.println(e);//输出 e
       }
       }
     [编辑本段]
     Java 新手入门很重要的几个基本概念
       [1][2][3]
                   final 类:为防止他人从你的类上派生新类,此类是不可扩展
的。
       动态调用比静态调用花费的时间要长。
       抽象类:规定一个或多个抽象方法的类本身必须定义为 abstract。
       例: public abstract string getDescripition
       Java 中的每一个类都是从 Object 类扩展而来的。
       object 类中的 equal 和 toString 方法。
       equal 用于测试一个对象是否同另一个对象相等。
       toString 返回一个代表该对象的字符串,几乎每一个类都会重载该
方法,以便返回当前状态的正确表示。
       (toString 方法是一个很重要的方法)
       通用编程:任何类类型的所有值都可以同 object 类型的变量来代
替。
       数组列表:ArrayList 动态数组列表,是一个类库,定义在 java.ui
tl 包中,可自动调节数组的大小。
       class 类 object 类中的 getclass 方法返回 class 类型的一个实例,
程序启动时包含在 main 方法的类会被加载,虚拟机要加载他需要的所有类,
每一个加载的类都要加载它需要的类。
     就业方向:
     可以从事 JSP 网站开发、Java 编程、Java 游戏开发、Java 桌面
程序设计,以及其他与 Java 语言编程相关的工作。可进入电信、银行、保
险专业软件开发公司等从事软件设计和开发工作。
     Java 与 C/C++的差异
     熟悉 C 语言和 C++语言的读者一定想搞清楚这个问题,实际上,Jav
a 确实是从 C 语言和 C++语言继承了许多成份,甚至可以将 Java 看成是类 C
语言发展和衍生的产物.比如 Java 语言的变量声明,操作符形式,参数传递,
流程控制等方面和 C 语言,C++语言完全相同.尽管如此,Java 和 C 语言,C++
语言又有许多差别,主要表现在如下几个方面:
     (1) Java 中对内存的分配是动态的,它采用面向对象的机制,采用
运算符 new 为每个对象分配内存空间,而且,实际内存还会随程序运行情况
而改变.程序运行中,每个, Java 系统自动对内存进行扫描,对长期不用的空
间作为‖垃圾‖进行收集,使得系统资源得到更充分地利用 .按照这种机制,程
序员不必关注内存管理问题,这使 Java 程序的编写变得简单明了,并且避免
了了由于内存管理方面的差错而导致系统出问题.而 C 语言通过 malloc()和
free()这两个库函数来分别实现分配内在和释放内存 空间的,C++语言中则
通过运算符 new 和 delete 来分配和释放内存.在 C 和 C++这仲机制中,程序
员必须非常仔细地处理内存的使用问题 .一方面,如果对己释放的内存再作
释放或者对未曾分配的内存作释放,都会造成死机;而另一方面,如果对长期
不用的或不再使用的内存不释放 ,则会浪费系统资源,甚至因此造成资源枯
竭.
     (2) Java 不在所有类之外定义全局变量,而是在某个类中定义一种
公用静态的变量来完成全局变量的功能.
     (3) Java 不用 goto 语句,而是用 try-catch-finally 异常处理语句来
代替 goto 语句处理出错的功能.
     (4) Java 不支持头文件,面 C 和 C++语言中都用头文件来定义类的
原型,全局变量,库函数等,这种采用头文件的结构使得系统的运行维护相当
繁杂.
      (5) Java 不支持宏定义,而是使用关键字 final 来定义常量,在 C++
中则采用宏定义来实现常量定义,这不得于程序的可读性.
      (6) Java 对每种数据类型都分配固定长度.比如,在 Java 中,int 类型
总是 32 位的,而在 C 和 C++中,对于不同的平台,同一个数据类型分配不同的
字节数,同样是 int 类型,在 PC 机中为二字节即 16 位,而在 VAX-11 中,则为 3
2 位.这使得 C 语言造成不可移植性,而 Java 则具有跨平台性(平台无关性).
      (7) 类型转换不同.在 C 和 C++中,可通过指针进行任意的类型转换,
常常带来不安全性,而在 Java 中,运行时系统对对象的处理要进行类型相容
性检查,以防止不安全的转换.
      (8) 结构和联合的处理.在 C 和 C++中,结构和联合的所有成员均为
公有,这就带来了安全性问题,而在 Java 中根本就不包含结构和联合,所有的
内容都封装在类里面.
      (9) Java 不再使用指针.指针是 C 和 C++中最灵活,也最容易产生
错误的数据类型.由指针所进行的内存地址操作常会造成不可预知的错误 ,
同时通过指针对某个内存地址进行显式类型转换后,可以访问一个 C++中的
私有成员,从而破坏安全性.而 Java 对指针进行完全地控制,程序员不能直接
进行任何指针操作.
   [编辑本段]
   Java 学习
      Java - 近 10 年来计算机软件发展过程中的传奇,其在众多开发
者心中的地位就如―屠龙刀‖ ―倚天剑‖
            、     。
      Java 是个平台,我只想说说我对学好 Java 的一点看法,希望对
初学者有所帮助。
      1. 思考一下
      学习 Java 之前,先别急,静下心来好好想想:
      1)你对学习 Java 是否有兴趣?
      2)你是否能静下心来坚持不懈地学习?
      嗯,这是个容易但又绝对不应该忽略的问题,你确信自己对 Java
感兴趣、而且又有吃苦的准备,那你才可能学好 Java!如果具备这两点条件,
就请继续往下看……
      2. 准备一下
      请不要把你的学习 Java 之路和其它计算机技术分开看待,技术的
联系往往是千丝万缕的,你应该掌握一些学习 Java 所涉及的基础知识,对
于―CLASSPATH 要怎么设置啊‖ ―跪求 JDK 下载地址‖等等问题,你不该问,
                  、
因为 Internet 上太多答案了,甚至换个角度说,你是不是还不适合直接学习
编程?
      1)买本 Java 学习用书。
      JDK 6 正式版刚刚推出,市面上你暂时买不到 JDK6 的书籍,但
我仍推荐你买一本适合入门的、较新 JDK 版本的 Java 书籍,那么,你现
在选择一本讲述 JDK5 的入门书籍还是有条件的。我可以推荐一些入门书,
                              《Th
但是我不打算这么做,因为合我口味的,不一定适合你。但无论如何,
ing InJava》绝对不应该作为你入门 Java 的第一本书籍!
      记住,网络上学习 Java 的资源很多,但基本不够系统,拥有一本
Java 入门书籍,是你系统学习 Java 的基础。
      2)准备 Java 学习环境。
      准备你的学习环境,很简单,安装 JDK6,然后用类似 UltraEdit、
EditPlus 的文本编辑器配置你的学习环境,Internet 上有很多关于如何配置
的文章。初学 Java,不建议用 IDE 工具,通过一行行的敲代码,你会碰到
很多问题,只有这样,你才能学会怎样解决问题,并加深自己对 Java 的理
解。
      准备好后,开始进入激动人心的 Java 学习里程吧!
      3. Java 基础学习之路
      学习 Java 的过程虽然辛苦些,但又是处处有精彩!学习过程中的心
态一定要保持专一,网上关于语言间的―PK‖到处都是,别被浮躁影响!认准
了 Java,你就坚持!克服心魔,恒心最终会给你回报的。
      Java 的体系分为 Java SE、Java EE 和 Java ME(JDK 5.0 以前
分别叫 J2SE、J2EE 和 J2ME),Java 的敲门砖就是 Java SE 了,也就是
你要入门学习的内容,不论你日后是选择哪个体系领域作为发展方向,你
都得从 Java SE 起步。
       学习 Java SE,打好 Java 基础;如果想学 Java EE(对不起,我不
了解 JavaME,所以我无法涉及 JavaME 的相关内容),对于 AWT、Swing
是否要学习呢,我个人是觉得还是要知道其所以然的,特别是其事件处理
模式,我强烈建议初学者一定要弄清楚,其他具体的开发就不一定要全面
掌握了,毕竟 AWT、Swing 方面的内容足够用几本大部头的书才能描述详
尽;当然,如果你的工作就是做 AWT、Swing 开发,那就另当别论了。
       I/O、Thread 都是基础之一。
       4. Java EE 学习之路
       学习了 Java SE,还只是完成―万里长征‖的第一步。
       接下来选择学习 Java EE 或是 Java ME(或者你还想不断深入学
习 JavaSE,只要你喜欢,你可以一直深入下去,就像前面所说的,我不会
讲到 Java ME 的学习);估计选择 Java EE 方面的学习者会多一些,JavaE
E 所涉及技术非常多,考虑到初学者的接受程度,我会尽量从最常用的角度
来介绍。
       学习 Java EE,在开发环境上不建议再用文本编辑器,我感觉 Ne
tBeans 5.5(目前最高正式版本)很适合初学者,我个人也很喜欢 NetBeans,
如果你喜欢用别的 IDE 如 Eclipse,都没问题,看自己喜欢吧。
       4.1 学习 JSP/Servlet
       Java EE 最高版本目前是 5.0 版本。
       在 JavaEE 中,首先要学习 JSP/Servlet(结合 Tomcat、MySQL)
技术,建议 JSP1.2/2.X 的知识都要掌握,毕竟现在很多的在用系统都还是
基于 JSP1.2,学习 JSP,还必须掌握一些外延技术,如:你还得掌握 HT
ML 基础知识,最好再掌握些 JavaScript(目前正火的 AJAX 技术之一)、CS
S 的技术,而了解 XML 是必不可少的(至少描述性配置信息是通过 XML 来
描述的)。在学习 JSP/Servlet 过程中,应该结合学习 JDBC、数据库开发技
术,毕竟绝大多数 Java Web 项目都是和数据库紧密结合的。
       4.2 学习数据库开发技术
       这里我想重点说一下数据库开发技术,数据库技术是做业务系统
必备技能,JavaWeb 开发人员最低程度都应该掌握 SQL 语句的使用!数据
库技术大体可分为 DBA 技术和数据库开发技术,对于开发而言,应侧重数
据库开发技术,而数据库基本操作,也是要掌握的。常用数据库有 DB2、O
racle、SQLServer、MySQL 等,你可以结合实际需要,选择一种数据库,
并花大力气掌握其开发技术。
       记住,学习数据库开发技术和学习 Java EE,是相对独立的,你
可以在学习 JSP/Servlet 的同时,学习数据库开发技术(如 SQL 语句等),或
者先学数据库开发技术,之后再学习 JSP/Servlet。
      4.3 学习 Java EE 其它开发技术
       再往后,可以学习一些 EJB 的知识,目前 EJB 最新版本是 3.0,
其和前面的 2.X 版本相比,有较大不同,考虑到目前 EJB2.X 还有很大的应
用市场,建议结合学习 EJB 2.X/3.0。在学习 EJB 过程中,应同时掌握一
种企业级应用服务器的使用(如 WebSphere、Weblogic、Sun Applcation
Server 或 JBOSS 等,目前 Sun Applcation Server9.X 和 JBOSS 都可支
持 EJB 3.0)。
       之后的学习中,再逐渐扩展到其他 Java EE 技术。
      5. 之后
       等你对 Java EE 有些感悟的时候,你自然就会想不断扩展你的知
识面,这时候你可以学习 Spring、Hibernate,以及各种 Web 框架(如 Strut
s、JSF、Webwork 或是 Tapestry 等)。
       随着技术、经验的不断积累,你会逐步关 注分析、设计等更高层
次的知识,这时候,你可进一步学习相关的 UML、模式等知识(积累了一定
经验,你就可以安排自己学习这些知识了)。
      6. 小结
       永远记住:自始至终,实践是学习 Java 技术历程中极其重要的一
环。脱离了实践,是学不好技术的!
       Java 学习、实践之路依然没有银弹,况且一步步走来,要学的东
西很多,勤奋是金!
  善于利用 Internet 上众多的资源,多吸取些别人的经验。




参考资料:
         1.   Java 新手入门的 30 个基本概念
         2.   Java 连接各种数据库的实例大全
         3.   如何在 Java 应用程序中动态分配 CPU 资源
扩展阅读:
   1.http://www.81yu.cn/forum-2-1.html 源码编程数据库
   2.Java 的交流与介绍 http://www.itpxzn.com
   3.http://www.java.com/zh_CN/ Java 中国官方网站
   4.http://www.javaeye.com/ JavaEye 网站
   5.http://java.csdn.net/ CSDN JAVA 网站
   6.http://www.pudn.com/ 程序员联合开发网
 FORTRAN


 目录[隐藏]


     FORTRAN 简介
     FORTRAN 开发历史
     Fortran 的特性
     Fortran 语言的 Hello World 程序
     Fortran 编译器
     Fortran 程序包
     Fortran 的将来
     FORTRAN 简介
     FORTRAN 开发历史
     Fortran 的特性
     Fortran 语言的 Hello World 程序
     Fortran 编译器
     Fortran 程序包
     Fortran 的将来




  [编辑本段]
  FORTRAN 简介
    FORTRAN,亦译为福传,是英文―FORmula TRANslator‖的缩写,
        ,
译为―公式翻译器‖ 它是世界上最早出现的计算机高级程序设计语言,广泛
应用于科学和工程计算领域。FORTRAN 语言以其特有的功能在数值、科
学和工程计算领域发挥着重要作用。
   [编辑本段]
   FORTRAN 开发历史
      早在 1951 年,美国 IBM 公司约翰·贝克斯(John Backus)针对汇编
语言的缺点着手研究开发 FORTRAN 语言,并于 1954 年在纽约正式对外发
布。称约翰·贝克斯提出的 FORTRAN 语言为 FORTRANⅠ,FORTRANⅠ
虽然功能简单,但它的开创性工作,在社会上引起了极大的反响。到 1957
年第一个 FORTRAN 编译器在 IBM704 计算机上实现,并首次成功运行了 F
ORTRAN 程序。
      在 1958 年,对 FORTRANⅠ进行了扩充和完善,引进了子函数等
概念,推出了商业化的 FORTRANⅡ版本。之后,FORTRAN 语言发展迅
速,多种版本相继在其它计算机上实现。
      在 1962 年,推出了 FORTRAN Ⅳ。FORTRAN Ⅳ没有充分考虑
兼容性,导致 FORTRANⅡ程序不能在 FORTRAN Ⅳ系统中运行,使其应
用受到了很大限制,这时语言不兼容性问题和影响被突出表现出来。此前
也出现过 FORTRAN Ⅲ,但由于存在严重缺陷,没有在计算机上实现。
      随着 FORTRAN 语言版本的不断更新和变化,语言不兼容性问题
日益突出,语言标准化工作被提上了日程。1962 年 5 月,美国标准化协会
(简称 ANSI)成立相关机构着手进行 FORTRAN 语言标准化的研究工作,并
于 1966 年正式公布了两个标准文本:美国国家标准 FORTRAN(ANSI X3.
9-1966)和美国国家标准基本 FORTRAN(ANSI X3.10-1966),前者相当于 F
ORTRAN Ⅳ,后者相当于 FORTRANⅡ。基本 FORTRAN 是美国国家标准
FORTRAN 的一个子集,从而实现了语言的向下兼容,初步解决了语言的
兼容性问题。通常称美国国家标准 FORTRAN 为 FORTRAN 66。FORTR
AN 66 的推出在国际上产生了广泛影响,1972 年国际标准化组织(简称 IS
O)在 FORTRAN 66 基础上制定了 FORTRAN 语言三级国际标准:基本级、
中间级和完全级。
      20 世纪 60 代末,结构化程序设计方法提出后,具有结构化特征
的程序设计语言开始出现,如:ALGOL、PASCAL、MODULA、C 等。如
何将结构化特征引入 FORTRAN 66 引起计算机厂商和研究机构的高度重
视,许多计算机厂商开始对 FORTRAN 66 进行不同程度的扩充,引入了结
构化特征。针对这种情况,ANSI 于 1976 年对 FORTRAN 66(ANSI X3.9-
1966)进行了修订,吸收了计算机厂商所扩充的一些行之有效的功能,同时
增加了许多新内容。ANSI 于 1978 年 4 月正式公布了新的美国国家标准(程
序设计语言 FORTRAN ANSI X3.9-1978),同时宣布撤消 ANSI FORTRA
N 3.9-1966,通常称新标准为 FORTRAN 77(该版本原计划 1977 年公布)。
FORTRAN 77 向下兼容 FORTRAN 66。在 1980 年,FORTRAN 77 被 I
SO 正式确定为国际标准 ISO 1539-1980,该标准分全集和子集。FORTR
AN 77 推出后,由于具有结构化特征,在社会上得到了广泛应用,同时由
于扩充了字符处理功能,在非数值处理领域也能大显身手。
      20 世纪 80 年代末,FORTRAN 77 结构化和现代化的研究开始兴
起,到 1991 年 5 月,ANSI 公布了新的美国国家标准 FORTRAN(ANSI 3.
198-1991)。之后,ISO 采纳该标准,并确定为国际标准 ISO/IEC 1539-1:
1991,新国际标准还采纳了我国计算机和信息处理标准化技术委员会程序
设计分会提出的多字节字符集数据类型及相应的内部函数,为非英语国家
使用计算机提供了极大的方便。通常称新标准为 FORTRAN 90,FORTRA
N 90 向下兼容 FORTRAN 77。之后不久又出现了 FORTRAN 95。
      FORTRAN 90 的推出,使传统 FORTRAN 语言具有了现代气息。
Fortran 2003 的规则已经由 ISO 组织制定发布。
      Windows 平台下,微软公司将 FORTRAN 90 无缝集成在 Develo
per Studio 集成开发环境之中,推出了 Microsoft FORTRAN PowerStatio
n 4.0,使 FORTRAN 90 真正实现了可视化编程,彻底告别了传统 DOS
环境(字符界面),转到了现代 Windows 环境(视窗界面),共享微软公司 Wi
ndows 平台的丰富资源。
      在 1997 年 3 月,微软公司和数据设备公司(Digital Equipment C
orp,简称 DEC)强强联合,合作研究、开发和推出了功能更强的 FORTRA
N 语言新版本:
       Digital Visual FORTRAN 5.0,它是 Microsoft FORTRAN Pow
erStation 4.0 的升级换代产品。DEC 公司在高性能科学和工程计算方面拥
有世界领先技术,其高质量的 FORTRAN 编译器遍及全球。1998 年 1 月,
DEC 与 Compag 公司合并,DEC 成为 Compag 公司的全资子公司,于是 D
igital Visual FORTRAN 更名为 Compag Visual FORTRAN,其最新版本
为 Compag Visual FORTRAN 6.6。Compaq 和 HP 合并之后,Compaq
的 Fortran 小组和 Intel 的 Fortran 开发小组合并,开发出来 Intel Fotran 编
译器 9,有 linux 和 window2 个版本,其 windows 版本为 Intel Visual For
tran, 可以和微软的 Visual Studio.net 集成。Windows 平台下还有 PGI,
Absoft,Intel 等多个商业公司的 Fortran 编译器,还有大量小公司的免费 F
ortran 编译器。
       openMPI 使 Fortran 等语言可以容易且免费的实现并行计算。
       Linux 平台下,其 gcc 编译器默认支持 fortran,另外有 Intel,Su
n Studio,openMPI,Photran 等共享编译器和 PGI,Absoft,lachy, IB
M,SGI,HP 等多个版本的商业编译器。
       支持 Fortran 2003 标准的编译器行将推出,新版本的 Sun Studi
o 编译器已经支持部分 Fortran 2003 语法。


      Fortran 的版本


   FORTRAN I
       最早的 FORTRAN 版本应用于 IBM 704 系统上,包含了 32 种语
句,包括:
       DIMENSION 和 EQUIVALENCE 语句赋值语句三态 算术 IF 语句。
以 IF 这个陈述式检查例外情况(ACCUMULATOR OVERFLOW, QUOTI
ENT OVERFLOW 和 DIVIDE CHECK);IF 语句以处理判断开关和判断指
示灯 GOTO,计算的 GOTO,ASSIGN,和赋值 GOTODO 循环格式化的输
入与输出(Formatted I/O): FORMAT, READ, READ INPUT TAPE, W
RITE, WRITE OUTPUT TAPE, PRINT 和 PUNCH 非格式化的输入与输
出(Unformatted I/O): READ TAPE, READ DRUM, WRITE TAPE 和
WRITE DRUM 其他的输入与输出:END FILE, REWIND,和 BACKSPA
CEPAUSE, STOP,和 CONTINUEFREQUENCY 语句(为编译器提供优化
帮助)FORTRAN II
      1958 年 IBM 又推出 FORTRAN II. 支援使用者撰写副编程(sub
routines)以及函数(functions)。有六个新陈述如下:
      SUBROUTINE, FUNCTION,和 ENDCALL 和 RETURNCOMMO
N 接下来的几年内,FORTRAN II 继续又支援 DOUBLE PRECISION 和
COMPLEX 等资料型态(data types)。
      FORTRAN III
      BM 继续开发 FORTRAN III 至 1958 年时已可以内建组合语言
码并新增其它功能;然而这个版本却从未推出。有如 704 FORTRAN 和
FORTRAN II、FORTRAN III 等的开发过程包含了过多的机器相依性(ma
chine-dependent),造成编程码不易移植到其他机器上的问题。早期提供 F
ORTRAN 版本的厂商经常为此所苦
      FORTRAN IV
      自 1961 年开始,由于客户的强烈要求,IBM 开始发展 FORTRA
N IV,目的在于移除一些 FORTRAN II 中过于依赖机器本身的编程码(例
如:READ INPUT TAPE)同时新增一些新的功能,如 LOGICAL 资料型
别。布尔类型(TRUE 或者 FALSE)与 逻辑 IF 语句 则取代了 算术 IF 语
句 。FORTRAN IV 于 1962 年推出,最早应用于 IBM 7030("Stretch")
计算机之上,以及其接续的 IBM 7090 和 IBM 7094 版本。
      FORTRAN 66


      早期的 FORTRAN 语言发展史上最重要的一件大事也许是美国标
准协会(American Standards Association,即今日的 ANSI)的委员们开
始为 FORTRAN 制定标准规格,名为"American Standard Fortran." 1966
年委员会推出两套 FORTRAN 标准版本,分别定义成 FORTRAN(基于 F
ORTRAN IV,用来应付 de facto 标准)和 Basic FORTRAN(基于 FO
RTRAN II,并且移除其平台依赖性)。FORTRAN 第一套标准后来被称为
FORTRAN 66(大家仍习惯称之为 FORTRAN IV)。FORTRAN 66 有效
的成功第一套工业标准版的 FORTRAN。其功能如下:
       主程序,SUBROUTINE,FUNCTION 和 BLOCK DATA 程序单元
INTEGER, REAL, DOUBLE PRECISION, COMPLEX 和 LOGICAL 数据
类型 COMMON, DIMENSION 和 EQUIVALENCE 语句 DATA 语句用以指定
初始值内部和 EXTERNAL( 例如 库)函数赋值语句 GOTO,赋值 GOTO 和
计算 GOTO 语句逻辑 IF 和算术(三态)IF 语句 DO 循环 READ, WRITE,
BACKSPACE, REWIND 和 ENDFILE 语句以处理顺序读写 FORMAT 语句
CALL, RETURN, PAUSE 和 STOP 语句 DATA 和 FORMAT 语句中的霍尔
瑞斯常数,作为子程序的实际参数最长六个字母的标识符注释行 FORTRA
N 77
       在 FORTRAN 66 标准推出之后,各家编译器厂商不断推出更具
扩充性的标准 FOTRAN("StandardFortran"),这使得 ANSI 于 1969 年开
始着手于 1966 标准版本的修正工作。最后定稿于 1977 年,1978 年四月正
式推出 FORTRAN。新的标准规格也就是著名的 FORTRAN 77,这个版本
是基于 FORTRAN 66 之上新增许多功能,弥补过去的缺点:
       CHARACTER 数据类型,极大地扩展了的字符输入和输出以及对
基于字符的数据进行处理的工具 IMPLICIT 语句 IF 语句块,以及可选的 EL
SE 和 ELSE IF 从句,提供改进了的对结构化编程的语言支持。OPEN,C
LOSE 和 INQUIRE 语句以改进 I/O 能力直接访问文件 I/OPARAMETER 语
句以指定常数 SAVE 语句以保存本地变量内部函数的通用名称 1978 年推出
了一个重要的版本 FORTRAN 77 是为 MIL-STD-1753Release 版。这个
规格由美国国防部制定,这个标准化的 FORTRAN 77 编译器并未引入 AN
SI FORTRAN 77 标准。一些新功能最终合并到 Fortran 90 标准版。
       DO WHILE 和 END DO 语句 INCLUDE 语句 IMPLICIT NONE 变
量,用于 IMPLICIT 语句位处理内部函数,基于类似的包含在工业实时 For
tran(ANSI/ISA S61.1 (1976))中的函数 1991 年推出 IEEE 1003.9 PO
SIX 标准版,为 Fortran-77 的编程人员提供了 POSIX system 上的呼叫。
有超过一百种功能呼叫被定义在文件上。允许存取 POSIX-相容的行程控制
(process control)、信号取得(signalhandling)、档案系统控制(file sy
stem control)、装置控制(devicecontrol)、程序指定(procedure pointi
ng),以及资料流的输入与输出(stream I/O)。
       由于成功的修正了 FORTRAN 77 发展流程,使得原本过于缓慢
重复的编程设计可以顺利的应付计算机领域迅速的变化。同时,作为将近 1
5 年的―标准 FORTRAN‖ FORTRAN 77 成为历史上最重要的一套电脑语言。
               ,




       FORTRAN 90
      ORTRAN 77 的被严重推迟的后续版本,非正式的名称是 Fortran
90,最终于 1992 年作为 ANSI 标准被发表。这一大版本添加了许多新特
性以反映自 1978 年标准以来发展的在编程方面显著的变化:
       自由格式源代码输入,以及小写的 Fortran 关键字模块,将有关联
的过程和数据组合在一起,使它们可以被其它程序单元调用,包括允许限
制一些模块的特定部分访问。RECURSIVE 过程极大地改善了参数传递机
制,允许在编译时检查接口通用过程的用户自定义接口操作符重载派生/
抽象数据类型新的数据类型定义语法,以指定数据类型和变量的其它属性
可以在表达式和赋值语句中按整体操作数组(或数组节),由此极大地简化
了数学和工程计算。这些特性包括整体、部分和通配的数组赋值(比如用
WHERE 语句作选择性赋值),数组常数和表达式,用户定义的数组函数和
数组构造。动态内存分配通过 ALLOCATABLE 属性和 ALLOCATE 和 DEA
LLOCATE 语句 POINTER 属性,指针赋值和 NULLIFY 语句以便于创建和
操作动态数据结构 CASE 结构以用于多路选择 EXIT 和 CYCLE 语句以用于
在按顺序地"跳出"正常的 DO 循环重复最长 31 个字符的标识符行内注释用
户可控制的可定义的数字精度新的和增强的内部过程 FORTRAN 95
      ortran 95 仅是一个小改版,大部份修正了 Fortran 90 standard
一些较为显著的问题。虽然如此,Fortran 95 仍有不少的扩充,尤其是在
High Performance Fortran 的规格:
      FOR ALL 和嵌套的 WHERE 结构以帮助向量化用户定义的 PURE
和 ELEMENTAL 过程 Fortran 95 的一个重要补充是 ISO 技术报告 TR-155
81 :增强的数据类型工具 ,非正式名称是 可分配的 TR。这一标准定义了 A
LLOCATABLE 数组的增强的应用,先于与完全的 Fortran 2003 兼容的 For
tran 编译器,以供使用。这些使用包括在过程伪参数列表中以及将函数返
回值使用 ALLOCATABLE 数组作为派生的类型组件。(ALLOCATABLE 数
组比基于 POINTER 的数组更受欢迎,因为 ALLOCATABLE 数组是由 Fort
ran 95 保证的,当它们退出范围时会被自动释放掉,避免了内存溢出的可
能性。另外,别名也不再是优化数组引用时的一个问题,可以使编译器生
成比用指针时更快的代码。)
      Fortran 95 的第二个补充是 ISO 技术报告 TR-15580 :浮点异常
处理 ,非正式名称是 IEEE TR。这一标准定义了对 IEEE 浮点算术和浮点
异常处理的支持。
      FORTRAN 2003
      最新的版本,Fortran 2003,有着更大幅度的改版。ISO Fortran
Working Group (WG5)的官方网站有关于 Fortran 2003 新特性的详细总
结,并有 PDF 文件 PDF 或者压缩 PostScript 文件可供直接下载。
      据该文所述,本版本的主要改进包括:
      增强了衍生类型:带参数的衍生类型,改善了控制的可操作性,
改善了结构化的创建和释放。支持面向对象编程:扩展类型和继承,多态,
动态类型分配,以及类型绑定过程。 改善了数据操作:可分配的组件(编
入 IEEE TR 15581),延期的类型参数,VOLATILE 属性,在数组构造和
分配语句中显式定义类型,增强的指针,扩展的初始化表达式,增强的内
部过程。增强的输入/输出:异步传输,流访问,用户指定衍生类型的传
输操作,用户在格式转换时指定舍入控制,为连接前单元指定常数,FLUS
H 语句,关键字的规范,访问错误信息。过程指针。支持 IEEE 浮点算法和
浮点异常处理(编入 IEEE TR 15580)。与 C 语言的交互性支持国际化:
访问 ISO 106464 字节字符和在格式化的数字输入/输出中选择数字或者
逗号。与宿主操作系统增强的集成:访问命令行参数,环境变量和处理器
错误信息。
     FORTRAN 2008
     Fortran 2003 之后的下一个版本是 Fortran 2008. 一如 Fortran
95, 这只是一个小改版,略微更正了 Fortran 2003 的一些问题, 并且合并
了 TR-19767 的语言功能。
     如同 February 2007, 新的功能包括了
     Co-array Fortran – 平行处理模式 BIT 资料型态 2007 年 8 月,
资料型态 BIT 被删除了。2008 年 2 月,Coarrays 的计划已缩小,仅有
Parallel I/O,而研发团队也被裁员了。




  [编辑本段]
  Fortran 的特性
     Fortran 语言的最大特性是接近数学公式的自然描述,在计算机里
具有很高的执行效率。
     易学,语法严谨。
     可以直接对矩阵和复数进行运算,这一点类似 matlab。
     自诞生以来广泛地应用于数值计算领域,积累了大量高效而可靠
的源程序。
     很多专用的大型数值运算计算机针对 Fortran 做了优化。
     广泛地应用于并行计算和高性能计算领域。
     Fortran90,Fortran95,Fortran2003 的相继推出使 Fortran 语言
具备了现代高级编程语言的一些特性。
  [编辑本段]
  Fortran 语言的 Hello World 程序
     下面是一个在标准输出设备上使用 Fortran90 输出 Hello World 的
简单程序,这种程序通常作为开始学习编程语言时的第一个程序:
     program main print *,'hello world'
     end
   [编辑本段]
   Fortran 编译器
      Windows 操作系统下:
      Fortran Power Station 4.0 (FPS 4.0),微软公司开发的 Fortran
编译器。1997 年 3 月转让给 DEC 公司。
      Digital Visual Fortran (DVF),Fortran Power Station 的 DEC
公司版本。
      Compaq Visual Fortran (CVF),1998 年 1 月,DEC 公司被康柏
公司收购,Digital Visual Fortran 更名为 Compaq Visual Fortran。一个
著名的版本是 Compaq Visual Fortran 6.5。目前康柏公司已并入惠普公
司。Compaq Visual Fortran 的最新版是 6.6。
      Intel Fortran,英特尔公司的开发的 Fortran 编译器。
      Lahey Fortran
      Absoft Fortran
      OpenWatcom
      Linux 操作系统下:
      PGI Fortran
      G77,GNU 的 Fortran77 编译器,集成在 GCC 中。
      GFORTRAN,GNU 的最新的 Fortran 编译器,集成在 GCC 4.0
中,目的是支持 Fortran95 和一部分 Fortran2003 的功能,以替代 G77。
      g95,跟 GFORTRAN 同为开放源代码的 Fortran95 编译器。
   [编辑本段]
   Fortran 程序包
      几个著名的 Fortran 程序包:
      IMSL--国际数学和统计链接库
      BLAS--Basic Linear Algebra Subroutines
      LAPACK--Linear Algebra PACKage
      FORTRAN90 是 ISO(国际标准化组织)于 1991 年推出的最新标准,
我国国家标准是 GB/T 3057-1996.除了保持 FORTRAN77 的全部优点之外,
又 增加了许多具有现代特性的功能,使他成为具有良好的结构特性,鲜明的
时代特性的程序设计语言.程序设计是计算机基础教育的基础与重点,高级
语言程序设计课是继微机应用基础之后的一门必修的基础课,目的是向学
生介绍程序设计的基础知识,使学生掌握高级语言程序设计的基本方法,
具有应用计算机的初步能力,并培养学生掌握用计算机处理问题的思维方
法。通过该课程的学习,要求学生了解 FORTRAN 语言的特点,基本成份
及使用方法,具有阅读程序和初步编程的能力。进行算法的初步训练,掌
握最基本算法的设计和实现方法。掌握结构化程序设计方法,能设计出良
好风格的程序。具有调试程序的基本能力。
  [编辑本段]
  Fortran 的将来
     Fortran 语言是一种极具发展潜力的语言,在全球范围内流行过程
中,Fortran 语言的标准化不断吸收现代化编程语言的新特性,并且在工程
计算领域仍然占有重要地位。
     不可否认,Fortran 语言与目前流行的 JAVA,C#等高级语言相比,
它缺乏创造力。但是,工科学生必须注意到,由于 Fortran 在工程计算领域
长期处于统治地位,很多优秀的工程计算软件都是运用 fortran 语言编写,
例如 ANSYS,Marc,为了能够使用这些商业软件的高级功能,必须先学会 fo
rtran 语言,才能编写应用程序接口。
     在数值计算中,Fortran 语言仍然不可替代。Fortran90 标准引入
了数组计算等非常利于矩阵运算的功能。在数组运算时,Fortran 能够自动
进行并行运算,这是很多编程语言不具备的。运用 fortran 语言,你能够运
用很多现成的函数软件包,所以非常便利。(目前流行的 Matlab 的早期版
本,主要就是为两个著名的 Fortran 函数包提供程序接口)




  扩展阅读:
       1.著名编程语言 Fortran 创始人巴库斯辞世 http://developer.51cto.co
   m/art/200703/42818.htm
  John Backus




     John Backus
     FORTRAN 之父——John Backus 早年在 HillSchool 学习的时候
因为讨厌学习,成绩一踏糊涂而不得不在暑假补课。1943 年他在父亲的要
求下到维吉尼亚大学学习化学,随后参军、照顾头部受伤的伤员、在医学
学校学习治疗,可是最后又都放弃了。不过还好,战后 Backus 进入纽约哥
伦比亚大学学习数学,并于 1949 年毕业。在毕业前夕,他跑到了麦迪逊大
街的 IBM 计算机中心参观。事情凑巧,和导游聊天的时候 Backus 谈到自
己正在找工作,在导游的鼓励下,他和中心一位主管的面谈,成为了一名 I
BM 的程序员。在 IBM,Backus 的才华得到了施展,发明了人类历史上第
一个高级语言——FORTRAN。接着,又提出了规范描述编程语言语法的 B
ackus-Naur Form(BNF)。这位当年的―差生‖终于被整个计算机世界肯定—
—美国计算机协会于 1977 年授予 John Backus―图灵奖‖
                                  。
  COBOL


  目录[隐藏]


      COBOL 的历史
      COBOL 的重要性
      COBOL 的特点
      COBOL 的程序结构
      COBOL 的历史
      COBOL 的重要性
      COBOL 的特点
      COBOL 的程序结构




                 格雷斯·霍波(Grace Hopper)
  英文缩写: COBOL (Common business Oriented Language)
     中文译名: COBOL 语言
     解 释: 一种适合于商业及数据处理的类似英语的程序设计语言。
这种语言可使商业数据处理过程精确表达。
     COBOL(面向商业的通用语言,又称为企业管理语言、数据处理
语言等,Common Business Oriented Langauge)是最早的高级编程语言
之一,是世界上第一个商用语言。
   [编辑本段]
   COBOL 的历史
       1959 年 5 月,五角大楼委托格雷斯·霍波(G.Hopper)博士领导
一个委员会并由 Rear Admiral Grace Hopper 公司主持开发,并于 1961
年由美国数据系统语言协会公布。正式发布于 1960 年 4 月,称为 Cobol
-60。
       1968 年美国国家标准委员会 ANSI 又通过了新的标准 ANSI COB
OL X.3.23-1968。
       1972 年国际标准化组织 ISO 将其作为 ISO COBOL-72。1974 年
ANSI 对 COBOL-68 作出了修订扩充,形成了 ANSI COBOL X3.23-1974,
随后 1978 年 ISO 采用其形成 ISO COBOL-78,后来又提出了 ANSI X3.2
3-85,增加了很多结构化程序设计的内容,ISO 标准 ISO1989:1985 也采用
了该标准。COBOL 标准还在不断地改进和完善,最新的标准 COBOL 200
2 主体已经于 2002 年 12 月出版,其他部分还在不断地完善之中。现在最
新的版本是 Cobol-2002。
       1963 年,美国国家标准研究所(ANSI)进行了标准化,但是 ANSI
标准很少被遵循;因此,COBOL 程序只是部分可移植的。
   [编辑本段]
   COBOL 的重要性
       经过 40 多年的不断修改、丰富完善和标准化,COBOL 已发展为
多种版本的庞大语言,在财会工作、统计报表、计划编制、情报检索、人
事管理等数据管理及商业数据处理领域,都有着广泛的应用。
       COBOL 的重要性可以用这句话来描述:世界上 70%的数据都是
用 COBOL 语言处理的,并且 90%的 ATM 事务处理用的都是 COBOL 语言。
每天在线处理的 COBOL 事务有 300 亿次。500 强中有 492 家(包括全部
的 100 强)使用了 COBOL 语言,目前在 COBOL 方面的投资已经超过 3
万亿美元,,据称用 COBOL 书写的程序超过了 1000 亿行,并且以每年大
约 50 亿行代码的速度在增长。
       由于 COBOL 在商业领域的雄厚基础,而且 COBOL 主要是应用于
银行、金融和会计行业等非常重要的商业数据处理领域。所以,即使对于
具有相当经验的 IT 公司来说,重新编写 COBOL 语言的可靠的应用软件也
是不实际或是从商业角度上并不可行的,而且还要花上很长的时间,只要
大型机存在,COBOL 就不会消失,即使是对电脑界产生巨大影响的―千年
 (
虫‖ Y2K)也没有改变 COBOL 的命运。
     [编辑本段]
     COBOL 的特点
        COBOL 是一种面向数据处理的、面向文件的、面向过程(POL)的
高级编程语言,是一种功能很强而又极为冗长的语言。
        COBOL 适合于具有循环处理周期的环境(例如打印工资支票)以及
数据操纵量相当大的环境。COBOL 主要应用于商业数据处理领域,对各种
类型的数据进行收集、存储、传送、分类、排序、计算及打印报表、输出
图象是它的强项。
        COBOL 语法与英文很接近,即使不懂电脑的人也能看懂程序。
        强大的文件处理功能,大量的数据通常以文件的形式存储在 磁盘
上。
        仅提供了加、减、乘、除及乘方这五种简单的算术运算,因而不
适于进行科学计算。
        未来的 COBOL 将支持 XML 等 Web 时代的新技术。
     [编辑本段]
     COBOL 的程序结构
        COBOL 程序由 4 部(DIVISION)组成:IDENTIFICATION DIVISI
ON.(标识部)、ENVIRONMENT DIVISION.(环境部)、DATA DIVISION.(数
据部)、PROCEDURE DIVISION.(过程部),而每个部又由若干节 (SECTI
ON)组成。


       IDENTIFICATION DIVISION.


     ―PROGRAM-ID‖ 程序识别 ID) ―AUTHOR‖ 作者名) ―DATE-WRITTE
                (         、       (     、
N‖ 编写日期)
 (      ,这些并直接不影响程序的执行,而是程序的注释 信息。程
序注释可以采用任何语言书写,COBOL 编译器可以接受。


     ENVIRONMENT DIVISION.


   用于记载程序可以被运行的计算机环境。―ENVIRONMENT DIVISIO
N.‖部包括―CONFIGURATION SECTION‖环境节和―INPUT-OUTPUT SEC
TION‖输入输出节。


     DATA DIVISION.


   用于定义和声明程序所要使用的变量及其他数据。程序要使用的全部
变量和数据必须在这里定义。―DATA DIVISION.‖部主要包含―FILE SECTI
ON.‖和―WORKING-STORAGE SECTION.‖节。
       如果程序要通过参数接收数据,那么使用 ―LINKAGE SECTION‖
来声明。
       COBOL 的数据种类
       COBOL 程序的数据,主要有以下 3 种:
       变量(Variables)
       常量(Literals)
       表意常量(FigurativeConstants)变量和常量自不必说,说说表意
常量。使用有特定意思的多个词组合成一个常量的代名词。好处是便于编
码人员识别。比如:HIGH-VALUES、LOW-VALUES 等可以表达一定意思
的名称作为常量代名词。
       COBOL 变量类型
       COBOL 的基本变量类型,有以下三种:
       数值型(Numeric)
       英文字符型(AlphaNumeric)
       英文字符串型(Alphabetic)
    PROCEDURE DIVISION


  用于容纳程序的实际处理代码。需要传入参数时,采用―PROCEDURE
DIVISION USING 引数名[,参数名...]‖的方式。
     因为前 3 个 DIVISION 都是注释,却又必须,只到第 4 个 DIVISI
ON―PROCEDURE DIVISION‖才真正涉及程序代码,这样的繁琐规定使得
COBOL 被批评为开场白像老太太裹脚布。但是,基于这样的 4 个 DIVISI
ON 的明确记述等的严格形式,COBOL 也被公认是可读性强的语言。另外,
COBOL 的保留字数量庞大,字数过长的保留字太多是 COBOL 的特征之一。
     目前 Cobol 就业市场包含以下两种类型:
     第一,在旧的 Cobol 代码和新程序之间充当桥梁,这种工作要求
人们懂 Cobol,懂那些老 Cobol 程序员所依赖的商业逻辑,同时动新的编
程语言,如 Java。
     第二是维护旧的 Cobol 代码,并编写新的 Cobol 代码。




  扩展阅读:
      1.Cobol 的交流与介绍 http://www.itpxzn.com
      2.http://comm.ccidnet.com/art/1961/20041014/165226_1.html
   ALGOL


       ALGOL 国际代数语言
       ALGOL 是计算机发展史上首批产生的高级语言,当时还是晶体管
计算机流行的时代,由于 ALGOL 语句和普通语言表达式接近,更适于数值
计算,所以 ALGOL 多用于科学计算机。
       ALGOL 这个名称是算法语言的简称,这种语言不是计算机制造公
司为某种特定机器设计的,而是纯粹面向描述计算过程的,也就是所谓面
向算法描述的。
       ALGOL 是第一个清晰定义的语言,其语法是用严格公式化的方法
说明的。ALGOL 语言并没有被广泛的使用,但它是许多现代程序语言的概
念基础。
       Algol 58:1958 年,ACM 小组和以当时联邦德国的应用数学和力
学协会 GAMM 在苏黎世把他们关于算法表示法的建议综合为一,形成了 A
lgol 58,先被命名为 IAL(国际代数语言,International Algebraic Langu
age),后来改称 Algol 58。
       Algol 60:1960 年 1 月,图灵奖获得者:艾伦.佩利(Alan J.Perli
s)在巴黎举行的有全世界一流软件专家参加的讨论会上,发表了"算法语言
Algol 60 报告",确定了程序设计语言 Algol 60。1962 年,艾伦.佩利又对
Algol 60 进行了修正。
       Algol 60 引进了许多新的概念如:局部性概念、动态、递归、巴
克斯瑙尔范式 BNF(Backus-Naur Form)等等。
       Algol 60 是程序设计语言发展史上的一个里程碑,它标志着程序
设计语言成为一门独立的科学学科,并为后来软件自动化及软件可靠性的
发展奠定了基础。
       Algol W:1966 年,IFIP 吸收沃思参加对 Algol 语言进行完善与
扩充的工作小组。沃思参加进去以后,提交了一份建议书并由霍尔(Tony H
oars)等人修改、完善以后形成 Algol W。同时还催生了一个新的语言 PL
360。
  BASIC


  目录[隐藏]


       BASIC 的历史
       Basic 的名字
       中文维基百科 BASIC 使用者
       BASIC 语言的特点




                            BASIC
  BASIC(Beginners' All-purpose Symbolic Instruction Code,又译
培基)                   ,
   ,意思就是―初学者的全方位符式指令代码‖ 是一种设计给初学者使用
的程序设计语言。BASIC 是一种直译式的编程语言,在完成编写后不须经
由编译及连结等手续即可执行,但如果需要单独执行时仍然需要将其建立
成执行档。
  [编辑本段]
  BASIC 的历史
     1964 年,两位美国计算机科学家 G. Kemeny 和 Thomas E. Kur
tz 在 FORTRAN 语言的基础上创造了一种新的语言——BASIC,BASIC 是
一种适用于初学者的人机交互式语言。
  [编辑本段]
     Basic 的名字
       Beginner's All - purpose Symbolic Instruction Code(初学者通
用的符号指令代码),原来被作者写做 BASIC,只是后来被微软广泛的叫
做 Basic 了。
       BASIC 语言本来是为校园的大学生们创造的高级语言,目的是使
大学生容易使用计算机。尽管初期的 BASIC 仅有 16 条语句,但由于 BASI
C 在当时比较容易学习,它很快从校园走向社会,成为初学者学习计算机
程序设计的首选语言。
       随着计算机科学技术的迅速发展,特别是微型计算机的广泛使用,
计算机厂商不断地在原由的 BASIC 基础上进行功能扩充,出现了多种 BAS
IC 版本,例如 TRS-80 BASIC、Apple BASIC、GWBASIC、IBM BASIC(即
BASICA)、True BASIC。此时 BASIC 已经由初期小型、简单的学习语言
发展成为功能丰富的使用语言。它的许多功能已经能与其他优秀的计算机
高级语言相媲美,而且有的功能(如绘图)甚至超过其他语言。
       1975 年,比尔·盖茨创立的 Microsoft,并成功的把 Basic 语言
的编译器移植到使用 Intel 处理器的 ALR 计算机中,IBM 在 1982 年选
定 Microsoft 创作 PC 的操作系统时,也选定了 Microsoft 的 Basic 作
为其计算机的 ROM-Basic。微软还在其发布的 DOS 操作系统中免费加
入了 GW-Basic、QBasic 等当时最好的 Basic 解释程序。
       Quick BASIC 是微软(Microsoft)公司 1987 年推出的。
       1991 年,伴随着 MS-DOS5.0 的推出,微软(Microsoft)公司同
时推出了 Quick BASIC 的简化版 QBASIC,将其作为操作系统的组成部分
免费提供给用户。自从 Windows 操作系统出现以来,图形用户界面(GUI)
的 BASIC 语言(即 Visual Basic)已经得到广泛应用。
       2001 年 Visual Basic .NET 推出
       2003 年推出 Visual Basic .NET 2003 推出
       2005 年 11 月 7 日在 Visual Studio .NET 2005 内推出 Visual B
asic .NET 2005。
       现在还有 Visual Studio .NET 2008 里有 Visual Basic .NET 20
08
    [编辑本段]
    中文维基百科 BASIC 使用者
        BASIC 是一个与电脑相关的小作品。你可以通过编辑或修订扩充
其内容。
        程序设计语言编辑
        工业编程语言: A+ | Ada | 汇编语言 | B | Brainfuck | C |
C++ | C++/CLI | Cg | COBOL | Eiffel | Erlang | FORTRAN | IronPy
thon | Java | JRuby | Jython | LISP | Oberon | Objective -C | Oca
ml | Pascal | Perl | Powerbuilder | Python | QBASIC | R | REXX |
 Ruby | Self | Smalltalk | SQL | Tcl/Tk | Visual Basic | PHP | C# |
 F# | J# | Visual Basic .NET
        脚本编程语言: ActionScript | JavaScript | JScript | Nuva |
PostScript | VBScript | lua
        学术编程语言: APL/J | Haskell | Logo | ML | pascal|Prolog
 | Scheme | SAC
        其他编程语言: ALGOL | BASIC | Clipper | Forth | Modula-
2/Modula-3 | MUMPS | PL/I | Simula
        BASIC 是在 1965 年 5 月,由美国科学家托马斯·库尔兹研制出来
的。10 多年后,(现微软公司的总裁)比尔·盖茨把它移植到 PC 上。三十
多年来,BASIC 语言一直是初学计算机语言者使用最广泛的一种高级语言。
它能进行数值计算、画图、演奏音乐,功能十分强大,而学起来又是非常
容易。
    [编辑本段]
    BASIC 语言的特点
        1.简单易学:BASIC 语言所使用的词大多数是英语单词的原意或
缩写,运算符号、表达式的书写也与数学中差不多。标准的 BASIC 语句只
有 17 种。
                                 ,
        2.会话式:人们可以通过键盘和显示屏与计算机―对话‖ 运行程序
时,计算机会把程序中语法错误及错误的属性显示出来,让使用者修改。
     3.适用面广:既能进行科学计算,又能数据处理等。
     4.两种执行方式:解释方式和编译方式。其中解释方式可以边输程
序边运行非常适合初学者。
     BASIC 是 Beginner's All-purpose Symbolic Instruction Code
的缩写,意为初学者通用符号指令代码语言,它是在 1964 年由美国的两位
教授 Thomas 和 John G.Kemeny 在 Fortran 语言的基础上设计的语言系
统,这个简单、易学的程序设计语言当时只有 17 条语句,12 个函数和 3
个命令,现在一般称其为基本 BASIC。
   APL 语言


        APL 是 A Programming Language 或 Array Processing Lan
guage 的缩写。肯尼斯·艾佛森 1962 年设计这个语言时他正在哈佛大学工
作。为此他 1979 年获得图灵奖。在过去数十年的使用历史中,APL 从它的
原始版本开始不断改变和发展,今天的版本与 1963 年发表时的版本已经非
常不一样了。但它始终是一种解释执行的计算机语言。现代的 APL 版本都
支持其初试版本不支持的结构和模式编程。APL 至今依然使用一种非标准
化的字母表,这一点一直是他人对它的批评点。
   [编辑本段]
   概述
        在许多应用场合下(数学、科学、工程技术、电脑设计、机器人、
数据显示、保险技术、传统的数据处理等等)APL 是一种非常有力的、表
达丰富的和简明的编程语言。它一般被用在一个与用户接口的环境中。它
最初的设计目的是将数学公式写成一种电脑可以理解的方式 。学它一般很
容易,但要分析 APL 写成的程序往往需要一段时间。与传统的结构式编程
语言不同的是,APL 的程序一般由一系列使用在序列上的单元的或双元的
函数或运算符号组成。由于 APL 拥有许多非标准的运算符号,这些符号之
间没有优先性(比如一般数学中的乘号、除号较加号、减号有优先权,AP
L 中没有这样的优先权)。最初的 APL 语言没有任何控制结构如重复(do-
while)或者条件选择(if-then-else),但一些序列运算符号可以用来模拟编
程结构,比如 iota(用来获得一个从 1 至 N 的序列)可以用来模拟重复(f
or)。
        APL 的工作环境被称为工作场。在这个工作场内用户可以定义程
序和数据。数据也可以在工作场在程序外存在。用户可以在程序外改变数
据,比如:
        N <- 4 5 6 7
        将一个系列的数据 4、5、6、7 授予 N。
        N + 4
       输出 8、9、10、11。
       +/N
       输出 N 内所有数的和,既 22。
       用户可以将工作场连同其中的所有数据和程序储存起来。在任何
情况下,这些程序不是编译执行和,而是解释执行的。
       APL 最著名的就是它使用一组非 ASCII 符号。这些符号比一般常
见的代数和计算符号要多。有人开玩笑说,用两行这样的奇形怪状的符号
就可以将所有航空控制的问题解决了。事实上,在一些 APL 版本中,用一
行程序就可以将任何可计算的函数表达出来。在用一行你可以将这个函数
的结构表达出来。由于它的精密的结构和非标准的符号,也有人将 APL 称
      。
为―只写语言‖ 除数学家外,其他人要读 APL 写的程序都感到非常困难。有
些数学家觉得其它语言比 APL 难懂。由于 APL 使用不寻常的符号,许多编
程员在写 APL 程序时使用专门的 APL 键盘。今天也有不同的只使用 ASCII
字母写 APL 的方法。
       艾佛森后来还设计了一个 APL 的后续,称为 J 语言,这个语言只
使用 ASCII 符号。至今为止只有一种 J 语言。一些其它语言也提供类似 AP
L 的功能。A+是一种开源的编程语言,其许多指令与 APL 相同。
       下面这个例子排列一个存在 X 里的词的序列,排列标准是每个词
的长度:
       X[X+.&not;' ';]
  [编辑本段]
  字母表
       从一开始就有人批评 APL 使用一套特别的、非标准的字母表。学
过 APL 的人一般很喜欢这些特别的符号,这说明当时艾佛森




                         APL 语言字母表
  选择这些符号时是有一定的用意的。Unicode 包含这些字母,Unicode
被引入后,要寻找特别的字型的问题开始有所减缓。虽然如此依然有人批
评当初 APL 设计时所选择的特殊的符号。这些专门为 APL 设计的键盘无论
如何不会非常普及。
  [编辑本段]
  APL 语言的 Hello World 程序
     'Hello World'
c 语言


目录[隐藏]


       释义
       简介
       C 语言的发展历史
       C 语言的优点
       C 语言的缺点
       C 源程序的结构特点
       学习 C 语言
       新标准
       释义
       简介
       C 语言的发展历史
       C 语言的优点
       C 语言的缺点
       C 源程序的结构特点
       学习 C 语言
       新标准
          C 程序实例
          经典教材:
          C 的学习方法
          C 语言考试复习五要点
  [编辑本段]
  释义
       C 语言是 Combined Language(组合语言)的中英混合简称。
  [编辑本段]
  简介
       C 语言是一种计算机程序设计语言。它既具有高级语言的特点,
又具有汇编语言的特点。它可以作为工作系统设计语言,编写系统应用程
序,也可以作为应用程序设计语言,编写不依赖计算机硬件的应用程序。
因此,它的应用范围广泛,不仅仅是在软件开发上,而且各类科研都需要
用到 C 语言,具体应用比如单片机以及嵌入式系统开发。
       C 语言发展如此迅速,而且成为最受欢迎的语言之一,主要因为
它具有强大的功能。许多著名的系统软件,如 DBASE Ⅳ都是由 C 语言编
写的。用 C 语言加上一些汇编语言子程序,就更能显示 C 语言的优势了,
像 PC- DOS 、WORDSTAR 等就是用这种方法编写的。
       归纳起来 C 语言具有下列特点:
       1. C 是中级语言。它把高级语言的基本结构和语句与低级语言的
实用性结合起来。C 语言可以像汇编语言一样对位、字节和地址进行操作,
而这三者是计算机最基本的工作单元。
       2.C 是结构式语言。结构式语言的显著特点是代码及数据的分隔
化,即程序的各个部分除了必要的信息交流外彼此独立。这 种结构化方式
可使程序层次清晰,便于使用、维护以及调试。C 语言是以函数形式提供
给用户的,这些函数可方便的调用,并具有多种循环、条件语句控制程序
流向,从而使程序完全结构化。
       3.C 语言功能齐全。具有各种各样的数据类型,并引入了指针概念,
可使程序效率更高。另外 C 语言也具有强大的图形功能,支持多种显示器
和驱动器。而且计算功能、逻辑判断功能也比较强大,可以实现决策目的
的游戏。
       4. C 语言适用范围大。          如
                    适合于多种操作系统, Windows、DOS、
UNIX 等等;也适用于多种机型。
       C 语言对编写需要硬件进行操作的场合,明显优于其它解释型高
级语言,有一些大型应用软件也是用 C 语言编写的。
       C 语言具有绘图能力强,可移植性,并具备很强的数据处理能力,
因此适于编写系统软件,三维,二维图形和动画。它是数值计算的高级语
言。
       常用的 C 语言 IDE(集成开发环境)有 Microsoft Visual C++,D
ev-C++,Code::Blocks,Borland C++,Watcom C++ ,Borland C++ B
uilder,GNU DJGPP C++ ,Lccwin32 C Compiler 3.1,High C,Turb
o C,C-Free, win-tc 等等……
       对于一个初学者,Microsoft Visual C++是一个比较好的软件。界
面友好,功能强大,调试也很方便。
     [编辑本段]
     C 语言的发展历史
      C 语言的原型 ALGOL 60 语言。(也称为 A 语言)
      1963 年,剑桥大学将 ALGOL 60 语言发展成为 CPL(Combined
Programming Language)语言。
      1967 年,剑桥大学的 Martin Richards 对 CPL 语言进行了简化,
于是产生了 BCPL 语言。
      1970 年,美国贝尔实验室的 Ken Thompson 将 BCPL 进行了修
                   。
改,并为它起了一个有趣的名字―B 语言‖ 意思是将 CPL 语言煮干,提炼出
它的精华。并且他用 B 语言写了第一个 UNIX 操作系统。
      而在 1972 年,B 语言也给人―煮‖了一下,美国贝尔实验室的 D.M.
Ritchie 在 B 语言的基础上最终设计出了一种新的语言,他取了 BCPL 的第
二个字母作为这种语言的名字,这就是 C 语言。
      为了使 UNIX 操作系统推广,1977 年 Dennis M.Ritchie 发表了不
依赖于具体机器系统的 C 语言编译文本《可移植的 C 语言编译程序》。
      1978 年由美国电话电报公司(AT&T)贝尔实验室正式发表了C语
言。同时由 B.W.Kernighan 和 D.M.Ritchie 合著了著名的《TheC Program
mingLanguage》一书。通常简称为《K&R》,也有人称之为《K&R》标准。
但是,在《K&R》中并没有定义一个完整的标准 C 语言,后来由美国国家
标准化协会(American National Standards Institute)在此基础上制定了
一个 C 语言标准,于一九八三年发表。通常称之为 ANSI C。
      1987 年,随着微型计算机的日益普及,出现了许多 C 语言版本。
由于没有统一的标准,使得这些 C 语言之间出现了一些不一致的地方。为
了改变这种情况,美国国家标准化协会(ANSI)为 C 语言制定了一套 ANSI
标准,成为现行的 C 语言标准 3.C 语言的主要特点 。C 语言发展迅速,
而且成为最受欢迎的语言之一,主要因为它具有强大的功能。许多著名的
系统软件, 如 DBASE ⅢPLUS、DBASE Ⅳ 都是由 C 语言编写的。用 C
                              像
语言加上一些汇编语言子程序, 就更能显示 C 语言的优势了, PC- DOS、
WORDSTAR 等就是用这种方法编写的。
      1990 年,国际标准化组织 ISO(International StandardOrganiza
tion)接受了 87 ANSI C 为 ISOC 的标准(ISO9899-1990)。1994 年,I
SO 修订了 C 语言的标准。目前流行的 C 语言编译系统大多是以 ANSIC 为
基础进行开发的,但不同版本的 C 编译系统所实现的语言功能和语法规则
有略有差别。
   [编辑本段]
   C 语言的优点
      1. 简洁紧凑、灵活方便
      C 语言一共只有 32 个关键字,9 种控制语句,程序书写形式自由,
主要用小写字母表示。它把高级语言的基本结构和语句与低级语言的实用
性结合起来。 C 语言可以像汇编语言一样对位、字节和地址进行操作,而
这三者是计算机最基本的工作单元。
      2. 运算符丰富
      C 语言的运算符包含的范围很广泛,共有 34 种运算符。C 语言把
括号、赋值、强制类型转换等都作为运算符处理。从而使 C 语言的运算类
型极其丰富,表达式类型多样化。灵活使用各种运算符可以实现在其它高
级语言中难以实现的运算。
      3. 数据结构丰富
      C 语言的数据类型有:整型、实型、字符型、数组类型、指针类
型、结构体类型、共用体类型等。能用来实现各种复杂的数据结构的运算。
并引入了指针概念,使程序效率更高。另外 C 语言具有强大的图形功能,
支持多种显示器和驱动器。且计算功能、逻辑判断功能强大。
    4. C 是结构式语言
    结构式语言的显著特点是代码及数据的分隔化,即程序的各个部
分除了必要的信息交流外彼此独立。这种结构化方式可使程序层次清晰,
便于使用、维护以及调试。C 语言是以函数形式提供给用户的,这些函数
可方便的调用,并具有多种循环、条件语句控制程序流向,从而使程序完
全结构化。
    5. C 语法限制不太严格,程序设计自由度大
    虽然 C 语言也是强类型语言,但它的语法比较灵活,允许程序编
写者有较大的自由度。
    6. C 语言允许直接访问物理地址,可以直接对硬件进行操作
    因此既具有高级语言的功能,又具有低级语言的许多功能,能够
像汇编语言一样对位、字节和地址进行操作,而这三者是计算机最基本的
工作单元,可用来写系统软件。
    7. 生成目标代码质量高,程序执行效率高
    一般只比汇编程序生成的目标代码效率低 10 へ 20%。
    8. C 语言适用范围大,可移植性好
    C 语言有一个突出的优点就是适合于多种操作系统,如 DOS、UN
IX;也适用于多种机型。C 语言具有强大的绘图能力,可移植性好,并具备
很强的数据处理能力,因此适于编写系统软件,三维,二维图形和动画,
它也是数值计算的高级语言。
  [编辑本段]
  C 语言的缺点
    1. C 语言的缺点主要表现在数据的封装性上,这一点使得 C 在数
据的安全性上有很大缺陷,这也是 C 和 C++的一大区别。
    2. C 语言的语法限制不太严格,对变量的类型约束不严格,影响
程序的安全性,对数组下标越界不作检查等。从应用的角度, C 语言比其
他高级语言较难掌握。
    [C 语言指针]
    指针是 C 语言的一大特色,可以说是 C 语言优于其它高级语言的
一个重要原因。就是因为它有指针,可以直接进行靠近硬件的操作,但是 C
的指针操作也给它带来了很多不安全的因素。 C++在这方面做了很好的改
进,在保留了指针操作的同时又增强了安全性。Java 取消了指针操作,提
高了安全性,适合初学者使用。
  [编辑本段]
  C 源程序的结构特点
      1.一个 C 语言源程序可以由一个或多个源文件组成。
      2.每个源文件可由一个或多个函数组成。
      3.一个源程序不论由多少个文件组成,都有一个且只能有一个 ma
in 函数,即主函数。
      4.源程序中可以有预处理命令(include 命令仅为其中的一种),预
处理命令通常应放在源文件或源程序的最前面。
      5.每一个说明,每一个语句都必须以分号结尾。但预处理命令,函
数头和花括号―}‖之后不能加分号。
      6.标识符,关键字之间必须至少加一个空格以示间隔。若已有明显
的间隔符,也可不再加空格来间隔。
  [编辑本段]
  学习 C 语言
      在初学 C 语言时,可能会遇到有些问题理解不透,或者表达方式
与以往数学学习中不同(如运算符等),这就要求不气馁,不明白的地方多
问多想,鼓足勇气进行学习,待学完后面的章节知识,前面的问题也就迎
刃而解了,这一方面我感觉是我们同学最欠缺的。大多学不好的就是因为
一开始遇到困难就放弃,曾经和好多同学谈他的问题,回答是听不懂、不
想听、放弃这样三个过程,我反问,这节课你听过课吗?回答又是没有,
根本就没听过课,怎么说自己听不懂呢?相应的根本就没学习,又谈何学
得好?
      学习 C 语言始终要记住―曙光在前头‖和―千金难买回头看‖ ―千金难
                                  ,
买回头看‖是学习知识的重要方法,就是说,学习后面的知识,不要忘了回
头弄清遗留下的问题和加深理解前面的知识,这是我们学生最不易做到的,
然而却又是最重要的。学习 C 语言就是要经过几个反复,才能前后贯穿,
积累应该掌握的 C 知识。
      那么,我们如何学好《C 程序设计》呢?
      一.学好 C 语言的运算符和运算顺序
      这是学好《C 程序设计》的基础,C 语言的运算非常灵活,功能十
分丰富,运算种类远多于其它程序设计语言。在表达式方面较其它程序语
言更为简洁,如自加、自减、逗号运算和三目运算使表达式更为简单 ,但
初学者往往会觉的这种表达式难读,关键原因就是对运算符和运算顺序理
解不透不全。当多种不同运算组成一个运算表达式,即一个运算式中出现
多种运算符时,运算的优先顺序和结合规则显得十分重要。在学习中,只
要我们对此合理进行分类,找出它们与我们在数学中所学到运算之间的不
同点之后,记住这些运算也就不困难了,有些运算符在理解后更会牢记心
中,将来用起来得心应手,而有些可暂时放弃不记,等用到时再记不迟。
      先要明确运算符按优先级不同分类,《C 程序设计》运算符可分为
15 种优先级,从高到低,优先级为 1 ~ 15,除第 2、13 级和第 14 级为从
右至左结合外,其它都是从左至右结合,它决定同级运算符的运算顺序.
      二.学好 C 语言的四种程序结构
      (1)顺序结构
      顺序结构的程序设计是最简单的,只要按照解决问题的顺序写出
相应的语句就行,它的执行顺序是自上而下,依次执行。
      例如:a = 3,b = 5,现交换 a,b 的值,这个问题就好像交换
两个杯子水,这当然要用到第三个杯子,假如第三个杯子是 c,那么正确的
程序为:c = a; a = b; b = c; 执行结果是 a = 5,b = c = 3 如果
改变其顺序,写成:a = b; c = a; b =c; 则执行结果就变成 a = b
= c = 5,不能达到预期的目的,初学者最容易犯这种错误。顺序结构可以
独立使用构成一个简单的完整程序,常见的输入、计算,输出三步曲的程
序就是顺序结构,例如计算圆的面积,其程序的语句顺序就是输入圆的半
径 r,计算 s = 3.14159*r*r,输出圆的面积 s。不过大多数情况下顺序结构
都是作为程序的一部分,与其它结构一起构成一个复杂的程序,例如分支
结构中的复合语句、循环结构中的循环体等。
       (2) 分支结构
       顺序结构的程序虽然能解决计算、输出 等问题,但不能做判断再
选择。对于要先做判断再选择的问题就要使用分支结构。分支结构的执行
是依据一定的条件选择执行路径,而不是严格按照语句出现的物理顺序。
分支结构的程序设计方法的关键在于构造合适的分支条件和分析程序流
程,根据不同的程序流程选择适当的分支语句。分支结构适合于带有逻辑
或关系比较等条件判断的计算,设计这类程序时往往都要先绘制其程序流
程图,然后根据程序流程写出源程序,这样做把程序设计分析与语言分开,
使得问题简单化,易于理解。程序流程图是根据解题分析所绘制的程序执
行流程图。
       学习分支结构不要被分支嵌套所迷惑,只要正确绘制出流程图,
弄清各分支所要执行的功能,嵌套结构也就不难了。嵌套只不过是分支中
又包括分支语句而已,不是新知识,只要对双分支的理解清楚,分支嵌套
是不难的。下面我介绍几种基本的分支结构。
       ①if(条件)
       {分支体}
       这种分支结构中的分支体可以是一条语句,此时―{}‖可以省略,也
可以是多条语句即复合语句。它有两条分支路径可选,一是当条件为真,
执行分支体,否则跳过分支体,这时分支体就不会执行。如:要计算 x 的
绝对值,根据绝对值定义,我们知道,当 x>=0 时,其绝对值不变,而 x<0
时其绝对值是为 x 的反号,因此程序段为:if(x<0)x=-x;
       ②if(条件)
       {分支 1}
       else
       {分支 2}
       这是典型的分支结构,如果条件成立,执行分支 1,否则执行分支
2,分支 1 和分支 2 都可以是 1 条或若干条语句构成。如:求 ax^2+bx+c=
0 的根
           分析:因为当 b^2-4ac>=0 时,方程有两个实根,否则(b^2-4ac<0)
有两个共轭复根。其程序段如下:
           main()
           {
           int a,b,c,d,x,y;
           printf("Please put the number of a,b&c from the quadratic
equation of one variable one by one\n");
           scanf("%d%d%d",&a,&b,&c);
           d=b*b-4*a*c;
           if(d<0)
           {
           printf("NO Root!Wrong!\n");
           }
           else
           {
           y=-b-sqrt(d)/2*a;
           x=-b+sqrt(d)/2*a;
           printf("The 1st equation root=%d\nThe 2nd equation root=%
d",y,x);
           }
           }
           ③IF 嵌套分支语句:其语句格式为:
           if(条件 1) {分支 1}
           else if(条件 2) {分支 2}
           else if(条件 3) {分支 3}
           ……
           else if(条件 n) {分支 n}
           else {分支 n+1}
           FOR 嵌套,其语句格式为:
    for(初值 A;范围 A;步长 A)
    {
    for(初值 B;范围 B;步长 B)
    {
    循环体
    }
    }
    FOR 嵌套例子:九九乘法表
    main()
    {
    int a,b,c;
    for(a=1;a<=9;a++)
    {
    for(b=1;b<=a;b++)
    {
    c=b*a;
    printf("%dx%d=%d ",b,a,c);
    }
    printf("\n");
    }
    }
    嵌套分支语句虽可解决多个入口和出口的问题,但超过 3 重嵌套
后,语句结构变得非常复杂,对于程序的阅读和理解都极为不便,建议嵌
套在 3 重以内,超过 3 重可以用下面的语句。
    ④switch 开关语句:该语句也是多分支选择语句,到底执行哪一
块,取决于开关设置,也就是表达式的值与常量表达式相匹配的那一路,
它不同 if…else 语句,它的所有分支都是并列的,程序执行时,由第一分支
开始查找,如果相匹配,执行其后的块,接着执行第 2 分支,第 3 分支……
的块,直到遇到 break 语句;如果不匹配,查找下一个分支是否匹配。这
个语句在应用时要特别注意开关条件的合理设置以及 break 语句的合理应
用。
     (3)循环结构:
     循环结构可以减少源程序重复书写的工作量,用来描述重复执行
某段算法的问题,这是程序设计中最能发挥计算机特长的程序结构, C 语
言中提供四种循环,即 goto 循环、while 循环、do?Cwhile 循环和 for 循环。
四种循环可以用来处理同一问题,一般情况下它们可以互相代替换,但一
般不提倡用 goto 循环,因为强制改变程序的顺序经常会给程序的运行带来
不可预料的错误,在学习中我们主要学习 while、do…while、for 三种循环。
常用的三种循环结构学习的重点在于弄清它们相同与不同之处,以便在不
同场合下使用,这就要清楚三种循环的格式和执行顺序,将每种循环的流
程图理解透彻后就会明白如何替换使用,如把 while 循环的例题,用 for 语
句重新编写一个程序,这样能更好地理解它们的作用。特别要注意在循环
体内应包含趋于结束的语句(即循环变量值的改变),否则就可能成了一个
死循环,这是初学者的一个常见错误。
     在学完这三个循环后,应明确它们的异同点:用 while 和 do…whi
le 循环时,循环变量的初始化的操作应在循环体之前,而 for 循环一般在语
句 1 中进行的;while 循环和 for 循环都是先判断表达式,后执行循环体,
而 do…while 循环是先执行循环体后判断表达式,也就是说 do…while 的循
环体最少被执行一次,而 while 循环和 for 就可能一次都不执行。另外还要
注意的是这三种循环都可以用 break 语句跳出循环,用 continue 语句结束
本次循环,而 goto 语句与 if 构成的循环,是不能用 break 和 continue 语
句进行控制的。
     顺序结构、分支结构和循环结构并不彼此孤立的,在循环中可以
有分支、顺序结构,分支中也可以有循环、顺序结构,其实不管哪种结构,
我们均可广义的把它们看成一个语句。在实际编程过程中常将这三种结构
相互结合以实现各种算法,设计出相应程序,但是要编程的问题较大,编
写出的程序就往往很长、结构重复多,造成可读性差,难以理解,解决这
个问题的方法是将 C 程序设计成模块化结构。
           (4)模块化程序结构
           C 语言的模块化程序结构用函数来实现,即将复杂的 C 程序分为
若干模块,每个模块都编写成一个 C 函数,然后通过主函数调用函数及函
数调用函数来实现一大型问题的 C 程序编写,因此常说:C 程序=主函数+
子函数。 因此,对函数的定义、调用、值的返回等中要尤其注重理解和应
用,并通过上机调试加以巩固。
           三.掌握一些简单的算法
           编程其实一大部分工作就是分析问题,找到解决问题的方法,再
以相应的编程语言写出代码。这就要求掌握算法,根据我们的《 C 程序设
计》教学大纲中,只要求我们掌握一些简单的算法,在掌握这些基本算法
后,要完成对问题的分析就容易了。如两个数的交换、三个数的比较、选
择法排序和冒泡法排序,这就要求我们要清楚这些算法的内在含义
           结语:当我们把握好上述几方面后,只要同学们能克服畏难、厌
学、上课能专心听讲,做好练习与上机调试,其实 C 语言并不难学 。
           C 源程序的关键字------------------------------------------------------------
---------------------------
           所谓关键字就是已被 C 语言本身使用, 不能作其它用途使用的字。
例如关键字不能用作变量名、函数名等
           由 ANSI 标准定义的 C 语言关键字共 32 个 :
           auto double int struct break else long switch
           case enum register typedef char extern return union
           const float short unsigned continue for signed void
           default goto sizeof volatile do if while static
           根据关键字的作用,可以将关键字分为数据类型关键字和流程控
制关键字两大类。
           1 数据类型关键字
           A. 基本数据类型( 5 个)
           void :声明函数无返回值或无参数,声明无类型指针,显式丢弃
运算结果
     char :字符型类型数据,属于整型数据的一种
     int :整型数据,通常为编译器指定的机器字长
     float :单精度浮点型数据,属于浮点数据的一种
     double :双精度浮点型数据,属于浮点数据的一种
     B . 类型修饰关键字( 4 个)
     short :修饰 int,短整型数据,可省略被修饰的 int。
     long :修饰 int,长整形数据,可省略被修饰的 int。
     signed :修饰整型数据,有符号数据类型
     unsigned :修饰整型数据,无符号数据类型
     C . 复杂类型关键字( 5 个)
     struct :结构体声明
     union :共用体声明
     enum :枚举声明
     typedef :声明类型别名
     sizeof :得到特定类型或特定类型变量的大小
     D . 存储级别关键字( 6 个)
     auto :指定为自动变量,由编译器自动分配及释放。通常在栈上
分配
     static :指定为静态变量,分配在静态变量区,修饰函数时,指
定函数作用域为文件内部
     register :指定为寄存器变量,建议编译器将变量存储到寄存器
中使用,也可以修饰函数形参,建议编译器通过寄存器而不是堆栈传递参
数
     extern :指定对应变量为外部变量,即标示变量或者函数的定义
在别的文件中,提示编译器遇到此变量和函数时在其他模块中寻找其定义。
                               ,
     const :与 volatile 合称―cv 特性‖ 指定变量不可被当前线程/进程
改变(但有可能被系统或其他线程/进程改变)
                               ,
     volatile :与 const 合称―cv 特性‖ 指定变量的值有可能会被系统
或其他进程/线程改变,强制编译器每次从内存中取得该变量的值
       2 流程控制关键字
       A . 跳转结构( 4 个)
       return :用在函数体中,返回特定值(或者是 void 值,即不返回
值)
       continue :结束当前循环,开始下一轮循环
       break :跳出当前循环或 switch 结构
       goto :无条件跳转语句
       B . 分支结构( 5 个)
       if :条件语句,后面不需要放分号
       else :条件语句否定分支(与 if 连用)
       switch :开关语句(多重分支语句)
       case :开关语句中的分支标记
       default :开关语句中的―其他‖分治,可选。
       C . 循环结构( 3 个)
       for:for 循环结构,for(1;2;3)4;的执行顺序为 1->2->4->3->2...循
环,其中 2 为循环条件。在整个 for 循环过程中,表达式 1 只计算一次,表
达式 2 和表达式 3 则可能计算多次,也可能一次也不计算。循环体可能多
次执行,也可能一次都不执行。
       do :do 循环结构,do 1 while(2); 的执行顺序是 1->2->1...循
环,2 为循环条件
       while :while 循环结构,while(1) 2; 的执行顺序是 1->2->1...
循环,1 为循环条件
       [4]
             以上循环语句,当循环条件表达式为真则继续循环,为假则跳出
循环。
     [编辑本段]
     新标准
       在 ANSI 标准化后, 语言的标准在一段相当的时间内都保持不变,
                   C
尽管 C++继续在改进。(实际上,NormativeAmendment1 在 1995 年已经
开发了一个新的 C 语言版本。但是这个版本很少为人所知。)标准在 90 年
代才经历了改进,这就是 ISO9899:1999(1999 年出版)。这个版本就是通
常提及的 C99。它被 ANSI 于 2000 年 3 月采用。
       在 C99 中包括的特性有:
       对编译器限制增加了,比如源程序每行要求至少支持到 4095 字
节,变量名函数名的要求支持到 63 字节 (extern 要求支持到 31)
       预处理增强了。例如:
       宏支持取参数 #define Macro(...) __VA_ARGS__
       使用宏的时候,参数如果不写,宏里用 #,## 这样的东西会扩展
成空串。(以前会出错的)
       支持 // 行注释(这个特性实际上在 C89 的很多编译器上已经被
支持了)
       增加了新关键字 restrict, inline, _Complex, _Imaginary, _Bool


       支持 long long, long double _Complex, float _Complex 这样
的类型
       支持 <: :> <% %> %: %:%: ,等等奇怪的符号替代
       支持了不定长的数组。数组的长度就可以用变量了。声明类型的
时候呢,就用 int a[*] 这样的写法。不过考虑到效率和实现,这玩意并不是
一个新类型。所以就不能用在全局里,或者 struct union 里面,如果你用
了这样的东西,goto 语句就受限制了。
       变量声明不必放在语句块的开头,for 语句提倡这么写 for(int i=
0;i<100;++i) 就是说,int i 的声明放在里面,i 只在 for 里面有效。(VC
没有遵守这条标准,i 在 for 外也有效)
       当一个类似结构的东西需要临时构造的时候,可以用 (type_name)
{xx,xx,xx} 这有点像 C++ 的构造函数
       初始化结构的时候现在可以这样写:
       struct {int a[3], b;} hehe[] = { [0].a = , [1].a = 2 };
       struct {int a, b, c, d;} hehe = { .a = 1, .c = 3, 4, .b = 5}
// 3,4 是对 .c,.d 赋值的
       字符串里面,\u 支持 unicode 的字符
       支持 16 进制的浮点数的描述
       所以 printf scanf 的格式化串多支持了 ll / LL (VC6 里用的 I6
4) 对应新的 long long 类型。
       浮点数的内部数据描述支持了新标准,这个可以用 #pragma 编
译器指定
       除了已经有的 __line__ __file__ 以外,又支持了一个 __func__
可以得到当前的函数名
       对于非常数的表达式,也允许编译器做化简
       修改了对于 / % 处理负数上的定义,比如老的标准里 -22 / 7
= -3, -22 % 7 = -1 而现在 -22 / 7 = -4, -22 % 7 = 6
       取消了不写函数返回类型默认就是 int 的规定
       允许 struct 定义的最后一个数组写做 [] 不指定其长度描述
       const const int i; 将被当作 const int i; 处理
       增加和修改了一些标准头文件, 比如定义 bool 的 <stdbool.h>
定义一些标准长度的 int 的<inttypes.h> 定义复数的 <complex.h> 定义
宽字符的 <wctype.h>有点泛型味道的数学函数 <tgmath.h> 跟浮点数有
关的 <fenv.h>。<stdarg.h>里多了一个 va_copy 可以复制 ... 的参数。<t
ime.h> 里多了个 struct tmx 对 struct tm 做了扩展
       输入输出对宽字符还有长整数等做了相应的支持
       相对于 c89 的变化还有
       1、增加 restrict 指针
       C99 中增加了公适用于指针的 restrict 类型修饰符,它是初始访问
指针所指对象的惟一途径,因此只有借助 restrict 指针表达式才能访问对象。
restrict 指针指针主要用做函数变元,或者指向由 malloc()函数所分配的内
存变量。restrict 数据类型不改变程序的语义。
       如果某个函数定义了两个 restrict 指针变元,编译程序就假定它们
指向两个不同的对象,memcpy()函数就是 restrict 指针的一个典型应用示
例。C89 中 memcpy()函数原型如下:
        代码: void *memcpy (void *s1, const void *s2, size_t size);


        如果 s1 和 s2 所指向的对象重叠,其操作就是未定义的。memcp
y()函数只能用于不重叠的对象。C99 中 memcpy()函数原型如下:代码:voi
d *memcpy(void *restrict s1, const void *restrict s2,size_t size);
        通过使用 restrict 修饰 s1 和 s2 变元,可确保它们在该原型中指
向不同的对象。
        2、inline(内联)关键字
        内联函数除了保持结构化和函数式的定义方式外,还能使程序员写
出高效率的代码.函数的每次调用与返回都会消耗相当大的系统资源 ,尤其
是当函数调用发生在重复次数很多的循环语句中时 .一般情况下 ,当发生一
次函数调用时,变元需要进栈,各种寄存器内存需要保存.当函数返回时,寄存
器的内容需要恢复。如果该函数在代码内进行联机扩展,当代码执行时,
这些保存和恢复操作旅游活动会再发生,而且函数调用的执行速度也会大
大加快。函数的联机扩展会产生较长的代码,所以只应该内联对应用程序
性能有显著影响的函数以及长度较短的函数
        3、新增数据类型
        _Bool
        值是 0 或 1。C99 中增加了用来定义 bool、true 以及 false 宏的头
文件夹<stdbool.h>,以便程序员能够编写同时兼容于 C 与 C++的应用程序。
在编写新的应用程序时,应该使用
        <stdbool.h>头文件中的 bool 宏。
        _Complex and _Imaginary
        C99 标准中定义的复数类型如下:float_Complex; float_Imaginar
y; double_Complex; double_Imaginary; long double_Complex; long d
ouble_Imaginary.
        <complex.h>头文件中定义了 complex 和 imaginary 宏,并将它们
扩展为_Complex 和_Imaginary,因此在编写新的应用程序时,应该使用<std
bool.h>头文件中的 complex 和 imaginary 宏。
        long long int
        C99 标准中引进了 long long int(-(2e63 - 1)至 2e63 - 1)和 u
nsigned long long int(0 - 2e64 - 1)。long long int 能够支持的整数长
度为 64 位。
        4、对数组的增强
        可变长数组
        C99 中,程序员声明数组时,数组的维数可以由任一有效的整型
表达式确定,包括只在运行时才能确定其值的表达式,这类数组就叫做可
变长数组,但是只有局部数组才可以是变长的。
        可变长数组的维数在数组生存期内是不变的,也就是说,可变长
数组不是动态的。可以变化的只是数组的大小。可以使用*来定义不确定长
的可变长数组。
        数组声明中的类型修饰符
        在 C99 中,如果需要使用数组作为函数变元,可以在数组声明的
方括号内使用 static 关键字,这相当于告诉编译程序,变元所指向的数组将
至少包含指定的元素个数。也可以在数组声明的方括号内使用 restrict,vola
tile,const 关键字,但只用于函数变元。如果使用 restrict,指针是初始访问
该对象的惟一途径。如果使用 const,指针始终指向同一个数组。使用 vol
atile 没有任何意义。
        5、单行注释
        引入了单行注释标记 "//" , 可以象 C++一样使用这种注释了。
        6、分散代码与声明
        7、预处理程序的修改
        a、变元列表
        宏可以带变元,在宏定义中用省略号(...)表示。内部预处理标识
符__VA_ARGS__决定变元将在何处得到替换。例:#define MySum(...) s
um(__VA_ARGS__) 语句 MySum(k,m,n);
        将被转换成:sum(k, m, n); 变元还可以包含变元。例: #define
 compare(compf, ...)compf(__VA_ARGS__) 其中的 compare(strcmp,"s
mall", "large");将替换成:strcmp("small","large");
       b、_Pragma 运算符
       C99 引入了在程序中定义编译指令的另外一种方法:_Pragma 运
算符。格式如下:
       _Pragma("directive")
       其中 directive 是要满打满算的编译指令。_Pragma 运算符允许编
译指令参与宏替换。
       c、内部编译指令
       STDCFP_CONTRACT ON/OFF/DEFAULT 若为 ON,浮点表达
式被当做基于硬件方式处理的独立单元。默认值是定义的工具。
       STDCFEVN_ACCESS ON/OFF/DEFAULT 告诉编译程序可以访
问浮点环境。默认值是定义的工具。
       STDC CX_LIMITED_RANGE ON/OFF/DEFAULT 若值为 ON,
相当于告诉编译程序某程序某些含有复数的公式是可靠的。默认是 OFF。
       d、新增的内部宏
       __STDC_HOSTED__ 若操作系统存在,则为 1
       __STDC_VERSION__ 199991L 或更高。代表 C 的版本
       __STDC_IEC_599__ 若支持 IEC 60559 浮点运算,则为 1
       __STDC_IEC_599_COMPLEX__ 若支持 IEC 60599 复数运算,
则为 1
       __STDC_ISO_10646__ 由编译程序支持,用于说明 ISO/IEC 10
646 标准的年和月格式:yyymmmL
       9、复合赋值
       C99 中,复合赋值中,可以指定对象类型的数组、结构或联合表
达式。当使用复合赋值时,应在括弧内指定类型,后跟由花括号围起来的
初始化列表;若类型为数组,则不能指定数组的大小。建成的对象是未命
名的。
       例: double *fp = (double[]) {1.1, 2.2, 3.3};
       该语句用于建立一个指向 double 的指针 fp,且该指针指向这个 3
元素数组的第一个元素。 在文件域内建立的复合赋值只在程序的整个生存
期内有效。在模块内建立的复合赋值是局部对象,在退出模块后不再存在。


        10、柔性数组结构成员
        C99 中,结构中的最后一个元素允许是未知大小的数组,这就叫
做柔性数组成员,但结构中的柔性数组成员前面必须至少一个其他成员。
柔性数组成员允许结构中包含一个大小可变的数组。sizeof 返回的这种结构
大小不包括柔性数组的内存。包含柔性数组成员的结构用 malloc()函数进行
内存的动态分配,并且分配的内存应该大于结构的大小,以适应柔性数组
的预期大小。
        11、指定的初始化符
        C99 中,该特性对经常使用稀疏数组的程序员十分有用。指定的
初始化符通常有两种用法:用于数组,以及用于结构和联合。用于数组的
格式:[index] = vol; 其中,index 表示数组的下标,vol 表示本数组元素的
初始化值。
        例如: int x[10] = {[0] = 10, [5] = 30}; 其中只有 x[0]和 x[5]
得到了初始化.用于结构或联合的格式如下:
        member-name(成员名称)
        对结构进行指定的初始化时,允许采用简单的方法对结构中的指
定成员进行初始化。
        例如: struct example{ int k, m, n; } object = {m = 10,n =
200};
        其中,没有初始化 k。对结构成员进行初始化的顺序没有限制。
        12、printf()和 scanf()函数系列的增强
        C99 中 printf()和 scanf()函数系列引进了处理 long long int 和 un
signed long longint 数据类型的特性。long long int 类型的格式修饰符是
ll。在 printf()和 scanf()函数中,ll 适用于 d, i, o,u 和 x 格式说明符。另外,
C99 还引进了 hh 修饰符。当使用 d, i, o,u 和 x 格式说明符时,hh 用于指
定 char 型变元。ll 和 hh 修饰符均可以用于 n 说明符。
        格式修饰符 a 和 A 用在 printf()函数中时,结果将会输出十六进制
的浮点数。格式如下:[-]0xh, hhhhp + d 使用 A 格式修饰符时,x 和 p 必
须是大写。A 和 a 格式修饰符也可以用在 scanf()函数中,用于读取浮点数。
调用 printf()函数时,允许在%f 说明符前加上 l 修饰符,即%lf,但不起作用。


     13、C99 新增的库
     C89 中标准的头文件
     <assert.h> 定义宏 assert()
     <ctype.h> 字符处理
     <errno.h> 错误报告
     <float.h> 定义与实现相关的浮点值勤
     <limits.h> 定义与实现相关的各种极限值
     <locale.h> 支持函数 setlocale()
     <math.h> 数学函数库使用的各种定义
     <setjmp.h> 支持非局部跳转
     <signal.h> 定义信号值
     <stdarg.h> 支持可变长度的变元列表
     <stddef.h> 定义常用常数
     <stdio.h> 支持文件输入和输出
     <stdlib.h> 其他各种声明
     <string.h> 支持串函数
     <time.h> 支持系统时间函数
     C99 新增的头文件和库
     <complex.h> 支持复数算法
     <fenv.h> 给出对浮点状态标记和浮点环境的其他方面的访问
     <inttypes.h> 定义标准的、可移植的整型类型集合。也支持处理
最大宽度整数的函数
     <iso646.h> 首先在此 1995 年第一次修订时引进,用于定义对应
各种运算符的宏
     <stdbool.h> 支持布尔数据类型类型。定义宏 bool,以便兼容于 C
++
        <stdint.h> 定义标准的、可移植的整型类型集合。该文件包含在<
inttypes.h>中
        <tgmath.h> 定义一般类型的浮点宏
        <wchar.h> 首先在 1995 年第一次修订时引进,用于支持多字节和
宽字节函数
        <wctype.h> 首先在 1995 年第一次修订时引进,用于支持多字节
和宽字节分类函数
        14、__func__预定义标识符
        用于指出__func__所存放的函数名,类似于字符串赋值。
        15、其它特性的改动
        放宽的转换限制
        限制 C89 标准 C99 标准
        数据块的嵌套层数 15 127
        条件语句的嵌套层数 8 63
        内部标识符中的有效字符个数 31 63
        外部标识符中的有效字符个数 6 31
        结构或联合中的成员个数 127 1023
        函数调用中的参数个数 31 127
        不再支持隐含式的 int 规则
        删除了隐含式函数声明
        对返回值的约束
        C99 中,非空类型函数必须使用带返回值的 return 语句.
        扩展的整数类型
        扩展类型 含义
        int16_t 整数长度为精确 16 位
        int_least16_t 整数长度为至少 16 位
        int_fast32_t 最稳固的整数类型,其长度为至少 32 位
        intmax_t 最大整数类型
        uintmax_t 最大无符号整数类型
       对整数类型提升规则的改进
       C89 中,表达式中类型为 char,short int 或 int 的值可以提升为 int
或 unsigned int 类型.
       C99 中,每种整数类型都有一个级别.例如:long long int 的级别高
于 int, int 的级别高于 char 等.在表达式中,其级别低于 int 或 unsigned int
的任何整数类型均可被替换成 int 或 unsigned int 类型.
       有必要说明的是,c99 的 main()函数要求必须返回一个 int 值给
程序的激活者(通常是操作系统)0 表示正常推出,非 0 表示异常。
       但是各个公司对 C99 的支持所表现出来的兴趣不同。当 GCC 和
其它一些商业编译器支持 C99 的大部分特性的时候,微软和 Borland 却似乎
对此不感兴趣。


      C 语言图形编程


   TurboC 提供了非常丰富的图形函数,所有图形函数的原型均在 graph
ics. h 中,本节主要介绍图形模式的初始化、独立图形程序的建立、基本图
形功能、图形窗口以及图形模式下的文本输出等函数。另外,使用图形函
数时要确保有显示器图形驱动程序*BGI,同时将集成开发环境 Options/Lin
ker 中的 Graphicslib 选为 on,只有这样才能保证正确使用图形函数。图形
模式的初始化不同的显示器适配器有不同的图形分辨率。即是同一显示器
适配器,在不同模式下也有不同分辨率。因此,在屏幕作图之前,必须根
据显示器适配器种类将显示器设置成为某种图形模式,在未设置图形模式
之前,微机系统默认屏幕为文本模式(80 列,25 行字符模式),此时所有图
形函数均不能工作。设置屏幕为图形模式,可用下列图形初始化函数:
       void far initgraph(int far *gdriver, int far *gmode,char *path);
       其中 gdriver 和 gmode 分别表示图形驱动器和模式,path 是指图
形驱动程序所在的目录路径。有关图形驱动器、图形模式的符号常数及对
应的分辨率见下表。
       图形驱动程序由 Turbo C 出版商提供,文件扩展名为.BGI。 根据
不同的图形适配器有不同的图形驱动程序。例如对于 EGA、 VGA 图形适
配器就调用驱动程序 EGAVGA.BGI。
     图形驱动器、模式的符号常数及数值
     ━━━━━━━━━━━━━━━━━━━━━━━━━━━━
━━
     图形驱动器(gdriver) 图形模式(gmode)
     ───────────────────── 色调 分辨率
     符号常数 数值 符号常数 数值
     ━━━━━━━━━━━━━━━━━━━━━━━━━━━━
━━
     CGA 1 CGAC0 0 C0 320*200
     CGAC1 1 C1 320*200
     CGAC2 2 C2 320*200
     CGAC3 3 C3 320*200
     CGAHI 4 2 色 640*200
     ──────────────────────────────
     MCGA 2 MCGAC0 0 C0 320*200
     MCGAC1 1 C1 320*200
     MCGAC2 2 C2 320*200
     MCGAC3 3 C3 320*200
     MCGAMED 4 2 色 640*200
     MCGAHI 5 2 色 640*480
     ──────────────────────────────
     EGA 3 EGALO 0 16 色 640*200
     EGAHI 1 16 色 640*350
     ──────────────────────────────
     EGA64 4 EGA64LO 0 16 色 640*200
     EGA64HI 1 4 色 640*350
     ──────────────────────────────
     EGAMON 5 EGAMONHI 0 2 色 640*350
     ──────────────────────────────
     IBM8514 6 IBM8514LO 0 256 色 640*480
     IBM8514HI 1 256 色 1024*768
     ──────────────────────────────
     HERC 7 HERCMONOHI 0 2 色 720*348
     ──────────────────────────────
     ATT400 8 ATT400C0 0 C0 320*200
     ATT400C1 1 C1 320*200
     ATT400C2 2 C2 320*200
     ATT400C3 3 C3 320*200
     ATT400MED 4 2 色 320*200
     ATT400HI 5 2 色 320*200
     ──────────────────────────────
     VGA 9 VGALO 0 16 色 640*200
     VGAMED 1 16 色 640*350
     VGAHI 2 16 色 640*480
     ──────────────────────────────
     PC3270 10 PC3270HI 0 2 色 720*350
     ──────────────────────────────
     DETECT 0 用于硬件测试
     ━━━━━━━━━━━━━━━━━━━━━━━━━━━━
━━
     使用图形初始化函数设置 VGA 高分辨率图形模式#include
     int main()
     {
     int gdriver, gmode;
     gdriver=VGA;
     gmode=VGAHI;
     initgraph(&gdriver, &gmode, "c:\\caic\\bgi");
      bar3d(100, 100, 300, 250, 50, 1); /*画一长方体*/
      getch();
      closegraph();
      return 0;
      }
      有时编程者并不知道所用的图形显示器适配器种类,或者需要将
编写的程序用于不同图形驱动器,Turbo C 提供了一个自动检测显示器硬
件的函数,其调用格式为: void far detectgraph(int *gdriver, *gmode);
其中 gdriver 和 gmode 的意义与上面相同。 自动进行硬件测试后进行图形
初始化#include
      int main()
      {
      int gdriver, gmode;
      detectgraph(&gdriver, &gmode); /*自动测试硬件*/
      printf("the graphics driver is %d, mode is %d\n",
      gdriver,gmode); /*输出测试结果*/
      getch();
      initgraph(&gdriver, &gmode, "c:\\caic\\bgi");
      /* 根据测试结果初始化图形*/
      bar3d(10, 10, 130, 250, 20, 1);
      getch();
      closegraph();
      return 0;
      }
      上例程序中先对图形显示器自动检测,然后再用图形初始化函数
进行初始化设置,但 Turbo C 提供了一种更简单的方法, 即用 driver=DE
TECT 语句后再跟 initgraph()函数就行了。采用这种方法后,上例可改为:
      #include
      int main()
      {
     int gdriver=DETECT, gmode;
     initgraph(&gdriver, &gmode, "c:\\caic\\bgi");
     bar3d(50, 50, 150, 30, 50, 1);
     getch();
     closegraph();
     return 0;
     }
     另外,Turbo C 提供了退出图形状态的函数 closegraph(),其调
用格式为: void far closegraph(void);调用该函数后可退出图形状态而进
入文本方式( Turbo C 默认方式),并释放用于保存图形驱动程序和字体的
系统内存。


  [编辑本段]
  C 程序实例
     1.功能:求三个整数的平均值。程序如下:
     #include <stdio.h> /*载入头文件 stdio.h*/
     int main() /*主函数 main*/
     {
     int a,b,c,d; /*定义 a,b,c,d 为整型变量*/
     a=105;
     b=75;
     c=85;
     d=(a+b+c)/3;
     printf("d=%d\n",d); /*显示"d=某数"并换行,某数是 d 的值*/
     getchar(); /*等待用户,按任意键退出*/
     return 0;
     }
     2.功能:由键盘输入多边形的边数,求其内角和。程序如下:
     #include <stdio.h>
     int main()
      {
      /*辨别多边形是否成立,不成立重新执行 do-while 语句间的命令*/
      do
      {
      int x;
      printf("n=");
      scanf("%d",&x); /*由键盘输入 x 的值*/
      printf("%d\n",(x-2)*180); /*显示内角和,公式为(x-2)*180*/
                             ,
      /*辨别多边形是否成立,不成立显示―Error‖ 成立显示―Right‖*/
      if (x<=2)
      printf("Error\n");
      else
      printf("Right\n");
      }
      while (x<=2); /*do-while 语句*/
      getchar();
      return 0;
      }
      3.功能:由键盘输入两个数,显示器上显示较大数。程序如下:
      #include <stdio.h>
      int big(int,int); /*创建整型变量函数 big*/
      int main()
      {
      int x,y;
      scanf("%d,%d",&x,&y);
      printf("big is %d\n",big(x,y));
      /*输出 big 函数的值,因为 main 函数与用户自定义函数 big 无关
系,所以 printf 后的输出项表是 big(x,y),而不是 big(n1,n2)*/
      getchar();
      return 0;
    }
    int big(int n1,int n2) /*用户自定义函数 big*/
    {
    if (n1>n2)
    return n1; /*返回 n1 值*/
    else
    return n2; /*返回 n2 值*/
    }
    4.功能:由键盘输入一个等腰三角形的层数,画一个这样的三角形。
程序如下:
    #include <stdio.h>
    int main()
    {
    int i,j,n;
    printf("n:");
    scanf("%d",&n);
    for (i=1;i<=n;i++) /*循环 n 次,每次输出一行*/
    {
    for (j=1;j<=n-i;j++) /*输出该行前面的空格*/
    printf(" ");
    for (j=1;j<=2*i-1;j++) /*输出该行中的星号*/
    printf("*");
    printf("\n");
    }
    getchar();
    return 0;
    }
    注释:不能输入太多的行数,如 10000。
    5.功能:由键盘输入一个最大值,求 2 到这个最大值中的所有质
数(素数)。程序如下:
    #include <stdio.h>
    #include <math.h> /*数学文件*/
    int main()
    {
    int n,m,flag,i,j,num=1;
    printf("n:");
    scanf("%d",&n);
    printf("2~%d:\n",n);
    for (i=2;i<=n;i++) /*循环查找质数*/
    {
    flag=1;
    m=(int)sqrt(i);
    for (j=2;j<=m;j++)
    if (i%j==0) /*条件为真时表示不是质数,退出 for 循环*/
    {
    flag=0;
    break;
    }
    if (flag==1) /*条件为真时表示 i 是质数*/
    {
    printf("M",i);
    if (num++==10) /*每行最多输出 10 个数*/
    {
    printf("\n");
    num=1;
    }
    }
    }
    printf("\n");
         getchar();
         return 0;
         }
         6.功能:显示保护屏幕。程序如下:(此程序只能在 TC 下编译,
在其他编译器编译会报错)
         #include <stdlib.h> /*综合库*/
         #include <graphics.h> /*绘图库*/
         int main()
         {
         int gdriver=DETECT; /*定义图象驱动器为 DETECT*/
         int gmode=DETECT; /*定义图象模式为 DETECT*/
         long n; /*定义长型变量 n*/
         initgraph(&gdriver,&gmode,"E:\TC\bgi");
         /*进入图象状态(警告:""之间的是图象驱动器的路径,建议网友们
设置为空,即只有"",或设为编程系统的路径,例路径是 C:\TC,那么就是输
入 C:\TC\bgi)*/
         sleep(1); /*暂停一秒,以保证无误差进入图象状态*/
         for (n=1;n<=40000000;n++) /*画 40000000 个圆*/
         {
         setcolor(rand()); /*作图颜色随机*/
         circle(random(639),random(639),25); /*画圆,位置随机,半径为
25*/
         }
         getchar();
         return 0;
         }
       [编辑本段]
       经典教材:


         The C Programming Language
  本书是由 C 语言的设计者 Brian W. Kernighan 和 Dennis M.Ritchie
编写的一部介绍标准 C 语言及其程序设计方法的权威性经典著作。全面、
系统地讲述了 C 语言的各个特性及程序设计的基本方法,包括基本概念、
类型和表达式、控制流、函数与程序结构、指针与数组、结构、输入与输
出、UNIX 系统接口、标准库等内容。
     本书的讲述深入浅出,配合典型例证,通俗易懂,实用性强,适
合作为大专院校计算机专业或非计算机专业的 C 语言教材,也可以作为从
事计算机相关软硬件开发的技术人员的参考书。 在计算机发展的历史上,
没有哪一种程序设计语言像 C 语言这样应用如此广泛。
     本书原著 即为 C 语言的设计者之一 Dennis M.Ritchie 和著名的
计算机科学家 Brian W.Kernighan 合著的一本介绍 C 语言的权威经典著
作。我们现在见到的大量论述 C 语言程序设计的教材和专著均以此书为蓝
本。原著第 1 版中介绍的 C 语言成为后来广泛使用的 C 语言版本—— 标准
C 的基础。人们熟知的―hello,World‖程序就是由本书首次引入的,现在,这
一程序已经成为所有程序设 计语言入门的第一课。原著第 2 版根据 1987
年制定的 ANSIC 标准做了适当的修订,引入了最新的语言形式,并增加了
新的示例,通过简洁的描述、典型的示例,作者全面、系统、准确地讲述
了 C 语言的各 个特性以及程序设计的基本方法。对于计算机从业人员来
说,本书是一本必读的程序设计语 言方面的参考书。


    Expert C Programming


  《C 专家编程》展示了最优秀的 C 程序员所使用的编码技巧,并专门
开辟了一章对 C++的基础知识进行了介绍。
     书中 C 的历史、语言特性、声明、数组、指针、链接、运行时、
内存以及如何进一步学习 C++等问题进行了细致的讲解和深入的分析。全
书撷取几十几个实例进行讲解,对 C 程序员具有非常高的实用价值。
     本书可以帮助有一定经验的 C 程序员成为 C 编程方面的专家,对
于具备相当的 C 语言基础的程序员,本书可以帮助他们站在 C 的高度了解
和学习 C++。


    C Traps and Pitfalls


  作者以自己 1985 年在贝尔实验室时发表的一篇论文为基础,结合自己
的工作经验扩展成为这本对 C 程序员具有珍贵价值的经典著作。写作本书
的出发点不是要批判 C 语言,而是要帮助 C 程序员绕过编程过程中的陷阱
和障碍。
       全书分为 8 章,分别从词法分析、语法语义、连接、库函数、预
处理器、可移植性缺陷等几个方面分析了 C 编程中可能遇到的问题。最后,
作者用一章的篇幅给出了若干具有实用价值的建议。
       本书适合有一定经验的 C 程序员阅读学习,即便你是 C 编程高手,
本书也应该成为你的案头必备书籍。


    Pointers on C


  本书提供与 C 语言编程相关的全面资源和深入讨论。本书通过对指针
的基础知识和高级特性的探讨,帮助程序员把指针的强大功能融入到自己
的程序中去。
       全书共 18 章,覆盖了数据、语句、操作符和表达式、指针、函数、
数组、字符串、结构和联合等几乎所有重要的 C 编程话题。书中给出了很
多编程技巧和提示,每章后面有针对性很强的练习,附录部分则给出了部
分练习的解答。
       本书适合 C 语言初学者和初级 C 程序员阅读,也可作为计算机专
业学生学习 C 语言的参考。


    C: A Reference Manual
  本书是关于 C 语言的详尽的参考手册。最新的第 5 版增加了对 C99 标
准的介绍,更加符合当前读者学习 C 语言的需要。
     全书分为两大部分,共 24 章。第一部分讨论了 C 语言的所有语言
特征,包括词法、预处理机制、声明、类型、表达式、语句以及函数等基
本语言特性。第二部分讨论了 C 语言的标准库,根据它们不同的功能分别
详细介绍。为帮助读者理解相关概念,本书在讨论 C 语言及其标准库的各
方面问题时,提供了许多实例和解释。在第一部分的各章中还 提供了练习
题,书后则给出了主要练习的解答。这些练习的主要目的是帮助读者理解 C
语言的基本机制及其重要细节,其中并不涉及复杂的程序设计技术与问题。
     本书可以作为高等院校计算机专业 C 语言课程的教材和参考书,
对于一般的 C 程序员也有重要的参考价值。
     《C 语言参考手册》原书自出版以来,得到 C 程序员和 C 语言教
师的广泛推崇,更被普林斯顿等著名大学用作教学参考书。本书是经过更
新的第 5 版,包括对最新的 C 标准(ISO/IEC 9899:1999)的全面介绍。




    C Primer Plus


   本书全面讲述了 C 语言编程的相关概念和知识。
     全书共 17 章。第 1、2 章学习 C 语言编程所需的预备知识。第 3
到 15 章介绍了 C 语言的相关知识,包括数据类型、格式化输入输出、运算
符、表达式、流程控制语句、函数、数组和指针、字符串操作、内存管理、
位操作等等,知识内容都针对 C99 标准;另外,第 10 章强化了对指针的讨
论,第 12 章引入了动态内存分配的概念,这些内容更加适合读者的需求。
第 16 章和第 17 章讨论了 C 预处理器和 C 库函数、高级数据表示(数据结
构)方面的内容。附录给出了各章后面复习题、编程练习的答案和丰富的 C
编程参考资料。
     本书适合希望系统学习 C 语言的读者,也适用于精通其他编程语
言并希望进一步掌握和巩固 C 编程技术的程序员。
  [编辑本段]
  C 的学习方法
     [1][2]
              1:工欲善其事,必先利其器
     这里介绍几个学习 C 语言必备的东东:
     一个开发环境,例如 turbo C 2.0,这个曾经占据了 DOS 时代开
发程序的大半个江山。但是现在 windows 时代,用 turboC 感觉不方便,编
辑程序起来很吃力,并且不支持拖放 ,更没有函数变量自动感应功能,查
询参考资料也不方便。建议使用 VisualC,这个东西虽然比较大块头,但是
一旦安装好了,用起来很方便。
     2:葵花宝典
     学习计算机语言最好的方法是什么?答曰:读程序。
     没错,读程序是学习 C 语言入门最快,也是最好的方法。
     3:登峰造极
     写程序的最高境界其实就是掌握各种解决问题的手段(数据结构)
和解决问题的方法(算法)。[1]
  [编辑本段]
  C 语言考试复习五要点
     [3]
           一、了解试卷,胸中有数
     二、深刻理解,强化概念
     三、归纳整理,适当记忆
     四、注重实践,融会贯通
     五、多做练习,查漏补缺




  参考资料:
                1.   学习的―葵花宝典‖ C 语言的学习方法颇析
                2.   学习 C 语言的全过程 浅谈 C 语言学习方法
                3.   C 语言考试复习技巧大全
                4.   编程爱好者网站
扩展阅读:
   1.C 语言的专业介绍,评价 http://www.itpxzn.com
   2.编程源码交流:http://www.81yu.cn/forum-2-1.html
   3.网罗设计:http://bbs.wlsj56.cn 图文.电子书.书籍.光盘.素材.视频教
 程打包下载!
   4.1.C++培训和就业机会:http://www.5itjob.com
   5.编程中国 C 板块:http://www.bccn.net/Article/kfyy/cyy/Index.html
  pascal




  参见:
      布莱士·帕斯卡
      压强
  [编辑本段]
  Pascal 语言
      Pascal 是一种计算机通用的高级程序设计语言。它由瑞士 Niklau
s Wirth 教授于六十年代末设计并创立。
      以法国数学家命名的 Pascal 语言现已成为使用最广泛的基于 DO
S 的语言之一,其主要特点有:严格的结构化形式;丰富完备的数据类型;
运行效率高;查错能力强。
      正因为上述特点,Pascal 语言可以被方便地用于描述各种算法与
数据结构。尤其是对于程序设计的初学者,Pascal 语言有益于培养良好的
程序设计风格和习惯。IOI(国际奥林匹克信息学竞赛)把 Pascal 语言作为三
种程序设计语言之一, NOI(全国奥林匹克信息学竞赛)把 Pascal 语言定为
唯一提倡的程序设计语言,在大学中 Pascal 语言也常常被用作学习数据结
构与算法的教学语言。
      在 Pascal 问世以来的三十余年间,先后产生了适合于不同机型的
各种各样版本。其中影响最大的莫过于 Turbo Pascal 系列软件。它是由美
国 Borland 公司设计、研制的一种适用于微机的 Pascal 编译系统。该编译
系统由 1983 年推出 1.0 版本发展到 1992 年推出的 7.0 版本,其版本不断
更新,而功能更趋完善。
      下面列出 Turbo Pascal 编年史
    出
              版本名称        主要特色
版年代

              Turbo
    198
          Pascal 1.0
3


              Turbo
          Pascal 2.0



              Turbo-87
                          提高实数运算速度并扩大值域
          Pascal

    198       Turbo
                          增加图形功能
5         Pascal 3.0

              Turbo BCD
                          特别适合应用于商业
          Pascal

    198       Turbo
                          提供集成开发环境(IDE),引入单元概念
7         Pascal 4.0

    198       Turbo
                          增加调试功能
8         Pascal 5.0

    198       Turbo
                          支持面向对象的程序设计(OPP)
9         Pascal 5.5

    199       Turbo
                          提供面向对象的应用框架和库(Turbo Vision)
0         Pascal 6.0

    199       Turbo
                          面向对象的应用系统、更完善的 IDE
2         Pascal 7.0

              Turbo
          Vision 2.0
                              Object Windows 库、
    199       Borland
                                 __(For Windows) 提供对 OLE 多媒体应用
3         Pascal 7.0 开发
                            开发的支持

    199       Delphi
5         (Object Pascal)

              Visual
          Pascal

              Free
          Pascal

    Turbo Pascal 语言是编译型程序语言,它提供了一个集成环境的工作
系统,集编辑、编译、运行、调试等多功能于一体
          ps:高级语言发展过程中,PASCAL 是一个重要的里程碑。PASCA
L 语言是第一个系统地体现了 E.W.Dijkstra 和 C.A.R.Hoare 定义的结构化程
序设计概念的语言。1971 年,瑞士联邦技术学院尼克劳斯·沃尔斯(N.Wirt
h)教授发明了另一种简单明晰的电脑语言,这就是以电脑先驱帕斯卡的名
字命名的 PASCAL 语言。PASCAL 语言语法严谨,层次分明,程序易写,
具有很强的可读性,是第一个结构化的编程语言。它一出世就受到广泛欢
迎,迅速地从欧洲传到美国。沃尔斯一生还写作了大量有关程序 设计、算
                             。
法和数据结构的著作,因此,他获得了 1984 年度―图灵奖‖
          Pascal 有 5 个主要的版本,分别是 Unextended Pascal、Extend
ed Pascal、Object-Oriented Extensions to Pascal、Borland Pascal 和
Delphi Object Pascal。其中,Unextended Pascal、Extended Pascal
和 Object-Oriented Extensions to Pascal 是由 Pascal 标准委员会所创立
和维护的,Unextended Pascal 类似于瑞士 Niklaus Wirth 教授和 K.Jense
n 于 1974 年联名发表的 Pascal 用户手册和报告,而 Extended Pascal 则
是在其基础上进行了扩展,加入了许多新的特性,它们都属于正式的 Pasc
al 标准;Object-Oriented Extensions to Pascal 是由 Pascal 标准委员会
发表的一份技术报告,在 Extended Pascal 的基础上增加了一些用以支持
面向对象程序设计的特性,但它属于非正式的标准。Borland Pascal 和 De
lphi Object Pascal 是由 Borland 公司专门为其开发的编译工具设计的 Pas
cal 语言,前者是用于 DOS 的 Turbo Pascal 系列和 Windows 3.x 的 Turb
o Pascal for Windows 的传统高级语言,后者是用于 Windows 的 Delphi
和 Linux 的 Kylix 的面向对象程序设计语言,它们都不是正式的 Pascal 标
准,具有专利性。但由于 Turbo Pascal 系列和 Delphi 功能强大并且广为
流行,Borland Pascal 和 Delphi Object Pascal 已自成为一种标准,为许
多人所熟悉。
      看到这里,你可能会发觉我的回答与你最初的设想不同。你原来
可能是想问 Turbo Pascal 有几个版本,然而我却回答了 Pascal 语言有几
个版本。这就是初学者常有的一个错误认识:Pascal 是一种编程工具。实
际上,Pascal 是一种程序设计语言的名称(从一般意义上说,Pascal 也可
以是指人名,它的取名原本就是为了纪念十七世纪法国著名哲学家和数学
家 Blaise Pascal),而不是编程工具。刚才我是纯粹从字面意思上来回答
这个问题。
      ―在 turbo pascal 中不能使用标准 pascal 的紧缩字符型数组!tur
bo pascal 建立文件也有自己的语法规则!assign!!! ‖
      PASCAL 是一门编程语言,而 TURBO PASCAL/Free Pascal 是 P
ASCAL 程序的编译系统.
      用 pascal 编辑的程序能在 turbopascal/Free Pascal 中运行
      Pascal 只是一门语言,而 Turbo Pascal/Free Pascal 是编译器
      这两个是不能比较的
      你可以把两个语言放在一起比较,或者两个编译器放在一起比较
      而一切编译器都是基于语言的,因此不会有某个编译器不能适应
语言
      在中国的信息学奥林匹克竞赛中,过去比较常用的 Pascal 编程工
具是 Turbo Pascal。Turbo Pascal 是 DOS 下的一种 16 位编程工具,在 D
elphi 出现之前,它是世界上最多人使用的 Pascal 编程工具,拥有编译速度
极快的先进编译器和功能强大而又简便易用的集成开发环境( IDE),在微
机程序员中广为流行,正是它的出现奠定了 Pascal 在 DOS/Windows 平台
上不可动摇的根基,现在常见的版本有 Turbo Pascal 5.5、Turbo Pascal
6.0 和 Borland Turbo Pascal with Objects 7.0。Turbo Pascal 6.0 与 T
urbo Pascal 5.5 相比,主要是 IDE 更为强大,而其程序设计功能改变不大,
只是增加了一些新的功能,例如可以内嵌 asm 汇编语句等。而 Borland Tu
rbo Pascal with Objects 7.0(简称 Borland Pascal 7.0)则有了新的飞
跃,首先是 IDE 进一步加强,提供了程序浏览器,然后是程序设计功能有
了很大的提升,新增了一些十分有用的标准子 程序,支持比较完善的面向
对象程序设计功能,并提供了 DOS 实模式、DOS 保护模式和 Windows 模
式三种程序编译模式,能够编写出可以使用扩充内存( XMS)的保护模式
应用程序或者在 Windows 3.x 下运行的 Windows 程序,另外还提供了一个
对象窗口库(OWL),使用它可以快速的开发出具有一致的视窗界面(DO
S 或 Windows 3.x)的应用程序。Borland Pascal 7.0 在 1992 年推出,是
Turbo Pascal 系列在 DOS 下的最后版本。
       现在,随着 Turbo Pascal 逐渐被淘汰,全国信息学奥林匹克竞赛
决赛(NOI)和国际信息学奥林匹克竞赛(IOI)已经指定 Free Pascal 为
比赛使用的 Pascal 编程工具。Free Pascal 是由一个国际组织开发的 32
位 Pascal 编程工具,属于共享软件,可用于各种操作系统。根据编译选项
的不同,它可以使用 Borland Pascal 兼容语法、Delphi 2 Object Pascal
语法或者其它语法进行编写程序。由于它拥有 32 位的编译器,而且一直在
更新发展中,因此它的功能比 Borland Pascal 更加强大,拥有许多现代程
序设计的特征,但同时也很不成熟,存在很多漏洞。Free Pascal 正处于发
展初期,相应的函数库十分少,对程序员的吸引力远比不上拥有 VCL 和 C
LX 的 Delphi 和 Kylix。
       Pascal 中基本符号以及保留字:
       pascal 语言只能使用一下几类基本符号:
       (1)大小写英文字母
       A B C D E F G H I J K L M N O P Q R S T U V W X
 Y Z
       a b c d e f g h i j k l m n o p q r s t u v w x y z
          (2)数字
          1 2 3 4 5 6 7 8 9 0
          (3)其他符号
          + - * / = &lt;&gt; &lt;= &gt;= &lt; &gt; ( ) [ ] { } := , . ; :
.. '
          注意,pascal 语言除了可以使用以上规定的字符外,不得使用其他
任何符号。
          补充说明 FreePascal(FP):
          Free Pascal 是一个在多种版本 Pascal 和 Delphi 下的产物,目前
比较成熟的版本是由 FreePascal.org 发布的 1.0.10 版本,由于是 Pascal
上的改版,在 FP 里加入了很多以前没有的东西,例如:FillChar 系列内存
块赋值语句,用 Power 代替了**(乘方),但是**还是可以使用。
          另外 FP 加强了与内存的互容性,增大对内存的支持,FP 里的内
存限制是 TP 和 BP 里的将近上万倍。
          FP 还进一步加强了单元支持、            显卡
                         面向对象程序设计的支持、 (声
卡)的支持、图形高级覆盖的支持、Windows\Linux\OS/2\..等众多系统的
支持。在 FP 的较稳定版本中,可以方便的利用 Win32 编译模式,编译出
Windows 应用程序,与 Delphi 的功能相当。同时对动态连接库、控件、数
据库、文件、网络、OpenGL 的深入支持,使得 FP 脱颖而出。
          更值得提出的是,FP 支持 Delphi 及 C++的部分语言,例如:A+
=2 这样的 C Style 语言,在 FP 里完美支持。
          FP 中支持单目、双目操作符,即所有版本的 Pascal 的符号和―@‖
等特殊符号。
          FreePascal.org 现在正在修订 FP 2.0 的版本,但使用起来并没有
1.0.10 那样轻松,稳定性也下降不少。
          截止 09 年头,版本到了 2.2.4.
          FP 现为竞赛推荐工具
       [编辑本段]
       pascal 教材
     第一节 Pascal 语言的特点
     信息学奥林匹克竞赛是一项益智性的竞赛活动,核心是考查参赛
选手的智力和使用计算机编程解题的能力。信息学奥林匹克竞赛要求参赛
选手有如下能力:针对竞赛题目中的要求构建数学模型,构造出有效的算
法和选用相应的数据结构,写出高级语言程序,上机调试通过。程序设计
是信息学奥林匹克竞赛的基本功,因此,青少年参与竞赛活动的第一步是
必须掌握一门高级语言及其程序设计方法。
     以纪念法国数学家而命名的 Pascal 语言是使用最广泛的计算机高
级语言之一,被国际上公认为程序设计教学语言的典范。其主要特点有:
严格的结构化形式;丰富完备的数据类型;运行效率高;查错能力强。正
因为这些特点,Pascal 语言可以被方便地用于描述各种数据结构和算法,
编写出高质量的程序。尤其是对于青少年程序设计初学者,Pascal�语言有
利于顺利入门,有益于从一开始培养良好的程序设计风格和习惯,越来越
多的各类学校都把 Pascal 语言作为程序设计教学的第一语言。IOI(国际奥
         把                       �
林匹克信息学竞赛) Pascal 语言规定为二种程序设计语言之一, NOI(全
国信息学奥林匹克竞赛)把 Pascal 语言定为唯一提倡的程序设计语言,NOI
p(全国信息学奥林匹克联赛)把 Pascal 定为最主要的程序设计语言。
     Pascal 语言有多种版本,本教材采用的 Turbo Pascal 7.0(或 B
orland Pacsal 7.0) 是目前 PC 机上使用最多的一种高效 Pascal,是迄今
为止 DOS 环境下的最高版本。Turbo Pascal 7.0 所需硬件环境是任意型
号的 PC 机,并且仅需一台 1.44M 软盘驱动器(�当然有其它条件更好);最
小软件系统包括 Turbo.exe(集成环境)和 Turbo.tpl(标准单元库)两个文件,
如果包括 Turbo.hlp(求助文件)则更有利于学习。Turbo Pascal 7.0 可以工
作在 DOS 操作系统或 Windows 操作系统环境下。
     第一课   Pascal 语言知识
     一、Pascal 语言概述
     PASCAL 语言是一种算法语言,它是瑞士苏黎世联邦工业大学的
沃思教授于 1968 年设计完成的,1971 年正式发表。PASCAL 语言是在 AL
GOL60 的基础上发展而成的。它是一种结构化的程序设计语言。它的功能
强、编译程序简单,是 70 年代影响最大一种算法语言。
    从使用者的角度来看,PASCAL 语言有以下几个主要的特点:
    ⒈ 结构化
    PASCAL 可以方便地书写出结构化程序。这就保证程序的正确性
和易读性。在结构化这一点上,比其它算法语言更好一些。
    ⒉ 数据类型丰富
    PASCAL 提供了整数型、实型型、字符型、布尔型、枚举型、子
界型以及由以上类型构成的数组类型、集合类型、记录类型和文件类型。
此外,还提供了其它许多语言中所没有的指针类型。丰富的数据结构和上
述的结构化性质,使得 PASCAL 可以被方便地用来描述复杂的算法。
    ⒊ 适用性好
    既适用于数值运算,也适用于非数值运算领域。有些语言只适用
于数值计算,有些语言则适用于商业数据处理和管理领域。PASCAL 的功
能较强,能广泛应用于各种领域。
    ⒋ 书写较自由
    不象有些算法语言那样对程序的书写格式有严格的规定。 PASCA
L 允许一行写多个语句,一个语句可以分写在多行上,这样就可以使 PASC
AL 程序写得象诗歌格式一样优美,便于阅读。
    由于以上特点,许多学校选 PASCAL 作为程序设计课程中的一种
主要的语言。它能给学生严格而良好的程序设计的基本训练。培养学生结
构化程序设计的风格。
    二、Pascal 语言程序的基本结构
    任何程序设计语言都有一定的规则。使用 PASCAL 语言必须遵循
其本身所规定的规则来编写程序。尽管不同版本的 PASCAL 语言所采用的
符号的数量、形式不尽相同,但其基本成分一般都符合标准 PASCAL 的规
定。下面我们首先来了解 Pascal 语言的程序基本结构。
    为了明显起见,先举一个最简单的 PASCAL 程序例子:
    【例1】
    program li1(input,output); {程序首部}
       const pi=3.1415926; {程序体 说明部分}
       var r,l,s:real;
       begin {执行部分}
       write(‗input r:‘);
       readln(r);
       s:=pi*r*r;
       l:=2*pi*r;
       writeln(‗s=‘,s);
       writeln(‗l=‘,l);
       readln;
       end.{ 程序体}
       从这个简单的程序可以看到:
       ⒈ 一个 PASCAL 程序分为两个部分:程序首部和程序体(或称分
程序)。
       ⒉ 程序首部是程序的开头部分,它包括:
       ⑴程序标志。用"program"来标明这是一个 PASCAL 程序。PASC
AL 规定任何一个 PASCAL 程序的首部都必须以此字开头。在 free pascal
语言中,首部也可省略。
       ⑵程序名称。由程序设计者自己定义,如例中的 li1。在写完程序
首部之后,应有一个分号。
       ⒊ 程序体是程序的主体,在有的书本里也称"分程序"。程序体包
括说明部分(也可省略)和执行部分两个部分。
       ⑴说明部分用来描述程序中用到的变量、常量、类型、过程与函
数等。本程序中第二行是"变量说明",用来定义变量的名称、类型。
       PASCAL 规定,凡程序中用到的所有变量、符号常量、数组、过
程与函数、记录、文件等数据都必须"先说明,再使用"。
       ⑵执行部分的作用是给出需要计算机执行的操作。
       执行部分以"begin"开始,以"end"结束,其间有若干个语句,语句
之间以分号隔开。执行部分之后有一个句点,表示整个程序结束。
      ⒋ PASCAL 程序的书写方法比较灵活。书写程序应结构清晰、容
易阅读理解。在编写程序时希望读者尽量模仿本书中例题程序格式。
      ⒌ 在程序中,一对大括号间的文字称为注释。注释的内容由人们
根据需要书写,可以用英语或汉语表示。注释可以放在任何空 格可以出现
的位置。执行程序时计算机对注释不予理睬。
      三、Free Pascal 语言系统的使用
      目前,信息学竞赛使用的 Pascal 语言系统是 free Pascal,下面
我们就来学习 free Pascal 的使用。
      1. 系统的启动




                     free pascal


      在运行系统目录下的启动程序 fp.EXE,即可启动系统。屏幕上出
现如图 1 所示的集成环境。
      2.free Pascal 系统集成环境简介
      最顶上一行为主菜单。中间蓝色框内为编辑窗口,在它个编辑窗
口内可以进行程序的编辑。最底下一行为提示行,显示出系统中常用命令
的快捷键,如打开一个文件的快捷键为 F3,将当前编辑窗口中文件存盘的
快捷键为 F2,获得系统帮助的快捷键为 F1,等等。
      3. 新建程序窗口
      按 F10 进行主菜单,选择 FILE 菜单,执行其中 New 命令。就可
建立一个新的程序窗口(默认文件名为 Noname00.pas 或 Noname01.pas
等)。
      4. 程序的输入、编辑与运行
      在当前程序窗口中,一行一行的输入程序。程序窗口是一个编辑
器。所以对程序的编辑与其它编辑器相似,类似记事本程序。
     当程序输入完毕之后,一般要先按 Alt+F9(或执行 compile 菜单
中 compile 命令)对程序进行编译。如果程序有语法错误,则会在程序窗
口的下方显示错误信息。若无语法错误,则窗口正中央会出现一个对话框,
提示编译成功。接下来,我们可以运行程序了。
     程序的运行可以通过按 ALT+R 打开 RUN 菜单中的 RUN 命令,或
直接按快捷键 CTRL+F9。则可以在用户窗口中输出运行结果。通常在程序
运行结束后系统回到 Pascal 系统的集成环境,因此要查看运行结果,要按
ALT+F5 将屏幕切换到用户屏幕。
     5.程序的保存与打开
     当我们想把程序窗口中的程序存入磁盘时,可以通过按 F2 键(或
执行 File 菜单中的 save 命令)来保存程序。第一次保存文件时屏幕上会出
现一个对话框要求输入文件名(默认扩展名为.pas)。
     当我们要将磁盘上的程序文件中的 PASCAL 程序装入窗口时,可
按 F3(或执行 File 菜单中的 Open 命令)来装入程序,此时系统也会弹出一
个对话框要求输入要打开的文件名,或直接在文件对话框列表中选择所要
的文件,然后回到打开文件。(.pas 文件,可以由记事本打开)
  ada


  目录[隐藏]


        通用程序设计语言
        游戏角色
        水族馆
        人名
        ADA 腺苷脱氨酶
        美国糖尿病协会(ADA)
        通用程序设计语言
        游戏角色
        水族馆
        人名
        ADA 腺苷脱氨酶
        美国糖尿病协会(ADA)



  [编辑本段]
  通用程序设计语言
        Ada 是一种表现能力很强的通用程序设计语言,它是 美国国防部
为克服软件开发危机,耗费巨资,历时近 20 年研制成功的。它被誉为第四
代计算机语言的成功代表。美国国防部之所以把这种语言取名为 Ada,是
为了纪念奥左斯特·艾达·洛夫莱斯伯爵夫人(Augusta Ada Lovlace,1815-
1852),她是英格兰诗人拜伦(Byron)勋爵的女儿,曾对现代计算机技术之父
查尔斯·巴贝奇(Charles Babage,1791-1871)的笔记、手稿进行了整理和
修正。从某种意义上说,她是世界上第一位计算机程序员。与其他流行的
程序设计语言不同,Ada 语言不仅体现了许多现代软件的开发原理,而且
将这些原理付诸实现。因此,Ada 语言的使用可大大改善软件系统的清晰
性、可靠性、有效性、可维护性。Ada 是现有的语言中无与伦比的一种大
型通用程序设计语言,它是现代计算机语言的成功代表,集中反映了程序
语言研究的成果。Ada 的出现,标志着软件工程成功地进入了国家和国际
的规模。在一定意义上说,Ada 还刺破了―冯·偌依曼思维模式‖ (Von New
man Mind-set) 的桎梏,连同 Ada 的支持环境(APSE)一起,形成了新一派
的所谓 Ada 文化。它是迄今为止最复杂、最完备的软件工具。Ada 语言是
美国国防部指定的唯一的一种可用于军用系统开发的语言,我国军方也将 A
                                )
da 作为军内开发标准(GJB 1383《程序设计语言 Ada》 。


     特征


  Ada 语言最早是针对嵌入式和实时系统设计的,并且在今天依然在这
方面使用广泛。Ada95 版,是由 INTERMETRICS 公司的塔克。塔夫特于 9
2 到 95 年间设计的,当时主要是希望改进对于 系统,数字,财务软件编程
的支持。
       Ada 语言的重要特征就是其键入式风格,模块化设计,编译检查,
平行处理,异常处理及泛型编程。Ada 在 95 年加入了对面向对象设计的支
持,包括动态分配等。
       Ada 的编译检查主要是针对没有分配的内存读写的保护,堆栈溢
出错误,单个错误空闲,队列读写错误以及其他可以避免的小问题。这些
检查可以在为增加效率的情况下被取消,但是在编译的时候他们却能带来
很高的效率。同样它也包括对程序的严正的设置。因为这些原因,它被广
泛应用于一些非常重要的系统中,例如航空电子学, 武器及航天飞行器的
操作系统中。
       同样它支持很多的编译时间检查,这些检查被用来避免一些错误
的发生。这种错误往往是在其他语言中在运行以前都不能被察觉到的,需
要在源码中加入特殊的检查设置才能被发现。
       Ada 的动态内存管理非常安全和高规格,它类似于 JAVA 语言却不
同于 C 语言的。这种特殊功能并不需要特殊的运行设置。尽管这种语言的
语意结构允许对于不能读写的目标进行自动的碎片搜集,但是大多数运行
都不支持它。Ada 却支持有限形式基于区域的存储管理。无效的读写常在
运行时候被检查出来(除非这种检测被人为关闭)并且有时候在编译时候
就被发现。
     Ada 语言的定义同国际标准化组织(ISO)的标准有很大不同,因
为他是一个自由内容形式的。这种做法的后果是被广大程序员只能从它的
标准化文档(普遍认为是 Ada 的参考使用手册(ARM))寻找细节性的技术
问题,但是普遍情况是一本标准教科书却可以在其他不同语言上使用。
     Ada 语言由严格的巴斯特范式定义,但是不适合一般人阅读.它是
第一种同时拥有 IEC/ISO/美国军用标准认证的语言.其编译器经过严格的审
查,以确保同样的代码在任一编译器上产生同样的可执行效果 .并且保证并
行性在代码级可以在无操作系统下同样运行
     Ada 最初设计时关注于 3 个最重要的问题:程序的稳定性和可维
护性,程序设计和人的行为接近,并且高效。这份语言的修订版是为了提
供更大的灵活性和扩展性,存储管理的额外控制和同步,以及标准化的程
序包以支持重要的应用程序领域,同时保留原来的重点。对于程序设计语
言促进可靠性和简化维护难度的需求已被确立。因此程序可读性的重要性
高于轻松地写代码。例如,语言规则要求程序变量应当明确声明并指定它
们的类型。由于变量的数据类型是不变的,编译器可以确保对于变量的操
作适用于该类型的对象。另外,有错误倾向的符号已经避免,并且语言语
法避免了编码形式的使用,使更倾向于英语的结构。最后,Ada 语言提供
了程序单元单独编译的功能,使程序开发和维护简便,同样也提供了在一
个单元内多个单元之间的检测。考虑人类程序员的问题也在设计时被强调。
总而言之,在继续避免过多复杂句型的缺陷的同时,尝试以一致系统的方
式保持相对较少的底层概念。
     Ada 语言最初设计是为了构建长周期的、高度可靠的软件系统。
它提供了一系列功能来定义相关的数据类型(type)、对象(object)和操作(op
eration)的程序包(package)。程序包可以被参数化,数据类型可以被扩展以
支持可重用库的构建。操作既可以使用方便的顺序控制结构,通过子程序(s
ubprogram)来实现,也可以通过包含并发线程同步控制的入口(entry)来实
现。Ada 也支持单独编译(separate compilation),在物理层上支持模块性。
            Ada 包含了很复杂的功能以支持实时(real-time),并发程序设计(c
oncurrent programming)。错误可以作为异常(exception)来标示,并可以
被明确地处理。Ada 也覆盖了系统编程(system programming);这需要对
数据表示和系统特性访问的精确控制。最后,提供了预定义的标准程序包,
包括输入输出、字符串处理、数值计算的基本函数和随机数生成。
            Ada 的风格在 Pascal 语言中得以延续。


          "Hello world"程序


    一个 Ada 语言编写的 Hello world 程序:
            with Ada.Text_IO;
            procedure Hello is
            begin
            Ada.Text_IO.Put_Line("Hello, world!");
            end Hello;
            在 Ada.Text_IO.Put_Line 处有一些快捷图标,不需要很多的文字
输入,但是对于这里的理解来讲并没有多大意义。




    Ada      语言最初设计是为了构建长周期的、高度可靠的软件系统。它提供了
一系列功能来定义相关的数据类型(type)、对象(object)和操作(operation)的程序
包(package)。程序包可以被参数化,数据类型可以被扩展以支持可重用库的构
建。操作既可以使用方便的顺序控制结构,通过子程序(subprogram)来实现,也
可以通过包含并发线程同步控制的入口(entry)来实现。Ada                      也支持单独编译
(separate     compilation),在物理层上支持模块性。


            Ada     包含了很复杂的功能以支持实时 (real-time),并发程序设计
(concurrent       programming)。错误可以作为异常(exception)来标示,并可以被
明确地处理。Ada           也覆盖了系统编程(system                     programming);这需要对数据
表示和系统特性访问的精确控制。最后,提供了预定义的标准程序包,包括输入
输出、字符串处理、数值计算的基本函数和随机数生成。


——译自《Ada            Reference        Manual》Section1:General
1.2     Ada     的历史(The          History   of    Ada)


         为了更好的理解               Ada,它的历史有必要简要地了解一下。


         1974     年时,美国国防部(DoD)意识到开发和维护嵌入式系统(固化在
硬件中的系统,如导弹弹导系统)耗费了过多的时间,精力和资金。


         当时,在使用的计算机语言有                          450     多种,这增加了开发新系统以
及培训程序员使熟悉现有系统的时间和成本。维护工作也由于没有标准化的工具
(编辑器,编译器等)而受阻。所有这些因素使                                    DoD    意识到它需要一门强
大的语言,能被所有嵌入式电脑供应商使用。


         开发工作始于               1975    年,当时        DoD     列举了一系列的语言需求;
但没有一门现有语言指定了这些特性,因此在                                  1977     年,DoD    起草了一份
建议,开发一门新的语言。不像 COBOL                            这些语言由专门的委员会制定,新语
言是一场竞争的主题,在产业界和学术界的评估中产生。


         在众多竞争者当中,有                    4   家被选中以完成进一步的工作。最终只
剩下      Cii-Honeywell     Bull       公司。这门语言被命名为                      Ada。设计小组
由     Jean    Ichbiah    领导,对语言全权负责。


       在      1983,Ada        成为了一个          ANSI     标准       ANSI/MIL-STD-1815A。
此年成为一个                  ISO      标准。在参考手册中定义的语言通常称
为     LRM     或   ARM(Ada        Reference      Manual)。在       Ada    的相关书籍和
编译器的报错信息中经常出现手册内容的引用。对于任何                                                        Ada    站点,参考
手册都是推荐的;虽然很难阅读,但它是所有                                                Ada    问题的最权威解释(一
个小组正在澄清语言定义中已发现的语义不清的内容)。


             Ada         也经过了一次修正,即                          1995    的新的         ISO    标准。新标
准修正了             Ada83           的很多缺陷,并进一步扩展了它的功能(在修正工作中,
有个临时的标准,即                            Ada9x,不少           Ada     文章是在            这段时间写的,因此
有些内容在细节上可能与                                Ada95        有所区别,但主要原理差不多)。


                    为了防止                     Ada        编译器的不兼容版本的扩散,
Ada         Joint        Program           Office       (控制         Ada        语言的执行部门,
于                1998                年             10          月           1        日 关 闭 ,
见          Ada      Joint            Program        Office     closed )         采取了不寻常的做
法      -     他们注册                Ada       商标。除非通过他们的兼容性测试,编译器厂商不
允许出售                    'Ada'        编译器。这在不久以后放松了,保护协议变成
了      `Validated           Ada'。因而产生的                   Ada       确认证书被限制在一定的时间内
并有一个期满时间。当时间过期后,该编译器不能再被标记为
`Validated          Ada'        编译器。通过这种方式,AJPO                           确保当前市场上的编译器
与当前标准相一致。
 1.3        与       C     和          C++     的比较(Contrast:Ada             and    C,C++)


             由于          Ada         出生年月迟了一点,而且目前的操作系统基本上由                                        C,
C++        写成,导致                 Ada       在“平民层”的推广比较糟糕,至今还不是很流行,
Why        Ada      isn't        Popular       一文对此有比较详细的解释。而                           Ada        爱好
者们为了显示                   Ada         的优越性(这种心情相当能理解),将                              Ada      与     C,
C++        做了一系列比较,其结果反正综和指数都是                                            Ada    高,这方面文章有
不少,如                Comparing              Development         Costs      of    C      and     Ada ,
Contrasts:          Ada         95     &    C++。在这里,我们只初略地了解一下                               Ada    的
优势即可,在读者朋友接下去的学习中,应该是能从心里感受到                                                            Ada        的优
点。


 更高的安全性、可靠性。Ada                           中对于访问内存、数值计算等很多方面有一些
严格的规定,而没有                   C   和        C++   那么自由;程序的错误绝大部份能在编
译和运行时检测到,以至于可以不需要编译器,另外,语言也包含异常特性,能
方便地处理错误。
 更高的移植性。在                   Unix      和    Windows    下有           C    编程经验的朋友应
该对于兼容性深有体会,很多代码纯粹是为了适应不同的系统增添的,对于实际
工作没多大用处。但                          Ada     的初始语言环境中就有了异常(约等
于     Unix        下的    Signal)、任务(线程)、分布式计算、随机数产生、宽字符
集很多特性的支持,而在现在的具体操作系统中,这些特性往往随系统而异。即
使     Ada95        里缺少一些功能,也可以通过额外标准和函数库来弥补:
GDI       库,可以用         GtkAda,在           Windows    和        X       下通用;Ada     也有
一个        Posix    接口的标准,可以使用函数库                     Florist       来调用     Posix   的函
数……         用户层是大大省力---只要自己的操作系统上有所需的编译器和函数库
即可。
 语 法 明 确 , 基 本 上 没 有 令 人 混 淆 的 地 方 。 Ada                               程序的源代码远远
比     C     或     C++    的代码易懂。看程序的人是减轻了不少脑负担。
 ……
 ……
             ……


            总之,C        和       C++       能做的   Ada     肯定能做,但              Ada    要省
时方便 的多。 读者 在 学习                       Ada 之 后, 无需多 说也就 明白 了 ,笔者 在初
学     Ada       时就有耳目一新的感觉,唯一的遗憾是                              Ada      不流行。




      这是一个迟到的纪念。著名的嵌入式语言 Ada 的主要设计者、法国科学院
院士 Jean Ichbiah,于 2007 年 1 月 26 日逝世,享年 67 岁。他的完整生平可以在
这里(http://www.adaic.org/news/ichbiah.html)读到。


     Jean Ichbiah 生于法国巴黎,是来自希腊和土耳其的西班牙犹太人后裔。他
毕业于巴黎高等理工学校土木工程专业,后于两年内获得麻省理工学院土木工程
和运筹学两个博士学位。1967 年返回法国后,在 CII-Honeywell-Bull 公司担任计
算机科研人员。该公司为戴高乐总统倡导创办。1972–1974 年,Ichbiah 在此基
于 Simula 设计了试验性的 LIS 语言。1979 年,Ichbiah 为首设计的方案赢得了美
国国防部的合同,Ada 诞生。Ada 之名来自拜伦之女 Augusta Ada Byron,即
Lovelace 伯爵夫人,她被一些史学家称为第一位程序员。


     1980 年,Ichbiah 辞职创业,开办了一个 Ada 咨询公司,后被 Thomson 收购。
90 年代,Ichbiah 再次闪光,发明了一种快速文字输入系统,可用于 PDA 和 Tablet
PC 等,他凭此创办了 Textware 公司。


                           “I
     1984 年,在接受 ACM 访谈时,他表示: see Ada as a cathedral, with all the
architectural lines interwoven in a harmonious manner. I would not do it differently if
I had to do it over again.”(我将 Ada 视为一座教堂,所有的建筑线都和谐地交织
着。如果非要我再来设计一次的话,也不会有什么不同。)




     阿达·奥古斯塔,19 世纪诗人拜伦的女儿,数学家。穿孔机程序创始人,
建立了循环和子程序概念。为计算程序拟定“算法”,其写作的第一份“程序设
计流程图”,被珍视为“第一件计算机程序”。
                     阿达·奥古斯塔


   1815 年,阿达出生于伦敦,她是英国著名诗人拜伦(L.Byron)的女儿。因父
母婚姻破裂,出生 5 星期后就一直跟随母亲生活。母亲安娜·密尔班克
(A.Millbanke)是位业余数学爱好者,阿达没有继承父亲诗一般的浪漫热情,
却继承了母亲的数学才能。


   阿达 19 岁嫁给了威廉·洛甫雷斯伯爵,因此,史书也称她为洛甫雷斯伯爵
夫人(Lady Lovelace)。


   阿达是唯一能理解 19 世纪计算机狂人查尔顿·巴贝奇的人,也是世界计算
机先驱中的第一位女性。她帮助巴贝奇研究分析机,建议用二进制数代替原来的
十进制数,她这一天才理论成为了后来几十年软件发展的源泉。她还指出分析机
可能像雅各织布机一样编程,并发现了编程的要素。她还为某些计算开发了一些
指令,并预言计算机总有一天会演奏音乐。


   在阿达短暂生命的最后十年里,她全力协助巴贝奇工作,甚至把自己的珠宝
手饰都拿出来变卖,以帮助巴贝奇度过经济难关。
                  巴贝奇


  阿达设计了巴贝奇分析机上解伯努利方程的一个程序,并证明当时巴贝奇的
分析器可以用于许多问题的求解。她甚至还建立了循环和子程序的概念。由于在
程序设计上的开创性工作,她被称为世界上第一位程序员。


  当时的阿达甚至不顾自己已是三个孩子的母亲,坚定地投身于分析机研究,
成为巴贝奇的合作伙伴。在 1843 年发表的一篇论文里,阿达认为机器今后有可
能被用来创作复杂的音乐、制图和在科学研究中运用,这在当时确是十分大胆的
预见。以现在的观点看,阿达首先为计算拟定了“算法”,然后写作了一份“程
序设计流程图”。这份珍贵的规划,被人们视为“第一件计算机程序”。




                巴贝奇的差分机
  美国国防部据说花了 10 年的时间,把所需软件的全部功能混合在一种计算
机语言中,希望它能成为军方数千种电脑的标准。1981 年,这种语言被正式命
名为 ADA(阿达)语言,以纪念这位“世界上第一位软件工程师”。


  由于巴贝奇晚年因喉疾几乎不能说话,介绍分析机的文字主要由阿达替他完
成。阿达的生命是短暂的,她对计算机的预见超前了整整一个世纪。阿达早逝,
年仅 36 岁,与她父亲拜伦相似。根据她的遗愿,她被葬于诺丁汉郡其父亲身边。
  GPSS


     ■GPSS■(General-purpose Systems Simulator)——通用系统
模拟语言 。第一个使模拟成为实用工具的语言 ,于 1961 年发明成功。
   Prolog




       Prolog(Programming in Logic 的缩写)是一种逻辑编程语言。
它建立在逻辑学的理论基础之上, 最初被运用于自然语言等研究领域。现
在它已广泛的应用在 人工智能的研究中,它可以用来建造专家系统、自然
语言理解、智能知识库等。同时它对一些通常的应用程序的编写也很有帮
助。使用它能够比其他的语言更快速地开发程序,因为它 的编程方法更象
是使用逻辑的语言来描述程序。
       历史
       Prolog 语言最早由 Aix-Marseille 大学的 Alain Colmerauer 与 Phi
llipe Roussel 等人于 60 年代末研究开发。1972 年被公认为是 Prolog 语言
正式诞生的年份,自 1972 年以后,分支出多种 Prolog 的方言。最主要的
两种方言为 Edinburgh 和 Aix-Marseille。最早的 Prolog 解释器由 Roussel
建造,而第一个 Prolog 编译器则是 David Warren 编写的。
       Prolog 一直在北美和欧洲被广泛使用。日本政府曾经为了建造智
能计算机而用 Prolog 来开发 ICOT 第五代计算机系统。在早期的机器智能
研究领域,Prolog 曾经是主要的开发工具。
       80 年代 Borland 开发的 Turbo Prolog,进一步普及了 Prolog 的
使用。1995 年确定了 ISO Prolog 标准
       目前比较流行的实现工具包括 SWI-Prolog, Yap 等
       prolog 的几个特点:
       1. prolog 程序没有特定的运行顺序,其运行顺序是由电脑决定的,
而不是编程序的人。
     从这个意义上来说,prolog 程序不是真正意义上的程序。所谓程
序就是按照一定的步骤运行的计算机指令,而 prolog 程序的运行步骤不由
人来决定。它更像一种描述型的语言,用特定的方法描述一个问题,然后
由电脑自动找到这个问题的答案。举个极端的例子,你只需要把某个数学
题目告诉它,它就会自动的找到答案,而不像使用其他的语言一样,必须
人工的编制出某种算法。
     2. prolog 程序中没有 if、when、case、for 这样的控制流程语句
     前面已经说了,程序的运行方式有电脑自己决定,当然就用不到
这些控制流程的语句了。通常情况下,程序员不需要了解程序的运行过程,
只需要注重程序的描述是否全面,不过 prolog 也提供了一些控制流程的方
法,这些方法和其他语言中的方法有很大的区别,希望你在以后的学习当
中能够融会贯通。
     3. prolog 程序和数据高度统一
     在 prolog 程序中,是很难分清楚哪些是程序,哪些是数据的。事
实上,prolog 中的所有东西都有相同的形式,也就是说数据就是程序,程
序就是数据。举一个其他语言的例子:如果想用 c 语言编写一个计算某个
数学表达式的程序很简单(比如:a=2+5*4),因为这是一段程序。但是如果
想编写一个计算用户输入的表达式的值的程序就很困难了。因为用户输入
的是一段数据(字符串),如果想让 c 语言处理这个字符串,就需要很多方面
的技术。则正是因为在 c 语言中,程序和数据是分开的。而在 prolog 就不
存在这个问题,你甚至可以很轻松的编写处理其它 prolog 程序的程序。
     4. prolog 程序实际上是一个智能数据库
     prolog 的原理就是关系数据库,它是建立在关系数据库的基础上
的。在以后的学习中你会发现它和 SQL 数据库查询语言有很多相似之处。
使用 prolog 可以很方便的处理数据。
     5. 强大的递归功能
     在其它的语言中,你也许已经接触过递归程序了。递归是一种非
常简洁的方式,它能够有效的解决许多难题。而在 prolog 中,递归的功能
得到了充分的体现,你甚至都会感到惊奇,递归居然又如此巨大的能力。
  扩展阅读:
       1.http://coo.hsfz.net/prolog/prepro.htm




  Alain Colmerauer, Prolog 之父


  Alain Colmerauer 生于 1941 年 1 月 24 日,是法国计算机科学家。和他在
马赛大学的助手于 1962 年发明了逻辑语言 Prolog 和 Q-Systems。


  在之后的 30 年中,Prolog 经过几代的发展,作为一种程序设计语言已经相当
成熟。如今,Prolog 已成为人工智能领域不可缺少的一个工具,在世界任何地方
都能看到它的踪迹。


  个人主页:http://www.lim.univ-mrs.fr/~~colmer/


  目录


          • Prolog 诞生记
          • Prolog
          • 参考文献


  Prolog 诞生记 回目录


  众所周知,"Prolog"1972 年诞生于法国的马赛。"Prolog"一词是
"PROgrammation enLOGique"(逻辑程序设计语言)的缩写。意思是实现一个用自
然语言进行人机对话的软件工具。可以说,Prolog 是自然语言与自动定理证明完
美结合的产物。当时。像用法语这样一类的自然语言直接与计算机进行问答与交
谈的想法简直是异想天开。就在这样的情况下,Alain Colmerauer 在 1970 年夏
开始着手进行这个项目的研究。Alain 有过计算机自然语言处理的经验,他想扩
大他的研究领域。
                    Alain Colmerauer

   1970 年 7 月初,Robert Pasero 和 Philippe 受 Alain 的邀请来到了蒙特利尔
(Montreal)。Alain 那时是蒙特利尔大学的计算机系副教授,正领导着一项叫做
TAUM(Taduction Automatique de Universite de Montreal)的自动翻译项目。
也许他们并没有意识到,他们处于事业的转折点上。当时 Rober 和 Philippe 只有
25 岁,他们在一个大学的计算机系任教。Alain 也只有 29 岁,他从加拿大回到法
国只有三年的时间。


   在蒙特利尔大学待了两个月后,Robert 和 Philippe 熟悉了自然语言的计算
机处理技术。他们用 Algol 60 开发了一些不确定上下文的无关分析器,也用
Q-System 开发了一个法语翻译器。Q-System 是 Alain 为翻译项目开发的一种编
程语言。
与此同时,加拿大科学家 Jean Trudel 和 Alain 的一个博士生选择的研究项目是
自动定理证明。他参考了 Alan Robinson 1965 年关于消解原理(resolution
              在
principle)的文章。 1970 年,这是一篇非常难懂的文章,好在 Jean 曾在纽约上
过 Martin Davis 讲授的数理逻辑课程。他已经开发了一个完整的定理证明器,
那时他采用了一种新的编程风格,所有的计算都是用可变指针实现的。


   1971:第一步
1971 年初,大家都回到马赛。Alain 获得了在计算机系任教的机会,Jean Trudel
也能够开始协助他。这个项目的目标是实现基于法语文本的推理机。他们进行了
分工:Jean Trudel 和 Philippe 研究推理机部分,Robert Pasero 和 Alain 研究自
然语言部分。
他们能够使用的计算机是马赛大学计算中心的一台 IBM 360-44,它配有 900K 的
内存和不带虚拟内存的操作系统。为了充分利用所有可用的内存,他们在晚上用
上了 Jean Trudel 开发的交互式监视器,这样,他们的工作条件就相当不错了:有
几乎 1M 的内存可供程序执行,并能在操作员控制台上通过法语在用户和程序之
间进行交互式通讯。
Jean Trudel 改进了他的证明器,然后 Philippe 从 5 月开始用 Algol-W 写了一套
证明器。不久整个小组开发出了一个原始自然语言会话系统。逻辑公式与法语的
接口由 50 条 Q-System 输入规则和 17 条 Q-System 输出规则组成。推理部分是用
Philippe 开发的证明器来实现的。这时就可以和计算机作如下的交谈了:
用户:




                                Alain Colmerauer

   Cats kill mice.
Tom is a cat who does not like mice who eat cheese.
Jerry is a mouse who eats cheese.
Max is not a mouse.
What does Tom do?
计算机:
Tom does not like mice who eat cheese
Tom Kills mice.
用户:
Who is a cat?
计算机:
Tom.
用户:
What does Jerry eat?
计算机:
Cheese.
用户:
Who does not like mice who eat cheese?
计算机:
Tom.
用户:
What does Tom eat?
计算机:
What cats who do not like mice who eat cheese eat.
正当 Jean Trudel 继续进行自动定理证明的研究时,他偶然看到一个非常有趣的
方法:SL-消解法(Kowalski 1971)。他说服 Alain 邀请这个理论的发明者之一
Robert Kowalski 于 1991 年 6 月到马赛访问。这次会面令人终生难忘。他们第
一次同一个能解释消解理论及其变化和优化的自动定理证明专家进行了探讨。
对 Robert Kowalski 来说,他所遇到的是一群对他的研究深感兴趣并决定把它用
于自然语言处理的人。


   1972:创建 Prolog 的应用程序
1972 是丰收的一年。首先,2 月份小组从一个加入法国工业部计算机研究院的信
息自动化研究所那里获得了为期 18 个月的 12.2 万法郎(当时值 2 万美元)经费。
这使他们得以购买一台电传终端(30 字符/秒),并用 300 波特率联在 Grenoble 大
学的 IBM 360-67 计算机上(该机用的是一个了不起的操作系统 CP-CMS,它能管理
虚拟设备)。在以后的三年里,它是小组最常用的计算机系统。每个人都使用它,
包括来访问的研究人员。后来累积起来的所欠 Grenoble 大学的机时费他们化了
几年的时间才还清。当时这笔钱使他们得以雇了一个秘书和一个研究员——博士
后 Henry Kanoui,他研究法语构词法。Kowalski 后来获得了 NATO 基金会的资助。
在 Philippe 实现的所有消解系统中,R.Kowalski 和 D.Kuehner 的 SL-消解法是最
有趣的。它的栈操作方式像标准程序设计语言中过程调用的管理模式,而且用反
跟踪的方法比拷贝和保存消解式的方法来处理不确定理论更合适。SL-消解法也
成为 Philippe 关于自动定理证明中有关形式等式处理论文的主题。形式等式的
                        在
表达能力不如标准等式,但是它处理起来效率非常高。 Prolog 最早的版本中就
                             4
引入了 Philippe 论文中的否定谓词 dif(≠)。 月和 5 月,他们再次邀请了 Robert
Kowalski。这以后,大家关于自动定理证明的计算知识更为丰富了。他们知道怎
样将小问题(加入整数、表连接、表反转)公理化以使 SL-消解证明器运算效率更
高。
1972 年秋,Philippe 用 Niklaus Wirt 的 Algol-W 语言实现了第一个 Prolog 系统。
同时,Alain 和 Robert Pasero 建立了期待已久的用法语进行人机交谈的系统。
Prolog 是在它的开发者 Philippe 和用它进行编程的 Alain、Robert、Pasero 之
间没有间断过的相互讨论中一步一步建立起来的。也正是这个时候,它有了一个
确定的名字,它的命名受到了 Philippe 的妻子的启发。
人机对话系统是用 Prolog 写的第一个最大的程序。它有 610 条子句:Alain 写了
其中 334 条,主要是分析部分;Robert Pasero 写了 162 条,是纯推理部分;Henry
Kanoui 用 104 条语句写了一个法语构词器,它能识别所有普遍名词的单复数和现
在一般时第三人称单数的所有动词,甚至是不规则动词。下面是 1972 年人机交谈
系统的一段对话:




                           Alain Colmerauer
   Evey psychiatrist is a person.
Every person he analyzes is sick.
Jacques is a psychiatrist in Marseille.
Is Jacques a person?
Where is Jacques?
Is Jacques sick?
后面三个问题的回答是:
Yes.
In Marseille.
I don't know.
(原始的问答实际上是用法语的)
所有的推论是根据名词(he、she、they 等),冠词(the、a、every 等),带或不带
介词(from、to 等)的主语和补语作出来的。事实上,系统只认识代词、冠词和介
词(词汇表是用 164 条子句编码的),它能认识专用名词(在词前打个星号)以及基
于 104 条子句表示的法语构词法的动词和普通名词。
11 月,他们在美国访问了许多研究所的实验室。他们随身携带着关于自然语言对
话系统以及最早 Prolog 版本的报告。他们几乎在所到之处都留下了这些报告的
副本。Jacques Cohen 在波士顿迎接了他们,并把他们介绍给了 MIT,在那儿他们
受到了热烈欢迎。


   1973:Prolog 新版本
最早的 Prolog 版本的用户在应用中积累了大量的编程经验,对 Prolog 第二版的
推出起了不可估量的作用。第二版完全面向计算机编程语言,不再仅仅是一种自
动推理机。除了 1972 年的法语对话系统,另外在最初的 Prolog 版本上开发了两
个系统:一个符号运算系统和一个叫做 Sugiton 的通用问题求解系统。Robert
Pasero 也用它继续进行法语语义研究,至 1972 年 5 月份,非常出色地完成了他的
论文。
1973 年 2~4 月,Philippe 参观了爱丁堡大学人工智能学院,那里有 Bernard
Meltzer 领导的计算逻辑系。Philippe 同 David Warren、Roger Boyer 和 Jay Moore
进行了广泛的讨论。
他们用了一个极其天才的方法构造了消解系统,这种方法基于一种用结构共享技
术表示在推理中生成的逻辑公式的思想。这次访问使 Philippe 他们看到了实验
室对真正编程语言的要求,同时也坚定了他们推出 Prolog 第二版的决心。
1973 年 5~6 月间,他们制订出语言的大致框架,尤其是确定了语法、推理机计算
方法的基本原语,这比第一版有所简化。从 6 月至年底,G e rard Battani、Henry
Meloni 和 ReneBazzoli 用 Fortran 写了推理机,用 Prolog 本身写了管理程序。
1974~1975:Prolog 的传播
在 Grenoble 大学运行的那个基于电传方式的交互式 Prolog 版本的需求量非常
大。当时的系统部分用 Fortran 实现,部分用 Prolog 实现,它每秒大约能进行 200
条归约操作。在此之上开发了大量的实用系统。后来和 Alain 一起工作的 David
Warren 用 Prolog 写了规划生成系统 Warplan;Henry Kanoui 和 Marc Bergman 用
它开发了一个具有相当规模的符号处理系统 Sycophante;Gerard Battani 和
Henry Meloni 开发了语言识别系统,它能回答与 IBM 的操作系统 CP-CMS 有关的
问题。
1975 年初,Alain Colmerauer 完全重写了管理程序,他保留了用 Prolog 写的中缀
运算符说明,但加入了一个叫做"元构形(metamorphosis)"语法的编译器。而
Rene Bazzoli 的方法则是用自顶向下分析方法来读 Prolog 规则。David Warren
后来用这类语法规则开发了他的 Prolog 编译版本,并和 Fernando Pereira 一起
把一种简化的元构形语法命名为"有限子句语法(definite clause grammars)"。
元构形语法能使语法规则直接参数化地表示出来。加了两个参数之后,管理程序
便能将这些规则编译成 Prolog 子句。为了证明元构形语法具有优秀的表达能力
和较高的处理效率,Alanin 从 Algol 一直到伪汇编语言风格写过几个小型编译器,
并用自动推理机实现了一个完整的人机对话系统。他的所有这些工作都成了元构
形语法的理论基础。
Gerard Battani 与 Henry Meloni 整天忙于 Prolog 的传播。他们把 Prolog 送到
巴尔的摩、华沙、多伦多和加拿大的滑铁卢,还到爱丁保协助 David Warren 将
Prolog 装在 PDP 10 上。Alain 以前的学生 He le ne Le Gloan 把它装到了蒙特
利尔大学的机器上,巴黎的 Michel Van Caneghem 在 IRIA 也装了多套。后
来,Maurice Bruynooghe 在马赛待了三个月后将 Prolog 到了比利时。
1975 年,小组准备将推理机移植到 16 位微机 T1600 上。这种机器只有 64K 内存,
所以必须首先为它写一个专用的虚拟内存管理系统。大家搞了一个竞赛,结果
Pierre Basso 的程序独占鳌头,他的程序代码最短,而且能够处理 32 位寻址和缺
页检测。接着小组的每个成员分到两页 Fortran 程序将它翻译成机器语言。当大
家把程序连接起来的时候,竟奇迹般地运行通过了。Prolog 的微机版本就这样诞
生了。
事实上,由于越来越多的人对 Prolog 开始感兴趣,他们不断从马赛和爱丁堡拷走
Prolog,Prolog 的转播速度大大出乎人的预料。正如 David Warren 所说
的,Prolog 不是"传播"出去的,而是从大学里"逃离"出去的。
在之后的 20 年中,Prolog 经过几代的发展,作为一种程序设计语言已经相当成
熟。如今,Prolog 已成为人工智能领域不可缺少的一个工具,在世界任何地方都
能看到它的踪迹。


   Prolog 回目录


   编程范型 逻辑编程语言




                                Alain Colmerauer


   面市時間 1972 年
设计者 Alain Colmerauer
主要实作产品 BProlog,GNU Prolog, Quintus, SICStus, Strawberry,
SWI-Prolog, YAP-Prolog
衍生副语言 ISO Prolog, Edinburgh Prolog
影响语言 Visual Prolog, Mercury, Oz, Erlang, Strand


   Prolog(Programming in Logic 的缩写)是一种逻辑编程语言。它建立在
逻辑学的理论基础之上, 最初被运用于自然语言等研究领域。现在它已广泛的
应用在人工智能的研究中,它可以用来建造专家系统、自然语言理解、智能知识
库等。


   历史
Prolog 语言最早由 Aix-Marseille 大学的 Alain Colmerauer 与 Phillipe
Roussel 等人于 60 年代末研究开发。1972 年被公认为是 Prolog 语言正式诞生的
年份,自 1972 年以后,分支出多种 Prolog 的方言。最主要的两种方言为
Edinburgh 和 Aix-Marseille。最早的 Prolog 解释器由 Roussel 建造,而第一个
Prolog 编译器则是 David Warren 编写的。


   Prolog 一直在北美和欧洲被广泛使用。日本政府曾经为了建造智能计算机
而用 Prolog 来开发 ICOT 第五代计算机系统。在早期的机器智能研究领域,Prolog
曾经是主要的开发工具。


   80 年代 Borland 开发的 Turbo Prolog,进一步普及了 Prolog 的使用。1995
年确定了 ISO Prolog 标准


   特点
有别于一般的过编程语言,prolog 的程式是基于谓词逻辑的理论。最基本的写
法是定立物件与物件之间的关系,之后可以用询问目标的方式来查询各种物件之
间的关系。系统会自动进行匹配及回溯,找出所询问的答案。


    参考文献回目录


   http://zh.wikipedia.org/wiki/Prolog
http://en.wikipedia.org/wiki/Alain_Colmerauer
http://military.club.china.com/data/thread/1011/111/06/76/2_1.html
http://www2.ccw.com.cn/1995/8/132386.shtml
爱达·洛夫雷斯




编辑词条


      目录
      •摘要:
      •爱达·洛夫雷斯-经历
      •爱达·洛夫雷斯-教育
      •爱达·洛夫雷斯-家庭
      •爱达·洛夫雷斯-成就
      •爱达·洛夫雷斯-逝世
      •爱达·洛夫雷斯-影响


      目录
      •
      •
      •
      •
      •
      •
   摘要:
   编辑本段


   奥古斯塔·爱达·金,洛夫雷斯伯爵夫人(Augusta Ada King, Countess of
Lovelace,                                  ,
         1815 年 12 月 10 日-1852 年 11 月 27 日) 原名奥古斯塔·爱达·拜
伦(Augusta Ada Byron),通称爱达·洛夫雷斯(Ada Lovelace),是著名英
国诗人拜伦之女,最著名的事迹为翻译意大利人查尔斯·巴贝奇早期的程式设计
书《分析机概论》(analytical engine),爱达对翻译查尔斯·巴贝奇的《分
析机概论》所留下的笔记,被认为对现代电脑与软件工程造成了重大影响。


   爱达·洛夫雷斯-经历
   编辑本段




       爱达·洛夫雷斯


   1815 年生于伦敦,是她诗人父亲拜伦与母亲安妮·伊莎贝拉·米尔班奇
(Anne Isabella Milbanke)唯一的合法子嗣,母亲 Anne Isabella Milbanke
是一名业余数学家。她的名字取自拜伦的异母的姊妹奥古斯塔·李(Augusta
Leigh)。拜伦与安妮贝拉的婚事是在奥古斯塔为了避免丑闻,而怂恿拜伦与安
妮贝拉结合的产物。Ada 从小对数学有极高天赋,其父称她为“平行四边形公
主”,后来的合作伙伴 Charles Babbage 称她为“数字女巫”。


   1816 年 1 月 16 日,安妮贝拉还是离开拜伦,带着一个月大的爱达离开。同
年 4 月 21 日,拜伦签下了分居协议,并离开英国。爱达从未见过她同父异母的
妹妹阿拉格·拜伦(Allegra Byron),阿拉格是拜伦与克莱尔·克莱蒙(Claire
Clairmont)所出,但于 1822 年死去,得年 5 岁。至于爱达的另一位亲戚伊丽莎
白·梅朵拉·李(Elizabeth Medora Leigh,是奥古斯塔·李之女)则有与她照
过面,并由爱达的母亲告知爱达与梅朵拉彼此的身世。爱达·洛夫雷斯是世界上
第一个写程序的人。
   19 岁时 Ada 嫁给了 William King(曾经是 Ada 的科学家庭教师,De Morgan
也是),婚后一共生育了 3 个孩子。Ada 在婚后依然对数学热情不减,1842 年到
1843 年花了 9 个月时间翻译了 Babbage 的《分析机概论》的备忘录,其中写了
很多注记,其中给出了用计算机进行 Bernoulli 数求解的详细说明,由此,Ada
被广泛认为是世界上第一个程序员。


   爱达·洛夫雷斯-教育
   编辑本段




   爱达与她的母亲同住。她与父亲有许多相似的天份,年轻的拜伦小姐对数学
感到极高的兴趣(其父称她为 the princess of parallelograms,即平行四边
行公主),数学占有她人生的绝大部份,即使结婚之后也是如此。而爱达的母亲
让她年轻时就学习数学一事,却总是被认为是受到其父拜伦的影响。爱达的数学
与科学课程是由家庭教师威廉·福莱德(William Frend)、威廉·金(William
King)与玛丽·索麦维(en:Mary Somerville)所指导,后来更接受奥古斯
都·德·摩根的教导。爱达也是一位活跃于伦敦社交圈的女士,这位女士曾在年
轻时是女学究(Blue Stockings Society)的会员。


   Ada 的社交生活十分丰富,著名的小说家 Charles Dickens 和物理学家
Michael Faraday 都认识她。她的老师玛丽·索麦维是一位著名的 19 世纪科学
家,并由这位学者于 1833 年 6 月 5 日介绍给查尔斯·巴贝奇。著名的大卫·布
鲁斯特爵士(Sir David Brewster)、查尔斯·卫斯顿(Charles Wheatstone)、
查尔斯·狄更斯与麦可·法拉第也认识她。


   爱达·洛夫雷斯-家庭
   编辑本段




   1835 年,爱达嫁给了威廉·金(后来晋封为第一代勒芙蕾丝伯爵)。他们
总共生下三个孩子:
   拜伦(Byron,生于 1836 年 5 月 12 日)
安妮贝拉(Annabella,生于 1837 年 9 月 22 日)
拉尔夫·戈登(Ralph Gordon,生于 1839 年 7 月 2 日)


   勒芙蕾丝一家住在瑟瑞(Surrey)的奥坎(Ockham)。而自婚后,她的头衔
则变成奥古斯塔·爱达,勒芙蕾丝伯爵夫人阁下(The Right Honourable Augusta
Ada, Countess of Lovelace),不过较简单的爱达·勒芙蕾丝和婚前名称爱
达·拜伦,是在今天是更广为人知的名称。


   爱达·洛夫雷斯-成就
   编辑本段




   世界上第一位程序员


   爱达设计了巴贝奇分析机上解伯努利方程的一个程序,并证明当时的 19 世
纪计算机狂人巴贝奇的分析器可以用于许多问题的求解。她甚至还建立了循环和
子程序的概念。由于她在程序设计上的开创性工作,Ada Lovelace 被称为世界
上第一位程序员。当时的阿达甚至不顾自己已是三个孩子的母亲,坚定地投身于
分析机研究,成为巴贝奇的合作伙伴。在 1843 年发表的一篇论文里,阿达认为
机器今后有可能被用来创作复杂的音乐、制图和在科学研究中运用,这在当时确
是十分大胆的预见。以现在的观点看,阿达首先为计算拟定了“算法”,然后写
作了一份“程序设计流程图”。这份珍贵的规划,被人们视为“第一件计算机程
序”。




   Ada 语言


   以她名字命名的语言——ada 语言已经成为了美国军方开发战斗机等尖端
武器的语言。
   设计初衷


   Ada 语言最初设计是为了构建长周期的、高度可靠的软件系统。它提供了一
系列功能来定义相关的数据类型(type)、对象(object)和操作(operation)的程
序包(package)。程序包可以被参数化,数据类型可以被扩展以支持可重用库的
构建。操作既可以使用方便的顺序控制结构,通过子程序(subprogram)来实现,
也可以通过包含并发线程同步控制的入口(entry)来实现。Ada 也支持单独编译
(separate compilation),在物理层上支持模块性。Ada 包含了很复杂的功能以
支持实时(real-time),并发程序设计(concurrent programming)。错误可以作
为异常(exception)来标示,并可以被明确地处理。Ada 也覆盖了系统编程
(system programming);这需要对数据表示和系统特性访问的精确控制。


   最后,提供了预定义的标准程序包,包括输入输出、字符串处理、数值计算
的基本函数和随机数生成。Ada 的风格在 Pascal 语言中得以延续。


   特点


   Ada 是一种表现能力很强的通用程序设计语言,它是美国国防部为克服软件
开发危机,耗费巨资,历时近 20 年研制成功的。它被誉为第四代计算机语言的
成功代表。美国国防部之所以把这种语言取名为 Ada,是为了纪念奥左斯特·艾
达·洛夫莱斯伯爵夫人(Augusta Ada Lovlace,1815-1852),她是英格兰诗人拜
伦(Byron)勋爵的女儿,曾对现代计算机技术之父查尔斯·巴贝奇(Charles
Babage,1791-1871)的笔记、手稿进行了整理和修正。从某种意义上说,她是世
界上第一位计算机程序员。与其他流行的程序设计语言不同,Ada 语言不仅体现
了许多现代软件的开发原理,而且将这些原理付诸实现。因此,Ada 语言的使用
可大大改善软件系统的清晰性、可靠性、有效性、可维护性。


   Ada 最初设计时关注于 3 个最重要的问题:程序的稳定性和可维护性,程序
设计和人的行为接近,并且高效。这份语言的修订版是为了提供更大的灵活性和
扩展性,存储管理的额外控制和同步,以及标准化的程序包以支持重要的应用程
序领域,同时保留原来的重点。对于程序设计语言促进可靠性和简化维护难度的
需求已被确立。因此程序可读性的重要性高于轻松地写代码。例如,语言规则要
求程序变量应当明确声明并指定它们的类型。由于变量的数据类型是不变的,编
译器可以确保对于变量的操作适用于该类型的对象。另外,有错误倾向的符号已
经避免,并且语言语法避免了编码形式的使用,使更倾向于英语的结构。


   最后,Ada 语言提供了程序单元单独编译的功能,使程序开发和维护简便,
同样也提供了在一个单元内多个单元之间的检测。考虑人类程序员的问题也在设
计时被强调。总而言之,在继续避免过多复杂句型的缺陷的同时,尝试以一致系
统的方式保持相对较少的底层概念。


   意义


   Ada 是现有的语言中无与伦比的一种大型通用程序设计语言,它是现代计算
机语言的成功代表,集中反映了程序语言研究的成果。Ada 的出现,标志着软件
工程成功地进入了国家和国际的规模。在一定意义上说,Ada 还刺破了“冯·偌
依曼思维模式” (Von Newman Mind-set) 的桎梏,连同 Ada 的支持环境(APSE)
一起,形成了新一派的所谓 Ada 文化。它是迄今为止最复杂、最完备的软件工具。
Ada 语言是美国国防部指定的唯一的一种可用于军用系统开发的语言,我国军方
也将 Ada 作为军内开发标准(GJB 1383《程序设计语言 Ada》)。


   爱达·洛夫雷斯-逝世
   编辑本段




   由于受子宫癌和赌博债务的折磨,有的文献还说她曾经吸毒,这位悲剧性的
人物爱达过早地于 1852 年 11 月 27 日去世,生命周期与她的父亲拜伦同样短促,
都只有 37 岁。最后与她的父亲一起,埋葬在诺丁汉郡 Hucknall 镇拜伦家族的墓
地。 当年 36 岁。很讽刺的,她与她父亲拜伦死于相同年龄,一样死于治疗中的
失血过多。她留下了两个儿子与一位女儿—安妮·布兰特贵女。依她的遗言,爱
达葬于诺丁汉哈克诺的圣 玛丽亚·抹大拉教堂,长眠在父亲的身旁。


   爱达·洛夫雷斯-影响
   编辑本段
    爱达·洛夫雷斯


   在 1842 年与 1843 年其间,爱达花了 9 个月的时间翻译意大利数学家路易
吉·米那比亚对巴贝奇最新的计算机设计书(即分析机概论)所留下的备忘录。
在这部译文里,她附加许多注记,内容详细说明用计算机进行伯努利数的运算方
式,而被认为是世界上第一个电脑程式;因此,爱达也被认为是世界上第一位程
式设计师。不过,传记作者也因为部份的程式是由巴贝奇本人所撰,而质疑爱达
在电脑程式上的原创性。巴贝奇在他所著的《经过哲学家人生》(Passages from
the Life of a Philosopher, 1846)里留有下面的述叙:


   我认为她为米那比亚的备忘录增加许多注记,并加入了一些想法。虽然这些
想法是由我们一起讨论出来的,但是最后被写进注记里的想法确确实实是她自己
的构想。我将许多代数运算的问题交给她处理,这些工作也与伯努利数的运算相
关。在她所送回给我的文件,更修正了我先前在程序里的重大错误。

   爱达的文章创造出许多巴贝奇也未曾提到的新构想,比如爱达曾经预言道:
这个机器未来可以用来排版、编曲或是各种更复杂的用途。爱达为计算机程序拟
定了“算法”的概念,建立了循环和子程序的概念。在 1843 年的一篇论文中,
爱达大胆地预言了计算机未来将广泛运用于创作音乐、制图和处理复杂的科学研
究。距离第一台电子计算机 ENIAC 在美国宾夕法尼亚大学诞生,整整提前了 103
年。她死后一百年,于 1953 年,爱达之前对查尔斯·巴贝奇的《分析机概论》
所留下的笔记被重新公布,并被认为对现代计算机与软件工程造成了重大影响。




   计算机科学


   在 1980 年 12 月 10 日,美国国防部制作了一个新的计算机编程语言—Ada。
美国国防部标准局为了记念爱达,以她的生日设立了一个编号 MIL-STD-1815。
在微软的产品里也可以找到爱达的全息图标签。
英国计算机公会每年都颁发以爱达为名的奖项。
   大众文化


   在第 203 集的数谜(math-mystery)动画—《数位追逐》里,就有她的身影
出现,其配音由的珍·科廷担当。
爱达是布鲁斯·斯特林与威廉·吉布森合著的小说《差分解析仪》(The
Difference Engine)的主角。在故事中,她所提出的新构想加速了计算机时代
的来临。
约翰·克罗利在他的小说《拜伦的故事》(Lord Byron's Novel)中,拜伦写下
了自己的故事,却因亡故而未能完成,之后由其女爱达将故事补齐。
爱达是 1997 年电影《孕育爱达》里被饰演的主角。
在史考特·卫斯特菲尔德的系列作《Midnighters》里,其中一名女性主角的崇
拜对象正是爱达,更影响了其中三本系列作的内容。


   Ada 程序设计语言曾是 DOD(美国国防部)指定的唯一的一种可用于军用系

统开发的语言。DOD 之所以把这种语言取名为 Ada,是为了纪念奥左斯特. 艾

达.洛夫莱斯伯爵夫人 (Augusta Ada Lovlace 1815-1852),她是英格兰诗人拜伦

(Byron)勋爵的女儿,曾对现代计算机技术之父查尔斯.巴贝奇(Charles Babage)

的笔记、手稿进行整理和修正。


   Ada 是一名充满幻想的女孩


   1815 年 12 月 10 日,英国。一个女孩降生了,她的母亲,一个有着杰出数

学天赋的女人,人称“平行四边形公主”;父亲,一个狂热的充满幻想的诗人--

拜伦。可是女孩从生下来就从没见过父亲。这位狂热的、浪漫的诗人结婚不久便

离开了英国,再也没有回来。母亲给她起了个动听的名字:艾达(Ada)。那位

诗人尽管离开了英国,当听说自己有了一个女儿时非常的高兴,可也非常的懊悔,
但他始终没有回去看女儿一眼,只能用诗来表达自己对女儿的思念和歉疚,他的

一首诗的名字就叫《艾达》。


  狂热的诗人 36 岁死于希腊,临死前唯一牵挂的就是艾达。


  而此时的艾达,跟随着母亲生活,艾达不仅继承了母亲的数学天赋,也秉承

了父亲的性格,小小年纪也充满幻想,幻想成为一个大科学家、大诗人。母亲怕

她走父亲的老路,竭力想改变她对诗歌的热爱,但无能为力,艾达曾对母亲说:

“没有诗,要数学干什么?”


  当时的英国,科学风气盛行,包括许多妇女都在杂志上发表文章探讨数学等

问题。艾达 17 岁那年,母亲请了著名的数学家摩根做她的老师,摩根就是现代

计算机数学基础布尔代数的创始人之一。在他的影响下,艾达的数学天赋得到了

充分的展现。同时艾达还被介绍到当时著名的翻译家——为剑桥大学工作的玛

丽·索菲利那里学习。玛丽由衷地喜欢这个聪明而又刻苦,且充满幻想的女孩,

也非常地支持并鼓励她在数学方面发展。此时的艾达对机械、建筑也充满兴趣,

畅游在科技王国,就像少女在花园中徜徉,乐此不疲,流连忘返。她还同当时的

一些著名科学家保持密切的联系,如法拉第等。


  结识巴贝奇


  1834 年 11 月,艾达在一次宴会上遇到了一位对其一生产生重要影响的人

——查尔斯·巴贝奇。此时的巴贝奇正到处游说他的计算机设想。当时的人们很

少有人理会他,以为他是在“痴人说梦”。同样,他也将自己的设想全盘托出,

讲给艾达听。此时的艾达只有 18 岁,但她听完他的设想并看了他的文稿后,彻
底地领会了他的设想,并深深地为之陶醉。凭着她深厚的科学功底和丰富的想像

力,她认为这是一个伟大的设想,世界将因之而改变。


  面对今天的现实,我们不能不为艾达的洞察力所折服,她的这一预言可是在

一个半世纪以前提出的啊!


  参与研制计算机


  共同的追求,使两人成了忘年交,艾达的母亲曾试图阻止艾达与巴贝奇的交

往,认为巴贝奇不过是个江湖骗子,不会给艾达好影响。这点阻力对于秉承父亲

性格的艾达,算不了什么,她完全投入到了计算机的研制中去了,负责为巴贝奇

设想中的计算机编写软件。


  1841 年,巴贝奇在意大利都灵向人们详细地介绍他的设想,希望能引起大

家的重视,但无人喝彩。他用法语出版的论文也不受人欢迎,但艾达执意要将其

翻译成英文。翻译结束后艾达将文稿给巴贝奇看,巴贝奇发现:艾达不仅在论文

中加入她特有的想像,而且补充了许多艾达独到的见解。艾达特别强调存储程序

和数据的重要性,而这与今天的计算机技术不谋而合,并且拟订了一份设计图,

这份设计图被公认为世界上第一个计算机程序。艾达在文中对计算机应用前景的

展望,连巴贝奇自己都从来没有想到过。如:艾达认为,计算机应该发展成一个

可用符号来表示任何事物的装置,这不正是今天的编程语言吗?她还预见到计算

机可以用在纺织机械上,用卡片存储复杂的花样、可以用来绘图、演奏音乐。这

些预言表明艾达是现代人工智能技术的拓荒者。
  艾达对论文的修改,使巴贝奇深感惊奇和鼓舞,他对别人称赞说:“艾达是

个充满想像力和洞察力的女孩”,“她是个数字女神”。她将诗歌的激情融入了论

文之中。


  经过艾达翻译后的文稿其内容增加到原来的三倍,论文实际上成了两人合作

的产物,但谦逊的艾达在署名的时候,只将自己的名字简单地署为:A.A.L。


  在后来的一系列论文中,艾达在计算机软件领域做出了许多开创性的贡献:

如变量、递归、程序算法的提出等。


  短暂的一生


  艾达后来与威廉伯爵结婚,婚后生有三个孩子,但为了研制计算机,她将孩

子们都放到母亲那里扶养,这对于一个女性,在当时是不被人理解的,好在丈夫

非常支持她的研究工作,这使她深感欣慰。此时的巴贝奇已是一贫如洗,艾达也

付出了许多。长期的研究耗费了大量的心血,身体状况也一天不如一天,疾病时

时纠缠着她,但为了那个美丽的幻想成真,她夜以继日地工作。她的座右铭是:

工作是我的报酬。


  1852 年,艾达因癌症去世,同她的父亲一样,年仅 36 岁,没有等到计算机

的诞生。如果她再多活一年,就会看到在瑞典,由乔治和爱德华根据巴贝奇的方

案制造出的一台差分机,这不能不说是人类的一个遗憾:第一位软件工程师,却

没有看到自己的设想结出的果实。
  尽管限于当时的制造条件,巴贝奇最终也没有造成理想中的计算机,但他们

超前 100 多年的拓荒,对后来计算机技术的诞生和发展同样产生了深远的影响。

当我们津津乐道 ENIAC——第一台数字电子计算机的时候,也不应该忘记人类

这一智慧的火花,在这之前的 100 多年,已经由巴贝奇和艾达点燃了。


  艾达、巴贝奇两人对计算机事业的贡献就好像火对于人类。


  他们是钻燧取火的人,是盗得火种的普罗米修斯。


  让我们记住巴贝奇,也记住这位杰出的女性———艾达(Ada)。


  用 Ada 为一种计算机语言命名,仅能表达我们对她的纪念和钦佩,却远远

不能表达出她为计算机技术作出的重要贡献
   Objective-C


        Objective-C,通常写作 ObjC 和较少用的 Objective C 或 Obj-C,
是扩充 C 的面向对象编程语言。它主要使用于 Mac OS X 和 GNUstep 这
两个使用 OpenStep 标准的系统,而在 NeXTSTEP 和 OpenStep 中它更是
基本语言。Objective-C 可以在 gcc 运作的系统写和编译,因为 gcc 含 Obj
ective-C 的编译器。
        1 历史
        1980 年代初布莱德·确斯(Brad Cox)在其公司 Stepstone 发明 Obj
ective-C。他对软件设计和编程里的真实可用度问题十分关心。
        Objective-C 最主要的描述是他 1986 年出版的 Object Oriented
Programming: An Evolutionary Approach. Addison Wesley. ISBN 0 -2
01-54834-8.
        2 语言分析
        Objective-C 是非常―实际‖的语言。它使用一个用 C 写成、很小的
运行库,只会令应用程序的大小增加很小,和大部分 OO 系统使用极大的 V
M 执行时间会取代了整个系统的运作相反。ObjC 写成的程序通常不会比其
原始码大很多。而其函式库(通常没附在软件发行本)亦和 Smalltalk 系统
要使用极大的内存来开启一个窗口的情况相反。
        Objective-C 的最初版本并不支持垃圾回收。在当时这是争论的焦
                                 ,
点之一,很多人考虑到 Smalltalk 回收时有漫长的―死亡时间‖ 令整个系统失
去功用。Objective-C 为避免此问题才不拥有这个功能。虽然某些第三方版
本已加入这个功能(尤是 GNUstep), Apple 在其 Mac OS X 10.3 中仍未
引入这个功能。
        另一个问题是 ObjC 不包括命名空间机制(namespace mechanis
m)。取而代之的是程序设计师必须在其类别名称加上前缀,时常引致冲突。
在 2004 年,在 Cocoa 编程环境中,所有 Mac OS X 类别和函式均有―NS‖
作为前缀,例如 NSObject 或 NSButton 来清楚分办它们属于 Mac OS X
核心;使用―NS‖是由于这些类别的名称在 NeXTSTEP 开发时定下。
     虽然 Objective-C 是 C 的母集,但它也不视 C 的基本型别为第一
级的对象。
     和 C++不同,Objective-C 不支援运算子多载(它不支持 ad-hoc
多型)。亦与 C++不同,但和 Java 相同,Objective-C 只容许对象继承一个
类别(不设多重继承)。Categories 和 protocols 不但可以提供很多多重继
承的好处,而且没有很多缺点,例如额外执行时间过重和二进制不兼容。

						
Other docs by nuhman10
GA2010-1100061
Views: 503  |  Downloads: 4
GA2010-1100060
Views: 127  |  Downloads: 0
GA2010-1100059
Views: 81  |  Downloads: 0
GA2010-1100058
Views: 95  |  Downloads: 0
GA2010-1100057
Views: 50  |  Downloads: 0
GA2010-1100056
Views: 54  |  Downloads: 0
GA2010-1100052
Views: 57  |  Downloads: 0
GA2010-1100055
Views: 47  |  Downloads: 0
GA2010-1100054
Views: 46  |  Downloads: 0
GA2010-1100053
Views: 75  |  Downloads: 0