2023-02-12 05:38

如果巨蟒对你来说太慢,克里斯托可能是你的救世主

If Python is too slow for you, Crystal could be your savior

学习一门新的编程语言可以以你从未想过的方式打开你的思维。就像学习一门新的人类语言,如西班牙语或汉语,你要学会用不同的单词和结构来思考。

你可以深入了解说话者的文化和社区,了解他们如何看待世界。至少可以说,这很丰富。

编程语言的巧妙之处在于,你学习的第一门语言总是最难的。一旦你理解了像if-clause和for-loops这样的基本结构,你就会在你可能学习的许多新语言中看到它们。

而且,与人类语言不同,新的编程语言学习起来要快得多。他们更有逻辑,用词更少——或者,我应该说,命令更少。

由此可见,大多数程序员和数据科学家掌握不止一种编程语言。

他们可能有一个主要的或最喜欢的。但是我认识的大多数软件开发人员每周至少使用五种语言,如果把脚本语言也算进去的话。

大多数程序员还会时不时地学习一门新语言。

这是工作带来的。编码意味着保持好奇心。

水晶的理由

正如它的广告所说,Crystal是一种像C一样快,像Ruby一样流畅的语言。

关于它光滑的部分是真的。它是编译的和静态类型的,这有它自己的优点和缺点。然而,最重要的是,它的风格与Ruby非常相似。

就我个人而言,我从未用Ruby编写过更大的项目。但是作为一个相当有经验的Python开发人员,Crystal代码看起来仍然非常清晰!

下面是一个计算阶乘的递归循环的例子:

Factorial calculation in Crystal. Image by author, code taken from Crystal by Example

命令puts对于不习惯Ruby的人来说听起来有点奇怪。它基本上是其他语言的一种糟糕的印刷版本。看跌期权和打印期权之间有一些细微的区别,但我们不会在这里深入讨论。

除此之外,这个例子看起来相当复杂,对吧?

if从句也是类似的:

If-clauses in Crystal. Image by author, code taken from Crystal by Example

除了非ruby本地用户不习惯的有趣的put表达式外,这也是非常可读的。

一般来说,Crystal的语法是清晰的,即使在处理更大更复杂的问题时也是如此。

静态类型

Crystal是静态类型的,但您可能已经注意到上面的示例中没有太多类型标识符。这是因为Crystal只要求您在变量不明确的情况下指定变量的类型。

当然,这种做法有助于程序员提高工作效率。

静态类型语言往往对宏很挑剔。然而,克里斯托有办法对付他们。

如本例所示,您可以使用Crystal宏在编译时根据同一段代码的另一段内容,通过静态推理来更改一段代码。尝试用c++来做这件事,你要么失败,要么需要500多行代码。

或者你不是,你这个天才?如果我错了请告诉我……

这确实需要一些注意事项,因为正如俗话所说,权力越大,责任越大。静态类型通常会减少一些危险,但一些功能强大的东西(比如Crystal允许的那些)在某种程度上破坏了这种保护。

没有Nil-errors

说到安全,Crystal在其他地方也有额外的保护措施。Nil是Crystal编译器的一个单独类型。所以如果你试图访问一个方法或容器,结果是nil,编译器会警告你。这可能会导致编译失败,但至少可以在运行可能较大的代码之前修复错误。

不再有依赖的地狱

如果您曾经用Python处理过一个大问题,您可能知道依赖关系地狱是什么样的。

一个Python模块可能依赖于其他几个模块,一旦导入了所需的所有模块,就会发现不同的模块版本是不兼容的。现在,您必须确定使用哪些版本来将所有内容组合在一起,当您的项目具有一定规模时,所有这些工作可能需要花费数小时。

在Crystal中,这些模块被称为碎片,它们通过静态链接被编译成二进制可执行文件。我可以对此进行详细介绍,但是让我们长话短说:依赖管理用这种方式要容易得多。

最大的缺点是:水晶很小

2017年,水晶在短短一个月内就从TIOBE指数的第60位跃升至第32位。这种迅速崛起的原因很难说,但很有可能是Crystal的创造者在当时做了大量的市场营销,引起了Ruby程序员的好奇心。

然而,克里斯托的成名并没有持续很长时间。在撰写本文时,Crystal还远未接近TIOBE索引上的前50名编程语言。

由于它在早期就很受欢迎,一些人希望它能像Rust一样受欢迎。

然而,这并没有成为现实。

程序员们表达了对示例项目或代码库的失望。此外,文档似乎有点不完整。这让大批新程序员望而却步。

正因为如此,Crystal社区是如此之小,如果你遇到问题,你必须等待一段时间才能获得帮助。只是在StackOverflow, GitHub等网站上没有那么多答案。

另一个缺点是:Crystal没有承诺的那么快

Crystal的创造者希望这门语言能和C语言一样快。

这在个别情况下可能是正确的。然而,大多数时候,Crystal的执行时间是C的两倍。

编程语言(或者科技公司,就此而言)有夸大的使命陈述并不罕见。公平地说,只有C的一半还是相当快的。

然而,水晶明显低于-à-vis其最初的承诺。这是如此明显,我不能责怪普通开发人员感到失望。

最后一句名言:Crystal只适合有经验的程序员。我喜欢探索新的编程语言,但我更喜欢有良好文档的语言,并且有一个大型的支持社区。许多程序员也有类似的感觉。

Crystal曾尝试过吸引主流市场,但在过去几年里,它总体上失败了。

这并不意味着Crystal没有一些有趣的用例。对于使用区块链技术的人来说,这可能是一个有趣的选择。你可以用Crystal创建一个相当强大的加密货币。

也就是说,除非对Crystal的文档、营销和一般社区支持得到改善,否则它对普通区块链开发者来说也不是一个很好的选择。

如果你想玩像Crystal这样的语言,你最好带一些经验。因为当你遇到问题时,可能没有人能帮你。

本文由Ari Joury撰写,最初发表于Medium。你可以在这里阅读。