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

crystal是什么意思(为什么说Crystal是2018年最有远景的编程语言)
在多年前很多开发人员集思广议 “我们如何应用Ruby相似的语法到达C的履行效力,通用性,以及像C/C++一样可以编译成任何平台的本地二进制文件且具有高等语言的特征,比如丰硕的尺度库,fiber支撑等等”,若干年之后的今天这个妄想终于在Csystal编程语言上得到实现 。
下面我将举例解释为什么会是Crystal,而不是像Javascript,Elixir,Rust,Ruby,Python,或Go

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

文章插图
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作风并行性即将实现,并且已经在测试分支中工作 。


    推荐阅读