LoginSignup
7
6

C言語を勉強するために、学生または新人に話しているのは3つ。

1 C言語でコンパイラを書いてみる
 写経(まるうつし)でもよい。
2 好きな分野(ゲーム、音楽など)のプログラムを書いてみる。
 Cのソースが公開されているものにロードランナーがある。
 実際に、プログラムを打ち込んで、コンパイルしてコンパイルエラーとるだけで十分プログラミングできるようになった人あり。
3 他の言語で書かれたものをC言語に変換してみる。

電総研(現在の産総研)に研修生でいた3ヶ月で、

自分では、最初の1月で、Small Cという小さいCコンパイラを写経し、
次にPascalで書かれていたコンパイラをC言語に変換してみた。

次の1月で、Pascalで書かれたコンパイラをC言語に変換して失敗したのは、
デバッグモードだと動くが、デバッグーモードじゃないと暴走するという事態。

デバッグモードではprintして確認した。printして確認の課題は、printして確認すると期待通り動くが、printをしないと違う動きをする場合があることである。例えば、printするために確保した領域が、値の上書きや、時間の調整をしていて、時間的にも空間的にも期待した動作さけをする場合がある。printを消すと、OSや言語によっては、空間を壊したり、時間の順番が入れ替わることがあるかもしれない。

静的検査道具を知らずに、何ヶ月か悩んだ。
少しおおきくなるだけなのでデバッグモードでコンパイルしたもので使い続けた。

原因は、配列の検査がいいかげんで、どこかで飛び越えているのだろうと推測する。
デバッグモードだと、そこがデバッグのための領域で悪さをしないのだろうと。

最後の1月で、OBJという抽象データ型言語のシンタックスチェッカをC言語で作った。
もともとは、OBJの論文への意見を求められ、言語の特徴を知るのにシンタックスチェッカを作ろうと思ったから。

まとめ(summary)

コンパイラを書くには、
1 目標がある。
2 好きなことに関連させる
3 期限を切る
のいずれかまたはどれもを試してみてください。

その後、C言語研修ではかならずCコンパイラを一度は書くように勧めてきた。

当初は3ヶ月といっていたが、最近は道具もそろってきて、3週間でコンパイラを書く若者が増えてきたような気がする。

C言語教育に1ヶ月かけるなら、そのうちの3週間はコンパイラを作らせるとよいというのが経験則。

つまらぬ文法なんか教えていないで、とっとコンパイラを書こう。

Lode Runner

コンパイラをどうしても書きたくない人にはゲームの写経をお勧めしています。

Lode-Runnerで学ぶ実践C言語-ビー・エヌ・エヌ企画部
51JaGIOM+4L._SL500_SX351_BO1,204,203,200_.jpg

The C Puzzle Book

C Puzzle Book, Alan-R-Feuer
https://www.amazon.co.jp/dp/4877830294/ 第二版翻訳
https://www.amazon.co.jp//dp/4871487733/ 初版翻訳

Cパズルブック
改訂版, Alan R. Feuer/アラン・R. フューアー 2000-12
51QQZNVK6JL._SX374_BO1,204,203,200_-3.jpg

C Puzzle Bookの有り難み5つ、C言語規格及びCコンパイラの特性を認識
https://qiita.com/kaizen_nagoya/items/d89a48c1536a02ecdec9

参考資料(reference)

心理学の本を読むよりはコンパイラ書いた方がよくね。仮説(34)

Cコンパイラ3種をdockerで
https://qiita.com/kaizen_nagoya/items/77184cf005490d7579e6

C++/C コンパイルエラーを記録するとよい理由7つ
https://qiita.com/kaizen_nagoya/items/85c0e92b206883140e89

Qiitaに投稿するC, C++の書式例
https://qiita.com/kaizen_nagoya/items/946df1528a6a1ef2bc0d

Autosar Guidelines C++14 example code compile list(1-169)
https://qiita.com/kaizen_nagoya/items/8ccbf6675c3494d57a76

「C++完全理解ガイド」の同意できること上位10
https://qiita.com/kaizen_nagoya/items/aa5744e0c4a8618c7671

C言語(C++)に対する誤解、曲解、無理解、爽快。
https://qiita.com/kaizen_nagoya/items/3f3992c9722c1cee2e3a

MISRA C まとめ #include
https://qiita.com/kaizen_nagoya/items/f1a79a7cbd281607c7c9

MISRA-C 2012 Referenceに掲載している文献の入手可能性を確認
https://qiita.com/kaizen_nagoya/items/96dc8b125e462d5575bb

C Puzzle Bookの有り難み5つ、C言語規格及びCコンパイラの特性を認識
https://qiita.com/kaizen_nagoya/items/d89a48c1536a02ecdec9

[C][C++]の国際規格案の例題をコンパイルするときの課題7つ。
https://qiita.com/kaizen_nagoya/items/5f4b155030259497c4de

どうやって MISRA C Example Suiteをコンパイルするか
https://qiita.com/kaizen_nagoya/items/fbdbff5ff696e2ca7f00

プログラミング言語教育のXYZ 仮説(52)

人生で影響を受けた本100冊

<この記事は個人の過去の経験に基づく個人の感想です。現在所属する組織、業務とは関係がありません。>

文書履歴(document history)

ver. 0.01 初稿 20190828 朝
ver. 0.02 参考資料追記 20190828 午前
ver. 0.03 参考資料追記 20210722
ver. 0.04 参考資料追記 20221023
ver. 0.05 URL追記 20230228

最後までおよみいただきありがとうございました。

いいね 💚、フォローをお願いします。

Thank you very much for reading to the last sentence.

Please press the like icon 💚 and follow me for your happy life.

7
6
0

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
7
6