「Cでプログラミングするには人生は短すぎる」か?
■ このスレッドは過去ログ倉庫に格納されています
Monoプロジェクトの公式発表ではないが、その主導者であるミゲル・デ・イカザ氏の言葉として、 「Cでプログラミングするには人生は短すぎる」という標語が掲げられている。 http://bit.ly/fJCXb0 CでGC機能のあるライブラリは作れないのか? → アセンブラで書いてリンクすればできる。 CでOOな設計は出来ないのか? → 構造体でいいだろ。 Cで名前の干渉のないようにできるか? → それなりの長い名前をつければ問題ない。 なぜCで超便利で現代的なライブラリを用意してくれない? → わからん。標準ライブラリにこだわる必要もないのにね。 Cでプログラミングするには人生は短すぎる。 → むしろ、なぜそういう境遇に追い込まれてるんだろう? > むしろ、なぜそういう境遇に追い込まれてるんだろう? 生命科学の発達が遅いから 全部Cでやろうとするから無駄な時間を浪費してしまう。 台部分は生産性のいいOOP言語で作り、時間がかかってしょうがないところだけCで書けばいい。 柔軟に考えれば解決策はいくらでもある。ミゲルさんは頭が固いだけ。 Monoが使い物になる前に俺の人生が終わりそうだ。 このスレッドは天才チンパンジー「アイちゃん」が 言語訓練のために立てたものです。 アイと研究員とのやり取りに利用するスレッドなので、 関係者以外は書きこまないで下さい。 京都大学霊長類研究所 C + アセンブリ言語で十分高い生産性を維持できる。 >>8 むしろGTK+をCで書くようなことをやってるからこその言葉なんじゃねえの phytonのGTKってただのラッパーじゃないの? >>14 いや、そういう意味じゃなくて >>11 の発言を受けて >>12 の返しなんだよね >>11 は GTK+ というライブラリそのものを C で書く話だから、 その返しとして >>12 だったら、もしかして >>12 は phyton の GTK は phyton で作られていると勘違いしているのかなと思って ゲシュタルト崩壊しそうなスレだな phytonってなんだ? 無駄なメモリを使わず、遅いCPUでも速く動いてくれる言語はエコだろう。 もし世の中のサーバで動くソフトが全部Cで書いてあったら何台のサーバが不要になるか。 人生が短すぎるというよりむしろ逆にプログラミング言語の寿命が短すぎると思う 開発者が消費する熱量 v.s. サーバーが消費する熱量 だれか糞真面目に分岐点を出せ >>25 リアルタイムで搭載CPUを調べて、レジスタ数やサポートしている拡張命令などに ガチガチに依存したネイティブコードを生成するJITコンパイラの方が未来はある。 .NETもVC++比で、その差4%程度まで来ているし抜くのも時間の問題。 C言語自体もclangで中間コード/JITコンパイルの方向に進んでいるし。 はじめからソースコードで配布できればよかったんやけど 当たらずとも遠からずってやつだろ。COMのインタフェースとか構造体で表現してるだろ、あれ。 >>3 の上3つを掲げ、4つ目のごとく標準ライブラリ(GTK)を作り続けた結果が、5つ目もとい>>1 プログラムと呼べるのはCぐらいなもんだろ。 JAVAやC#は女子供のお遊びみたいなもん。アセンブリは知らん。 心ではみんなそう思ってるだろ。大声では言えないだけで。 JavaやC#がおもちゃなら PythonやRubyはどうなるんだよ むしろオモチャこそが理想じゃね? Cはオモチャの範疇を超えちゃってるのがいけない >>28 clangは俺も期待してるが、まだCとObjective-Cくらいしか動かないからこれからだね。 多くの人はAjax環境とかPHP、Rubyなんかの遅いものばかり使ってるからね。 Ruby->clangだったら楽できそうなんだが。 CにはCのよさがあるからね その処理に向いた言語を使うだけ 適材適所 それこそシェルスクリプトで十分な超簡単なものをC言語で 書いてれば時間が無くなるのは当然。 この短い人生では、あんなめんどくさい言語やってる余裕はないっす。 strcpyとか今更勘弁してほしいっす。 仕事ではUNIX Cで開発している。 で、部分的には(擬似的な)OOPの考え方をCでの開発に導入している。 GNOMEのGObjectと同じ発想だけど、それほど洗練されていないし、 一貫したOO的な設計にはなっていない。 以前は、もしC++/JavaのようなOOPに置き換えられたなら、 幸せになれるのではないかと考えていた時期もあった。 ただ、Smalltalk/Rubyのような動的で純粋なOOP言語を知ってしまった今、 それらと比較するとC++/Javaは「いびつなOOP言語」にしか見えない。 CからC++/Javaへ移行することで多くの利点はあるかもしれないけれど、 その代償として新たな問題(STL/総称型/動的型)の問題を抱えるのがリスクになる。 趣味のプロジェクトであれば試しにC++でやってみるか?も可能だけど、 失敗した場合を考えると、それは許されない世界。 (理想は試作(C++)と本番(C)を別部隊に分離することだと思うが、自分にそんな権限は無い) だから、最終的な納品物はonly Cで、その開発支援ツール類は、部品がRubyでそれらを sh/awk/makeで統合する、というスタイルになっているのが現在の姿。 今は、makeをrakeへ全面移行すべきか?、あるいはこの先もrubyを選択し続けることが はたして正しいのか?(他の言語はどうよ?)、が検討課題だったりする。 だから初めから Haskell にしとけばよかったんだよ 衰退してしまったSmalltalk 衰退しつつあるRuby 言語が崩壊してしまっているC++ 中途半端な仕様になってしまったJava 驚くことに、人生をすればちょうど人生とぴったりの時間 なにもしないでいるには人生は長すぎるが、何かを成すためには人生は短過ぎる。 昔、テキスト処理するツールをCでひーひー言いながら書いたことが何度かある。 今はPerlでもPythonでもRubyでも軽々動くからな。本当にいい時代。 適材適所を知らんバカと、ITメディアや@ITあたりの記事に踊らされて 流行の言語()とか乗っちゃってるバカ。 SmalltalkはObjCの中で生き残ってんじゃないの ふつーにSmalltalkとして生き残っていんだけどな…。しょぼーん。 http://smalltalk.cincom.jp/ http://squeak.org/ これらはXEROX謹製Smalltalkの直系子孫だけど、他にも企業やファンの独自実装も多数。 商用でも使われているし、プロダクトはTwitterや米海軍関連に買われたり地味に頑張っている。 http://dabbledb.com/ http://www.teleplace.com/ 何故に、Smalltalkなんかで製品を実装したのか小一時間問い詰めたい Smalltalkって処理速度どうなの?Javaと比べてどんなメリットがあるんだ Javaですらも、NaClがまともに動き出したら、消えてしまいそうな気がするけど 30 年前ならいざ知らず、LL 全盛の現在では Smalltalk の開発効率の高さは 相対的に低下してしまったと思うな。それでいて、イメージベースの扱い辛さとか、 GUI と結びつきが強すぎるとか、最適化がし辛いとか、負の面は変わってないから ちょっと使い辛い。 Lisp みたいに Hacker 気質を持ったプログラマを惹き付ける様な事もないし。 >>53 超対話的環境だから、プロトタイプが作り易い。 >>53 > 何故に、Smalltalkなんかで製品を実装したのか小一時間 SeasideやCroquet(先のDabble DBやTeleplaceが使っている変態FW)を Smalltalk以外のまともな言語で組んでみたらどんなことになるのか 逆に、興味がわくな。 なんで変態FWなんか使うの? まともなFWはないの? まともなFWじゃできないことがあったからだろうJK いや、だからまともなFWじゃできないことってなんなのよ まともなFWでは物理的に不可能ってわけじゃなければ、 普通は変態FWの仕組みをまともFWに取り込むことを考えるでしょ GemStone Smalltalkはすばらしかった。 一度あれに慣れると他のDBMSがカスに見える。 Javaてsunがjreを配布しなくなったら即おわってしまうね。 Cはどこがつぶれようとコンピューターがあるかぎり永遠に続くよ。 >>62 は?JREって、色んなとこが出しているんじゃないの? ってか、せっかくデファクトになったのに、 無料配布しないと競合する.NETが広まるだろうし オラクルだって金を取りたくても取れないでしょ だからその色んなところがつぶれたら終わるでしょう。 >>62 思い込みで書き込む前に事実関係を多少とも調べようとしなかったの? そんなに人生は短すぎるの? おおもとのsunがjreやめたら、色んなとこもいずれ皆javaをやめるだろ? >>69 Apache Foundation が何をやっているかとか、IBM が何をやっているかとか、 GCC や LLVM がどうなっているかとか、Dalvik って何だろうとか、 Open JDK とは何なのかとか、Bluray プレーヤーに何が乗っているのかとか、 少しでも調べる気はないの? じぶんもそんなに知らないくせに偉そうに書きなさんな。 相手も知識が無いかもしれないから自分も知らないで良いと思い込む人間と、 知らない事があったら調べようと思う人間は、何が分かれ道だったんだろうなあ 反論出来ないからと言って斜に構える必要は無いんだぜ みんな分かってる事だから Javaが無くなったら食いっぱぐれる連中を からかってるだけだって。 そんなムキになんなよ。 >>66 , 69 そしたらMSがおいしくいただきます。 Javaほど現実に負けた言語も珍しい 理想が高すぎたのだろうな 実際は Java は現実を指向した言語で、現実に広く受け入れられている言語でもある。 勿論、現実と言うのはネットに住まう有象無象じゃなく産業界の話だがな。 現実志向でない言語ってWhitespaceとかか? てんでバラバラな仕様のため、互換性がまるで無い組み込み界で 相互の移植がしやすい言語を、と開発されたんだっけ? >>84 ライブラリがでかいだけでVM自体は小さくできる。 カードにも組み込まれたこともある。 VMって言っても元祖MS-BASICのパクリみたいなもんだからな。 MS-BASICでさえROMに格納されてたくらいだし、今となってサイズなんて知れてるわな。 http://ja.wikipedia.org/wiki/Microsoft_BASIC 組み込み系とかほざいてるバカがいるな Javaでの組み込みなんて全体の1割にも満たないだろ >>89 そもそもどこまでを組み込み系って言ってるのかわからんし、 ソースコードの量なのか組み込まれている実行コードベースの 話かも示さずに1割云々と語ってるやつのほうがバカに見える。 >>89 組込ライセンスと意味なら、Java使ったサーバーサイドのシステムが1つ売れる間に数千数万のケータイが売れてると思うよ >>88 MS-BASICよりもっと古いp-codeのパクリ。 p-codeになったのは、Visual Basicになってから。 というか、スタックマシンをパクリって言うやつまでいるのか。 >>92 なにを言ってるんだお前は? 無知にもほどがある >>93 何を言いたいのか分からない。 JavaのVMとMS BASICのインタプリタは似ていない。 >>93 >>94 MS BASICはエミュレータ+インタプリタだからな。 JavaのVMに似てはいるが、Javaそのものと言うよりはJRubyなんかに近い。 Java VMはMS BASICなんてパクってないだろ どう考えてもSmalltalk-80のVMのパクりw MS BASICのi8008エミュはVMはVMでもVMwareとかのノリだし、 単語は同じでも「仮想マシン」の意味が違うだろ。 Javaが目指したJavaチップを順序は逆だが実現していたという 意味では先進的だが。 >>96 俺もそう思うけど、世の中の若人は Smalltalk なんて知らないのかもね... もし若人でないのに知らないなら目も当てられないけど... >>97 MS BASICのi8008エミュっていったい何のことを言いたいのか? Javaはコレクションのクラス設計が、Smalltalkに似てた気がする。 >>100 Smalltalk-80のCollectionをJavaのヘッポコCollectionsやArraysと一緒にすんなやw ただの中間コード+インタプリタを'Java仮想マシン'と言い張ったJavaの営業戦略は大したもの >>102 はかわいそうな人ですね 技術センスゼロだから転職したほうがいいよ さようなら >>103 技術センスゼロの人にもわかるように違いを説明できるの? 今は、インタプリタではないJava VMが主流ではないか。 ネイティブで実行するCPUもあるし。 VMはインタプリタだろ。少なくともネイティブコンパイラではないし、ネイティブコードを実行するものでもない。 Java CPUはほとんど使われてないだろうし、一般的でもない。 >>106 Java VMをインタプリタで実装するならわかる。 JavaチップだのJITコンパイラだのは後付けのだからねぇ。 インタプリタ高速化技法のひとつとして考えた方がいいと思うぞ。 とくにJavaのJITは起動時ではなくインタプリタで実行中に裏でコンパイルするというものだし。 PHP3まではインタプリタ、PHP4からはPHP仮想マシン ok? BASICとの比較のコンテキストでインタプリタといったら、ソースコードと中間コードが同値という意味か、コンパイラの反対語か。 予め用意されたマシン語の命令セットを実行するのと、その場でソースをマシン語に翻訳して実行するのの違いじゃない? >>111 中間言語をネイティブに変換してから実行するのが仮想マシン インタプリタは、中間言語を使わず、ソースコードのまま 毎回命令を解釈してから実行するもの >>114 じゃあ、Java VM はどちらでもないの? 中間言語は使うが、実行中に必要な部分だけ (ロードされた部分だけ)ネイティブに変換する >>114 ハズレw 仮想機械は仕様 インタプリタは実装 >>114 その定義だと、やはりPHPはPHP仮想マシンだなw Pコードインタプリタって仕様をもらって、自分でコンパイルしたプログラムを手で実行したことがあったなぁ。 仮想機械の仕様さえ満たせば インタプリタ実装しようが コンパイラ実装しようが ハードウェア実装しようが 同じバイトコードが動く。 インタプリタ実装するにしても、 ベタなインタプリタでもいいし、 JITコンパイラ使ってもいいし、 複数の仮想機械で分散処理してもいい。 あくまで仮想機械の仕様さえ満たせば コードを動かせる。 それが仮想機械じゃねえの? N88BASICのDOS版ってたしかPコードとJITコンパイラだったはず。 今みたいにインストールなんて概念がなく、 EXEファイルにJITコンパイラを埋め込む仕様で ファイルサイズが絶望的なほどでかかった記憶がある。 >>123 今使えば信じられないほど小さくて速いだろうなw マシン語でプログラミングするには人生は長すぎる その前に精神が壊れる >>125 人間なんだから少しは工夫しよう。今ならマクロ使えばCに近い書き方ができるし、 使いやすいライブラリを多く用意してそれらを活用すればだいぶ見やすく書ける。 >>126 昔は実際そうだったな。 今なら、そんなことするぐらいならC使って、パフォーマンスいるところだけグリグリやるところだけ。 おぉ、迷える子羊よ。彼は犠牲になったのだ 多くの人たちがCでプログラミングしないために >>1 プログラミングをソフトウェアを生み出す為のプロセスとして捉えたらその通りだけど、 プログラミング自体が楽しいなら言語は何でも良いし、どれだけ時間が掛かっても良い。 なぜならプログラムを書く事自体が目的だから。 >>130 納期に追われ、デスマで死にそうな奴にそんなこと言ったら刺されるぞ。 間に合わせなければいいのに。 そうすれば自然と仕事を適切な規模のところに持っていってくれるし 死にそうな目には遭わずに済むのに。 間に合わせないと無能扱いされて会社を追い出される。追い出されても死にはしないが 金がなくなればやってけなくなる。 本当は俺プログラマになりたかったのに、そういう怖い話ばかり聞かされるから 結局ならんかったよ・・・ 一日中コーディング出来るってちょっと羨ましい コーディングって本当に楽しいか? コーディング前の、どうやって実現しようかとか、 コーディング後の、なんで動かないんだろ、 と考えてる時の方が圧倒的に楽しくないか? まぁ、そういうのも含めてコーディングって言ってるのかも知れんが 俺は設計よりコーディングの方が好き、 ステップ数が少なく機能的なコードを書くのが楽しい。 まぁ現状は理想論になりつつあるけど。。 俺はPerlの記号だらけのソースは大嫌いなので見たくもないんだが Perlは書きたくなることはあるが読みたくはないな なので矛盾はしていない 俺の中でコーディングというのは感覚的には清書作業に近いな Perlが好きな奴は三ヶ月後の自分への愛が足りない人 俺はコーディングしながら考えるタイプだから清書って感覚はないなあ むしろ俺言語でいいからコードっぽいものに起こさないと 思考が遮られてはかどらないや Haskell ではコーディングしながら考えてると死ぬ そんなものは使ってはいけない。自分の時間を無駄に捨ててるようなもんだ。 だから時間を無駄に使うのはやめろということ。使いやすく、開発効率のいい言語を使え。 言語とか開発環境の変化について行くだけの人生とかありえない 生産性(笑) >>149 1.よし!作ろう 2.作るために、「使いやすく、開発効率のいい言語」を探す 3.「そんなものはない」事に気が付く 4.1へ 1.よし!作ろう 2.作るために、「使いやすく、開発効率のいい言語」を探す 3.何とか使えるのを探して作り始める 4.出来上がったら、不満があるところを改良していく 5.最初の目的が達成されたら公開する だろ 不便で生産性が悪いから改良するんだろ。 日本人は器用だから使いにくい道具をなんとか使いこなしてしまうが、西洋人は先に使いやすい道具を作る。 道具がいいと生産性が高くなるし誰でも使えるから生産コストがうんと下がる。 器用なことが必ずしもいい結果にならない。 全てをJavaで置き換えられると錯覚しそして破滅する。 え?まさかその程度のこともできないなんてことはないよな? 置換が必要なアプリだと、簡易的でもGCか賢いコンテナがないと ヒープメモリがズタズタになってメモリリークしまくりとか。 >>163 クソコードだけど。 #include <stdio.h> #include <stdlib.h> #include <regex.h> #define BUFSIZE 1024 #define NUMBER_OF_BRANKETS 10 /* 0の方が高速 */ /* *dst : 置換後の文字列を書き込む領域確保済みのバッファ *src : 置換前の文字列 *st_string : 置き換える文字列 re : コンパイル済み正規表現 */ int replace(unsigned char *dst, const unsigned char *src, unsigned char *st_string, regex_t re); main() { regex_t re; /* 正規表現コンパイル結果を格納する構造体 */ unsigned char *re_string = "[0-9]+"; /* 正規表現 */ unsigned char *st_string = "[number]"; /* 置換後の文字列 */ unsigned char *dst, *src, *emsg; unsigned int ecode; /* エラーコード */ /* 正規表現をコンパイルする */ if(0 < (ecode = regcomp(&re, re_string, REG_EXTENDED))){ // コンパイル失敗時はエラーメッセージを出して終了 emsg = malloc(BUFSIZE); regerror(ecode, &re, emsg, BUFSIZE); fprintf(stderr, "%s\n", emsg); fprintf(stderr, "%s\n", emsg); free(emsg); exit(-1); } /* メモリーを取得 */ src = malloc(BUFSIZE); dst = malloc(BUFSIZE); while(!feof(stdin)){ /* 標準入力から1行入力 */ if(NULL==fgets(src, BUFSIZE, stdin)) continue; /* 置換を実行 */ replace(dst, src, st_string, re); /* 置換した文字列を標準出力へ出力 */ printf("%s", dst); } /* メモリーを開放 */ free(src); free(dst); /* 構造体を開放 */ regfree(&re); return 0; } int replace(unsigned char *dst, const unsigned char *src, unsigned char *st_string, regex_t re) { unsigned char *p, *q; unsigned int i; /* 入力文字列のための添字 */ regmatch_t *pmatch = NULL; /* 一致データの格納先 */ unsigned int ecode; /* エラーコード */ pmatch = calloc(NUMBER_OF_BRANKETS + 1, sizeof(regmatch_t)); /* パターン・マッチング */ if(REG_NOMATCH == (ecode = regexec(&re, src, NUMBER_OF_BRANKETS + 1, pmatch, 0))){ pmatch[0].rm_so = -1; } /* 置換処理用のポインターをセット */ q = dst; i=0; /* コピーと置換処理 */ while('\0' != src[i]){ /* 正規表現とマッチする位置に来たときの処理 */ /* pmatch[0]が一致文字列全体、pmatch[1]以降が括弧内の部分一致部分の情報 */ if(i == pmatch[0].rm_so){ /* q - dst < BUFSIZE - 2 はバッファー・オーバーフロー対策 */ for(p = st_string; '\0'!=*p && q - dst < BUFSIZE - 2; p++){ *q++ = *p; } /* 入力文字列の文字位置を表す添字に加算 */ i += pmatch[0].rm_eo - pmatch[0].rm_so; /* 再帰でグローバル・マッチングにする */ q += replace(q, src + i, st_string, re); /* 再帰先で処理が終了しているのでループを抜ける */ break; } else if(q - dst < BUFSIZE - 2){ /* 1文字コピー */ *q++ = src[i++]; } } /* NULL文字をつけ足す */ *q = '\0'; free(pmatch); /* 置換後の文字数を戻す */ return q - dst; } http://uncorrelated.no-ip.com/20101023.shtml からコピペ Perlだと一行で正規表現で置換できるんだが、POSIX Cだとこんな感じらしい。 これは…人生が短く感じるな ちなみに、Perlで言うところのどんな操作なんだ? >>170 こんな処理 while(<>){ s/[0-9]+/[number]/g; print; } つまり数字が連続している文字列を [number] という文字列に変換するってことか? PerlやRubyでも-peとかやったら1行になりそうだ sedならむしろ2行以上に伸ばすほうが面倒だな…w 正規表現だけではなく、Cではリストやハッシュ等のコンテナがないので、せっせと実装することになる。 ハッシュ関数も自前で用意する事になるが、数学的に周期が短い関数になると、値が偏るので注意しないといけない。 ANSIには浮動小数点を文字列に変換する関数もない。 printfを使うと速度的に遅いため、高速な変換関数を用意する必要がある。 ANSIのソート関数は、比較関数のオーバーヘッドが大きいため、クイックソートやマージソートを必要に応じて実装する。 ANSI Cには標準的な機能が定義されていない。スレッドや排他処理、共有メモリ、GUIなどの現在のOSでは当然に使えるものの大半が、機種依存コードになる。 Cには、メモリ開放を忘れるリスクと同時に、解放後のポインタにアクセスしてしまうリスクがある。 ポインタが適切な位置を指しているかは、コンパイラはチェックしない。 >>165-168 >>174-178 の問題はJavaやスクリプト言語では解決済み。 ANSIの仕様にある物もない物も、実装済みである確率はさほど変わらない 最近はJavaからスクリプトを実行できるから面白い。 ある種開き直ったテンプレートエンジンとして使えるな。 >>1 のGLib作者みたいな人と一般PGでは認識が違うのは当然 スクリプトやJava等は、結局環境に応じた実行環境をネイティブ言語で書いておかなければならない。 所詮他の言語が存在しないと役立たずの分際で、デカイ顔してるんじゃないよ。 UI自体が言語だった時代には、Cとshなど複数言語が存在するのが当然だった。 GUIのせいで単一の言語にこだわる人間が増えた。 Cでプログラミングするのは何の問題もない。 問題は単一の言語にこだわることだ。 Cをよく知っている人はむしろこだわらない人の方が多い。 iPadみたいなキーボードレスなのが主流になったら、プログラミングも変わるのだろうかね。 >>187 iPad のソフトウェアキーボードを触らせてもらった事あるけど、使い易かったよ ガシガシ入力するなら Bluetooth のキーボードを使うんじゃないかな 文字を入力する必要があるのはプログラマだけじゃないし Macの超絶クソなアイソレートキーボードより、iPadのソフトキーボードの方が使いやすいくらいだしなw >>3 そもそもcはランタイム支援のない環境でインフラを 構築するために作られた言語。 基礎が整った環境でcを使うなとk&rやlinusも 言っている。 目的を達成できるならshellやら 出来るだけ抽象的なものを使うべき 昔は crt って無かったのかな C は C で進化してるんだよね 次のスペックではマルチスレッドも採用されるみたいだし >>28 C++の肩持つ訳じゃないが4%ってどっから出てきた数字だ? テンプレ関数+スタック変数 (C++) vs オーバーライド+new (C#) だと10倍近く差が出たんだがな。 まぁアプリ全体でずっとnewしてるわけじゃないから >>66 vb6何て死んだも同然だけど いまだに使われてるよな。 32bitのサポートが終わったら完全にしぬだろうけど。 Microsoftは潰れてないじゃん。比較にもなってない >>199 ベクトル(線形幾何)演算やってると悲惨だぞ。 使うであろう座標、ベクトル、行列をstaticにするなり、 配列に集めるなりしてあらかじめ確保しとかにゃならん。 マルチスレッドが普及してから15年以上経って、仕様に取り込むところがC。 軽佻浮薄に流行を追いかけるチャラ男よりも、一本芯が通った時代遅れ。 それでいいじゃないか。 >>202 スタックフレームを自作するとかな。 ベクトル用スタックフレーム 行列用スタックフレーム 四元数様用スタックフレームと。 それぞれあらかじめ30個位インスタンスぶちこんどくんだ。 あれ?これってC++の方が楽じゃね? でもまあ、Cでのマルチスレッドとか、ずいぶん前から、APIとしてほぼすべての環境にあったし。 というか、マルチスレッドを言語の機能にする方が間違ってると思うんだが。俺としては。 あくまで、OSが提供する機能だろう?ならばやっぱり、APIとして提供される形こそが理想だと思う。 なんでも言語の機能にすればいいというものではないと思うな。 >>210 言語の機能と API という区分がよく分からないけど、 C1x のスレッドはライブラリなんじゃないの? >>210 言語仕様と言う意味では、その言語のコア機能だけで実装出来ない機能は 言語仕様に入れて良いと思う。C のコア機能だけではスレッドは実装する事が 出来ないので、スレッドを言語仕様に入れるのは問題無いでしょう。 それ以外にも、よく使用される機能が何度も繰り返し再実装されるのを避ける為に 言語仕様を定めるのも理に適っていると思う。昨今の CPU 実装の変化を考えると スレッドはますます使用頻度が増えて行くのは確実で、言語仕様に入れるのは 正しいと思う。 標準仕様に含める事で、ポータビリティが上がるという利点もある。統一的な 仕様を決めておく事で、色々なプラットフォームで動作するプログラムを 効率よく実装する事が出来る。移植性の高いマルチスレッドのコードが書ける 様になるのは歓迎すべき事だと思う。 副次的な効果として、C の教科書でスレッドを教えるのが容易になるという点も 意外と重要じゃないかと思う。標準仕様で定まっていれば、初学者が学習する際に 迷う事が少なくなり、マルチスレッドプログラミングの普及がより進むと思う。 Programming languages should be designed not by piling feature on top of feature... という一節が有名だけど、今の時代、スレッドは言語に含まれてしかるべき 機能だと思うよ。 >>211 言語の機能として実装する場合、その言語を実装する環境すべてでその機能が無いといけない。 つまりOSが無い環境へのコンパイラでも、マルチスレッドを実装するコードを生成しなければならなくなる。 >>213 実際は、freestanding の環境では複数のスレッドを起動しなくても良い事になってる。 C1x の 2010/12 のドラフトの 5.1.2.4 に書いてあるよ。 はて? C言語ってOSがない環境で ファイル読み書きできたっけ? まぁ普通OSが無くてもFW経由で読み書きできるんでないかい >>216 標準ライブラリはISOのC言語仕様の一部ですよ 勿論ファイル入出力はそれに含まれています >>212 昨今の変化を考えるというなら 簡単に変化できないような堅苦しい仕様書を作ってはいけない JavaのThreadは1994年から、ほとんど使い方に変化が無い。 >>220 今度の仕様で策定される様な部分はスレッドの本当に基本的な部分で 長年の実績に基づいた機能だから簡単に変化する様な物ではないと思われ むしろ基本の部分の仕様が固まる事で、その上に様々なライブラリを 構築する事が容易になって、言語の発展に大いに寄与する事と思われる >>221 Thread Classがあまり変わっていないだけで、それの使い方は大いに変わっている。 Class を変えずに色んな使い方が出来るなら結構な事じゃない どう転んでも新しい技術の脚を引っ張らないって事でしょ >>222 長年の実績で固まった機能が言語の発展に寄与した。 これは過去の話だ。 まともな人間なら「固まる事で、寄与する事と思われる」なんて言わない。 普通に言うだろ。 まともな人間は本筋に関係無い所で無意味な難癖をつけたりはしない物だよ。 >>221 んなこたーない。 例えばスレッドの止め方一つ取っても当時と今じゃ全く違うだろ。 >>226 難癖つけるやつがいないなら、厳密な仕様書も要らない 昔からスレッドはkillすると、システムが不安定になるもんです。API的には用意されているけどね。 >>215 I/Oの機械語コード並べた配列を関数ポインターにぶちこんで呼ぶか、 あればメモリマップドI/Oを使えばいい。 でも、これ物理デバイスを制御できるだけでファイルシステムは自前で 作らなきゃならん。 工学や理学の問題を解きたくてプログラム勉強し始めたのに、 プログラミング技術の果てしない探求に取り付かれて プログラムは手段である事をすっかり忘れちゃうよね。 解決したい問題をさっさと解ける可能な限りの高級言語を使うのがいいと思った。 手段が目的になる。大いに結構。 目的が感嘆には達成されないからこそ人類の発展があったんだよ。 そうじゃなきゃメシ食ってSEXして寝るだけの存在になってただろう。 >>238 気持ち悪いんだよ 氏ねゴミ マジレスすると、Cはもうそんなに使えなくても良い JAVA以外をやれよksが >>236 そんなこと言ってる研究室のハゲは、 ポインタを理解していないどころか、構造体の意味も理解していない、 随所にマジックナンバーを埋め込んで、 数値計算ライブラリの利用方法も知らずに 逆行列を求める自作のプログラムをよこしてきて、 極めつけにはループ用変数のi,j,kをグローバルにしている そんなヤツにソースコードが汚いと言われる日々 地底の情報系研究室は地雷だらけだぜ こんなのを見た日には、Cが嫌いになる。 a+++++b; そうか?頭の中で違和感なく一瞬で a++ + ++b; に変換されたんだけど。 IOCCC(The International Obfuscated C Code Contest 国際邪悪なCコードコンテスト)のコードは凄まじいな。仕事で似たような コードをやられたらたまらん。 トリッキーなコード書きたくてしょうがない人のガス抜きになっているという説もある>IOCCC Cでプログラミングしてると、プログラムをそもそもつくろうとした目的を忘れてしまう 脳の容量がたくさんないとやってられない 高速化、最適化(自分の思い込みが多分)が 目的になってしまうことがあるな 80人月のプログラムを一人で作るとか泣きたくなるな Cじゃなきゃできないこと以外ではCは使いたくないな めんどくさい デバイス屋は、C(もしくは、C++)しか使わないという噂は本当か? x 使わない o 使えない ついでに言うと C++ も所謂 better C としての使い方しか出来ない っていうかC++でプログラミングしててなんかいいことあったの? 自己満足以外で STLには、お世話になった。boostは使ってなかったから、auto_Ptr止まりだけど、メモリ管理からの解放になれると、Cには戻れない。 今はもう使ってないけど .NETやってるとレガシーモジュールをラップするのにC++/CLI使わざるを得ないよ >>282 その頃使ってたフレームワークが廃れてしまったのと、Javaやスクリプト言語に流れたから。 よりメモリ管理から解放されたのが大きい。 最高のパフォーマンスを求めるのであれば、C / C++になるのだろうけど、現状そこまで必要としてないから。 アプリなんてメモリ管理しなくても 終了時にOSが捨ててくれるだろ プログラミング言語にはレイヤーがあるからな。 どの言語も同じレイヤではない。 @OSやさらに上級のプログラミング言語、仮想環境をつくる言語:C,Go A上記の言語でつくられた環境でプログラミングするための言語:Java、C# B簡単にコンピュータに対し命令を指示する言語(スクリプト):Perl,Python,Ruby,PHP,Javascript BをやるためにCで書くのは確かに時間がない Aを目的としても同じ。 ただし、@をやるためには、Cくらいしか適した言語はないだろう。 >>287 もちろんそうなんだけど、 CでAやBをやろうとしてた時代があったんじゃないの 寿命が延びたんじゃなくて納期が短くなった リーナスがLinux作ったみたいに、納期気にしなければ作れるわけで サンプル見ながら打ち込んでコンパイルして実行出来ます(キリッ) くらい 時間が無限にあれば作れるのは自分がつくったフリーソフトを今誰かが使ってありがとうって言ってくれてるレベルだろ リーヌスは苦しょっぱい青春しながら+学生としての勉強しながら作ったんだろうから、時間が無限にあった訳じゃない。もっと上だな。 俺?無料に決まってんじゃん まあ無限は言い過ぎだな 0×∞ を定義しようとしているようなもんだ http://www.kh.rim.or.jp/ ~nagamura/misc/stroustrup-interview.html Cだろうが何だろうが、完成させなきゃ何を使おうが変わらん。 生産性がどうのと語ろうが、現実完成した成果物を出せてないならなんの意味もない。 >>287 名無しにしては随分マシなレスをかくなと思った 入門書の最初にレイヤーについては書くべきだね そうしないと1個の言語で何もかもやろうとする奴が絶えない 本職でプログラマやる奴は、1,2,3のレイヤークリアして無いとカスだわ 趣味でやるにしてもレイヤー3だけはクリアしてないと正直見てて可愛そう Rubyは必死にレイヤー2に干渉しようとしてるけど もっと並列化が進んで速度上がらないと無茶かなぁ >>307 この人、C++を拒絶しまくってたからな。 言語の基礎部分だけなら1週間もあれば充分かもな。 実際VC++の昔のチュートリアル本なんて、びっくりするくらい薄かったし。 何がLinuxデスクトップを殺したか 著者: Miguel de Icaza 日本語訳: yomoyomo http://www.yamdas.org/column/technique/linuxdesktopj.html このひと、相変わらずだぜw よく1週間とか日にちで習得日数いう奴いるけど、 てめーは1日何時間なんだよ って思う 1日1時間しか集中できないごみ化すなら市ね エンペツ方面がコケそうだからかね、この兄ちゃんのいいたい事って >>13 >>14 ヘイ! おまえたちラッパーを馬鹿にするなYO! >>23 ♪闘う君の歌を〜闘わない女が歌うんだろ〜 >>274 プログラムとソフトウェアを混同する人おおいよね >>279 実験用の書き捨てコードに便利。 javaやc#じゃネストが深いし、ファイル数とタイプ数が多くて嫌 効率もとめて新しいものいちいち追ってる間に Cで書いたほうがはるかに早いことを悟った もう新しい言語はいらない MONOで作るって人生を賭けて作るようなモノじゃないから。 2、3日後の明方には既に腐ってるようなモノだから。 >>3 Objective-CやれObjective-C 彼らはBASICから得られた体験を ” タブー視 ” しなければいけないため、常に孤立を要求される。 ゲーム業界ではいまだにアセンブリゴリゴリ書くらしくて驚いた 隅から隅までって訳じゃあるまいし キモのところでアセンブリ書いててもおかしくない 柔軟さが要求される部分ではLua とか使ったりもするらしいし Cはいくらライブラリ作っても何も蓄積されない感がある。 オブジェクト指向を駆使してもC++じゃ今一歩だめだ。 javaくらいの簡易さでやっとライブラリに価値が生まれるレベル。 Cでプログラミングするには人生は長すぎるんじゃないか? 人生を記述し切っているCソースを見てみたい ■ このスレッドは過去ログ倉庫に格納されています
read.cgi ver 07.4.7 2024/03/31 Walang Kapalit ★ | Donguri System Team 5ちゃんねる