先来了解Scratch和Blockly
一说起Scratch(一个儿童编程平台),可能很多人都知道,它的界面如下图所示:
Scratch开发界面截图
这种图形化的“积木块”带“磁吸”效果的拼接逻辑,几乎是现在“儿童/青少年”编程的主流逻辑表达。国内几乎所有的儿童编程产品几乎也都采用了这种“逻辑”表达方式。
但是,还有另外一个产品,也许大家就不那么熟悉了,这就是“blockly”(Google公司发明)。那么Blockly和Scratch的关系是什么呢?Blockly相当于发明了“积木+磁吸”这种逻辑表达的“引擎”,是一种“新的编程方式/范式”;而Scratch则相当于使用这种“逻辑引擎”,做了一个“儿童编程平台”。而使用Blockly这种开源引擎开发的产品有数百款,几乎看到这种“拖拽积木+磁吸”的面板进行编程的,都是使用的Blockly的产品二次开发而来。而且Blockly可以自己编译成多种语言的代码,例如:JavaScript、Python、Lua、Dart、PHP等。Blockly使用一个名为“生成器”的概念来将其图形化的块结构转换为源代码。每种支持的语言都有其对应的生成器。这个过程并不直接涉及到抽象语法树(AST)的转换,虽然实际上每个块和连接都可以视为AST的一部分。
Blockly提供了多种方式进行扩展,你可以通过创建新的块、定义块的行为,或者自定义UI来进行扩展。
Blockly开发界面截图
从Blockly开发界面截图可以看出,Blockly主要是设计了一种从“可拖拽的积木块”到“各种编程语言”的转换模式,只负责“图形化”编程到“代码”编程的转化过程。而一开始提到的Scratch,则是把这种Blockly设计的“编程模式”,变成了小朋友可以使用的IDE(集成开发环境),变成一种成熟的产品,这就是“Blockly”和“Scratch”的核心区别。
Blockly所开发出来的平台
Blockly及其所开发出来的平台
Blockly由于其图形化/可视化的特点,在很多平台中被使用,其中并不限于“儿童编程”,包括很多设计现在都采用了这种“拖拽积木块”的设计模式。包括游戏设计、2D/3D开发、Debug、应用开发领域都有。
Blockly的优点和限制
看看“万能”的GPT如何回答这个问题...
优点这里就不多说了,关键是“还有什么地方值得改进?”因此我们概括一下Blockly的一些缺点。
1 开发效率低
作为一种编程语言而言,这种“拖拽——配置”的模式,还是效率太低(操作时间多和点击次数高),相比“代码编程”并没有明显优势(被很多人认为写程序比Blockly要更快一些);特别是对于复杂的应用,几乎是无法完成的现阶段,所以限制很大。
2 功能限制大
Blockly模式编程,核心的编程范式很接近“申明式”编程,“面向对象”的封装这块儿做的并不是太好,而且添加组件并不容易,因此扩展起来还是比较麻烦的,因此主要用于“儿童编程”。另外,由于本身能力限制,涉及到后台/数据库等复杂操作,几乎没有采用这种模式进行开发的。由于Blockly这种作为编程语言本身“完备性”的缺失,因此,还存在很大的改进空间。
3 和程序员需求存在“断层”
Blockly还有一个重大的问题,就是多数使用该技术的平台,只适合“儿童/少年编程”,无法往上兼容,继续开发更复杂更完整的应用。绝大部分基于Blockly的平台,往往只能坐一部分或一阶段的应用开发,例如只能做前端、只能游戏等,绝大部分都没有支持数据库的能力。
这一问题,导致很多使用Blockly平台的学习者,学习一段时间后不得不放弃使用Blockly平台,再去学习代码开发。
Blockly是有多重专利保护的
虽然Blockly是开源的,但是Blockly作为Google的一个核心项目,具有多重的专利保护,这一点大家一点要引起重视。开源表达了代码可以被公开在一定范围内使用,但是专利是另一套体系,到一定时候是可以收取专利费的。
(以下是部分收录的专利)
专利标题:Visual Code-Generation Systems and Methods
专利编号:US 20130159925 A1
申请日期:2011年12月19日
发明人:Neil Fraser
专利所有人:Google Inc.
iVX和Blockly都是“程序逻辑编辑方案”
现在,ivx.cn这个网站,其实更类似Scratch这样的平台,自带IDE,开发者可以自由在平台上开发各种应用程序,然后完成应用的全生命周期管理。
其实,我们也发明了Blockly,也就是我们的“事件面板”,这种面板如下图所示:
iVX IDE逻辑编辑“事件面板”截图
这种“面板模式”相比“拖拽积木模式”本身就有一些天生的优势,主要表现在:
1 更快的开发效率
这得益于“更少的点击和操作次数”,“更少的窗口数量”,以及“更好的面相对象组件设计”。从实际统计来看,iVX一次操作可以生成数百行代码。
2 功能上无限制
这种图灵完备的“逻辑面板”加上“分层的组件设计”,让iVX几乎没有任何功能限制,完全可以胜任复杂应用和中大型项目的开发,单应用可以生成上千万行代码。
把“逻辑面板”从iVX上“剥离”
前面已经说到了,iVX实际上相当于是“Scratch”,虽然也设计了自己的“逻辑面板”,但是其他人开发者并不能使用这种“逻辑面板”开发他们自己的平台和IDE。
因此,我们需要把“逻辑面板”剥离出来,形成一个和平台“解耦”的“逻辑面板”,其实就是,iVX自己的“Blockly”,将这种快速的“逻辑转代码的能力”开放出来,让所有开发者(不管是否使用iVX开发)都可以使用这种“新的编程方式”,都可以使用“逻辑面板”构造自己的应用。
这一点对于整个iVX的发展也至关重要。