かちのぼやきかちのぼやき数学系、情報系を中心に、日頃考えていることをメモがわりに書いていく予定。Translate2019年2月5日火曜日ブログを移転しました。新たにブログを開設しました。https://n.k-kachi.net新規の投稿は新しいブログのほうに行う予定です。新ブログの方もよろしくお願いいたします。すゝめ最近Rustという言語にハマっているので簡単に紹介したいと思います。Rustとは公式サイトにかかれている通り、RustはSafetySpeedConcurrencyに焦点をあてたプログラミング言語です。CやC++のように低レベル処理を行うことができます。ちなみに実行速度は爆速です。コンパイル時にLLVMを使って最適化されるため、Cと同程度の速度が出ます。速いだけではありません。Rustで書かれたプログラムはCやC++と異なり安全です。Rustの1番の強みといっても良いでしょう。Rustは「所有権(Ownership)」という概念を取り入れ、安全性を担保しています。所有権(Ownership)まず所有権について話す前に下のような簡単なコードを見てみましょう。Rustを知らなくてもノリで読めると思います。このコードはちゃんと動きます。一回関数fを呼んでみましょう。今回はエラーを吐かれてしまいました。`a`というエラーです。このエラー、実は所有権に違反したために生じたものです。お気づきかもしれませんが、2つ目のプログラムにはバグが含まれています。1回目のfで引数のaはフリーされているため、もうaは何もデータを持っていません。一回fにaを渡すことはできないのです。Rustは「所有権」という概念を用いることで、このようなメモリーに関するバグをコンパイル時に見つけることができます。これはセキュリティ上非常に重要なことです。2つ目のプログラムがなぜいけないのかを所有権という立場で説明します。4行目でaはデータの所有権を手に入れます。次に5行目でaが関数の引数xに代入されますが、このときデータの所有権はaからxに移ります。よってこの時点でaはmoveされます。`a`と怒られるのです。所有権を手放すのではなく、使い終わったらデータの所有権を返してもらいたい時もあります。Rustはこのようなときのために借用(Borrow)という仕組みも用意しています。(詳しい説明はググッてください)実は、この所有権という仕組みは単に安全性を保証するだけではなく、データ競合など並行性に関する問題も解決してくれるのです。1コアあたりの処理能力が頭打ちになりマルチコア化が進む今、並行性は非常に重要です。安全性を付加したという時点ですでにRustの存在意義は十分なのですが、Rustの良い点はこれだけにとどまりません。生まれて間もない言語なので、最近流行っている文法をふんだんに取り入れています。全部挙げるときりがないので、お気に入りのものをいくつか紹介します。enumとmatchRustのenumはCのそれと少し違います。集合論的に言うと、structが型の直積であるのに対し、型の直和にあたるものがRustのenumです。matchはCのswich-caseの拡張版で、enumとの相性が抜群です。サンプルコードを載せておきます。このenumとmatchは、Rustのエラー処理でも使われています。エラーが起こるかもしれない関数の返り値を、「正常値の型」と「異常値の型」のenumとすることで、プログラマはmatchを使ってそれぞれの返り値に応じて動作を変えることができるのです。IteratorとClosureイテレーターはPythonとかでお馴染みのあれです。クロージャーはラムダ式のことです(正確には嘘)。求めるコードを載せておきます。最後に本当はもっと書きたいことはあるけど、めんどくさいので書くとしてもまた後日。〜平等な世界を目指して〜ようやく本題へ。今回の目標は、今の通貨システムに変わる新たな通貨システムをつくり、貧富の差が勝手には生まれないような社会をつくることです。前々回の投稿で価値関数を導入しました。この価値関数によって、お金の額面とその価値を別々のものだと捉えられるようになりました。今回はこの価値関数を基準に通貨システムを設計しなおすことにします。時間の項が絡むと複雑になるので、今回は省略します。額面と資産その前に単語をふたつ定義しておきましょう。額面はものの値段を表すものとし、これの単位をKachiと定義します。Kachiである、というふうに用います。資産はその人が持つ資産のこととし、これの単位をeKachiと定義します。給料などを思い浮かべてもらえばわかりやすいと思います。eKachiである、というふうに用います。これらは価値関数を用いて$y=f(x)$と変換できます。$x$は額面、$y$は資産です。価値関数を「資産が自然とバラけるように」設計しましょう。>0$とし、価値関数の逆関数を$g=f^{-1}$と定義します。\beta)$$となります。g(\beta)$$となります。「資産が自然とバラけるようになる」というのを、「資産を分割したほうが額面の合計は多くなる」と言い換えてあげれば、不等式として以下のように表現できます。(1+y)$$は上の不等式を満たします。