APP下载

中英文可视化编程的对比研究

2022-08-11黄嘉诚

电大理工 2022年2期
关键词:元胞编程设置

黄嘉诚

(江南大学,江苏无锡 214122)

0 引言

语言是资源沟通、信息交流的一种重要方式[1]。计算机语言问世于20世纪50年代,是计算机软件的一个重要组成部分,对于计算机发展具有非常重要的意义。计算机语言经历了机器语言、汇编语言以及高级语言三个阶段[2]。其中高级语言提升了对用户的友好程度,降低了对硬件的依赖程度,充分满足了社会需求,得到了广泛的使用与推广[3]。在计算机语言发展历史中,编程起源于西方,英文编程成为了主流与规范,汉字编程却发展艰难,而易语言(EPL)则是汉字编程中的典型代表。本文分别通过易语言以及C++编程语言,来设计与仿真基于元胞自动机的生命游戏,进一步讨论易语言的特点,以及展现中英文编程的差异。

1 两种语言介绍

1.1 易语言介绍

易语言是中国人发明的一种计算机编程语言,以“易”著称,早期称为E语言,是一种以汉字为程序代码来展现的语言形式[4]。易语言诞生于国内计算机发展初期,此时汉化系统与汉语输入法才步入正轨。为了促进汉语编程的发展,吴涛先生在2000年研发出了易语言的最早版本。经过20多年的发展,易语言已经具备一定规模,具有安装方便、操作简单、容易上手等特点,不仅支持界面设计与程序流程的可视化,还具有即时帮助系统、语法格式自动检查等功能[5]。在软件编译器的设计、汉语可视化的编程等方面具有一定的创新,处于国内领先地位,像《中华办公系统》《红警2战网》等软件都是采用易语言编写的。易语言的趣味性很强,学习以及入门门槛较低,为国内非专业人士、英文基础薄弱人群以及电脑编程初学者提供了相对容易的学习环境与学习机会,可以在较短的时间内进入windows程序系统的大门[6]。它的程序实现是由窗体设计以及代码编写组合而成,因此易语言在小游戏和小程序的开发与实现上具有显著的优势。

易语言是完全面向对象的计算机语言,与VB语言有很多相似之处[7]。易语言的编译器能够将源代码编译为易语言类库或者可执行文件,兼容Windows的所有系统,且支持DOS与Linux等不同操作系统。编译方式主要分为普通编译、静态编译以及早期的独立编译三种,能够高效编译执行。易语言属于模块化语言,方便直接调用编写好的现成模块,但同时性能受到一定影响,在传递过程中需要附带各种库文件,整体所占空间较大。

易语言的表达式包括常量、变量、立即数、表达式、方法调用以及各自的组合。每一行代码可以由多条语句组成,语句需要以“;”结尾,按照汉语的逻辑思维进行代码编写,语义清晰明了。

这里使用的集成开发环境是2019年5月发布的易语言5.9版本。

1.2 C++语言介绍

C++语言完全兼容于C语言,是对C语言的补充与增强,总共融合了3种不同的计算机编程传统。在C语言代表的过程性传统的基础上,C++增加了面向对象语言的传统以及通用编程传统。它首先考虑的是如何建立一个符合要求的对象模型,使其能够解决与之契合的问题,然后通过引进对象的状态信息来实现对象的控制过程,因此它也被称为“带类的C”[8]。标准的C++语言有以下三个重要模块所构成:第一部分是核心语言,负责提供变量、数据类型等所有构件块[9]。第二部分是C++标准库,负责提供函数和编程数据结构来传递链表、数组等组件。第三部分是标准模板库(STL),负责标准化组件,便于用户以后直接使用。此外,配置C++的语言环境只需要文本编辑器和C++编译器两个基本软件。相比于易语言,C++语言同等程序大小一般只有几千字节,运行和使用效率大大提高。本文使用的是Visual Studio 2010作为开发环境,来实现生命游戏的可视化编程。Visual Studio是Windows平台中使用最为广泛的应用程序开发环境,支持用户使用各种程序语言进行软件开发,并支持动态编程、多核并行运算等功能。

2 元胞自动机与生命游戏介绍

2.1 元胞自动机概念

20世纪80年代,复杂性科学被首次提出,便引起了全球科学家广泛的关注与思考,一度被誉为“21世纪的科学”[10]。为了探索复杂性科学与复杂性系统,海内外学者提出了各种方法。其中元胞自动机(cellular automaton,CA) 因为它的简单规则性、并行性以及有效性受到广泛的关注与应用。

元胞自动机由元胞、规则与邻居三部分构成,每一个元胞都有固定的位置与两种状态[11]。假设初始存在一个元胞群,每经历一个时间单位,每一个元胞都会根据设定的规则,在局部也就是邻居范围内进行一次变化,无数个局部共同构成一个大的环境。看似简单的规则却很难预测大环境下最终元胞的变化,非常具备趣味性[12]。举个例子,初始状态为规则划分好的正方形元胞群,形状类似于一扇古城墙的大门,其中元胞的状态只有黑色或者白色两种,规则是如果一个元胞为白色,而与之相邻的元胞为黑色,那么颜色将保持白色,否则颜色将变为黑色。于是仅仅改变水平或垂直相邻的任意元胞,图形的轮廓便被勾勒出来。如图1所示,每一个元胞对应着局部的信息,都成功地表达出了整个环境状况。

图1 元胞演示图

2.2 康威生命游戏介绍

20世纪60年代末,康威实验室推出了一款生命游戏,不仅风靡全球,更大大推动了元胞自动机的研究。生命游戏是将元胞分布在规则划分的网格上,设置元胞周围九宫格的大小为邻居范围,每一个元胞的状态只有两种,用二进制数来表示生或者死。每一个元胞的生命状态由该时刻自身的状态与下一时刻八个邻居的元胞的状态共同决定,并按照一定的规则进行变化。

在生命游戏中,简单的初始状态可以不断变化,逐渐复杂,甚至是无限循环,最终导致了环境的多样性与复杂性。相反,复杂混沌的初始状态在简单规则的作用下,可以逐渐简化,甚至虚无[13]。

3 软件设计

3.1 易语言实现生命游戏

在程序设计中,采用的基本数据结构是二维矩阵,来模拟大量的元胞状态。整个程序分为子模块进行编写与调用,最终按照时序进行排列。本设计中主要程序有两部分:窗口程序集和主程序。窗口程序集主要包括窗口的启动、各个选项按钮的设置、读入元胞数据以及时钟设置等方面。整个软件的界面如图2所示,此状态选择的是随机分布初始状态且元胞尺寸最大。为了显示直观,采用白色方格来表示状态“生”。

图2 易语言软件界面

在整个程序中,共有三种初始方式可供选择。第一种是手动设置,让用户自由发挥,来创造独特的图形,例如在生命游戏中存在一种图形称为“滑翔机”,仅仅由5个元胞构成,周期为4,可以每4个变化就向右下角平移1格,虽然元胞的状态已经发生变化,但元胞群还是保持着原来的形状。手动设置如图3所示。

图3 滑翔机

第二种是随机设置,可以比较真实地模拟生命游戏的变化过程,例如图2随机的初始状态看上去十分混乱,经过数十次变化后,会形成稳定的状态,如图4所示。最终状态由两部分组成,一种是以“田”型图案为代表的稳定型,一种是以“1”型图案为代表的周期型。其中左下角的图案称为“脉冲星”,是一种周期为3的对称图形。整个过程会不断简化,趋于稳定。

图4 随机设置下的稳定状态

第三种是图案设置,用txt文本文件对应位置写好图形,1表示白色方格,0表示黑色方格,然后插入到程序中,鼠标点击的位置表示插入图形的左上角元胞位置。在生命游戏中,虽然元胞的变化难以预测,但是人为地利用规律也可以设置出有趣循环的图案,笔者设置了一种初始状态,将它称为“八面玲珑”,如图5所示。

图5 一种人为设置的有趣图形

在图5中心区域共有八个滑翔机,外圈的四个滑翔机按顺时针方向飞行,内圈的四个按逆时针方向飞行,互不干扰。在图形的四周设置了一些“补给仓”,滑翔机经过它们时会损失元胞、补充元胞,在改变行动轨迹的同时形状不发生变化,在经过四分之一个周期以后,图形中心部分整体旋转了90°,如图6所示,这就是人类可以利用规律来改变与创造事物。

图6 经历1/4周期变化后的图形

此外,可以设置元胞的大小,因为环境的尺寸是固定的,三种大小的元胞对应的是数量不同的三种初始状态。元胞的演化速率也可以设定,此刻采取的是520 ms。选择好状态后点击“开始”,整个元胞群就会不断地发生变化,点击“停止”就会定格在当前状态,点击“复位”整个屏幕就会清空。整个软件的流程图如图7所示。

图7 软件的流程图

在整个程序中局部变量与全局变量都是以表格的形式显示在代码的开头,当改变其名称时,整个程序中所有的该变量都会同步变化,十分方便。与英文编程不同,易语言中每一个分支流程线是可以互相标注的,条理十分清晰。以演化规则来举例,相关的变量、代码设置分别如图8、图9所示。

图8 相关变量的设置

图9 元胞规则的代码

整个程序的思路清晰简洁,易语言可以在较短时间内编写出一个小程序,趣味性足,入门性高。在编写代码的过程中,帮助功能可以提示任务的流程。同时可以调用支持库与模块,集成开发环境非常强大。设置初始状态到趋于稳定的运行时间在大约为19.8 s,整体运行时间相对较长。随着txt文本的增加和时钟、图片等组件的使用,易语言所占内存会不断增加,需要进行有效地删减。

3.2 C++实现生命游戏

这里选用Visual Studio 2010软件来仿真生命游戏的整个演变过程,大致思路与易语言一样,核心部分依旧是先判断周围状态为“生”的元胞个数,统计并按照规则变化,最后再进行输出。与易语言的窗口有所不同,选项设置在了最上方,第一个小菜单“State Selection”如图10所示,通过鼠标选择来进行初始化,缺少了“图案设置”选项。此外,还包括另一个小菜单“Introduction”,进行简单的介绍,如图11所示。

图10 状态选择菜单

图11 介绍菜单

整个仿真的界面如图12所示,相比于易语言,元胞与元胞之间更加清晰、直观。利用VS2010进行程序的编写,工作量相对比较大,主要包括头文件、源文件以及资源文件三类,每一个选项都要设定唯一的地址,比较繁琐。此外,设置相同初始状态,C++的运行时间只有5.8 s,执行效率远远快于易语言。

图12 VS2010仿真界面

4 两种编程语言的特点

首先汉语历史悠久,句式、方言、多音字甚至是语调语气都会影响句子本来的含义。计算机语言无论是汉语还是英文都需要转化成二进制代码传递给计算机,相比于英文字母,一个汉字占据两个字节,在计算机空间与时间效率上,汉语编程相对处于劣势,在易语言内存操作数组进行检索,模块化调用的关系,性能会有所提升。

其次编程起源于西方,英语编程的流通性、架构体系以及开发环境都相对完善。例如在计算机中效率最高的表达形式是三进制或者e进制,三进制更加贴近于人类的思维,是信息表达的最优定义。但是目前人类主流的表达形式依然是二进制,根本原因在于人们不想改变熟悉的环境,更不想去打破二进制的垄断地位,权衡利弊之下选择了维持现状。而汉语编程走向世界面临着相同的问题,就好比手机出现故障,调试时蓝屏出现的都是英文代码,此时用英文去恢复相对容易,汉语编程的难度可想而知。

易语言的编程页面相对比较美观,整体的编程逻辑思维简洁,入门性高、学习门槛较低,可以在最短时间内进行可视化编程,对于一般初学者学习开发很有帮助。易语言的初衷是做一台轻便的“电动车”,是大众的定位错误与期望较高。易语言是基于C/C++语言开发,它的部分编译器也是由C++编写,因此在高级模块上注定是有缺失的。反观C++语言,不仅继承了C语言的精华与优点,更增加了面向对象等特点,是企业级系统软件的必备之选。此外,它的运行效率也远远高于易语言,在处理大数据运算时优势明显[14]。当然,编程语言的强大与否,与用户的个人能力与算法实现也有紧密关联。

5 结论

对于计算机语言,目前关注点在于可扩展性、可书写性、运行效率、简易程度以及逻辑思维等。本文进行可视化编程对比,研究结果表明汉语编程在执行程序时,所占计算机内存空间较大,执行速率相对较慢。相比于英语编程,在可书写性、简易程度以及逻辑思维等都有一定的优势,方便用户在短时间上手与操作。对于编程而言,其本质应该与生命游戏相同,用最简洁的代码去实现一个复杂而高级的系统,本就应该具备语言无关性。最后,生命游戏是一种开放式的结局,暗示着最简单的逻辑规则,也能创造出复杂有趣的现象,需要进行不断地探索与发现。

猜你喜欢

元胞编程设置
中队岗位该如何设置
编程,是一种态度
元征X-431实测:奔驰发动机编程
编程小能手
纺织机上诞生的编程
基于元胞自动机下的交通事故路段仿真
基于元胞数据的多维数据传递机制
本刊栏目设置说明
中俄临床医学专业课程设置的比较与思考
基于AIS的航道移动瓶颈元胞自动机模型