写点什么

图形化编程平台对比:iVX 与 Blockly/Scratch

  • 2023-12-07
    四川
  • 本文字数:2730 字

    阅读完需:约 9 分钟

写在前面: iVX 和 Blockly 都是一种可视化编程工具,有人开山立派,就有人继往开来。


什么是 Scratch 和 Blockly


说到 Scratch ,很多人可能都知道,它的界面是这样的:



作为一款面向儿童开发的“编程语言”(准确地说是开发方式),这种图形化的积木块和磁吸效果显著降低了理解难度,降低学习门槛,国内几乎所有的少儿编程类产品都采用了类似的逻辑表达方式,少儿编程一度如火如荼。


这也是 Scratch 在国内享有知名度的直接原因。


还有另外一款产品,或许大家不怎么熟悉,那就是“blockly”,一款由 Google 开发的编程应用。


Blockly 和 Scratch 的关系有点像老师跟学生。Blockly 发明了“积木+磁吸”这种逻辑表达的“引擎”,而 Scratch 借助这种引擎,做了一个“儿童编程平台”。


借助 Blockly 这种开源引擎开发的产品很多,市面上就有着数百款类似的“Scratch ”,只要是看到“积木+磁吸”面板进行编程的,十有八九都是使用 Blockly 开发而来。


Blockly 可以编译成多种语言的代码,例如 JavaScript、Python、Lua、Dart、PHP 等。它使用一个名为“生成器”的概念来将起图形化的块结构转换为源代码,每种支持的语言都有其对应的生成器,这个过程不直接涉及到抽象语法树的转换,实际上每个块和连接都可以视为 AST 的一部分,只是将对应的代码转换成对应的块和连接而已。


Blockly 提供了多种自定义的表达方式,比如可以自定义 UI ,或者通过创建新的块、定义块的行为来进行功能拓展。



Blockly 的开发界面跟 Scratch 是很像的(毕竟是一个模子刻出来的), Blockly 开创了一种新的编程方式,而 Scratch 则进一步将这种方式完善、落地,沿用这种编程方式,并将其打造成一个更加完整的产品,变成小朋友也能使用的 IDE(集成开发环境),这也是它们的核心区别。


Blockly 由于其可视化的特点,在很多平台中都有使用,并不像大多数人理解的只是给小孩子设计的玩具,而是出现在很多设计领域,如游戏设计,2D/3D 开发、程序应用开发等。


这种新型的开发方式降低了门槛,更容易理解,因此实现了更广泛的编程方法。它使编程不再高深莫测,而是变得平易近人,让越来越多的人接触到编程,应用到生活中。


然而,Blockly 作为一种可视化编程的工具和框架,仍然还存在很多缺点,这主要可以概括为 2 点


1.效率低


作为一种编程框架,Blockly 使用拖拽的模式来构建程序,如果不是“块”和“连接”本身的抽象程度高,压缩的信息量足够大。光通过鼠标点击拖动的方式,必然比键鼠合作的操作方式效率更低(你能想象光靠一个鼠标打字的感觉吗?)。这就意味着这种方式会比传统写代码编程的效率更低,对于已经熟悉编程领域的人来说没有多大意义。


2.功能限制大


Blockly 的编程范式更接近"命令式"编程而不是"声明式"编程, 在命令式编程中,每个块代表一个具体的命令或操作,用户可以将它们按照顺序组合以实现所需的功能。


但 Blockly 在 “面向对象”封装这块做得并不是很好,添加组件扩展方式等都比较麻烦,只能面向儿童推出。因为功能受限,一旦涉及到后台/数据库等复杂操作,几乎都没有办法实现,基本只能做前端、游戏等,导致很多学习者,在学习一段时间以后,不得不放弃使用 Blockly 平台,再去学习代码开发。


顺带一提,虽然 Blockly 是开源的,但作为 Google 的核心项目,Blockly 仍有多重专利保护,开源并不代表所有东西都归你所有,仅代表代码可以被公开在一定范围内使用,而专利是另一套体系,到时候是需要收取专利费的,因此务必要引起重视。


前面花了这么多篇幅来介绍 Blockly ,也是想让大家更多的了解图形化编程的起源,对接下来的产品有一个更全面和理性的了解,全方位地剖析 iVX 和 Blockly 的好坏。


同样作为一种可视化编程工具, iVX 的定位更像是 Scratch ,通过自带的 IDE ,开发者可以自己在平台上开发各种各样的应用程序。


然而,站在巨人的肩膀上,iVX 也发现了 Scratch 底子里的不足,作为一种面向所有人(包括新手、程序员、专业开发者)的编程工具,要让大众使用一种全新的编程范式,必然要将前面两个老大难的问题攻克。


首先是抽象程度,在前面我们谈到,Blockly 并没有改变 AST(抽象语法树),不直接涉及到抽象语法树的转换。这是因为 Blockly 在设计之初只被用来应用于教育和可视化编程,它的目的是使得编程更容易理解和入门,而不是进行复杂的代码优化或压缩,如果要进行更高级别的编程任务,开发者必须直接处理 AST 以进行更复杂的操作,比如代码压缩、性能优化、代码生成等,而这些任务需要更高级别的抽象和控制。


而 iVX 想要实现在编程变得更简单的基础上,同时保证对构建复杂应用的可能性,最终重新设计了一种 AST:先生成 Java AST,再转码 Java Code。因为前后端的 AST 显然是不一样的,例如后台需要转码 Java,而前端需要转码 vue/react/dart 等,这样的做法既能保证更大的灵活性, 控制和性能优化,也能用于构建强大的跨语言或多语言编程工具,以支持多样化的开发环境。


在抽象程度上, iVX 本身已经具备了编程语言特征,做了更高维度的“组件抽象”和“逻辑抽象”,因此可以把编码的信息量变得更小,可以理解为 iVX 比 Java、C++这些具有更小的“语义空间”,但功能表达上没有太大差别,甚至可以直接用 iVX 开发一个“Blockly”出来,如下所示:



另一个优势在于,iVX 通过多层次的组件抽象和事件操作面板,一次有效操作可以生成大约 500~600 行代码,这在以前是一个程序员 3-5 天的工作量。


在功能限制上,iVX 自身具备“图灵完备”的逻辑表达,比如常见的“if”“else”“and”“or”等,配合分层的组件设计,让 iVX 可以胜任复杂应用和中大型项目的开发,相对前辈来说已经有了突破性的进步,因为自身对数据库、后台等常见功能的支持,且可以生成前后端的全栈代码,使得它的运用场景不会被局限在某些简单应用上。


在自由度上, iVX 开发的应用可以申请专利和软著、可以通过等保测试、以及最严苛的安全检测,同时不锁定用户,直接提供生成源码,不加密,不指定运行环境。这是国外低代码大厂 Outsystems 和 Mendix 都没能做到的事。这也让 iVX 真正步入商用范围之列,脱离 Blockly、Scratch “教育玩具”的定义,在市场上拥有更广阔的空间。


不过,iVX 也并非没有缺点,比如说目前就不适合开发纯算法的场景,比如机器学习、人工智能、物联网等,另外,已经成熟的、非常复杂的专业领域系统开发也并不合适,例如 3D 大型 MMOPRG 游戏,Matlab Labview 等的设备模拟,不是不能用,而是整个系统研发成本太高,不如用老办法。


综合看下来,iVX 基本克服了 Blockly 的固有缺陷,在市场和自由度上拥有更大的话语权,也让很多人对它的前景一致看好。可以预见的是,随着低代码、AIGC 等场景进一步延申,以可视化、多样化编程领域的探索将变得越来越普遍,届时的编程范式又将迎来一次崭新的变化。


用户头像

一个程序员跟他的猫 2023-10-30 加入

做过 2 年建筑业,现在 3 年程序员

评论

发布
暂无评论
图形化编程平台对比:iVX 与 Blockly/Scratch_代码生成器研究_InfoQ写作社区