XCY语言(XCY Language)是由南京大学的徐家福、中科院的付萃豪以及北京大学的杨芙清等人共同设计系统程序设计语言,[1]它具有概念简明、易学、易写、易维护等特点。[2]
1978年,在中国计算机操作系统会议上首次讨论并起草了关于系统程序设计语言的相关文本,[1]之后由徐家福、付萃豪、付萃豪等人开始设计,1979年开始考虑在DJS-200系列计算机上实现XCY,1980年设计出一个XCY编译程序。[4]1982年起,研究人员开始设计XCY语言族。[3]
在XCY语言中,遵循了分层设计的原则,设计了基本类型、复合类型、指引元类型以及模块类型四种数据类型。[1]XCY语言的模块由模块说明引进,模块说明的组成包括一组说明、移入表和移出表组成。[1]XCY语言中还保留了路径的概念,并包括包括路径说明和路径初启语句两个侧面。[5]在储存机制上,XCY语言中采用了静态方案。[1]
发展历程
在六十年代中期,人们开始认识到书写系统程序的必要性,这推动了高级语言的发展。其中,1976年起,655机的NDHD软件自动产生系统的开发标志着一个重要的里程碑。[3] 随后,1978年,中国计算机操作系统会议上讨论了关于系统程序设计语言的问题 , 并决定起草“系统程序设计语言”试用文本 ,[1]并由中国南京大学的徐家福、中科院的付萃豪以及北京大学的杨芙清等人共同设计。其设计思想相对接近于Modula语言。[6]

1979年,徐家福等人开始考虑在DJS-200系列计算机上实现XCY,[4]在使用XCY语言为DJS-200系列编写的XT-2操作系统时,徐家福充分利用XCY语言的数据抽象和描述并发程序设计的功能,用管程、类程、行程等高级手段把操作系统中许多概念统一起来。[7]1980年,徐家福等人设计出一个XCY编译程序,并使用XCY语言写出了XCY的编译程序,用自展技术生出了两代编译程序,同时考虑将基编译程序从DJS-200系列计算机移植到EC-1022B机器上。[4]
之后XCY语言还成功在240计算机上运行,并成功用于编写了240机的操作系统。这一成就使得XCY语言在1980年的国际信息处理联合会(International Federation for Information Processing,IFIP)会议上受到了好评,展示了其在系统程序设计领域的潜力和应用价值。[6]
尽管XCY的设计准则与设想在实践中基本上是合适的,但在试用过程中也暴露出一些问题与缺陷。正是出于对这些问题的反思,1982年起,研究人员开始考虑并投入精力设计XCY语言族,以进一步完善和改进。[3]
数据结构
在系统程序设计语言中,有些为了处理上方便,因此不进行数据类型的区分,但区分数据类型有利于理解程序,便于查错等,在XCY语言中,区分了数据类型。此外,还设置了类型说明,用以由使用者自行定义新的数据类型,又可以使程序结构清晰。[8]
在数据类型的设计中,XCY语言遵循了分层设计的原则,其四种数据类型如下。[1]
基本类型,这种类型又可分为两类,一类为标准基本类型,另一类为非标准基本类型。前者有整型,布尔型,字符型和实型;后者只有枚举型。[5][1]
复合类型,有两类复合类型,即静态复含类型与动态复合类型,前者有静态数组型,静态记录型,静态字符串型,静态字位串型,以及集合型,后者有动态数组型,动态记录型,动态字符串型,以及动态字位串型。[5][1]
指引元类型,有两类指引元类型,即不带对象类型的指引元类型和带对象类型的指引元类型,这两类指引元类型既可以动态使用(对动态变量),也可以静态使用(对静态变量)。[5][1]
模块类型,顺序模块和并发模块均可定义为模块类型,亦即,模块不仅用于隐蔽信息,而且也可以用作“数据样式”。特别是,如果一个程序中的同一模块有多个实例,采用这种动态定义观点更为有利。[3]
语法语义
在主要成分中,与常规程序设计语言相比,XCY语言具有六点差异性:
(1)在XCY语言中只定义了指引元显明常量和整显明常量两种,其中显明常量是指在系统程序中往往遇到在编译时刻确定的量,此时便可将这样的量作为显明常量引入,在常量说明时可以标以IVALUE(整值)或 PVALUE (指引元值)。[8]
例如,当A时一个A是一个指引元显明常量,其具体值留待编译时刻确定,便可标记为:[8]
const A = PVALUE:
(2)在模块中引用其它模块中的移出量时,可用模块标识符来限定,例如,X1为模块M1中的移出变量标识符,则引用时可表示为 M1·X1。[8]
(3)在XCY语言中,运算符的优先级分为四类,虽然简洁高效,但也带来了一定的弊端,例如,不能写作X>Y and Z=U,应写成(X>Y) and (Z=U)。[8]
(4)在XCY语言中保留了转向语句。[8]
(5)在循环语句中,分为带迭代指明和不带迭代指明两类,带迭代指明为一般语句中的循环语句,细分之下又可分为带while指明和for指明两种,不带迭代知名是通过循环体内有关语句的执行来控制是否结束循环,此外,为了便于提高目标程序的质量,限制带for指明的循环语句中的循环参数只能在下标表达式中出现。[8]
(6)为便于动态调试以及程序正确性验证,增设了断语语句,允许在任何语句前插入。[8]
模块结构
在系统程序中,其本身包括一些相对独立,而在一定条件下可以相互联系的构造,它有利于提高程序的正确性,使之易读、易写、易维护。例如Simula语言中的类,而Modula语言中的模块有出自前者中的类。XCY语言的设计也借鉴了Modula语言中的模块。[1]
在XCY语言中,模块由模块说明引进,模块说明的组成包括一组说明、移入表和移出表组成,其中模块说明仅仅是定义单位,不可执行,只要通过调用模块中的子程序才可执行其有关部分,移入表和移出表用于刻画和外界有联系的对象。针对书写系统程序的要求,模块有三种:管程模块:管理调度实资源;类程模块:控制作业路径专用的虚资源;一般模块:满足一般用户算法要求。[1]
路径
路径是指可以和程序的其他部分并发执行的一段程序,某种意义上,路径即进程。路径包括路径说明和路径初启语句两个侧面,前者用来定义路径的算法,后者用来初启路径。形式上看,路径说明类似于一个“有名的”分程序,其主要部分是说明表和语句表。[5]
路径初启语句中除了指出路径标识符外,还须给出其它有关信息,具体的作用分为三方面,分别为分配路径控制块,填好块中信息(如优先级、时间片、路径号等);分配执行栈,包括调用子程序时所用的局部量、形参、现场保护单元等;将路径控制块挂链(一般情况下挂就绪链)。[5]
目标程序开始工作时执行主路径说明的语句表,其中主路径说明是以main开头,任一XCY程序的结构是;[5]
Program <程序标识符>; <程序单位>{; <程序单位 >} end <程序标识符>
其中的程序单位为模块说明,或路径说明,最后一个程序单位为主路径说明,程序由此开始执行。[2]
存储机制
存储体制是影响编译程序质量的带有全局性的问题,在XCY语言中采用了静态方案,它以路径为线索进行分配。为了满足静态分配方案的要求,同时还可以解决有关量的覆盖关系,因此在XCY语言中,区分了五种分配单位:[1]
管程模块和一般模块。管程模块和一般模块中所说明的量代表共享变量,只须分配一个存区,无须针对不同的路径,对它们分配不同的存区。[1]类程模块。类程模块内所说明的量刻划专用资源,因而,就要求对每个引用它的路径分配一个存区,并且这些存区彼此之间是不能覆盖的。[1]路径。路径体内所说明的量,每相应创建一条路径时,就要对这些量分配一个存区,这一存区包括在路径工作区内。[1](非递归)子程序。模块说明内部说明的(非递归)子程序,对其形参和局部量,每条引用它的路径都要分配一个存区,由于在一条路径内部,程序总是顺序的,因此,子程序的形参和局部量可以根据子程序间的引用关系来决定它们能否覆盖分配,这种存区也包括在路径工作区内。[1]
递归程序。其统一规定最大递归深度为七层,便于与非递归子程序进行类似分配。[1]
机器成分
系统程序设计语言一方面应与机器无关,另一方面,为了考虑到功效,又必须包含少量和机器有关的成分。XCY语言与机器有关的成分包括两方面:[8][5]
变量说明、模块说明等所附的位置信息,这是给程序员自行指定分配位置的。[8][5]
和机器有关的记录型,一律以基字md起头,在其中具体指定了各个域的定位信息,即相对记录头而言的字区距以及域在字中所占用的位置。[8][5]
特点
XCY语言的独特之处在于其多方面的设计特点。[2][5]
首先,它强调概念的简明性,注重易学易写易维护,旨在提高程序的正确性并简化验证过程。[2][5]
其次,XCY语言在规模上保持适度,致力于降低复杂性,使其易于实现。这不仅有助于提高编译器和目标程序的效率,同时也降低了学习成本,为开发者提供了更高效的开发体验。[2][5]XCY语言的设计灵感来源于MODULA和PASCAL等成功语言,保留了它们的成功成分,包括有效的编程结构和良好的设计理念。这为XCY提供了经过验证的基础,增强了语言的可靠性和实用性。[2][5]
此外,XCY语言对与机器相关的成分进行了巧妙的处理,将其尽可能局部化。这一策略使XCY语言的代码更具通用性,便于在不同环境中进行扩充和移植。这种灵活性和可移植性为XCY语言的广泛应用提供了坚实基础。[2][5]
参考资料 8
- 参考 1
- 参考 2
- 参考 3
- 参考 4
- 参考 5
- 参考 6
- 参考 7
- 参考 8