水晶驱动的未来卡车仪表盘

Nikola 汽车公司 致力于在全球范围内变革和颠覆交通行业,而 Crystal 则为他们的软件提供支持。他们设计和制造电池电动 (BEV) 和氢燃料电池 (FCEV) 汽车、车辆部件、储能系统和电动汽车驱动系统。这些都是未来卡车。
Nikola 开发了几种不同的车型,它们都具有超凡的创新性和高性能:三款 8 级电动卡车模型 - Nikola One、Nikola Two 和 Nikola TRE -,两款越野全电动汽车 - Nikola NZT 和 Reckless,一款军用级 OHV -,以及 Nikola WAV,一款电动水上交通工具。从能源生产到消耗,他们致力于实现零排放,并将在未来几年内开始生产,从 2020 年开始测试和验证 Nikola TRE。
公司的一个重要关注点是客户体验:速度、舒适度和安全性在他们所做的一切事情中都得到了有意整合。为此,他们的车辆配备了最先进的数字驾驶舱:大多数车辆的功能和驾驶员控制通过一个 17 英寸触摸屏信息娱乐系统和一个 12.8 英寸仪表盘来操作,这些都由 Crystal 开发。
当我们了解到这一点时,我们忍不住联系了 Nikola 汽车公司的首席信息官兼软件架构师 Isaac Sloan,以了解更多信息。
你与 Crystal 的故事是如何开始的?
在我以前工作的一家公司,我花了大约四年的时间主要使用 Java,并在 2005 年,当我发现 Ruby 时,我“秘密地”开始将大量代码迁移到 Ruby。当公司发现时,他们试图让我重写它,但当他们看到它让我完成了多少事情时,他们让我继续使用 Ruby。
我在 2015 年 3 月左右的山地西部 Ruby 大会上了解到 Crystal,并开始用它编写我所有的业余项目。几个月后,我们遇到了一个应用程序使用过多内存的挑战,所以我尝试用 Crystal 重写了一些瓶颈点,并将其他部分保留在 Ruby/Rails 中,并通过 NginX 代理它,这被证明解决了问题。从那时起,这是一个自然的过渡。
你现在正在使用 Crystal 做什么?
信息娱乐、仪表盘和远程信息处理系统(车辆与云之间的通信)都是用 Crystal 和 Amber 框架编写的,并且内置于我们所有的车辆中。我们有三个不同的 Crystal 应用程序,主要是因为将它们分开运行是有意义的,这样我们可以赋予它们不同的权限,但它们都是集成的:一个以 root 身份运行并处理权限,另一个充当用户界面,另一个与云通信。Crystal 是将所有东西粘合在一起的粘合剂:连接我们平台中每个组件的应用程序都是用 Crystal 编写的,我们以 x86 架构为目标,但我们能够在 Raspberry Pi 上编译它。
是什么让你在这个项目中选择 Crystal 而不是其他选项?你是否发现你用 Crystal 开发的软件比你在其他语言上编写的软件性能更好?
好吧,我们讨论了几种不同的替代方案。Rust 不利于使用,并且对于我们的需求来说有点过分。Electron 使用 node.js 作为后端和 Chromium 作为前端,但对于我们的使用而言,它消耗了太多内存。我们实际上遵循了 Electron 范式,但我们使用 Crystal 而不是 node.js 来生成所有 API 和 HTML。
它快得多,例如比 Go 快两倍。我们最初尝试使用 Go,因为它已经是 1.0 版本并且非常流行,但在我们的经验中,Crystal 的性能优于 Go 并且写起来更令人愉快。我们的投资者和利益相关者都非常喜欢信息娱乐系统及其运行速度。
对于我们想要做的事情,C 或 C++ 几乎是标准。我们还尝试使用 Web 工具和 Web 语言,如 html、javascript 和 chromium。我们与 WebOS 项目中的许多人进行了交谈,因为他们证明了它可以在非常小的处理器和移动设备上作为界面使用。
在 Crystal 中编写 C 绑定也相当容易。对于 Python 或 Ruby 来说,如果没有 C 库的现有绑定或包装器,则需要更多时间。我已经使用 Crystal 很多年了,在服务器和客户端上,它从未崩溃。它可能在“没有重大更改”的意义上不稳定,但它在编译后不会崩溃的意义上非常稳定。无论如何,它比 Java 更稳定。
你是什么时候开始在 Nikola 使用 Crystal 的?你是否在之前的项目中使用过它?
它已经在我们的代码库中超过两年了。我们经历了这个应用程序的多次迭代,现在正在完成我们的生产目标。汽车行业需要花费大量时间来验证所有内容,在此过程中,利益相关者有时会要求更改,因此它始终在不断发展。
你是否计划在未来的项目中扩展你在 Crystal 中的使用?
现在,我们正在验证安全性和安全性方面的所有内容。在接下来的几个月里,我们将致力于与手机进行远程控制的接口,所有这些都将与 Crystal 应用程序集成。

Isaac Sloan,首席信息官兼软件架构师,Nikola 汽车公司
我喜欢使用 Crystal。它具有 Ruby 在早期所具有的许多幸福感,社区正在做着非常棒的事情。