gitlab.cr 是我最近课下练习的新语言 Crystal 写的 gitlab 包,方法和功能和 gitlab ruby 版本基本类似。
目前已经完成了大部分 API 的封装,在一边熟悉 crystal 的同时一边补充,其中肯定有一些性能问题和坑,毕竟没有任何依赖都是自己实现的。比较坑爹的是官方手册太简单,也没有实时跟进,能够好好翻阅的其实也就是官方的 API 文档和源码。不过 crystal 还算比较人性化的一面,默认集成了类似 rspce 的单元测试(简化版)和依赖库管理 shards(类似 bundler)和生成文档的工具。通过 travis-ci 会自动生成每次 git push 的变化。
API 文档:http://icyleaf.github.io/gitlab.cr/
Ruby 的缺点众所周知的一个点就是慢,虽说用它的人都不在乎主要是用的爽,so what!这一致命的坑其实默默的被承受着,很多的 Ruby 开发者也在一直寻觅着新的更高性能的语言。比如 Gitlab 的 Build Runner 使用 Go 实现了。Rails 的核心开发者基于多年对 Ruby 的怨念而开发的 Elixir,还有 Firefox 主导的 Rust 也吸引了不少目光。有那么多选择为什么偏偏选了这么一个没有听说过的语言?
仅仅是这些可能大家觉得没什么,其实对我来说也不够冲击力,最重要的关键是在我从订阅的 Ruby Weekly 周刊看到 sidekiq 的作者用 crystal 重新实现了核心部分发的博文分享,提到的一点:至少是比 ruby 2.3 大部分代码要快 3-5 倍,减少至少 3 倍的内存占用。怀着怀疑的态度我大概的研究了这个语言,确实看到了新希望。
库 | 语言 | 并发量 | 平均响应时间 |
---|---|---|---|
fast-http-server | Crystal |
18348.47rpm | 8.67ms |
http-server | Node.js |
2105.55rpm | 47.92ms |
SimpleHTTPServer | Python |
785.14rpm | 1.91ms |
还有一份一直再更新维护的语言之间的评测仅供参考,看着里面的数据还是蛮吸引人的。
1 | # File: server.cr |
看着是不是是不是和 Ruby 差不多。通过命令编译成二进制在运行试试:
1 | $ crystal build --release server.cr |
macOS 用户可以通过 brew 进行安装
brew install crystal-lang
eval
和 send
两个的缺失。提供了 macro 的方式可以实现部分动态定义方法的机制。总体来说是一个让人眼前一亮的语言,很是期待后续的进化。我相信 sidekiq 作者的那篇博文也让无数开发者看到了新大陆。目前项目也在捐献中,如果你对它感兴趣不妨慷慨的动动自己的钱包,Ruby 的创始人 matz 直接捐献了 $500。