跳至内容
GitHub 仓库 论坛 RSS-新闻提要

Crystal 2017 年新年展望:1.0

Santiago Palladino

自从我们 五年前开始开发 Crystal,它已经取得了长足的进步。曾经只是一个试验,看看是否可以拥有一种编译型但类似 Ruby 的语言,现在它已经成为一种趋势语言,拥有超过 7,000 个 GitHub 星标 和近 1,400 个 Shard。近年来,它的受欢迎程度大幅提升,我们对看到我们所创造的东西在开发社区中产生如此大的共鸣感到无比自豪。

**我们对 Crystal 的首要目标是看到它蓬勃发展:** 我们喜欢听到其他开发者的成功故事,从许多人开始了解这门语言,到其他人将其用于工作中解决现实生活中的问题。话虽如此,我们开始思考如何实现这一目标,并寻找阻碍这门语言广泛使用的主要障碍。

主要问题很明确:**稳定性**。虽然 Crystal 是一种非常棒的语言,可以用它来玩耍,但对于许多开发者来说,在工作中使用它来实现一个需要长期维护的系统似乎风险很大。而且有充分的理由:尽管 Crystal **实际上已经可以用于生产环境一段时间了**,但我们仍然将它标记为 alpha 阶段。

因此,为了实现我们看到这门语言不断发展的目标,我们制定了**在 2017 年让 Crystal 达到 1.0 里程碑的新年展望**。

1.0 的意义

alpha、beta 和稳定版(即 1.0)对于不同的人来说可能意味着不同的东西,即使是在 Crystal 团队内部也是如此。实现 1.0 里程碑背后的基本理念是**达到一个点,在该点上对语言核心的破坏性变更降至最低**。当然,之后可能(而且肯定会,相信我)会有更多语言的添加和功能,或者甚至是对工具或标准库的修改,但我们希望确保迁移到后续版本的语言应该是一件容易的事。

通往 1.0 版本的道路

为了达到 1.0,我们需要努力开发那些可能需要对语言进行破坏性变更的关键功能;我们已经确定了以下几个功能:

  • **并行性**:这是我们目前正在努力开发的下一件大事。虽然 fiber 非常适合 并发,但我们希望这门语言能够利用所有可用的计算能力。考虑到 Crystal 的主要目标之一是提供尽可能好的性能,我们不仅希望在 1.0 版本中实现这一点,实际上希望在 beta 版本中实现这一点(无论你对 beta 版本的定义是什么)。
  • **Windows 支持**:我们知道,有相当一部分在 Windows 上工作的开发人员想要尝试 Crystal;此外,Windows 支持将使 Crystal 成为开发跨平台桌面应用程序的理想选择。我们计划与社区紧密合作,评估并指导实现这一任务的努力,并确保语言的任何关键元素都不会与 UNIX 特定的元素绑定。
  • **类型系统**:Crystal 的优雅类型系统和全局类型推断是它最棒的功能之一,但我们意识到一些需要审查的点,尤其是在泛型及其约束方面。我们将整理类型系统,甚至开始研究将类型系统正式化的方式,直到我们确信没有意外潜伏在角落里。
  • **增量编译**:即使目前 Crystal 项目的编译时间并不算过长(Crystal 本身就是一个很好的例子,大约 20 秒),如果我们想改进开发体验,我们需要缩短这些时间。我们希望在这门语言中原型化一些增量甚至模块化编译功能,以识别为了实现这一目标而可能需要添加的任何潜在限制;注意,我们不认为这是 1.0 版本的必做之事,但由此产生的语言变更则是必须的,因此需要探索潜在的实现方法。
  • **宏**:Crystal 对动态语言元编程功能的回应是 编译时宏,它提供了一种解决大多数相同问题的方法。宏可以操纵 AST 以输出新代码,调用外部程序,访问类型系统,甚至挂钩到编译过程。因此,1.0 版本之前的部分工作将是对它们进行审查,并确保它们与语言的其他部分协调一致,因为我们不希望在 1.0 版本之后对宏语言进行任何破坏性变更。
  • **语法**:与上面的观点类似,一旦 1.0 版本发布,语言语法的任何变更都将被冻结。虽然 Crystal 继承了大多数 Ruby 的语法,但一些 Crystal 特定的元素需要自己的语法。说实话,我们并不预期会有任何大的变化,但如果在没有经过适当审查的情况下就将其冻结,那就太不负责任了。

如何实现目标

考虑到我们仍然计划同时开发标准库,以及修复出现的任何错误,在一年的时间内完成上述所有内容并非易事。

首先,由于我们 Manas 非常渴望看到这一点发生,**我们将增加对 Crystal 本身的投入**。Manas 目前负责 Crystal 的团队,包括 Ary (asterite)Juan (waj)Brian (bcardiff),将加入 Gustavo (ggiraldez)María (mdavidmanas)Martín (mverzilli)Matias (matiasgarciaisaia) 以及我 (spalladino)。我们将协助进行社区管理、支持、文档、工具、Shard 开发甚至核心语言开发。即使我们中有些人已经利用业余时间为这门语言做出了贡献,我们现在正式从 Manas.Tech 内部直接支持这项工作。

其次,但同样重要的是,我们计划**利用开源社区的全部力量**。我们知道还有更多的人想要开始为 Crystal 做出贡献(不仅仅是通过金钱捐赠),他们的专业知识将是一笔巨大的财富,但指导这些工作需要仔细规划。我们将**改进我们的贡献指南,并整理问题跟踪器**,以简化这些过程,帮助保持 社区频道 有序,并使路线图保持最新状态。

此外,从社区的角度来看,我们计划努力**降低新用户入门门槛**。我们希望确保明确什么是 Crystal,以及它不是什么,尤其是在许多人直接从动态语言背景而来时。我们将不仅专注于文档,还会专注于教程,并协助定义 Crystal 的用例,这些用例反过来可以塑造语言本身。

下一步

虽然我们对 2017 年 Crystal 的所有未来发展感到兴奋,但我们不想忘记**最直接的下一步**。我们将首先大力开发并行性,并利用现有针对 Windows 支持的任何努力。从社区的角度来看,我们将审查贡献指南,重新思考 GitHub 问题的标签,然后根据需要重新标记问题;我们希望能够让新用户参与贡献,并让社区中有经验的成员解决问题。

请随时在此处或通过任何 社区频道 留下您的评论。祝您新年快乐,一如既往,快乐 Crystal :-)




如果您想帮助我们实现这个目标,请考虑在 BountySource 上支持 Crystal!