crystal是什么意思(为什么说Crystal是2018年最有前景的编程语言)

35小吃技术网 推荐阅读 2023年06月16日12时49分41秒 182 0

crystal是什么意思(为什么说Crystal是2018年最有前景的编程语言)

在多年前很多开发人员集思广议 “我们如何使用Ruby类似的语法达到C的执行效率,通用性,以及像C/C++一样可以编译成任何平台的本地二进制文件且具有高级语言的特性,比如丰富的标准库,fiber支持等等”,若干年之后的今天这个梦想终于在Csystal编程语言上得到实现。

下面我将举例说明为什么会是Crystal,而不是像Javascript,Elixir,Rust,Ruby,Python,或Go

crystal是什么意思(为什么说Crystal是2018年最有前景的编程语言)-第1张图片

crystal-lang

无可挑剔:“飞快如C,灵巧似Ruby”

Crystal的主要的魅力在于打破了优雅易用的动态语言(像Ruby和Python)跟效率为先的底层系统语言C/C++ 它们之间界线。到目前为止你经常在开发中需要做出选择:编写难读,难调试但是高效如C/C++的代码 或者使用Ruby/Python编写一个同样功能的代码,但是速度慢、耗内存。 换句话说你需要在性能和开发效率之间做选择。由于在Ruby/Python中开发MVP比在C/C中容易得多,在过去的18年中,SaaS公司无论是大还是小,都倾向接受动态语言,并将额外的性能开销作为不可避免的业务成本。然而使用Crystal,你可以完成所有你在Ruby/Python中所做的事情,但是拥有根本地C/C++二进制程序一样的速度和系统开销。

使用Crystal语言的11个理由

  1. 性能。Crystal是静态编译语言,基于LLVM框架。Crystal是 “没有分号的速度”。

  2. 语法。像许多解释型语言一样,Crystal以一种可读和美观的方式尽量使你少写代码。Crystal有时被宣传为类似于Rust,但更容易读写。

  3. Fibers。在C/C++世界中,你不能轻易得到的东西是Fibers。实现Fiber可以让你绕过回调地狱(nodejs在没有promise化时,node标准库至今都没有promise化),并使编写游戏/ UI循环、事件、异步和同步IO等变得更容易。

  4. 静态类型。Crystal是一种静态类型的语言,意味着每个变量都有一网个或多个潜在类型,它们需要在编译时计算出来。Ruby/Python是动态类型的,因此很难优化Ruby/Python代码。通过执行静态类型,Crystal排除了大量与类网型相关的错误,为优化和静态编译铺平了道路。更好的是,Crystal编译器只需在语法不明确的情况下明确指定类型,通常不需要直接指定类型。

  5. 宏。在C/C++领域中,如果不使用非常陈旧的语法写出一些令人困惑的宏,将很难网用静态的方式做一些事情。Crystal允许在编写宏时,使用大量的语言,这样你就可以在静态编译语言中做一些通常不可能发生的疯狂的事情。

  6. 动态地定义方法*。有人害怕使用Crystal,因为它是一种编译语言,他们不能动态地定义方法,但是宏让你在编译时做到这一点。

  7. NIL/NULL相关错误是不可能的。Crystal编译器将NIL视为类型,并在与可能为零的对象交互之前强制执行显式NIL检查。

  8. shards。跟Ruby中的包管理系统和其他语言(例如node npm)的包一样。它们非常易于安装和维护,并可以通过静态链接直接编译到二进制可执行文件中。无论使用多少shards,你都会得到一个单独可执行文件。

  9. 日趋流行。这意味着会有更多的shards包、更多新功能的实现 以及更快的bug修复时间。最近,Crystal在短短第六十个月内从Tiobe指数上升到了第三十二位。没有其他现代编程语言在这么短的时间内经历了如此高的增长率。

  10. 跨平台支持。目前Linux和OSX上已经支持,Windows还需要点时间。QT和LibUI都已经完成支持。

  11. Web框架。Amber,最流行的基于Crystal的Web框架,类似于Rails。比Rails快N个数量级。还有像Kemal等多个适合API开发的轻量级框架, “slick as Ruby, faster than golang”。

为什么会是Crystal而不是其他语言?

没有其他语言可以将所有这些放在一起(编译时宏、静态类型、C的速度、Ruby的语法、包管理系统、本地二进制编译、Fiber和跨平台支持)。在这方面,Crystal将会像Rust(它最近已经受到大量的关注)一样值得关注,并且它是Crystal最接近的语言,它的作用是作为C++替代者。

最后,一些局限性

  1. 在编写本文时Crystal尚有的主要局限性是:

  2. Windows支持尚未完成(但将很快支持 )

  3. 没有并行性,除非您链接到并行的C代码(并发性完全由Fiber模型支持)。所谓的GO风格并行性即将实现,并且已经在测试分支中工作。

  4. 因为还没有发布1.x版本,语言尚未稳定,偶尔会有一些小的变化。

Crystal是一个很有魔性的语言,在我们的项目中已经小规模的在使用。我们静待它的1.x版本到来吧。