Open3

メモ Gleam v1.0.0のリリース

MzRyuKaMzRyuKa

2024年03月04日、静的型付けの関数型言語「Gleam」のv1.0.0がリリースされました。

https://github.com/gleam-lang/gleam
https://gleam.run/news/gleam-version-1/

2024年2月11日にはv1.0.0-rc1がリリースされていたので、もうすぐ出てくるとは思っていましたが、3週間を経て、やっとstable版(安定版)のリリースとなりました。
いやや、めでたいx2。

「Gleam version 1」の記事を簡単にまとめてみましょう

Gleamとは

以下の特徴があります。

  • 短い時間で学習しやすい(一貫性がある、覚える範囲が小さい)
  • 堅牢な静的分析
  • Elm、OCaml、Rust などの言語からインスピレーションを得た型システムを
  • ErlangVM上で動作、およびjavaScriptランタイムで実行できます。

Gleam v1に含まれているもの

以下のAPIが含まれています。

  • TheGleam language design. : 言語のデザイン
  • The Gleam compiler. : コンパイラ
  • The Gleam build tool. : ビルドツール
  • The Gleam package manager. : パッケージマネージャー
  • The Gleam code formatter. :コードフォーマッター
  • The Gleam language server. : 言語サーバー
  • The Gleam compiler WASM API and JavaScript bindings. : コンパイラWASM APIとJavaScriptバインディング

要は、Gleam本体をインストールするだけで、開発に関係する一通りのことができてしまう、ということですね。

v1とは何を指すか

  • v1とは、Gleamが「安定性がある」と「productionシステムとしての準備ができた」ことの声明である。
  • セマンティックバージョニングに従い、下位互換性を維持していく。(ただし、セキュリティなどの問題は例外である)

v1以降のGleamはどう進む

「Gleam ユーザーの生産性」と 「Gleam プロジェクトの持続可能性」に重点を置いてバージョンアップをしていく

Gleam ユーザーの生産性

生産性向上のために、以下の点に力を入れていく

  • 破壊的変更を導入しない
  • 言語の肥大化を避ける(シンプルさを保つために、安易に機能追加はしない)
  • Gleam 開発者エクスペリエンスを継続的に改善する
  • Webサービス開発も焦点をあて、ライブラリなどの追加に取り込んでいく
  • 文書/チュートリアル/ガイドの作成

Gleam プロジェクトの持続可能性

プロジェクトが持続可能になるように力を入れていく(ので、協力をお願いしたい)

  • フルコミッターは作者のLouis Pilfold のみ。他はパートタイマーのボランティア。
    • だから、より重要なものに注力する。ニッチなもの、重要でないものへ避けるリソースが少ない
  • 内部文書化への取り組み
  • 資金が必要。サポーター募集。

おまけ:マスコットLucy

なお、マスコットキャラもできた様子。
名前は Lucy(ルーシー) という名前のようです。

gleam.runページの印象もLucyがいることによって、以前とは若干イメージが変わりました。

カーソルが当たると、喜びます。

さらにクリックすると、背景の画像が変わります。

MzRyuKaMzRyuKa

では、実際にGleamのv1.0.0をインストールしてみる。
自分はasdfを利用してGleamの環境を構築していたので、asdfを用いたインストールを行う。

asdf自体のアップデート

$asdf update
remote: Enumerating objects: 584, done.
remote: Counting objects: 100% (584/584), done.
remote: Compressing objects: 100% (330/330), done.
remote: Total 584 (delta 310), reused 457 (delta 238), pack-reused 0
Receiving objects: 100% (584/584), 1.11 MiB | 1.33 MiB/s, done.
Resolving deltas: 100% (310/310), completed with 23 local objects.
From https://github.com/asdf-vm/asdf
 * [new branch]      dependabot/github_actions/actions/cache-4      -> origin/dependabot/github_actions/actions/cache-4
 * [new branch]      dependabot/github_actions/dorny/paths-filter-3 -> origin/dependabot/github_actions/dorny/paths-filter-3
 * [new branch]      dependabot/npm_and_yarn/docs/docs-5e1683a3d5   -> origin/dependabot/npm_and_yarn/docs/docs-5e1683a3d5
 * [new branch]      dependabot/npm_and_yarn/docs/vite-4.5.2        -> origin/dependabot/npm_and_yarn/docs/vite-4.5.2
 + ed221a8...1d48b94 gh-pages                                       -> origin/gh-pages  (forced update)
   816195d..ccdd47d  master                                         -> origin/master
 * [new tag]         v0.13.0                                        -> v0.13.0
 * [new tag]         v0.13.1                                        -> v0.13.1
 * [new tag]         v0.14.0                                        -> v0.14.0
Previous HEAD position was 816195d chore(master): release 0.12.0 (#1506)
HEAD is now at ccdd47d chore(master): release 0.14.0 (#1641)
Updated asdf to release v0.14.0
$

Gleamプラグインのアップデート

$asdf plugin update gleam
Location of gleam plugin: /Users/kawamuraryuuta/.asdf/plugins/gleam
Updating gleam to master
From https://github.com/vic/asdf-gleam
   c7c3a7c..b45a651  master     -> master
   c7c3a7c..b45a651  master     -> origin/master
Already on 'master'
Your branch is up to date with 'origin/master'.
$

Gleamのインストール可能なバージョンの確認

$asdf list all gleam
0.2.0
0.3.0
0.4.0

〜(中略)〜

0.34.1
1.0.0
1.0.0-rc1
1.0.0-rc2
nightly
$

gleam v1.0.0のインストール

$asdf install gleam 1.0.0
  % Total    % Received % Xferd  Average Speed   Time    Time     Time  Current
                                 Dload  Upload   Total   Spent    Left  Speed
  0     0    0     0    0     0      0      0 --:--:-- --:--:-- --:--:--     0
100 7038k  100 7038k    0     0  3685k      0  0:00:01  0:00:01 --:--:-- 4824k
asdf: Warn: You have configured asdf to preserve downloaded files (with always_keep_download=yes or --keep-download). But
asdf: Warn: the current plugin (gleam) does not support that. Downloaded files will not be preserved.
$

インストールされているGleamのバージョンの確認。

「1.0.0」がインストールされていることが確認できた。

$asdf list gleam
  0.17.0
  0.19.0
  0.20.1
〜(中略)〜
  0.25.3
 *0.26.0
  0.28.3
  0.9.1
  1.0.0

Gleamのデフォルトのバージョン切り替え

$asdf current gleam
gleam           0.26.0          /Users/<username>/.tool-versions
$

$asdf global gleam 1.0.0
$

$asdf current gleam
gleam           1.0.0           /Users/<username>/.tool-versions
$

Gleamのバージョン確認

1.0.0であることの確認

$gleam --version
gleam 1.0.0
$
MzRyuKaMzRyuKa

Gleamのプロジェクトを作ってみる。

新規プロジェクト作成(プロジェクト名は「looks_like_this」とする)

gleam new looks_like_this
Your Gleam project looks_like_this has been successfully created.
The project can be compiled and tested by running these commands:

	cd looks_like_this
	gleam test

$

Gleamプロジェクトのディレクトリ構成

$cd looks_like_this
$
$tree
.
├── README.md
├── gleam.toml
├── src
│   └── looks_like_this.gleam
└── test
    └── looks_like_this_test.gleam

Gleamプロジェクトの実行およびテスト実行

$cat src/looks_like_this.gleam
import gleam/io

pub fn main() {
  io.println("Hello from looks_like_this!")
}

$
$gleam run
  Resolving versions
Downloading packages
 Downloaded 2 packages in 0.11s
  Compiling gleam_stdlib
  Compiling gleeunit
  Compiling looks_like_this
   Compiled in 11.08s
    Running looks_like_this.main
Hello from looks_like_this!
$

$gleam test
   Compiled in 0.07s
    Running looks_like_this_test.main
.
Finished in 0.049 seconds
1 tests, 0 failures
$