😎

CとC++を使うなと偉い人たちからお達しが届いた

2022/12/11に公開約1,700字

参考にした記事

米国家安全保障局、CやC++からメモリ安全なプログラミング言語への移行を推奨する文書を公開

C言語は時代遅れ?

Piscineで初めてプログラミングに触れた僕にとっては、まともに触ったことのあるプログラミング言語なんて、C言語くらいでした。

そんな僕に悲しいニュースが飛び込んできた。アメリカ国家安全保障局(NSA : National Security Agency)という名前からして凄そうな組織がソフトウェア開発におけるメモリ安全性に関する文書で、C言語を使うなと大々的に発表したのだ。

文書の大雑把な中身はサイバーセキュリティのために組織でのソフトウェア開発ではメモリ安全でないCやC++を使わずに、C#、Go、Java、Ruby、Rust、Swiftなどを使えというモノである。

C言語とメモリの関係性

僕はITまわりのことはあまり詳しくなく、Piscineで出会った詳しい男子大学生から、「C言語はメモリが潤沢ではなかった時代にはよく使われていたが、メモリが潤沢になった現代においては狭い分野にしか使われていない」と聞いた。

たしかにC言語はメモリの管理をポインタなどを使い、手作業でする。昔はメモリが少なく、Pythonのような動的型付けのインタープリタ言語で書くとメモリが足りずに十分なシステムが作れないし、メモリが潤沢な現代で速さを求めるにしてもC#のようなCと同じ静的型付けでCよりもメモリ管理が容易い言語を使えばいい。

Cが危険な理由

C言語はプログラマーは全知全能の神様だという前提に設計されています。なので、かなり危険な部分まで触れます。
いわば、医者じゃない人間でも身体の中で感覚的に触っても大丈夫な部分とそうじゃない部分はわかります。頭が痛い場合は、痛み止めは飲んでも、自分で頭をいじるなんてことはしません。
しかし、C言語はそのようなデリケートな部分も触れてしまうので、ポインタや配列などのメモリ関連の部分で少しでもミスをしてしまうとエラー、最悪の場合はシステムに脆弱性が生まれ、クラッカーにハッキングを許してしまうという事態になってしまう。

また、医者で医療の知識があるからといって、実際にデリケートな部分をいじれる訳ではありません。
実際にいじるにはかなりの技術が必要です。医者の中でも脳神経外科医の平均年収が一番高いのもかなりの技術を持っているからです。
C言語を扱うというのは脳を直接いじるに等しい行為です(たぶん)。なので、かなりの知識と技術が必要です。
C言語を扱えるくらいの知識と技術は必要だと思います。しかし、アメリカ国家安全保障局はCやC++以外に安全にシステムを作れる言語はあるんだから、わざわざ危険な道具を使う必要はないということを文書で伝えたかったのだと思います。

C言語を学ぶ意味

C言語を学ぶことは無駄なのでしょうか?。前述したように僕は無駄だと思いません。

C言語とは関係ありませんが、実用的ではなくても学ぶべきプログラミング言語があるとEric S. Raymondという著名なハッカーがハッカーになろう(How To Become A Hacker)というエッセイで書いています。

RaymondはLispというプログラミング言語を習得することを薦めています。その理由はLispを実際に使わなくてもLispを学ぶことは良いプログラマーになる上で素晴らしい体験を得られるからと述べています。
これからはC言語もLispと同じく、良いプログラマーになる上で有益な体験を与えてくれる言語という位置付けになっていくのでしょう。

僕はこれから42でC言語を学びます。前述の理由から、修行だと思って、C言語を勉強していきます。おそらく、僕らと同世代や下の世代の人たちはC言語なんか使ったことないという人が多いと思います。その人たちに「C言語使ったことないとか、まだまだだな( ̄∇ ̄)」とマウントも取れると思うので頑張ります(笑)。

Discussion

ログインするとコメントできます