Crystal 体验 Concurrency 笔记

https://crystal-lang.org/docs/guides/concurrency.html

  • Crystal 当前支持并发(Concurrency),并不支持并行(Parallelism)
  • Crystal的并发单元是Fiber
  • Event loop 用来处理 I/O,将一些耗时的操作委托给它,在事件循环等待该操作完成时,程序可以继续执行其他Fiber
  • Channel 用于不同fiber之间通信, CSP模型

A Fiber

程序执行时,启动main fiber,派生出其它fiber

  • Fiber比操作系统的thread更轻量
  • Fiber 是主动式,Fiber 需要明确的告诉调度器切换到其它的Fiber,优势是减少了切换上下文开销
  • Fiber 启动只需要要4kb就可以
  • 64-bit机器上可以运行成百上千的Fiber,32-bit机器上最多512个Fiber

The Runtime Scheduler

调度器队列:

  • 可执行的Fiber
  • event loop,执行异步操作Fiber,当前实现基于 libevent
  • 主动让出的Fiber,通过 Fiber.yield 操作,意思是我可以继续执行,但是如果你愿意,我会给你一些时间去执行其他Fiber
2018/2/14 posted in  编程语言

Crystal 体验 「构建一个telegram bot」

创建项目

$ crystal init app hello_bot
      create  hello_bot/.gitignore
      create  hello_bot/.editorconfig
      create  hello_bot/LICENSE
      create  hello_bot/README.md
      create  hello_bot/.travis.yml
      create  hello_bot/shard.yml
      create  hello_bot/src/hello_bot.cr
      create  hello_bot/src/hello_bot/version.cr
      create  hello_bot/spec/spec_helper.cr
      create  hello_bot/spec/hello_bot_spec.cr

依赖管理

crystal的依赖管理使用 Shards https://github.com/crystal-lang/shards

创建的app下有shard.yml文件

格式spec https://github.com/crystal-lang/shards/blob/master/SPEC.md

格式示例

shards已经包含在Crystal安装包里,安装Crystal时也安装了shards

可以这样调用shards

$ crystal deps -h

添加 telegram_bot 依赖

Github: https://github.com/hangyas/telegram_bot

dependencies:
  telegram_bot:
    github: hangyas/telegram_bot

安装依赖

$ crystal deps install
Fetching https://github.com/hangyas/telegram_bot.git
Using telegram_bot (0.1.0 at HEAD)

依赖被安装到 .shards 目录

还会生成 shard.lock

build 项目

$ crystal build  --release -o bin/hello_bot src/hello_bot.cr

其中 --release 表示 启用生成环境优化, 开发环境可以不加

关于 No package 'libssl' found错误

export PKG_CONFIG_PATH=/usr/local/opt/openssl/lib/pkgconfig

see: https://github.com/crystal-lang/crystal/issues/4745

bot 实现

https://github.com/hangyas/telegram_bot#commands

使用 OptionParser 处理参数,使用自签名ssl证书,生成命令

openssl req -newkey rsa:2048 -nodes -keyout key.pem -x509 -days 365 -out cert.pem

所有代码

https://github.com/lidashuang/crystal-helloworld

后记

整个流程,还算比较流畅,对于熟悉Ruby的程序员来说Crystal非学好上手

links

2018/2/8 posted in  编程语言

Crystal 体验 helloworld

2018/2/8 posted in  编程语言

Let's Build A Forum with Laravel 笔记

Laravel
2017/3/19 posted in  编程语言