开发图形编程编辑器原因
最开始只是觉得使用了多年的公司图形编程软件太难用,不支持面向对象,不支持复杂数据结构,只能用一个数组解决各种问题,而且只支持二元表达式,复杂点表达式都要拆成多个二元表达式,复杂编程太痛苦,所以当时就想挑战下自己,看看是否可以写出更好的图形编程工具。通过查看各种资料和项目,就采用了将代码逻辑语法树(AST)的每个语法,都封装一个块,通过块的拖放完成编程。后来赶上疫情,孩子上网课呆在家里时间多,老婆希望教他编程,所以就把这个工具逐步完善,一边陪孩子玩编程一边进行修改。断断续续改了快一年半了,目前编辑器差不多实现了当时的各种预期,也改掉了各种各样的bug,这里总结下,编辑器实现的功能。
图形编程编辑器实现的功能
基本语法
- 变量:支持变量作用域(局部变量和全局变量),支持整数、小数、布尔值、字符串;支持变量类型转换,支持常量
- 操作符:支持四则运算、逻辑运算、位运算等所有操作符
- 流程语句:支持if-else,for, foreach、while、do-while,switch语句,支持break和return的流程中断控制
- 函数:支持函数、函数参数和返回值,支持函数递归
- 数组:支持一维和二维数组,支持[]取值和赋值
- 字符串:支持通过+进行字符串连接,支持字符串各种函数
- 异常处理,实现try catch和final语句
- 数据结构:实现list、Dictionary、堆栈和队列
- 线程:支持多线程和线程同步,实现三种线程同步方法(event、mutex和lock语句)
- 面向对象,支持面向对象编程,可以自定义和使用对象,支持继承和方法重载
- 支持模块化编程,支持脚本被其他脚本作为类库使用,实现代码宠用。所有功能都支持模块化。
- 支持选择脚本在32位和64位模式下运行(主要是针对dll和COM对象只能在特定模式下运行,增加这个功能)
扩展功能
支持使用COM、Active-X和.Net对象,支持使用动态链接库(dll)的函数,从而可以扩展图形脚本更多功能,实现更多和更复杂的应用。
Debug功能
编辑器代码运行时候支持逐步运行,并显示当前步骤或者表达式的值,同时程序爆粗时候,可以定位报错位置
其他功能
实现画图、文字转语音、翻译、EV3和Arduino硬件控制、制作scratch游戏等适合儿童编程的有趣功能,同时也增加了数学、时间日期、文件系统、网通通信、json数据转换等功能。可以用来实现很多有趣功能,编写游戏,在编辑器示例中,就增加了五子棋和围棋游戏,还有通过网络通讯的五子棋堆栈。
编辑器的稳定性
为了提高编辑器的稳定性,将脚本的编辑器和运行隔离到两个独立进程,从而代码的运行和代码编辑完全隔离,代码运行产生的各种问题,不会对编辑器产生影响。
图形编程编辑器的扩展性
可以将自定义的类库增加到编辑器中,实现更多的功能。也可以将图形编程作为一个控件放到应用中,实现基于图形程序的其他复杂功能。