アカウント名:
パスワード:
もうC/C++は捨ててRustから始めたほうがいいC++の違法増築っぷりは言うに及ばずCで大規模プログラミングは苦行すぎる。
RustもJavascriptもなんか気持ち悪い。C++とかで拡張された部分を最初から取り入れ整理して実装しているのはわかるのだけど、初心者はその辺理解して使えるのだろうか。C++の場合は、Cベースの基本的な部分とか第一次拡張、第二次拡張というった使わなくてもいいけど理解して使うと便利だよってことであえてその機能は使わないという選択で理解しやすいコードにすることも可能だけど。
Rustは速度を極力犠牲にせず安全に使えるようにしようとする方針というか執念はすごいと思うけど、「なんでこんなへんてこなルールになってんだ」みたいなのに出くわすと結局C/C++で何が問題だったのかをさかのぼって把握する必要があったりして、初心者にはおすすめできないな。
Rustでざっくり書いて、コンパイルエラーの所有権とか寿命がらみをちょこちょこ直す。一部直すと連鎖して他も直す。プログラムを書いてるのか書かされてるのかだんだんわからなくなる。イテレータ使うよりforで書いた方が制約が少ないし、なんだか楽しくない。
> Javascriptなんか気持ち悪い。
Cは超高級アセンブラのつもりで。C++は超高級マクロアセンブラのつもりで。そもそもCPU周りアセンブリわからん人間はC/C++使うべきでないと思う。詰むから。ま、現代PCの世界だとデバイスドライバとかBIOSレベルを書く人じゃないとC/C++は積極的に使わないほうがいいねでも組み込みだとそもそもC/C++しか処理系がないのですニッチなところでmicroPythonとかBASICとかあるけどいつでも使えるわけじゃないそれだってCPUハード周り理解して使うべきですけどね
PL/Mをご存知だろうか。PL/1のサブセットとしCP/Mの開発者でもあるゲイリー・キルドールが作ったシンプルな言語。CよりもPascalよりもシンプルでコンパイラが出力するコードが想像しやすい。まさに高級マクロアセンブラと言って良いと思う。
Cは規格表を読むだけで理解できます。
アセンブリを理解しないと……という人は帰納的理解が得意なんだと思いますが、すくなくともデバッグには向いてない気がする。
そこは穴だと理解できますよね?そこは使わない。それで問題が解決しないなら、Cをこえるということです。# C99やC++では穴が減る方向にあるので、C89で理解が止まっている人はちょっと驚くかも。
Cの範囲をこえるなら、使おうとしているコンパイラなどの知識がいるでしょう。そちらで明文化されていないならどうしようもない。道具をうまく使うしかないなら、そこで初めてアセンブリの知識がでてくるかもしれません。(明文化されていない時点で再現性はどうなのよと心配になってしまいますが)
自分の設計の根拠はなんなのか、いつでも説明できる必要があると考えると、Cの理解にはアセンブリが必要などという発言は出てきません。
C99で止まったのは完成したからなのか諦めたからなのか。
えー、GCCって最適化でよくバグるから-sの結果が読めないとデバッグできないんだけど。
それな。キリキリチューニングとか最適化の癖知らないとできないし。asmマクロで小技仕込むこともあるしsection分けて自分でROMRAMオーバレイするだのマルチコアで共通メモリ通信するだのやってるとやはりあれはマクロアセンブラの階層だと思って使うのが間違いがないですよ
本当にバグなんでしょうか。あなたのことが心配です。
パッチ送ったことも何度もあるよー。x86以外のCPUだとテスト甘いんだよね。
たぶんGCCのせいじゃない
cとGNU Cは別言語というストーリーでCの規格がわかってもGNU Cワランと言われても…
最適化すると落ちるけど、最適化しないと普通に動くからそのまま最適化しないで開発しちゃう事ある。 「ちゃんと最適化しないとなー」と思っていながらリリースした事がある。
>Cは規格表を読むだけで理解できます。 標準Cならそうだろうね。 C11/17は現代のノイマン型コンピュータを抽象マシンとしてモデル化した高級マクロアセンブラっぽいし。 ただ、GNU Cだからなぁ。
未だに関数ポインタをvoidポインタにキャストすると未定義動作なのに?
関数ポインタがどこ由来かわからないならUBだろ
C/C++をアセンブラと形容できる奴の思い描くC/C++ってC89とかC++03だろ。
任意の機械語が生成できるツールではないC/C++コンパイラをアセンブラ呼ばわりする奴はそもそものところアセンブラを知らない
K&Rですよ。それしかなかったからね。while (*dst++ = *src++); /*dangerous!*/とか、脳裏にレジスタです。# 予約語registerが好きだった。関数内でいくつ使えるか試したものだ
今どきのコンパイラならSSA変換してループアンローリングしてと、変数一つにレジスタ一つ割り当てなのかも分からない
アセンブリ(CPUの命令)は知らなくて良いけど、CPU周りというかCPUがどうやって動いているかは知らないとダメだね。C言語の規格に関数の自動変数をどこまで取れるかは書いてないから、その辺知らないと平気で数千バイトとか取っちゃうんだよね。
数千バイトは大して問題ない
ほんといい時代になったものだ
変数領域はあまり関係ないのでは? どちらかというとポインターを理解する事は、結局はCPUのアドレッシングを知る事でもあるので 結果的に知るって感じがする。 アセンブラからC言語を習得するのは結構楽だった。
RustはApacheライセンス2.0 [rust-lang.org]なので政治的な理由により外されました。# そこ、Pythonも非コピーレフトライセンス [python.org]だろとか言わない
そのリンクの一行目にも書いてあります
そのうち、Rustの知見がC++に取り込まれるだろう。なんでも書けてこそC++だ。Rustのように書けるようにもなるべきだ。
より多くのコメントがこの議論にあるかもしれませんが、JavaScriptが有効ではない環境を使用している場合、クラシックなコメントシステム(D1)に設定を変更する必要があります。
海軍に入るくらいなら海賊になった方がいい -- Steven Paul Jobs
初心者が本気でやりたいなら (スコア:0)
もうC/C++は捨ててRustから始めたほうがいい
C++の違法増築っぷりは言うに及ばずCで大規模プログラミングは苦行すぎる。
Re: (スコア:0)
RustもJavascriptもなんか気持ち悪い。
C++とかで拡張された部分を最初から取り入れ整理して実装しているのはわかるのだけど、初心者はその辺理解して使えるのだろうか。
C++の場合は、Cベースの基本的な部分とか第一次拡張、第二次拡張というった使わなくてもいいけど理解して使うと便利だよってことで
あえてその機能は使わないという選択で理解しやすいコードにすることも可能だけど。
Re:初心者が本気でやりたいなら (スコア:1)
Rustは速度を極力犠牲にせず安全に使えるようにしようとする方針というか執念はすごいと思うけど、「なんでこんなへんてこなルールになってんだ」みたいなのに出くわすと結局C/C++で何が問題だったのかをさかのぼって把握する必要があったりして、初心者にはおすすめできないな。
Re: (スコア:0)
Rustでざっくり書いて、コンパイルエラーの所有権とか寿命がらみをちょこちょこ直す。一部直すと連鎖して他も直す。
プログラムを書いてるのか書かされてるのかだんだんわからなくなる。
イテレータ使うよりforで書いた方が制約が少ないし、なんだか楽しくない。
Re: (スコア:0)
> Javascript
なんか気持ち悪い。
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)
C99で止まったのは完成したからなのか諦めたからなのか。
Re: (スコア:0)
えー、GCCって最適化でよくバグるから-sの結果が読めないとデバッグできないんだけど。
Re: (スコア:0)
それな。
キリキリチューニングとか最適化の癖知らないとできないし。
asmマクロで小技仕込むこともあるし
section分けて自分でROMRAMオーバレイするだの
マルチコアで共通メモリ通信するだのやってると
やはりあれはマクロアセンブラの階層だと思って使うのが
間違いがないですよ
Re: (スコア:0)
本当にバグなんでしょうか。あなたのことが心配です。
Re: (スコア:0)
パッチ送ったことも何度もあるよー。x86以外のCPUだとテスト甘いんだよね。
Re: (スコア:0)
たぶんGCCのせいじゃない
Re: (スコア:0)
cとGNU Cは別言語というストーリーでCの規格がわかってもGNU Cワランと言われても…
Re: (スコア:0)
最適化すると落ちるけど、最適化しないと普通に動くからそのまま最適化しないで開発しちゃう事ある。 「ちゃんと最適化しないとなー」と思っていながらリリースした事がある。
Re: (スコア:0)
>Cは規格表を読むだけで理解できます。
標準Cならそうだろうね。
C11/17は現代のノイマン型コンピュータを抽象マシンとしてモデル化した高級マクロアセンブラっぽいし。
ただ、GNU Cだからなぁ。
Re: (スコア:0)
未だに関数ポインタをvoidポインタにキャストすると未定義動作なのに?
Re: (スコア:0)
関数ポインタがどこ由来かわからないならUBだろ
Re: (スコア:0)
C/C++をアセンブラと形容できる奴の思い描くC/C++ってC89とかC++03だろ。
Re: (スコア:0)
任意の機械語が生成できるツールではないC/C++コンパイラをアセンブラ呼ばわりする奴はそもそものところアセンブラを知らない
Re: (スコア:0)
K&Rですよ。それしかなかったからね。
while (*dst++ = *src++); /*dangerous!*/
とか、脳裏にレジスタです。
# 予約語registerが好きだった。関数内でいくつ使えるか試したものだ
Re: (スコア:0)
今どきのコンパイラならSSA変換してループアンローリングしてと、変数一つにレジスタ一つ割り当てなのかも分からない
Re: (スコア:0)
アセンブリ(CPUの命令)は知らなくて良いけど、
CPU周りというかCPUがどうやって動いているかは知らないとダメだね。
C言語の規格に関数の自動変数をどこまで取れるかは書いてないから、
その辺知らないと平気で数千バイトとか取っちゃうんだよね。
Re: (スコア:0)
数千バイトは大して問題ない
Re: (スコア:0)
ほんといい時代になったものだ
Re: (スコア:0)
変数領域はあまり関係ないのでは?
どちらかというとポインターを理解する事は、結局はCPUのアドレッシングを知る事でもあるので
結果的に知るって感じがする。
アセンブラからC言語を習得するのは結構楽だった。
Re: (スコア:0)
RustはApacheライセンス2.0 [rust-lang.org]なので政治的な理由により外されました。
# そこ、Pythonも非コピーレフトライセンス [python.org]だろとか言わない
違いますMITライセンスとのデュアルです (スコア:0)
そのリンクの一行目にも書いてあります
Re: (スコア:0)
そのうち、Rustの知見がC++に取り込まれるだろう。
なんでも書けてこそC++だ。Rustのように書けるようにもなるべきだ。