2
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

Cargryの「3つの規則」

2
Last updated at Posted at 2026-08-02

関数型システムプログラミング言語のCargryを開発しています

3つの規則の内、LMBU規則は廃止しています

3つの規則

Cargryは現時点で、以下の規則を持っています

CRM規則

これは、Cargry Resource Management Ruleの略で、その名の通りCargryのリソース管理に関する規則です

もっとも基本的な規則は以下の3つです

  • あるスコープにおいて、変数は値を独占する
  • 参照はスコープ内かつ、値の存在している間だけである
  • スコープの終端で値は解放される

FBIP規則

これは、KokaのFBIPのCargry版で、Functional But In-Place Ruleの略です

基本的な規則は以下です

  • 値の参照が存在しないなら、その値は破棄可能である

FBIPは文法で明示して登場し、他2つより規則の数は少ないため、わかりやすいです

LMBU規則

勝手に、「ラミュー規則」と呼んでいるこれは、Local Mutable Before Using Ruleの略で、これも名前の通り、変数の使用前、その上非常に短い間だけ再代入などの可変操作を行うことを許可する規則です1

LMBU規則はCRM規則に依存します

基本的な規則は以下です

  • 可変操作を行う関数(演算子も含む)は値に対してのみ作用させられ、参照には作用させられない
  • 値そのままで使うことはできず、参照をとって使う
  • 値の参照をとった時点で、それ以降そのスコープでは、コピーしない限り値に対して可変操作を作用させることはできない

例外として、軽量で常にコピーされることが保証されている型は値そのものも使うことができます


Cargryは関数型言語ながら、システムプログラミング言語として存在し耐えるために、以上の規則を持っています

Cargry replaces Rust?

CargryはCargryの設計思想と、3つの規則によって、メモリ安全性並行・並列安全性を目指しています。複雑な借用規則、ライフタイムが無く、Rustよりそこまで難しくなさそうです

だからと言って、「CargryはC/C++、Rustまでも置き換える新しい言語」「CargryはRustより簡単で、同じ安全性を得られる」と主張するのは、間違いです

Cargryは意外と「Rustではこう書ける」が書けなかったり、「ああ実装したい」が普通には実装できなかったりできます。なにより、Cargryでは厳しい制約下でプログラムを書くことを常に要求されます

どちらが優れているかを決めるのは適切ではありません

Cargryの考え方

Cargryの考え方の一つに

「Cargryは他の言語を蹴落とさない。むしろ他の言語を推す」

というのがあります

つまり、「長所と短所を認め、場面によって適切な言語を使うことをすすめる」ということです。Cargryと他の言語とを比較することは、Cargryは嫌うのです

終わりに

Cargryは、「実装を他のクレートに依存させたくない」という理由で、使うクレートは最小限で、ほとんどフルスクラッチです2

また何か進展があれば、お伝えします

  1. 全て不変だと詰んでしまうので、仕方なく考え導入しました。許してヒヤシンス

  2. 手書きで字句解析や構文解析をするのではなく、ライブラリから作るというバカなことしてます...

2
0
6

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
2
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?