Scribble at 2022-11-29 11:01:19 Last modified: 2022-11-29 22:10:23

添付画像

・C has no environment which smooths out platform or OS differences; you need to know about your platform too

・there are many C compiler options and build tools, making even running a simple program involve lots of decisions

・there are important concepts related to CPUs, OSes, compiled code in general

・it’s used in such varied ways that there’s far less a centralised “community” or style than other languages

Everything I wish I knew when learning C

上記の記事で列挙されている、C 言語の運用が難しいという指摘は一理ある。

まず、C 言語を学ぼうとして環境を用意する手順に「スタンダード」と言えるものがない。したがって、解説する記事や本を書く時でも、幾つかの手順を並記しないといけない。他のよく知られた手順を無視して解説すると、無知と謗られるくらいならまだしも、重要な情報を隠したと非難されることもある。実際、Windows で開発環境を整備するのに Microsoft のコンパイラをインストールする手順だけを解説するような人は、「VB コーダあがりの C 使い」とか「マーケティング屋」と冷笑される場合があるし、逆に Cygwin などのインストール手順しか紹介しない人は「化石」とか「変人」などと言われたりする場合がある。もちろん、ここ最近だと KVM 等を使って仮想化したゲスト OS に LLVM をインストールするような手順も紹介しないと、若手からは「ヘタレ」とか「老害」と言われることもあろう。

コンパイル時のオプションについても、あるいはそもそも #ifdef を始めとする preprocessor などの扱いについても、コンパイルにあたっての条件が色々とあるため、どういう場合に何をしてやればいいのか、殆どコンパイラの仕様も一緒に学ばなくてはならない。したがって、C 言語のプログラマには gcc に精通している人が多いのだが、それは逆に知っていないとコンパイラを適切に(ポータビリティの規格に準ずるとかエラーを出さないというだけではなく、最適化したパフォーマンスが出るように)通せないという事情もあるからだ。

そして、僕が強く感じるのが、「コミュニティの不在」である。古くから ANSI によって国際規格となり、コンパイラも IDE も様々な会社が独自の仕様で拡張していた経緯などがあるし、現実に実装する目的が OS といったプラットフォームの違いだけではなく、OS そのものの開発とアプリケーションの開発など全く違うために、その用途の広さや低級言語としての強力な制御機能によって、或る意味では早くから棲み分けや多様化が進んだ結果なのだろう。日本でも、C 言語は基本情報技術者 (FE) 試験ではいまだにプログラミング試験の選択言語として採用され続けていて、知っているレベルだけなら現在でも「ユーザ数の多い言語」と言って良いだろうが、現実にはハードウェアのドライバや組み込み系の制御プログラムを開発する企業で働く人々を除けば、仕事で現実に C 言語を使っている人は「プログラマ」を自称する人の中で10人に1人もいまい。ウェブ・アプリケーションのエンジニアだけに限って言うなら、たぶん案件で C 言語のプログラムを書いてる人なんて1,000人に1人すらいないと思う。したがって、組み込み系の業界などは業界団体として既にコミュニティが出来上がっているため、そういう業界の枠を超えて活動する必要がないし、それ以外の産業分野では C 言語を仕事で使っている人が少なすぎてコミュニティを立ち上げたり維持するインセンティブが欠落しているわけである。

ただ、だからといって、記事の後半に列挙されているような小手先の付け焼刃と言ってもいい些末な解説を並べたところで、そういう現状になにがしかの影響があるとは思えない。

  1. もっと新しいノート <<
  2. >> もっと古いノート

冒頭に戻る


※ 以下の SNS 共有ボタンは JavaScript を使っておらず、ボタンを押すまでは SNS サイトと全く通信しません。

Twitter Facebook