Upgrade to Pro — share decks privately, control downloads, hide ads and more …

Crystalはいいぞ

 Crystalはいいぞ

#nitgclt 2021.03.27 登壇

eniehack

March 27, 2021
Tweet

More Decks by eniehack

Other Decks in Technology

Transcript

  1. Crystalはいいぞ
    Nakaya
    March 27, 2021

    View Slide

  2. Outline
    Crystal はいいぞ
    1

    View Slide

  3. Crystalはいいぞ

    View Slide

  4. 自己紹介
    • Nakaya です
    2

    View Slide

  5. 自己紹介
    • Nakaya です
    • 4E
    2

    View Slide

  6. 自己紹介
    • Nakaya です
    • 4E
    • Web 系やってます
    2

    View Slide

  7. 自己紹介
    • Nakaya です
    • 4E
    • Web 系やってます
    • 好きな言語は Ruby
    2

    View Slide

  8. 自己紹介
    • Nakaya です
    • 4E
    • Web 系やってます
    • 好きな言語は Ruby
    • 好きなエディタは vim と emacs
    2

    View Slide

  9. 自己紹介
    • Nakaya です
    • 4E
    • Web 系やってます
    • 好きな言語は Ruby
    • 好きなエディタは vim と emacs
    • 最近は Crystal 言語、Lisp、ShellScript にお熱
    2

    View Slide

  10. 最近 Crystal v1.0.0 がリリース
    3

    View Slide

  11. 最近 Crystal v1.0.0 がリリース
    • アツい
    3

    View Slide

  12. Ruby っぽく書ける静的型付け言語
    • 型推論もあるよ
    4

    View Slide

  13. Ruby っぽく書ける静的型付け言語
    • 型推論もあるよ
    • 強力な型システム
    4

    View Slide

  14. Ruby っぽく書ける静的型付け言語
    • 型推論もあるよ
    • 強力な型システム
    • Union
    4

    View Slide

  15. Ruby っぽく書ける静的型付け言語
    • 型推論もあるよ
    • 強力な型システム
    • Union
    • Enum
    4

    View Slide

  16. Ruby っぽく書ける静的型付け言語
    • 型推論もあるよ
    • 強力な型システム
    • Union
    • Enum
    • Null 安全
    4

    View Slide

  17. C っぽさもある
    • Pointer
    5

    View Slide

  18. C っぽさもある
    • Pointer
    • StaticArray
    • immutable な Array
    5

    View Slide

  19. C っぽさもある
    • Pointer
    • StaticArray
    • immutable な Array
    • Bytes Slice(UInt8)
    5

    View Slide

  20. C っぽさもある
    • Pointer
    • StaticArray
    • immutable な Array
    • Bytes Slice(UInt8)
    • C のライブラリをバインディングが簡単に書ける
    5

    View Slide

  21. 並列処理
    • Golang の Goroutine に影響を受けた Channel
    6

    View Slide

  22. 並列処理
    • Golang の Goroutine に影響を受けた Channel
    channel = Channel(Nil).new
    spawn do
    puts "Before send"
    channel.send(nil)
    puts "After send"
    end
    puts "Before receive"
    channel.receive
    puts "After receive"
    6

    View Slide

  23. マクロが強い
    • コンパイル前にソースコードからソースコードを生成
    する
    7

    View Slide

  24. マクロが強い
    • コンパイル前にソースコードからソースコードを生成
    する
    macro encoding_test(no, payload)
    it "vector_test.json - encoding test No.{{no}}" do
    data = json["testGroups"][0]["tests"][{{no}}]
    config = TestConfiguration.new key: data["key"].as_
    config.nonce = data["nonce"].as_s.hexbytes
    branca = Branca::Token.new
    branca.timestamp = data["timestamp"].as_i64.to_u64
    token = branca.encode {{payload}}, config
    7

    View Slide

  25. 標準ライブラリが豊富
    • RSpec っぽく書ける spec
    8

    View Slide

  26. 標準ライブラリが豊富
    • RSpec っぽく書ける spec
    • JSON/XML/YAML
    8

    View Slide

  27. 標準ライブラリが豊富
    • RSpec っぽく書ける spec
    • JSON/XML/YAML
    • HTTP/TCP/UDP
    8

    View Slide

  28. LLVM をバックエンド
    9

    View Slide

  29. LLVM をバックエンド
    • Rust と同じ
    9

    View Slide

  30. LLVM をバックエンド
    • Rust と同じ
    • 効率的なバイナリが生成可能である
    9

    View Slide

  31. サポート環境
    • MasOS
    10

    View Slide

  32. サポート環境
    • MasOS
    • Linux
    10

    View Slide

  33. サポート環境
    • MasOS
    • Linux
    • WSL
    10

    View Slide

  34. サポート環境
    • MasOS
    • Linux
    • WSL
    • 現時点で Windows、WASM は未サポート
    10

    View Slide

  35. ライブラリがそこそこある
    • Discord Bot
    11

    View Slide

  36. ライブラリがそこそこある
    • Discord Bot
    • Web Framework
    Web Framework Kemal
    • Ruby の Sinatra っぽく書ける
    11

    View Slide

  37. ライブラリがそこそこある
    • Discord Bot
    • Web Framework
    Web Framework Kemal
    • Ruby の Sinatra っぽく書ける
    require "kemal"
    get "/" do
    "Hello Kemal!"
    end
    Kemal.run
    11

    View Slide

  38. 何が作れるの?
    12

    View Slide

  39. 何が作れるの?
    Web Application
    • invidious - プライバシーを考慮した YouTube フロント
    エンド
    12

    View Slide

  40. 何が作れるの?
    Web Application
    • invidious - プライバシーを考慮した YouTube フロント
    エンド
    言語
    • Mint - Web Frontend 系関数型言語
    12

    View Slide

  41. 何が作れるの?
    Web Application
    • invidious - プライバシーを考慮した YouTube フロント
    エンド
    言語
    • Mint - Web Frontend 系関数型言語
    GUI や Game まで
    • SFML - マルチメディアが簡単に扱えるライブラリ
    • OpenGL 系
    12

    View Slide

  42. 何が作れるの?
    Web Application
    • invidious - プライバシーを考慮した YouTube フロント
    エンド
    言語
    • Mint - Web Frontend 系関数型言語
    GUI や Game まで
    • SFML - マルチメディアが簡単に扱えるライブラリ
    • OpenGL 系
    OS もある
    • lilith - POSIX 準拠 OS
    12

    View Slide

  43. 参考になるサイト
    • Crystal-jp の『introducing CRYSTAL Programming
    Language』
    13

    View Slide

  44. 参考になるサイト
    • Crystal-jp の『introducing CRYSTAL Programming
    Language』
    • Crystal 公式ドキュメント
    13

    View Slide

  45. 参考になるサイト
    • Crystal-jp の『introducing CRYSTAL Programming
    Language』
    • Crystal 公式ドキュメント
    • Crystal 公式 API リファレンス
    13

    View Slide

  46. ご静聴ありがとうございました
    14

    View Slide