当前位置: 首页 > 科技观察

OpenBlock

时间:2023-03-11 21:04:17 科技观察

,一种多宿主语言、跨平台扁平化部署的开源图形脚本语言在OpenHarmony(“OpenHarmony”)开发者圈中,数个演示视频引起了广泛关注。视频中的demo程序已经成功运行在PC浏览器、微信小程序、OpenHarmony开发板三种环境中。意外的是,这个项目的开发工具是通过在web端部署一个类似Scratch的Web端IDE工具来完成的!视频画面中的程序运行稳定流畅,完成度非常高。带着好奇,我们找到了视频的发布者杜天伟,一位住在老北京胡同里的开源贡献者。视频中演示的项目由OpenBlock编写,目前已开源。知道OpenBlock还在OpenAtom开源基金会的交流群里,了解到OpenBlock是开源项目OpenHarmony下的一个SIG(SpecialInterestGroup)。SIG的发起人喜欢在微信群里和开发者讨论问题。记得有一次,在OpenBlockSIG的微信群里,有人提到了最近很火的“Metaverse”的概念,杜天伟和话题的参与者讨论了三个多小时。其他参会人员因为时间太晚不得不休息,直到凌晨4点,杜天伟还在一个人阐述自己对这个新兴技术领域的看法……什么是OpenBlock?OpenBlock希望简化编程和业务逻辑可视化的图形化编程语言。语言特性有Erlang和Smalltalk的影子。语法层面借鉴了Scratch,语言前端使用Blockly。与许多高级语言一样,OpenBlock拥有独立的编译器、链接器和运行时(OpenBlockVM),提供了一个易于使用的IDE工具。设计师、产品经理、运营人员、行政、财务、人力资源等非程序员角色可以通过简单易用的图形化编程提高工作效率;成熟项目开发团队中的非程序员角色也可以支持使用OpenBlock语言开发商业项目。在用户人群和语言定位方面,OpenBlock没有成熟的语言可供参考。OpenBlock追求语言强大的易用性和商业项目的开发能力,定位为非程序员应用广泛的图形脚本语言。同时关注这两点在当前的主流语言中还没有先例。Scratch面向非程序员群体,但缺乏对完整项目开发的基础支持,而能够支持完整项目开发的主流编程语言需要较高的学习成本,无法针对非程序员群体。OpenBlock有哪些技术特点?为了平衡易用性和商业项目开发能力,OpenBlock在语言设计上做了必要的权衡,也包含了关键的创新。这些特性充满了OpenBlock团队多年来的思考和探索。“面向状态机”编程不同于主流语言中的“面向对象编程”,OpenBlock就是“面向状态机编程”。目前只有微软正在孵化的P语言采用了这种设计。“状态机”是OpenBlock语言中一个非常关键的概念。它的概念很简单,遵循一个简单的操作规则:在当前状态的逻辑中决定是否切换到另一个状态。当“状态机”的可切换状态是有限的,只有少数几个可切换状态时,它就是“有限状态机”。有限状态机在我们的现实生活中无处不在。例如,门的状态仅限于打开和关闭。图形交互不同于主流的文本语言。OpenBlock使用Blockly作为前端语言,图形化代码语句,通过图片与用户进行交互。例如,OpenBlock可以在IDE中以图表的形式展示状态机的状态转换,这通常是主流文本语言所不具备的。支持多宿主语言和跨平台部署OpenBlock在设计时考虑了可移植性,通过宿主语言实现跨平台。在语言设计上,OpenBlock最小化了系统库,保留了数据操作相关的系统库;使用小型指令集,指令数预计限制在100条左右;使用宿主语言运行时时,您可以使用任何可用的宿主语言特性。这使得OpenBlock在跨平台部署时不需要复杂的开发。支持高并发和多线程在OpenBlock中,状态机之间没有方法调用,数据传输只能通过发送可以跨运行时传输的消息来完成。因为没有方法调用,OpenBlock可以运行在多线程、高并发的环境中。我们可以把VM看作一个actor,在服务器集群中创建上千个VM实例,在每个VM中放置与业务密切相关的状态机。所有VM都在一个线程组中运行。只要不在多个线程中同时调用每个VM,就可以保证数据的线程安全,从而实现高并发。从单线程到多线程的处理只需要在框架集成的代码中提供支持即可。耦合度低,业务拆解难度低在面向对象编程中,我们如何设计一款坦克大战游戏?最直观的想法是把坦克封装成一个高度聚合的类,把所有的坦克控制逻辑放在一个类中。当业务变得复杂时,我们会拆分出移动控制、火炮系统、生命系统等组件,但仍然对外暴露聚合坦克接口。不管怎么拆分,这个聚合接口都会和其他系统耦合。OpenBlock的面向阶段的状态机编程从根本上打破了这个过程。首先,我们不认为坦克是一个整体,而是由一组独立运行的状态机组成。每个状态机对应一组独立运行的服务:生命行为、炮击行为、移动行为。每个行为都是一个独立的状态机,可以在不同的状态下切换,而不需要向外界暴露任何实际的接口代码。而是通过将这些状态机捆绑成一个坦克实体,共同接收坦克上的所有事件和接收到的消息,并分别处理和实现各自的逻辑,完成业务整合。不同的状态机之间,只有约定的消息,没有固定的接口,所以在代码层面没有实际的耦合,很容易更换组件。为什么选择开源?作为一门编程语言,我觉得它需要生态化的运营才能发展起来。这不是一项简单的业务。语言不生态就没人用,没人用就是一潭死水。要想活跃,就必须开源,这也是几乎所有主流语言的统一做法。大公司开源自己的编程语言,做自己的生态生意,而小公司没有人力财力,又想生存,没有不开源的道理。也许20年前,一种新兴的编程语言可以靠小企业生存,但今天,它肯定不能。本人将OpenBlock捐赠给OpenAtom开源基金会,也希望借助OpenAtom开源基金会的开源社区运营经验,提升项目影响力,拓展项目应用领域,获得更广泛的支持,这样OpenBlock才能继续发展。OpenBlock目前的商业实践是什么?它是否取得了一定的商业成功?商业上,目前OpenBlock的实践并不多,主要是它的完成度不是很高。目前与北京大学有一个VR编辑器项目,是针对非工科研究生的科普教育。还有使用OpenBlock开发的商业应用程序,已经运行了一年多。最近,我们正在与一家游戏公司合作开发一款商业游戏。因为涉及到一些商业内容,就不多透露了。目前,这些项目对于一个早期的编程语言来说已经是非常不错的结果了。在这些领域,OpenBlock肯定不是用来解决技术问题的,它是解决业务逻辑问题的。以Unity游戏开发为例,程序员通过C#编写的代码在iOS上是无法更新的,所以引入了一个Lua,所有的游戏代码都用Lua编写,通过Lua调用C#,从而将C#引入到iOS中,这些都是程序员写的。与Lua相比,OpenBlock严格区分了技术和业务。本来程序员写Lua,现在准备写OpenBlock。底层程序的基础部分还是用C#写的。商业归商业,技术归技术。这样清晰的分离,可以让技术人员专注于基于C#的具体业务实现,也可以让规划人员通过OpenBlock更好的表达清晰的业务逻辑。您认为OpenBlock未来会在哪个领域大放异彩?未来希望OpenBlock能够实现人人编程。就像抖音在视频领域做的那样,拍摄、剪辑、发布,从专业级到国家级。希望大家以后遇到任何问题都可以使用OpenBlock来解决,比如批量处理庞大的Excel数据、处理大型邮件、管理家里的物联网设备等等;使用OpenBlock制作儿童编程领域的互动幻灯片电影和小游戏;在商业领域,可以支持商业级APP的开发等。OpenBlock本身具有比较高的可扩展性,是一个比较新的开源项目。未来将走向何方,存在不确定性。这些领域和场景只是基于OpenBlock现有实践的想法。目前很多服务平台都提供了图形化开发的能力,通过鼠标拖拽即可完成开发。OpenBlock有什么优势?这种低代码开发其实还挺多的,而且大多都是由业务模块组成的。当遇到不规范的业务时,这种低代码开发就束手无策了。说到底,这样的平台没有创意,开发者面临的大部分业务需求都有自己的特点,是低代码开发平台无法满足的。这种平台只能做杯子。顶多自己DIY杯身、杯盖、杯垫的款式,却无法打造出一款具有加热、保温功能的杯子。此类平台不具备加热和保温功能,开发者需要分离开发的功能。而OpenBlock就是你可以很容易的做出适合场景的东西,不管你面对的是什么场景。虽然我做的不多,但我什么都能做一点。今天想开发一个运行在移动端的微信小程序。明天我想做一个网页在PC上运行。后天想控制家电在开发板上跑,这一切都可以通过OpenBlock的语言来实现。OpenBlock开源项目未来会做什么?它会在哪个方向起作用?未来,OpenBlock会不断完善其功能,主要是在对用户的表达上做更多的努力。为了提高编程效率,也支持文本编程的形式,但反馈还是以图形化的方式进行。初次接触OpenBlock的开发者很难理解OpenBlock作为一种语言的定义。大家会认为编程语言就是在那里敲代码。有这种认知的人不知道世界上还有大量的小学生在使用Scratch,这也是一种语言。虽然Scratch在大人眼中只是孩子的玩具,但其背后的教育道理却是深奥的。实在是开发不了产品。它本身就是一个非常完美的产品。到目前为止,我还没有看到任何编程语言能在科普项目领域超越它。OpenBlock引入文本编码并不是为了迎合这种偏见,纯粹是为了提高深度用户的编程效率。深化图形反馈是OpenBlock的根基,未来很长一段时间会持续优化。另外,OpenBlock会使用更多的语言来实现runtime,第一个就是C语言。根据OpenBlock的设计,未来会选择性地实现一些语言运行时,但不会全部覆盖。OpenBlock最初的研发考虑了VM的实现。C#和JS环境支持最全面,VM相对容易实现,适用范围也很广,所以先适配这两种语言。考虑到C/C语言的广泛应用,接下来的重要工作就是适配C/C语言,同时可以进一步拓宽OpenBlock的应用范围。目前有多少人参与该项目?急需哪些开发商参与共建?目前,除我以外的其他开发人员都加入了该项目。同时,全校师生已经参与到开发文档的建设中。OpenBlock急需部分JS和前端开发人员参与项目共建,其他无需求。对于一个新的项目团队来说,即使部分开发者可以使用OpenBlock做一些小的工作,参与文档共建也是一个好的开始。对我来说比较困难的是,我没有组织社区的经验。开发者进入项目后,不知道能不能很好的组织协作。这部分前期需要OpenAtom开源基金会的帮助。您认为国内开源环境将面临哪些挑战?事实上,开源最大的挑战是使用开源产品而不回馈开源社区在世界上相当普遍。对于开源开发者来说,既然是做开源项目,也应该有所意识。如果他们不能接受一家公司使用了某种开源产品并赚了很多钱,并且他们不打算以任何方式回馈开源社区,那么干脆不要做。开源。开源和反馈是美德,道德是为了自律,而不是为了苛求别人。从生态大局出发,全方位保障开源项目贡献者的合法权益,促进生态良性循环,加强开源文化的宣传和推广,让更多人了解开源并认可开源模式。受访者简介:杜天伟邮箱:duzc2@163.comOpenBlock代码仓库:https://gitee.com/openblock/openblock简介:OpenBlock核心贡献者;某上市集团前技术总监;10年大型游戏开发经验;15年互联网研发经验了解更多请访问:与华为官方共建鸿蒙科技社区https://harmonyos.51cto.com