English  
     
 

 

主页   新闻   白皮书   文档   出版物   下载   源码   方案   资质
 
 
     
     
  主页| 文档| 目录| 前章| 后章    
       
     
     
 

第一章 引论

    Fuxi程序设计语言是一种通用的、面向对象的、并发的、分布式的逻辑函数型语言。Fuxi所采用的文法成分都是流行的、为程序员所熟悉的,因此可以让程序员在很短的时间内就可以熟练地使用Fuxi语言编写应用程序。 Fuxi语言从一开始就试图成为一种实用的程序设计语言,而不是一种研究用语言,因此在设计上尽可能地使用那些成熟的的技术,而避免新的或未经测试的成分。

    Fuxi语言的设计哲学是,我们并不试图去发明一项新的语言技术,而是将过去散落在各种语言中优秀的成分,结合计算技术的新发展,经过精心的设计,整合到一个语言中来;以提高语言的建模能力、减小语言同现实世界之间的“语义鸿沟”,提高语言的编程效率,降低程序设计的难度。Fuxi语言是一种强类型语言。本规范明确区分在编译阶段就可以检测到的编译错误和运行阶段发现的运行错误。编译阶段主要是将Fuxi源程序翻译成一种与平台无关的“对象图”,而运行阶段主要是装载这种“对象图”,中间可能会调用一些其它的代码,或者生成本地机器代码并进行代码的优化,最后进行实际的执行过程。

    Fuxi语言是一种相对高级的程序设计语言,程序中不包含任何与某种机器结构相关的内容。其自动内存管理,特别是垃圾回收技术,可以避免许多因不用空间的显式回收(如C++的delete)而带来的安全问题。


§1.1 Hello, World!

    从编写“Hello, World”程序开始,已经成为介绍一种程序设计语言的传统。以下便是Fuxi语言的“Hello, World”:

    import fuxi.*
    public active class HelloApp: Applet
    {
         public Activate() = System.Console.Println( "Hello, World!" )
    }

    Fuxi语言的源程序文件通常带有 .fux 扩展名。假设这个程序就存储在Hello.fux文件中,该程序可以通过以下命令行将对其进行编译:

            Fuxic hello.fux

    上述命令将“Hello, World”程序编译成一种平台无关的Fuxi模块文件hello.mdu。使用以下命令来启动Fuxi抽象机(FAM)执行Hello.mdu模块:

            Fuxi hello


程序执行的结果将在控制台上显示:


            Hello, World!

 

§1.1.1 Fuxi程序的基本结构


    Fuxi程序结构的关键性概念包括:程序(Programs)、模块(Modules)、类型(Types)、成员(Members)及装配件(Assemblies)等。Fuxi程序由一个或多个源程序文件组成。程序定义类型,而类型又包含其成员。这些类型通常又可以组织在一个模块中。类和接口是类型的例子,成员包括字段(Field)和方法(Method)。在Fuxi中,方法又可以分为函数(Function)、谓词(Predicate)和触发器(Trigger)等。每个方法都是一个由具有相同模式签名的规则(Rule)组成的结构,该签名也就是方法的签名。

    装配件是一个抽象概念,其构成取决于Fuxi实现技术。在基于Fuxi抽象机的实现中,装配件便是FOG模块文件。Fuxi程序经过编译,生成称为Fuxi对象图(FOG)的计算图,并且同其它信息一起被包装成FOG模块文件。当然,也可以将Fuxi程序编译成可执行的.EXE或.DLL文件。本规范仅对Fuxi的语言定义部分给予规定,而不涉及具体的实现技术。

  Fuxi装配件可以是可独立执行的模块(在抽象机上或者在某种特定的计算机上执行),也可以用于同其它装配件一道,共同装配成一个可执行的模块。这取决于Fuxi源程序所定义类型成份。

一般而言,Fuxi程序应该包括以下部分:

  1. 导入部分:导入Fuxi的基本类库或其它的装配件,如本例中的fuxi;

  2. 类定义部分:类是Fuxi的编程单位,是程序的构成要素。一个Fuxi程序至少需要定义一个类,“Hello, World!”程序就是只包含一个类的简单Fuxi程序;

  3. 输出部分:至少包含一个公开的类定义,如本例中的HelloApp。

§1.1.2 Fuxi程序的执行入口

    首先,一个值得注意的地方是“Hello, World!”程序没有象JAVA、C#等那样定义一个执行入口函数main,“Hello, World!”的打印出现在函数Activate()中;其次,在类HelloApp定义的前面使用了active关键字。

    Fuxi语言区分主动式对象和被动式对象,只有主动式对象才具有独立的执行线程,而被动式对象必须包含在某个主动式对象中。类定义前的active关键字可使类带有主动式风格,带主动式风格的类的所有实例都是主动式对象(不带active风格的类也可以定义主动是对象,我们将在——节中介绍)。Fuxi抽象机在创建一个主动式对象后,将为其分配一个线程,并且该线程第一个执行的函数就是Activate(),然后等待其它对象发送来的消息。

  Fuxi抽象机在装载一个Fuxi模块后,将首先查找公开的带active风格的顶层类(Top-Level Class),并用该类创建一个主动式对象。如果程序中包含多个这样的类,可在抽象机的调用参数中指定某个类来创建主活动对象;如果没有指定,则缺省选择第一个顶层主动类。关于Fuxi抽象机的执行过程,可参考《Fuxi抽象机规范》。

  在“Hello, World”程序中,抽象机将使用HelloApp类来创建一个主动式对象,该对象的执行线程调用Activate()函数,显示“Hello, World!”。由于没有其它对象发送消息来,因此该对象将处于等待状态,直到用户关闭Console窗口为止。

§1.1.3 Fuxi平台

    Fuxi语言是相对高级的程序设计语言,具有更强的抽象性。例如,主动式对象、永久性对象、可移动对象等,在程序中只要用一两个关键字就可以替代很多行的C/C++代码。但所有这些抽象性的实现,都是建立在一个良好的底层基础(Infrastructure)之上的。这里所谓的“底层基础”就是Fuxi平台。Fuxi平台包括Fuxi抽象机、Fuxi的通信基础、数据库引擎,以及Fuxi的基础类库等。例如,“Hello, World!”例子,短短的几行代码,却涉及到主动式对象、控制台的激动与管理、字符串等,所有这些都需要有Fuxi平台的支持。

    本规范不涉及Fuxi平台的具体实现技术,但将对Fuxi平台的语言层面进行必要的规范,以便让Fuxi程序可以有一个跨平台执行的基础环境。例如,对Console类和字符串类的规范,可使不同平台上字符串显示操作具有兼容性,可使“Hello, World!”程序在别的系统平台上执行,都能获得相同的结果。

§1.2 文法系统

    在本规范中,我们采用上下文无关文法来定义Fuxi程序设计语言的词法和句法结构。这里,我们简单介绍一下上下文无关文法。

§1.2.1 上下文无关文法

    上下文无关文法(Context-free Grammar)是由一组称为产生式(Production)的语法规则组成的形式系统。每个产生式都是由一个称为非终结符(non-terminal)的抽象符号作为规则的左部,和一个由非终结符和终结符(Terminal)组成的系列作为规则的右部。产生式中的所有终结符构成语言的字母表。

    在文法的非终结符中,有一个特殊的符号,称为开始符。从单个这样的开始符开始,反复应用语法中的产生式规则来替换符号串中的非终结符,从而形成只有终结符的句子;这样一个上下文无关文法所能形成的所有句子的集合就是一个语言(Language)。

§1.2.2 语法符号

    在本规范中,文法的非终结符号采用由<>扩起来的斜体名称来表示;而终结符号采用定宽的终端字体来表示。例如,<句子>和active分别表示一个非终结符和一个终结符。语法中的描述性文字采用仿宋体来表示。此外,语法中的元语法符号采用斜体符号来表示,这些元语法符号包括:

    [<符号>] 表示一个可选项<符号>

    {<符号>} 表示<符号>重复0次或多次

以下是一个产生式的例子:

   <标识符>定义为

       不是<关键字>的<标识系列>

   <标识系列>定义为

       <字母>{<字母或数字>}

§1.2.3 词法结构

    Fuxi的词法将在第2章中定义。Fuxi的词法是以Unicode字符集为终结符,以<输入字符>为开始符,定义如何将这些字符组成空白、注释和词法符号。其中,词法符号是句法的终结符,包括关键字、标识符、文字量、分隔符和运算符等。

§1.2.4 句法结构

    Fuxi语言的句法结构将在第4,5,7~9章中定义。句法是以词法所定义词法符号为终结符,以<编译单位>为开始符的一组产生式系统。句法是用来描述词法符号如何构成一个合法的程序。

§1.3 参考文献

  1. Stroustrup, B. The C++ Programming Language (Special Ed.) Addison Wesley 2000

  2. Armold, K., Gosling, J.,et al, The Java Programming Language (3rd Ed.) Addison Wesley 2000

  3. Budd, T. An Introduction to Object-Oriented Programming (3rd Ed.) Addison Wesley 2002

  4. 龚天富,程序设计语言与编译 (2nd Ed.) 电子工业出版社 2003

 

 
   
 
     
 

友情链接:深圳市触品科技有限公司 www.touchbuy.cn

友情链接:深圳市趋高智能系统有限公司 www.hitrend.com

友情链接:深圳市触品便利店有限公司 www.touchstore.cn

关于我们  联系我们  加入我们

©2006-2019 fuxi.org, 版权所有. 粤ICP备11003046号