crystal和ruby"/>
crystal和ruby
crystal和ruby
为了永无止境地寻求工作速度(开发速度)和事物速度(性能)之间的协调,我遇到了一个处于孵化阶段的项目,让我思考:“这可能是我的一种语言。”
乍一看,它是为人和计算机构建的编程语言Crystal的痴迷。 多么高尚的事业。 一直喜欢Ruby语法的美,以C的速度实现类似Ruby的语法的承诺令人着迷,甚至改变了生活。
从那天开始,我一直密切关注Crystal的进展,今天,我将说明为什么您应该关心。 老实说,这是最令人兴奋的语言之一,有望带来巨大的潜力。
在开始使用它之前,请记住,Crystal尚未准备好进行生产,但是您仍然可以找到许多已经在使用它的项目,例如用Crystal编写的此版本的Sidekiq 。
为什么是水晶?
那么,为什么有人要关心另一种编程语言呢? 好吧,因为Crystal结合了令人难以置信的引人入胜的食材,这在许多其他语言中都找不到。
漂亮的语法
关于Crystal的最吸引人的事情之一就是简洁易读的类似Ruby的语法。 这种语言的创造者将Ruby的吸引力理解为最吸引人的语言之一,并将其作为Crystal的灵感。
因此,如果您来自Ruby世界,那么过渡到Crystal将会很简单。 大多数时候,您将能够直接在Crystal中运行Ruby代码,或在Ruby Shell中运行Crystal程序。
最重要的是,您甚至可以在Crystal中使用Ruby语法高亮显示。 与大多数解释型语言类似,Crystal将使您可以用几行代码来建立最疯狂的想象力。
出色的性能
Crystal是一种在公认的LLVM框架之上构建的静态编译语言,可以与C, C ++和Rust等同类 语言 兼容 。
请稍等一下... Ruby语法的开发速度与C的速度相匹配...
令人难以置信的令人信服,希望您像我第一次听到这种说法时一样兴奋。 不相信我吗 只需查看一些最新的基准即可; 这个基准和这个基准 。
易于C绑定的超高性能
如果您的应用程序或算法的一部分需要极高的性能,则一种策略是将功能转移到C扩展或库中。
使用Crystal可以绑定到现有的C库或您自己的C库,而无需编写任何C代码。
考虑一下我们可以使用GCC编译器gcc -c hello.c -o hello.o构建的C库hello.c的简单示例。
#include <stdio.h>
void hello(const char * name){printf( "Hello %s!\n" , name);
}
#hello.cr
@[Link(ldflags:"#{__DIR__}/hello.o" )]
lib Say fun hello(name : LibC::Char*) : Void
end
Say.hello( "your name" )
构建完二进制文件后,您可以使用Link轻松链接二进制文件并定义lib声明,该声明将属于该库的函数和类型进行分组-然后调用您的函数。 瞧!
静态打字
Crystal是一种静态类型的语言,它可以在编译时排除许多与类型相关的错误,并为优化提供了舞台,而优化是动态类型的语言(如Ruby或Python)无法实现的。
这直接提高了Crystal的性能,更令人印象深刻的是,Crystal中的编译器仅在模糊性的情况下才需要您明确指定类型-其余时间可以像使用任何动态语言一样使用它。
巨集
宏是一种修改在编程语言的标记化和解析阶段创建的抽象语法树的方法,它使我们能够在编译时添加方法或创建和修改类。
这样做的主要优点是速度-因为您节省了编译器用于调用/调用函数的大量时间。
在编写宏时,Crystal允许您使用大多数语言,这意味着您可以执行疯狂的巫术,而这在静态编译语言中通常是闻所未闻的。
Web框架
如果不讨论使用该语言的可用Web框架,并且如果您已经爱上了Rails和Phoenix等任何比较,那么任何比较都是不完整的-使用Crystal的Web框架Amber会让您感觉很自在 。
它是从头开始设计以遵循Rails的,但显然比Rails快一个数量级-加载时间以毫秒为单位,而不是毫秒。
如果您属于Sinatra爱好者的阵营,请不要担心,因为您拥有凯末尔框架的简单性。
我是否提到过Crystal的内置HTTP服务器在基准测试中每秒能够处理超过200万个请求 ? 而且大多数框架还为Web应用程序提供了亚毫秒级的响应时间。
并发
当前,Crystal以一流公民的身份支持并发,而并行性正在不断发展,您可以在Crystal网站上了解其进展。
使用光纤的 Crystal中支持并发-操作系统线程的轻量级版本。 与抢占式线程不同,光纤会明确告诉运行时调度程序何时切换上下文。 这有助于Crystal避免不必要的上下文切换。
如果要增加并发性,您将在Crystal中找到spawn方法,类似于在Go中使用go-routines-我个人非常喜欢。
# Simple example
spawn do sleep 5 .seconds
end
Crystal还支持受CSP启发的通道,这些通道允许在光纤之间进行数据通信而无需共享内存,也不必担心锁定或信号量。
但是,忍受,什么不喜欢?
作为软件工程师,在选择编程语言或框架时,我们总是在权衡取舍,就像任何一种语言一样,Crystal并不能解决您的所有问题,并且有其自身的局限性。
-Crystal仍相对年轻且不成熟,导致在此特定时间点缺少社区和软件包。
-即使很容易获得开发工具,这也导致缺乏可用的开发工具。
-如果您打算做一些难以置信的特定工作,将很难找到文档,但这仅意味着我们有机会成为第一批采用者,并一起破解一些很棒的项目。
-尽管并发已内置在Crystal中,但作为一流的公民,仍在进行并行性方面的工作。
-由于该语言的生产前状态,有可能在达到v1.0之前中断更改。
-它也没有很好的Windows兼容性,但是老实说,这对我来说不是负面的。
带走
直到Crystal投入生产并拥有强大的工具和蓬勃发展的社区之后,可能还需要一段时间。 但是令人欣慰的是,幕后作品中正在出现像Crystal这样的奇妙语言。
从Crystal集合在一起的所有功能来看,它值得关注和普及。 如果我引起了您的兴趣,我鼓励您查看Crystal并做出自己的决定。
同时,我将继续向Crystal传播福音,并密切关注其进展。
使用这些资源
很棒的Crystal — GitHub
水晶编程— Reddit
凯末尔
琥珀框架
翻译自:
crystal和ruby
更多推荐
crystal和ruby
发布评论