C言語相談室(上級者専用)
■ このスレッドは過去ログ倉庫に格納されています
修正部分について 老害が来てもウザイので「10,000行程度のソースを扱えない人は」と現在状態に変更した。 上級者には一朝一夕ではなれない。 初心者は文法事項にばかりに目が行きがちだが、 今日覚えれば明日から使える文法事項で練度を測るのはナンセンスだ。 チムポから膿が出てるんだけどやっぱ病院行ったほうがいいかな? 1週間くらい前に天神でナンパした女から貰ったらしい・・ エンディアンとアラインメントとメモリバリアについて完全に理解していることが最低条件です 言語の上級者じゃなくて ハード知ってるかどうかだけじゃね >>7 年齢制限自体はないが、実質的には30前後になるだろう。 プログラミングにおいても「10,000時間の法則」は当てはまる。 勿論こなせばいいというものではないが、ある程度こなすことも絶対的に必要だ。 この点において、学生が「上級者」の域に達していることはほぼあり得ない。 一般的には、10,000時間=1日8時間*週休2日で50週*5年だから、 実働率の低さ、あるいはその分の残業等も含めて、職業マなら5-10年でここに至る。 これは主要なプロジェクトの公開時の年齢を見ても分かる。 BASIC: Bill Gates (20) Linux: Linus Torvalds (21) Turbo Pascal: Anders Hejlsberg (23) PHP: Rasmus Lerdorf (27) Java: James Gosling (30) GNU Emacs: Richard Stallman (32) Ruby: Matz (32) C++: 禿 (33) JavaScript: Brendan Eich (34) Python:: Guido van Rossum (35) Pascal: Niklaus Wirth (36) ゲイツ、リーナス、ヘルスバーグは天才と称される人々で、確かに早い。 ただこれらは「実装」しただけであり、新しい「仕様」を考えたわけではない。 それ以外は軒並み30前後からだ。 これはつまり、いい仕様を考えられる人(≒上級者)が2周目に開発した結果だということ。 1周目は何かのプロジェクトに混ぜ込まれてそこで10,000時間こなしているか、 或いは1周目から新規プロジェクトを立ち上げたがゴミで終わった、ということ。 (1周目の未熟者が立ち上げたプロジェクトは物にならなかった、ということ) なお、ラスマスはいろいろと語録が有名だが、こう並べると実は凄い。 会社に入って惰性でやっている奴も多いが、 もし職業マになっても学生の頃の情熱を持ち続けて日々努力を重ねるなら、 多分30前後で「ああ、大体分かっちゃったな」と思えるときが来る。 そのときには、10,000行は普通に扱えるようになっている。 逆に、10,000時間をこなしていない状態で、10,000行を扱えないのは当たり前。 それは絶対的に練習が足りないだけ。そして学生はこれに該当する。 練習すればいいわけではないが、練習もしないと上手くはならない。 お前らが今一生懸命書いているコードも、数年後に見直せば全くのゴミだと分かるだろう。 そして問題なのは、その2周目に何をするかで、 まあ大体会社にガッツリ組み込まれ、公私とも忙しくてそれどころではないが、 そのときにOSS方向にも立ち上げればMatz位の立ち位置は狙えるということ。 日本の問題は「プログラマ35歳定年説」の通り、 せっかく10,000時間こなした熟練者がマネージャになり、全くコードを書かなくなってしまうこと。 結果、未熟者だらけでコーディングしており、当然生産性は低く、給料も低くなる。 だから給料を上げる為にはマネージャに昇格するしかない、という悪循環となっている。 一方、海外では、プログラマの人件費は高く保たれており、(日本の2倍) 結果、熟練者もコーディングし続けることが可能で、生産性も高く保たれ、給料も高く保たれている。 これじゃ海外に勝てないのは当たり前だ。 詰まるところ、日本ではヘボが、海外ではエキスパートがコード書いてるんだから。 ただこんな愚痴言っても始まらないのだが、とにかく俺がお願いしたいことは、 お前ら初心者がここを読むのは勝手だが、投稿はして欲しくない、ということ。質問も含めて。 君らだって、大学の研究室に幼稚園児が乱入してこられても困るだろ。 上級者/熟練者も、上級者/熟練者のみで効率よく話せる場を必要としていて、 初心者が乱入してこられると困るんだよ。 ただ逆に、俺は初心者が初心者なりの考えでワイワイやることも必要だと思うから、 君らが従来スレでやり合う分には文句を言わない。(このスレが続いている限り) 俺は自ら進んで隔離されるのだから、お互い棲み分けって事でよろしく頼む。 今現在、また今後とも、Cが使われるのは極めてプロフェッショナルな領域のみだ。 つまるところ、「Cみたいな開発効率の悪い言語を使う理由は、Cじゃないと駄目だから」でしかない。 C以外の言語も充実している今、 「プログラミング初心者」が「独学」でCを始めるのは俺は全く勧めない。他言語にしとけ。 学校等でCを選択しているのなら、それは教師側の都合だから、(知らない言語を教えられないだけ) 逆に言えば、その先生に聞けばいい話であって、俺らに質問してくること自体が間違い。 つまり、 ・直接聞ける相手がいるならそっちで聞け、それの方が絶対早い ・プログラミング一般について質問があるようなら、まず他言語で一通り学んでからCに挑め ・C特有事例で質問があるのなら、従来通り質問スレを使え でしかない。敢えて匿名掲示板上の上級者に回答を求める場合は、例えば ・自分としては一通り出来るつもりである ・ところが上司の方針に全く納得できない。これ本当にそうなのか?ただの老害か? という場合であって、具体的には > 職場の人がみんなそうで、毎日変数一つにまとめろとかクラス一つにまとめろとかいろんな人から怒られたりして気が狂いそう > javaから入ってオブジェクト指向学んだんだけど、javaと同じようにオブジェクト指向で作っちゃいけないの? > 戻り値列挙型で定義したら戻り値二択にしてboolで返せって、戻り値によってswitch文で処理書いてたんだけどそれも全部捨てろって > 俺そんなにおかしいもの書いたのかな? > 共通化したりするとわかりづらい読みづらいって言われる > https://mevius.5ch.net/test/read.cgi/tech/1467992113/10- これとかだね。彼は非常に上手く2chを使った。さすがにこれを職場でやるわけには行かんし。 上級者は自己解決できるから、このスレは洋ナシなんじゃね? >>12 その指摘は当たっている。 上級者がわざわざ質問する事はほぼ無い。当然流れない。 でも俺はそれでもいいと思っているんだよ。 上級者が集える場所がある事が重要。 何であれ、人数は初心者>>>中級者>>>上級者だから、 Web上のあらゆる場所は初心者で埋め尽くされてる。 例のコピペ「コミュニティの一生」で言えば、上級者は常に迫害される側だ。 だからこそ俺は上級者用の場所を確保しておきたい。 歴史的経緯から、上級者が人数的に一番多いのはCだと思うし、まずはお試しだ。 回答者の人数も揃っているし、俺はちょっと俯瞰しようと思っている。 C言語スレ、元々は見るからに年齢層が高かったのだが、 ここに来てド初心者が押し寄せてるのは何なんだ?春休みが理由とも思えないし。 あとやっぱり、話題になっているのは例外だけど、 あれって結局の所、今現在他言語でもいい解を見つけられてないよな? Goは一周回ってCっぽくなってるし、 C++の「例外安全も型に含める」ってのもC++っぽいやり方だが、 相変わらず「そこまでやるか?」だし。 上級者のおこぼれに預かろうというやましさを感じています プログラミングは実装の手段に過ぎない。それは問題解決、「ソリューション」でなければならない。 プログラミングが複雑になるほど、全体を俯瞰する視点や、問題解決するための理論や設計が重要になる。 あなたは、C言語で何の問題を解決するのか。 というわけで、、、みんなで、C言語で実現できることを考えてみよう。。。 マイクロソフト関係者がChecked Cなるものを作っている。セキュリティが向上するらしい。#includeの代わりにコードをモジュールで管理するようだ。 >>16 ちなみに俺はそれは逆だと思っている。 他言語で出来ることは他言語で、CでしかできないことをCで、だ。 スクリプト言語は本当に色々楽なんだよ。だから俺はJavaScriptが気に入っている。 例えば、以前出ていたオセロの盤面とかも、 多分20-30行で割り込みハンドラ含めて用意できる。 勿論ブラウザに乗っているからだが、Cではこの量では無理だ。 https://mevius.5ch.net/test/read.cgi/tech/1519046038/211 だからアプリ全体やGUI(=速度が要らない)をCで組むのはただの馬鹿で、 速度的に問題がある部分だけCのDLLを呼ぶ方向にソフトウェア全体がなっていくのではないかと思っている。 cythonやNumPyとかがまさにそうだが。 >>17 型チェックかと思いきや、境界チェックか!これは行けるかも? 現状Cの最悪なところはそこだからね。 文章を単語に分け、文字に分け、それをラティス(lattice)、網目構造にする。それのn-gramと意味構造と発音記号とアクセントと音声データを結び付け、 深層学習を真似て関係性をマッピングする。それで、word2vecみたいなことができないだろうか。 word2vecよりも優れた成果を求めている。ここに機械学習の理論家は居ないだろうか。 >>16 それは発想が逆なのでは?何かを解決する道具の内の一つとしてプログラミング言語が作られているわけだから。 >>24 見た。 すげー香ばしい…。 真正の「自称」研究家だわ。 >>27 最近のWin10のは、コマンドプロンプトじゃなくてPowerShellになるらしい。 >>28 知らん。 というかお前らも無意味だと思いつつ続けてるんだろ? 元気なのはいいことだとは思うが。 上級者が初心者/中級者と比べて圧倒的に少ないのは自明だし、過疎るのは仕様。 てか、どの程度からを上級者と言っていいのか決まっているわけでもないし、 そもそもそういう人がこのスレを見に来るとは限らず、また見ても何かを書きたいと 思うとは限らない。 Cのnull安全がRustだと聞いたがRustはそもそもC++の後継であってCは念頭に置いてないと思うんだが 詭弁かな。 そりゃ認識を間違ってるだろ。 https://techacademy.jp/magazine/8735 https://www.tiobe.com/tiobe-index/ C++erはCの後継はC++だと思っているし、俺もそうだと勘違いしていたが、 実際はCとC++は別枠で扱われていることが多いし、その方が妥当だ。 今のスマポ(キリッなC++とCは別物だ。 文法的な点については、全言語の半分くらいはC後継だし。 C->ObjectiveC->swiftこそが正統Cの系統だ!と彼らが考えていても不思議ではないし。 Rustを触ったことはないが、通常議論されているのは、 ・RustはCを代替できるか? であり、「C++を代替できるか?」なんて言っている奴はいない。理由は、 ・C++は現在も旺盛に進化中であり、後継を必要としてない(C++XXの後継はC++YY) ・C++ではCを代替できないのは確定済み(Linux等) で、どうにかしたいのはあくまでCであり、C++ではないからだろ。 実装や機能を見る限りについてはRustはCよりC++に寄ってると思うよ Cにこの抽象度の機能をもたせると必然的にそうなるという説はあるけども 何が言いたいかと言うと後継という立場について、そうであったC++は少なくともCの領域を完全にはカバーしなかった訳で、そのカバーしなかった領域を(C++に寄っている)Rustがカバーしたかと言われるとNoだと思っているからRustはCよりC++の後継という方が妥当に思えるという話 申し訳ないが俺自身がRustを知らないのでつっこんだ議論は空回りしてしまうが。 > そうであったC++は少なくともCの領域を完全にはカバーしなかった訳で、 > Cの領域 これをどう捉えるからだよ。 少なくともC++の連中は「カバーしている」と思っている。 そしてLinusは「C++は全くのゴミだ」と思っている。 良くも悪しくも、Cはミニマムで美しく完成している。全く無駄がない。 そして各後継言語はこれに対して、「便利機能」を追加しようとしてきた。 C++は「クラス」「型検査」「例外」を導入した。 結果、CならCキャストやマクロですぱっと書けるところをグダグダとテンプレートを引き回したり、 或いは間接呼び出しでいちいち実行速度が遅くなったり、 はてまたスマポ(キリッでGCの再実装を盛大にやらかしている有様だ。 Linusの意見はごもっともだ。 Rustの謳い文句は、「実行速度」「ゼロコスト抽象化」等であり、 C++の失敗を見て学んでいることは明白だ。 だから、後継になろうとしている相手はCなんだよ。C++ではなくてね。 とはいえ、そちらの指摘の通り、実際の仕様がCよりもC++に近くなるのは必然だ。 普通にやれば、C++で成功したところはそれをもらって、 C++で失敗したところは新たな方法を提案して、となるだろうからね。 Rustはぱっと見、スマポがデフォで生ポは例外的使用か? C++は歴史的経緯から「言語的には」生ポがデフォでスマポが追加されている。 これは、「『アプリケーション用の』プログラミング言語」としては間違いだ。(Linusもそう言っている) 結果、C++erは「デストラクタ」「スマポ」「=のオーバーロード]をこねくり回して苦労しているが、 本来はこれらは言語側で完全に隠蔽すべき物だ。(ユーザが書く必要なんてない) そしてRustはそれをやり、結果的にnull安全なんだろ。 正しい方向への進化だよ。(分岐元がCかC++かは何とも言い難いが) C++はアプリケーションの動作と関係ないところで無駄に苦労するでしょ。俺はあれが嫌い。 >>44 その言い方、Rustを結構使っているように見えますが、違いますか? Cが「ミニマルだ」ということには——少なくともISO C99規格を見るに——あまり賛同できないんですが、 それはまぁ、置いておいて、私がRustを触った限り、あれはC++の代替に見えます。 C++が現在も(規格を拡張する方向に)積極的に開発されているのは分かっていますし、 「だからRustが取って代わる必要はないのだ」という理論的帰結も理解できますが、 ポインタの安全性ややはり名前空間の宣言あたりを見ると(あくまで触りですが)どうしてもC++の文法を彷彿とさせるの 構造が多いように思いますね。 あ、すいません。一行目で使ったことがないと断られていました。 いや、なぜ確認しなかったんだろう、失礼しました。 >>45 > あれはC++の代替に見えます。 それは正しい。 というか、「後継」と「代替」はこの場合明確に区別して使われるべきだ。 ・「○○の後継」---○○言語を発展させたもの。 上位互換であり、○○言語と共に使うことを考慮されている。 ・「○○の代替」---○○言語の代わりに使うもの。 基本的に○○言語と一緒に使うことはない。排他的使用となる。 Rustの謳い文句は、「効率的なCバインディング」であって、 「効率的な『C++』バインディング」ではないんだよ。 CのDLLは当然呼べるが、C++のDLLを呼べるように出来ているか? C++の「後継」と言うのなら、基本的にはC++の資産を全活用できる方向になってないといけない。 ただしそもそもC++は「後継」用のAPIを整備して無いと思うんだが。 C++の例外「実装」についてググッても、まともな文献が出てこないだろ。 おそらくあれは「実装」まで言及した仕様ではなく、「言語としての動作規定」しかされてないんだ。 (元々C++はそういうノリだし) だからtry-catchを含んだ関数をDLL化できて他言語から呼べるかはかなり疑問だ。 勿論、昔からの課題だから今は解決されているかもしれんが。 > Throwing C++ exceptions across DLL boundaries is only possible when all modules use the same C++ runtime, > in which case they share a heap as well. But this can be a maintenance burden, > especially when libraries from multiple vendors are involved, so it is discouraged. > https://stackoverflow.com/questions/5107948/throwing-c-exceptions-across-dll-boundaries だからCのDLLは他言語(Rust/Ruby/C++/C#)等から直接呼べるが、 C++のDLLを呼べます、と謳っている奴はいないだろ。 この点において、C++は後継言語の存在を許していない。 だからRustはCの「後継」であり、C++の「代替」というのが妥当な見方なんだよ。 実際、RustがあればC++を使う意味がないだろ。 Cは大規模コードに対するサポートが全くない。 とはいえ、「やれば出来るだろ by Linus」なのは事実だが、実際それでは辛いわけで、 コンパイラに任せられるところは任すという方向で上手く手抜きできるように進化させたのがC++だ。 Rustも同じ方向なのだから同様の物になるのは当たり前。 当然、どちらかを使用すれば事足り、RustとC++は排他関係になる。 つまり、RustはCの「後継」であり、C++の「代替」だ。おそらくここまでは大体の人が納得するはず。 問題はCの「代替」にもなり得るか?という点であり、だからそこが議論されているわけだ。 今現在もCを使うメリットは速度面しかない。したがって速度面のデメリットがなければ良く、 「ゼロコスト抽象化」等、速さにこだわっているのはそこなんだよ。 ただ俺個人としては、全体を一つの言語で書く必要なんて全くなくて、 NumPyのアプローチ、つまりどうでもいいところ(9割以上)はスクリプト言語で書き、 必要なところだけCのDLLを呼ぶ、というのが正しい気がするが。C#もこの方向だね。 この場合、リソース管理をGC言語側に任せられ、 また個別関数単位での切り出しになり、 DLL内関数はお互い独立(非依存)で行っても1,000行とかでしかなく、 Cでも全く問題にならないんだよ。 だからRustも微妙に中途半端な方向だとは思うが、 もし仮にCを代替できるのなら、それは素晴らしいと思うよ。 僕の知り合いの知り合いができたパソコン一台でお金持ちになれるやり方 役に立つかもしれません グーグルで検索するといいかも『ネットで稼ぐ方法 モニアレフヌノ』 8UTJJ ■ このスレッドは過去ログ倉庫に格納されています
read.cgi ver 07.5.4 2024/05/19 Walang Kapalit ★ | Donguri System Team 5ちゃんねる