谷歌放弃go_用 Go 实现 Flutter

用 Go 实现 Flutter

我最近发现了 Flutter —— 谷歌的一个新的移动开发框架,我甚至曾经将 Flutter 基础知识教给没有编程经验的人。Flutter 是用 Dart 编写的,这是一种诞生于 Chrome 浏览器的编程语言,后来改用到了控制台。这不禁让我想到“Flutter 也许可以很轻易地用 Go 来实现”!

为什么不用 Go 实现呢?Go 和 Dart 都是诞生于谷歌(并且有很多的大会分享使它们变得更好),它们都是强类型的编译语言 —— 如果情形发生一些改变,Go 也完全可以成为像 Flutter 这样热门项目的选择。而那时候 Go 会更容易地向没有编程经验的人解释或传授。

假如 Flutter 已经是用 Go 开发的。那它的代码会是什么样的?

谷歌放弃go_用 Go 实现 Flutter_第1张图片

Dart 的问题

自从 Dart 在 Chrome 中出现以来,我就一直在关注它的开发情况,我也一直认为 Dart 最终会在所有浏览器中取代 JS。2015 年,得知有关谷歌在 Chrome 中放弃 Dart 支持的消息时,我非常沮丧。

Dart 是非常奇妙的!是的,当你从 JS 升级转向到 Dart 时,会感觉一切都还不错;可如果你从 Go 降级转过来,就没那么惊奇了,但是…… Dart 拥有非常多的特性 —— 类、泛型、异常、Futures、异步等待、事件循环、JIT、AOT、垃圾回收、重载 —— 你能想到的它都有。它有用于 getter/setter 的特殊语法、有用于构造函数自动初始化的特殊语法、有用于特殊语句的特殊语法等。

虽然它让能让拥有其他语言经验的人更容易熟悉 Dart —— 这很不错,也降低了入门门槛 —— 但我发现很难向没有编程经验的新手讲解它。

  • 所有“特殊”的东西易被混淆 —— “名为构造方法的特殊方法”,“用于初始化的特殊语法”,“用于覆盖的特殊语法”等等。
  • 所有“隐式”的东西令人困惑 —— “这个类是从哪儿导入的?它是隐藏的,你看不到它的实现代码”,“为什么我们在这个类中写一个构造方法而不是其他方法?它在那里,可是它是隐藏的”等等。
  • 所有“有歧义的语法”易被混淆 —— “所以我应该在这里使用命名或者对应位置的参数吗?”,“应该使用 final 还是用 const 进行变量声明?”,“应该使用普通函数语法还是‘箭头函数语法’”等等。

这三个标签 —— “特殊”、“隐式”和“歧义” —— 可能更符合人们在编程语言中所说的“魔法”的本质。这些特性旨在帮助我们编写更简单、更干净的代码,但实际上,它们给阅读程序增加了更多的混乱和心智负担。

而这正是 Go 截然不同并且有着自己强烈特色的地方。Go 实际上是一个非魔法的语言 —— 它将特殊、隐式、歧义之类的东西的数量讲到最低。然而,它也有一些缺点。

Go 的问题

当我们讨论 Flutter 这种 UI 框架时,我们必须把 Go 看作一个描述/指明 UI 的工具。UI 框架是一个非常复杂的主题,它需要创建一种专门的语言来处理大量的底层复杂性。最流行的方法之一是创建 DSL —— 特定领域的语言 —— 众所周知,Go 在这方面不那么尽如人意。

创建 DSL 意味着创建开发人员可以使用的自定义术语和谓词。生成的代码应该可以捕捉 UI 布局和交互的本质,并且足够灵活,可以应对设计师的想象流,又足够的严格,符合 UI 框架的限制。例如,你应该能够将按钮放入容器中,然后将图标和文本小组件放入按钮中,可如果你试图将按钮放入文本中,编译器应该给你提示一个错误。

特定于 UI 的语言通常也是声明性的 —— 实际上,这意味着你应该能够使用构造代码(包括空格缩进!)来可视化的捕获 UI 组件树的结构,然后让 UI 框架找出要运行的代码。

有些语言更适合这样的使用方式,而 Go 从来没有被设计来完成这类的任务。因此,在 Go 中编写 Flutter 代码应该是一个相当大的挑战!

Flutter 的优势

如果你不熟悉 Flutter,我强烈建议你花一两个周末的时间来观看教程或阅读文档,因为它无疑会改变移动开发领域的游戏规则。而且,可能不仅仅是移动端 —— 还有原生桌面应用程序和 web 应用程序的渲染器(用 Flutter 的术语来说就是嵌入式)。Flutter 容易学习,它是合乎逻辑的,它汇集了大量的 Material Design 强大组件库,有活跃的社区和丰富的工具链(如果你喜欢“构建/测试/运行”的工作流,你也能在 Flutter 中找到同样的“构建/测试/运行”的工作方式)还有大量其他的用于实践的工具箱。

在一年前我需要一个相对简单的移动应用(很明显就是 IOS 或 Android),但我深知精通这两个平台开发的复杂性是非常非常大的(至少对于这个 app 是这样),所以

你可能感兴趣的:(谷歌放弃go)