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, おもしろおかしい)
冒頭だけ読みましたが、これは初心者殺しのマニュアルですね。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文化を知ってる人は読む必要がない。 誰をターゲットにしたマニュアルかがよくわからない出来栄えでした。
Re: (スコア:0)
GNU Cのマニュアルは既にあるから、それも一緒に読む前提なんじゃねーの?
あれもあれで冒頭から間違ってて、Cの言語規格読んだことない奴が書いたんじゃないかと疑う代物だけど。
Re: (スコア:0)
> プログラミング初心者に対しては C 言語から始めるのではなく~
と記事中にも書かれてるんだから、初心者をターゲットにしてないのは明白なんだけど
Re: (スコア:0)
これは初心者殺しのマニュアルですね。RMSは多数の罠を仕込んでいます。
Recall Manual Softlyの略だったんだよ
# そっとマニュアルを突き返そう
Re: (スコア:0)
男は、黙ってmanだろ。
そんなこと言っているから、『RTFM』とか言われそう。 ワタクシ?ワタクシは、まずgoogle様に聞きますが。
#元コメを見てる範囲では、RMS 健在なり!\(^○^)/
Re: (スコア:0)
初心者にはチュートリアル、経験者にはリファレンス。そーゆーこと。
チュートリアルといえばTurboPascal3.0のは感動的だったなあ。今でもどっかに転がってそう。
老害ですが何か?
Re: (スコア:0)
> 知らない人は読んでも理解できない。
> 知ってる人は読む必要がない。
ダメなマニュアルあるあるすぎる
Re: (スコア:0)
技術書とかも、わかってから読むとわかるってのよくあるよね (´・ω・`)
Re: (スコア:0)
ハード(デバイス)のマニュアルはみんなそう。
「初見の人に分かり易く」書くつもりなんか絶対に無いんだろうな、っていつも思う。
Re: (スコア:0)
探究のパラドック。Smalltalkの頃から指摘されてる。ダメかどうかは関係ない。
Re: (スコア:0)
いきなり再帰関数です。フィボナッチ数。スタック使って再帰を実行するぜ。メモリブロックの一部がスタックって呼ばれる領域なんだけど、C言語はそこを使って再帰を実現するんだぜ。スタック食い潰したらクラッシュする。どうだC言語は怖いだろっていう怒涛の文章になってます。これがイントロです。RMS頭オカシイ。
intで計算できる程度のフィボナッチ数を再帰で求めたとしてスタックオーバーフローになるわけないアホか
Re: (スコア:0)
まともなコードとコンパイラならスタック消費しないからオーバーフローになるわけないアホか
Re: (スコア:0)
まともなコードとコンパイラならスタック消費しないからオーバーフローになるわけないアホか
まともなコンパイラなら再帰呼出しで組まれたフィボナッチ数の計算もループに展開してくれる、とか思ってるアホかな?
おっ、おぅ... (スコア:2, おもしろおかしい)
おすすめの先頭がLispなところが括弧いい!
Re: (スコア:0)
Lisp というのはたぶん Common Lisp のことなんだろうけど、本人の立場的に Emacs Lisp のことを言ってそうでちょっと怖い……
Re: (スコア:0)
(defun factorial (n)
(cond ((zerop n) 1)
(t (* n factorial (sub1 n))))
(defun sub1 (x) (- x 1))
カッコあってる? なつかすぃー ちな muLisp な 90のマニュアルは新宿のSEGとかだっけ(忘れた)国内代理店から買ったから
ライセンス番号が手書きしてあるよ 今でも持ってる M380 で uti-lisp も無限ループさせて(しまって)けっこうな大金を大学の電算センターに上納した(させられた)
Re: (スコア:0)
canlispぐらいしか触ったことのないけど、これを初心者に触らすと大惨事だろうな。
Java (スコア:0)
ポインターを見せず、GCも勝手にやってくれる
メリットは大きい、しかしそれでも…と、ソースレビューしながら思うことが時折
まあ、そういう人がCで書いたらそもそも完成しないんだけど
Re: (スコア:0)
まあ、個人がサンプルで作る範囲くらいなら Java で GC が問題になるような領域をそうそうは踏まない
(踏むころはCとしてもどっぷりいろいろやる)
というのは、妥当なレベル設定な気はします。
絶対じゃないけど、チュートリアルを書くにあたっての前提としては、まあアリな想定かなと。
Re: (スコア:0)
言いたいことをちゃんと書いてないので、誤解を招いた気がします
業務で他の人のコードを見ていて、「裾野が広がるのも善し悪しだなあ」と思うことがあります
イメージできる人とできない人の差、頑張る人と頑張らない人の差、成長する人としない人の差、等が大きくなったというか
「Javaしか知らない」みたいな人に、後者が多い気がしてます(単に自分や周囲の肌感覚)
でも言語のメリットも人が多いことのメリットも享受してるしね…という、オッサンのモヤモヤでした
元記事と関係ない話で失礼
Re: (スコア:0)
そういう人って言語以前の問題じゃない。
何十行にもわたるコピペ(微妙に変数名だけ変わっていく)を見たときにはほんとクラクラしました。
これでエキスパート名乗って派遣されてくるのかと。
Re: (スコア:0)
Javaって明示的にポインタを見せていないのが簡単だと宣伝されるが、
実際は全部ポインタ、というとこに気づくまで使えない罠
Re:Java (スコア:1)
Re: (スコア:0)
そうなんだよね。参照型変数を説明する時は、結局はどうしてもポインタっぽい話をしないといけない。変数への代入操作が実際にはどういうことなのか、分かっていない人も結構いる。
php, VB, C#, etc. (スコア:0)
2つのリスト(Array/List)に対して、1つめのリストに対してforの二重ループで2つめのリストを毎回全チェックする(continueとかbreakすらしない)とか、そういう人はたくさん見てきました…
(SQLで例えるならループの中で毎回SELECT * FROM hoge;する感じ)
※GCとか以前の問題
初心者が本気でやりたいなら (スコア:0)
もうC/C++は捨ててRustから始めたほうがいい
C++の違法増築っぷりは言うに及ばずCで大規模プログラミングは苦行すぎる。
Re: (スコア:0)
RustもJavascriptもなんか気持ち悪い。
C++とかで拡張された部分を最初から取り入れ整理して実装しているのはわかるのだけど、初心者はその辺理解して使えるのだろうか。
C++の場合は、Cベースの基本的な部分とか第一次拡張、第二次拡張というった使わなくてもいいけど理解して使うと便利だよってことで
あえてその機能は使わないという選択で理解しやすいコードにすることも可能だけど。
Re:初心者が本気でやりたいなら (スコア:1)
Rustは速度を極力犠牲にせず安全に使えるようにしようとする方針というか執念はすごいと思うけど、「なんでこんなへんてこなルールになってんだ」みたいなのに出くわすと結局C/C++で何が問題だったのかをさかのぼって把握する必要があったりして、初心者にはおすすめできないな。
Re: (スコア:0)
Rustでざっくり書いて、コンパイルエラーの所有権とか寿命がらみをちょこちょこ直す。一部直すと連鎖して他も直す。
プログラムを書いてるのか書かされてるのかだんだんわからなくなる。
イテレータ使うよりforで書いた方が制約が少ないし、なんだか楽しくない。
Re: (スコア:0)
Cは超高級アセンブラのつもりで。
C++は超高級マクロアセンブラのつもりで。
そもそもCPU周りアセンブリわからん人間はC/C++使うべきでないと思う。
詰むから。
ま、現代PCの世界だとデバイスドライバとかBIOSレベルを書く人じゃないと
C/C++は積極的に使わないほうがいいね
でも組み込みだとそもそもC/C++しか処理系がないのです
ニッチなところでmicroPythonとかBASICとかあるけど
いつでも使えるわけじゃない
それだってCPUハード周り理解して使うべきですけどね
Re:初心者が本気でやりたいなら (スコア:2)
---- 6809
Re: (スコア:0)
PL/Mをご存知だろうか。
PL/1のサブセットとしCP/Mの開発者でもあるゲイリー・キルドールが作ったシンプルな言語。
CよりもPascalよりもシンプルでコンパイラが出力するコードが想像しやすい。
まさに高級マクロアセンブラと言って良いと思う。
Re: (スコア:0)
Cは規格表を読むだけで理解できます。
アセンブリを理解しないと……という人は帰納的理解が得意なんだと思いますが、
すくなくともデバッグには向いてない気がする。
Re:初心者が本気でやりたいなら (スコア:1)
Re: (スコア:0)
そこは穴だと理解できますよね?
そこは使わない。それで問題が解決しないなら、Cをこえるということです。
# C99やC++では穴が減る方向にあるので、C89で理解が止まっている人はちょっと驚くかも。
Cの範囲をこえるなら、使おうとしているコンパイラなどの知識がいるでしょう。
そちらで明文化されていないならどうしようもない。道具をうまく使うしかないなら、
そこで初めてアセンブリの知識がでてくるかもしれません。
(明文化されていない時点で再現性はどうなのよと心配になってしまいますが)
自分の設計の根拠はなんなのか、いつでも説明できる必要があると考えると、
Cの理解にはアセンブリが必要などという発言は出てきません。
Re: (スコア:0)
えー、GCCって最適化でよくバグるから-sの結果が読めないとデバッグできないんだけど。
Re: (スコア:0)
それな。
キリキリチューニングとか最適化の癖知らないとできないし。
asmマクロで小技仕込むこともあるし
section分けて自分でROMRAMオーバレイするだの
マルチコアで共通メモリ通信するだのやってると
やはりあれはマクロアセンブラの階層だと思って使うのが
間違いがないですよ
Re: (スコア:0)
本当にバグなんでしょうか。あなたのことが心配です。
Re: (スコア:0)
たぶんGCCのせいじゃない
Re: (スコア:0)
>Cは規格表を読むだけで理解できます。
標準Cならそうだろうね。
C11/17は現代のノイマン型コンピュータを抽象マシンとしてモデル化した高級マクロアセンブラっぽいし。
ただ、GNU Cだからなぁ。
Re: (スコア:0)
C/C++をアセンブラと形容できる奴の思い描くC/C++ってC89とかC++03だろ。
Re: (スコア:0)
アセンブリ(CPUの命令)は知らなくて良いけど、
CPU周りというかCPUがどうやって動いているかは知らないとダメだね。
C言語の規格に関数の自動変数をどこまで取れるかは書いてないから、
その辺知らないと平気で数千バイトとか取っちゃうんだよね。
Re: (スコア:0)
数千バイトは大して問題ない
Re: (スコア:0)
RustはApacheライセンス2.0 [rust-lang.org]なので政治的な理由により外されました。
# そこ、Pythonも非コピーレフトライセンス [python.org]だろとか言わない
違いますMITライセンスとのデュアルです (スコア:0)
そのリンクの一行目にも書いてあります
Re: (スコア:0)
そのうち、Rustの知見がC++に取り込まれるだろう。
なんでも書けてこそC++だ。Rustのように書けるようにもなるべきだ。
もしかして…丸くなった? (スコア:0)
RMSがJavaを推奨するとか、政治的に有り得ないと思ってたのに…
Re: (スコア:0)
OpenJDK のライセンスは GPL ですからね。
丸くなったんじゃなくて、Javaの方が rms の許容する範疇に移動してきたって方かと。
もうOpenJDKの経緯を説明する時代になったのね (スコア:0)
linuxユーザーがGPLにしてくれ言うてOpenJDKができたんですよ
Re: (スコア:0)
RMSって太ったの?
# きっと違う