パスワードを忘れた? アカウント作成
15782084 story
GNU is Not Unix

RMS、GNU C 言語リファレンスマニュアルをアナウンス 90

ストーリー by nagazou
マニュアル 部門より
headless 曰く、

RMS こと Richard M. Stallman 氏が 6 日、「GNU C Language Intro and Reference Manual」のリリースをアナウンスした (メーリングリストでのアナウンスPhoronix の記事Git リポジトリ)。

マニュアルは GNU Compiler Collection (GCC) とともに使用する C 言語を解説したもので、この C 言語の方言を GNU C と呼ぶ。既に C 言語を知っている場合は GNU C のリファレンスマニュアルとなり、プログラミングの基本を理解しているが C 言語を知らない場合は C 言語の学習に使用できるとのこと。

一方、プログラミング初心者に対しては C 言語から始めるのではなく、自動ガーベージコレクションを備え、明示的なポインターをサポートしない Lisp や Scheme、Python、Java などの言語から始めることを推奨している。

  • これは無理ゲー (スコア:5, おもしろおかしい)

    by annoymouse coward (11178) on 2022年09月08日 16時13分 (#4321599) 日記

    冒頭だけ読みましたが、これは初心者殺しのマニュアルですね。RMSは多数の罠を仕込んでいます。

    1) 最初の罠: gitで公開されているファイルは GNU Texinfo 形式

    あなたは git が使えますか? texi から html やpdfを生成できますか? この質問で何を聞かれているか理解できない人は、このマニュアルを読むことさえ出来ません。RMSこわい。

    2) 次の罠: 最初のコードはフィボナッチ数を再帰処理で計算する例

    いきなり再帰関数です。フィボナッチ数。スタック使って再帰を実行するぜ。メモリブロックの一部がスタックって呼ばれる領域なんだけど、C言語はそこを使って再帰を実現するんだぜ。スタック食い潰したらクラッシュする。どうだC言語は怖いだろっていう怒涛の文章になってます。これがイントロです。RMS頭オカシイ。

    3) 1112行目でやっとコンパイル方法が説明されている

    1000行ぐらい我慢して読み進むと、やっとコンパイル方法が説明でてきます。 gcc -g -O -o fib1 fib1.c でコンパイルできるよ、って1行だけ。説明はこれだけ。"gcc -g -O -o "の説明は皆無。ひどい

    4) トドメの罠 1132行目で gdb が登場

    なぜかgdbを起動する方法が紹介されます。起動する方法だけです。gdbを使ったことがない人が 書いてある通りに gdb を起動してしまうと、 gdbって何?これ、どうやって終了するの?という感じで詰みます。

    ざっと見た限りでは冒頭の1章で大半の人が挫折する構成になっています。 C言語というかGNU文化を知らない人は読んでも理解できない。GNU文化を知ってる人は読む必要がない。 誰をターゲットにしたマニュアルかがよくわからない出来栄えでした。

    ここに返信
    • by Anonymous Coward

      GNU Cのマニュアルは既にあるから、それも一緒に読む前提なんじゃねーの?
      あれもあれで冒頭から間違ってて、Cの言語規格読んだことない奴が書いたんじゃないかと疑う代物だけど。

    • by Anonymous Coward

      > プログラミング初心者に対しては C 言語から始めるのではなく~

      と記事中にも書かれてるんだから、初心者をターゲットにしてないのは明白なんだけど

    • by Anonymous Coward

      これは初心者殺しのマニュアルですね。RMSは多数の罠を仕込んでいます。

      Recall Manual Softlyの略だったんだよ

      # そっとマニュアルを突き返そう

    • by Anonymous Coward

      男は、黙ってmanだろ。

      そんなこと言っているから、『RTFM』とか言われそう。 ワタクシ?ワタクシは、まずgoogle様に聞きますが。

      #元コメを見てる範囲では、RMS 健在なり!\(^○^)/

    • by Anonymous Coward

      初心者にはチュートリアル、経験者にはリファレンス。そーゆーこと。

      チュートリアルといえばTurboPascal3.0のは感動的だったなあ。今でもどっかに転がってそう。

      老害ですが何か?

    • by Anonymous Coward

      > 知らない人は読んでも理解できない。
      > 知ってる人は読む必要がない。

      ダメなマニュアルあるあるすぎる

      • by Anonymous Coward

        技術書とかも、わかってから読むとわかるってのよくあるよね (´・ω・`)

        • by Anonymous Coward

          ハード(デバイス)のマニュアルはみんなそう。
          「初見の人に分かり易く」書くつもりなんか絶対に無いんだろうな、っていつも思う。

      • by Anonymous Coward

        探究のパラドック。Smalltalkの頃から指摘されてる。ダメかどうかは関係ない。

    • by Anonymous Coward

      いきなり再帰関数です。フィボナッチ数。スタック使って再帰を実行するぜ。メモリブロックの一部がスタックって呼ばれる領域なんだけど、C言語はそこを使って再帰を実現するんだぜ。スタック食い潰したらクラッシュする。どうだC言語は怖いだろっていう怒涛の文章になってます。これがイントロです。RMS頭オカシイ。

      intで計算できる程度のフィボナッチ数を再帰で求めたとしてスタックオーバーフローになるわけないアホか

      • by Anonymous Coward

        まともなコードとコンパイラならスタック消費しないからオーバーフローになるわけないアホか

        • by Anonymous Coward

          まともなコードとコンパイラならスタック消費しないからオーバーフローになるわけないアホか

          まともなコンパイラなら再帰呼出しで組まれたフィボナッチ数の計算もループに展開してくれる、とか思ってるアホかな?

  • おっ、おぅ... (スコア:2, おもしろおかしい)

    by Anonymous Coward on 2022年09月08日 15時15分 (#4321517)

    おすすめの先頭がLispなところが括弧いい!

    ここに返信
    • by Anonymous Coward

      Lisp というのはたぶん Common Lisp のことなんだろうけど、本人の立場的に Emacs Lisp のことを言ってそうでちょっと怖い……

      • by Anonymous Coward

        (defun factorial (n)
                (cond ((zerop n) 1)
                        (t (* n factorial (sub1 n))))

        (defun sub1 (x) (- x 1))

        カッコあってる? なつかすぃー ちな muLisp な 90のマニュアルは新宿のSEGとかだっけ(忘れた)国内代理店から買ったから
        ライセンス番号が手書きしてあるよ 今でも持ってる M380 で uti-lisp も無限ループさせて(しまって)けっこうな大金を大学の電算センターに上納した(させられた)

      • by Anonymous Coward

        canlispぐらいしか触ったことのないけど、これを初心者に触らすと大惨事だろうな。

  • by Anonymous Coward on 2022年09月08日 15時38分 (#4321554)

    ポインターを見せず、GCも勝手にやってくれる
    メリットは大きい、しかしそれでも…と、ソースレビューしながら思うことが時折
    まあ、そういう人がCで書いたらそもそも完成しないんだけど

    ここに返信
    • by Anonymous Coward

      まあ、個人がサンプルで作る範囲くらいなら Java で GC が問題になるような領域をそうそうは踏まない
      (踏むころはCとしてもどっぷりいろいろやる)
      というのは、妥当なレベル設定な気はします。

      絶対じゃないけど、チュートリアルを書くにあたっての前提としては、まあアリな想定かなと。

      • by Anonymous Coward

        言いたいことをちゃんと書いてないので、誤解を招いた気がします

        業務で他の人のコードを見ていて、「裾野が広がるのも善し悪しだなあ」と思うことがあります
        イメージできる人とできない人の差、頑張る人と頑張らない人の差、成長する人としない人の差、等が大きくなったというか
        「Javaしか知らない」みたいな人に、後者が多い気がしてます(単に自分や周囲の肌感覚)

        でも言語のメリットも人が多いことのメリットも享受してるしね…という、オッサンのモヤモヤでした
        元記事と関係ない話で失礼

        • by Anonymous Coward

          そういう人って言語以前の問題じゃない。
          何十行にもわたるコピペ(微妙に変数名だけ変わっていく)を見たときにはほんとクラクラしました。
          これでエキスパート名乗って派遣されてくるのかと。

    • by Anonymous Coward

      Javaって明示的にポインタを見せていないのが簡単だと宣伝されるが、
      実際は全部ポインタ、というとこに気づくまで使えない罠

      • by nekopon (1483) on 2022年09月09日 8時42分 (#4322278) 日記
        "NullPointerException" に気づくか否かですかね(安い評価)
      • by Anonymous Coward

        そうなんだよね。参照型変数を説明する時は、結局はどうしてもポインタっぽい話をしないといけない。変数への代入操作が実際にはどういうことなのか、分かっていない人も結構いる。

    • by Anonymous Coward

      2つのリスト(Array/List)に対して、1つめのリストに対してforの二重ループで2つめのリストを毎回全チェックする(continueとかbreakすらしない)とか、そういう人はたくさん見てきました…
      (SQLで例えるならループの中で毎回SELECT * FROM hoge;する感じ)
      ※GCとか以前の問題

  • by Anonymous Coward on 2022年09月08日 15時46分 (#4321564)

    もうC/C++は捨ててRustから始めたほうがいい
    C++の違法増築っぷりは言うに及ばずCで大規模プログラミングは苦行すぎる。

    ここに返信
    • by Anonymous Coward

      RustもJavascriptもなんか気持ち悪い。
      C++とかで拡張された部分を最初から取り入れ整理して実装しているのはわかるのだけど、初心者はその辺理解して使えるのだろうか。
      C++の場合は、Cベースの基本的な部分とか第一次拡張、第二次拡張というった使わなくてもいいけど理解して使うと便利だよってことで
      あえてその機能は使わないという選択で理解しやすいコードにすることも可能だけど。

      • by Anonymous Coward on 2022年09月08日 16時11分 (#4321598)

        Rustは速度を極力犠牲にせず安全に使えるようにしようとする方針というか執念はすごいと思うけど、「なんでこんなへんてこなルールになってんだ」みたいなのに出くわすと結局C/C++で何が問題だったのかをさかのぼって把握する必要があったりして、初心者にはおすすめできないな。

        • by Anonymous Coward

          Rustでざっくり書いて、コンパイルエラーの所有権とか寿命がらみをちょこちょこ直す。一部直すと連鎖して他も直す。
          プログラムを書いてるのか書かされてるのかだんだんわからなくなる。
          イテレータ使うよりforで書いた方が制約が少ないし、なんだか楽しくない。

    • by Anonymous Coward

      Cは超高級アセンブラのつもりで。
      C++は超高級マクロアセンブラのつもりで。
      そもそもCPU周りアセンブリわからん人間はC/C++使うべきでないと思う。
      詰むから。
      ま、現代PCの世界だとデバイスドライバとかBIOSレベルを書く人じゃないと
      C/C++は積極的に使わないほうがいいね
      でも組み込みだとそもそもC/C++しか処理系がないのです
      ニッチなところでmicroPythonとかBASICとかあるけど
      いつでも使えるわけじゃない
      それだってCPUハード周り理解して使うべきですけどね

      • うん、まあ、i++ってのを見た時はアセンブラかよ、って思ったけどね。
        --
        ---- 6809
      • by Anonymous Coward

        PL/Mをご存知だろうか。
        PL/1のサブセットとしCP/Mの開発者でもあるゲイリー・キルドールが作ったシンプルな言語。
        CよりもPascalよりもシンプルでコンパイラが出力するコードが想像しやすい。
        まさに高級マクロアセンブラと言って良いと思う。

      • by Anonymous Coward

        Cは規格表を読むだけで理解できます。

        アセンブリを理解しないと……という人は帰納的理解が得意なんだと思いますが、
        すくなくともデバッグには向いてない気がする。

        • あんな穴(鼻から悪魔等)だらけの規格表で?
          • by Anonymous Coward

            そこは穴だと理解できますよね?
            そこは使わない。それで問題が解決しないなら、Cをこえるということです。
            # C99やC++では穴が減る方向にあるので、C89で理解が止まっている人はちょっと驚くかも。

            Cの範囲をこえるなら、使おうとしているコンパイラなどの知識がいるでしょう。
            そちらで明文化されていないならどうしようもない。道具をうまく使うしかないなら、
            そこで初めてアセンブリの知識がでてくるかもしれません。
            (明文化されていない時点で再現性はどうなのよと心配になってしまいますが)

            自分の設計の根拠はなんなのか、いつでも説明できる必要があると考えると、
            Cの理解にはアセンブリが必要などという発言は出てきません。

        • by Anonymous Coward

          えー、GCCって最適化でよくバグるから-sの結果が読めないとデバッグできないんだけど。

          • by Anonymous Coward

            それな。
            キリキリチューニングとか最適化の癖知らないとできないし。
            asmマクロで小技仕込むこともあるし
            section分けて自分でROMRAMオーバレイするだの
            マルチコアで共通メモリ通信するだのやってると
            やはりあれはマクロアセンブラの階層だと思って使うのが
            間違いがないですよ

          • by Anonymous Coward

            本当にバグなんでしょうか。あなたのことが心配です。

          • by Anonymous Coward

            たぶんGCCのせいじゃない

        • by Anonymous Coward

          >Cは規格表を読むだけで理解できます。
          標準Cならそうだろうね。
          C11/17は現代のノイマン型コンピュータを抽象マシンとしてモデル化した高級マクロアセンブラっぽいし。
          ただ、GNU Cだからなぁ。

      • by Anonymous Coward

        C/C++をアセンブラと形容できる奴の思い描くC/C++ってC89とかC++03だろ。

      • by Anonymous Coward

        アセンブリ(CPUの命令)は知らなくて良いけど、
        CPU周りというかCPUがどうやって動いているかは知らないとダメだね。
        C言語の規格に関数の自動変数をどこまで取れるかは書いてないから、
        その辺知らないと平気で数千バイトとか取っちゃうんだよね。

        • by Anonymous Coward

          数千バイトは大して問題ない

    • by Anonymous Coward

      RustはApacheライセンス2.0 [rust-lang.org]なので政治的な理由により外されました。
      # そこ、Pythonも非コピーレフトライセンス [python.org]だろとか言わない

    • by Anonymous Coward

      そのうち、Rustの知見がC++に取り込まれるだろう。
      なんでも書けてこそC++だ。Rustのように書けるようにもなるべきだ。

  • by Anonymous Coward on 2022年09月08日 16時19分 (#4321608)

    RMSがJavaを推奨するとか、政治的に有り得ないと思ってたのに…

    ここに返信
typodupeerror

最初のバージョンは常に打ち捨てられる。

読み込み中...