1. にゃおのリテラシーを考えるラジオ
  2. #146 【プログラミング】..
2022-03-26 06:03

#146 【プログラミング】Rustのミュータブルとイミュータブルの話。

最近流行っているプログラミング言語のうち、比較的低レイヤのプログラミングに適しているRustという言語の文法から、

バグを作らないためにプログラミング言語レベルで考えられていることについて考察してみました。

にゃおの考える現代の基礎的なリテラシーは、ITをきちんと使えることが含まれます。そのためにどのような問題があり、どう解決していったらよいか考えてみるPodcastです。

Rust
https://www.rust-lang.org/ja

配信書き起こし
https://note.com/nchiba

twitter
@nchiba

「読書と編集」の活動は、
https://www.nyaos.net/

ストアカの「読書と編集のITリテラシー教室」は、
https://www.street-academy.com/steachers/468576?conversion_name=direct_message&tracking_code=62e788e6ff484f6d2952151bb9c955b4

をご覧ください。

00:04
にゃおのリテラシーを考えるラジオ、読書と編集の千葉直樹です。
このチャンネルでは、読書とIT時代の読み書きソロ版を中心に、様々な話をしています。
今回のタイトルは、プログラミング、ラストのミュータブルとイミュータブルの話、というものです。
最近、以前から気になっていたラストというプログラミング言語の勉強をしています。
これまで様々な言語を触ってきましたが、久しぶりに面白い言語だなぁと感じています。
ラストは、比較的低レイヤーのプログラミングができる言語です。
低レイヤーというのは、低いレイヤーと書きますが、コンピューターの中でハードウェアに近い部分のことを指します。
逆に高いレイヤーというのは、僕たちが直接操作して慣れ親しんでいるアプリケーションの世界です。
アプリケーションは、いくつもの階層からなるソフトウェアの積み重ねの上で実行されていて、その階層をレイヤーというわけですね。
低レイヤーのプログラミングでとても苦労することは、メモリの管理です。
メモリというのは、コンピューターが動作するときに使う一時記憶の領域です。
何が大変かというと、自分が意図したわけではないメモリ状の場所に間違えてデータを書き込んでしまうことがあることなんです。
意図しないとか間違えてというのがポイントで、これは人間のプログラミングのミスで起きることなんですね。
なぜ間違えると大変なのかというと、計算結果が違うみたいなことばかりではなく、同時に実行されている他のプログラムの領域にデータを書き込んでしまうようなとても迷惑なことになるからです。
他のプログラムの中にはOSも含まれています。
Windowsが使っている場所を書き潰してしまったら、パソコンが異常な動作をしてしまうこともあるのです。
もちろんそうならないように色々な仕組みでメモリは保護されているのですが、自分が使っていい領域を間違えて書き潰す場合も、自分のプログラムの不具合を見つけるのが難しくなってしまうことがあるのです。
特にこの手のバグが低レイヤーに存在していると、それを利用する上位のレイヤーの全てに影響するので大変なわけです。
こういう間違った場所を書き換えてしまうことをプログラムの実行中に防止するのは難しいのです。
ならばどうするのかというと、プログラミング言語の文法に、不要意なアクセスができないような制限を加えるということが行われます。
そもそもそういうアクセスをするような記述ができないようにするわけです。
そうすると、プログラムをコンピューターが実行できる形に翻訳する際に、文法エラーとして問題のあるプログラムを弾くことができるわけです。
プログラミング言語の世界では長年そういう工夫が行われています。
メモリの場所に対応するプログラミング言語上の概念としては、変数というものがあります。
03:01
プログラムの中ではたくさんの変数を定義して使います。これがクセものです。
変数には名前を付けますが、この名前をかなり上手に付けたとしても、人間の勘違いで違う変数に値を書き込むようにプログラムを書いてしまうということがあります。
数がたくさんあるものは必ずと言っていいほど間違えるのが人間です。
これ自体を完全に予防することは難しいのですが、本来なら書き換える必要がない変数なら最初から書き換えられないようにするだけでも随分リスクを減らすことができます。
古典的なプログラミング言語では、変数ではなく定数として規定するという方法を取ります。
ラストはここでもう一歩踏み込んで、変数は普通に定義すると書き換えられないという文法を持っています。
書き換えられないのに変数というのはちょっと変な感じがしますが、とにかく書き換えるなら明示的にそう宣言する必要があります。
関数型言語と言われるプログラミング言語には、そもそも変数という概念がないものもありますが、それに近い考え方を持ち込んだものでしょう。
書き換えられない変数をイミュータブル、書き換えられる変数をミュータブルと呼びます。
いくらプログラミング言語の文法に工夫をしても、人間が適切に使わないと問題は起きるのですが、
強く制約する文法は人間の思考も縛ることになるので、勘違いとか不要意にということをいくらかは減らせることになります。
これまで低レイヤーのプログラミングといったら、C言語やC++言語が使われてきましたが、
これらの言語よりも強い制約の文法を持つRUSTが、より安全にプログラミングができる言語として好まれるようになってきたのです。
RUSTはライブラリ依存性の管理など、これまでの言語にはなかった実用性の高いツールが最初から提供されていて、
プログラミングという行為自体を強い制約の下で行えるようになっています。
制約というと不自由な感じがしてしまいますが、
人間が覚えておくものを上手に減らして、コンピューターの手を借りながらプログラミングをすると考えることができます。
新しいプログラミング言語や環境が生まれてくるのは、このような工夫が常に行われているからなのです。
ITの世界が一筋縄ではいかないのは、常に変化し続けるものを追いかけ続ける必要があるからですが、
この変化は人間の進化でもあると考えると、ちょっと面白いと思いませんか?
読書と編集では、ITを特別なものではなく常識的なリテラシーとして広める活動をしています。
詳しい内容については概要欄のリンクから、または読書と編集と検索して猫がトップページに出てくるホームページをご覧ください。
この配信の書き起こしをnoteで連載しています。概要欄にリンクがありますのでフォローいただけると嬉しいです。
今日もワクワクする日でありますように。千葉直樹でした。ではまた。
06:03

コメント

スクロール