「Cでプログラミングするには人生は短すぎる」か?

■ このスレッドは過去ログ倉庫に格納されています
1デフォルトの名無しさん
垢版 |
2011/02/01(火) 00:02:54
Monoプロジェクトの公式発表ではないが、その主導者であるミゲル・デ・イカザ氏の言葉として、
「Cでプログラミングするには人生は短すぎる」という標語が掲げられている。
http://bit.ly/fJCXb0
102デフォルトの名無しさん
垢版 |
2011/02/12(土) 07:44:46
ただの中間コード+インタプリタを'Java仮想マシン'と言い張ったJavaの営業戦略は大したもの
2011/02/12(土) 08:02:20
>>102はかわいそうな人ですね
技術センスゼロだから転職したほうがいいよ
さようなら
104デフォルトの名無しさん
垢版 |
2011/02/12(土) 08:24:38
>>103
技術センスゼロの人にもわかるように違いを説明できるの?
2011/02/12(土) 08:42:51
今は、インタプリタではないJava VMが主流ではないか。
ネイティブで実行するCPUもあるし。
2011/02/12(土) 09:07:01
VMはインタプリタだろ。少なくともネイティブコンパイラではないし、ネイティブコードを実行するものでもない。
Java CPUはほとんど使われてないだろうし、一般的でもない。
107デフォルトの名無しさん
垢版 |
2011/02/12(土) 09:13:07
「ランタイム」と言えば角が立たない
2011/02/12(土) 09:26:40
>>106
Java VMをインタプリタで実装するならわかる。
109デフォルトの名無しさん
垢版 |
2011/02/12(土) 13:09:58
JavaチップだのJITコンパイラだのは後付けのだからねぇ。
インタプリタ高速化技法のひとつとして考えた方がいいと思うぞ。
とくにJavaのJITは起動時ではなくインタプリタで実行中に裏でコンパイルするというものだし。
110デフォルトの名無しさん
垢版 |
2011/02/12(土) 13:33:25
PHP3まではインタプリタ、PHP4からはPHP仮想マシン
ok?
2011/02/12(土) 13:37:12
仮想マシンとインタプリタの違いは何?
2011/02/12(土) 13:53:14
BASICとの比較のコンテキストでインタプリタといったら、ソースコードと中間コードが同値という意味か、コンパイラの反対語か。
2011/02/12(土) 15:03:27
予め用意されたマシン語の命令セットを実行するのと、その場でソースをマシン語に翻訳して実行するのの違いじゃない?
2011/02/12(土) 15:13:43
>>111
中間言語をネイティブに変換してから実行するのが仮想マシン
インタプリタは、中間言語を使わず、ソースコードのまま
毎回命令を解釈してから実行するもの
2011/02/12(土) 15:16:59
とすると、>>103 の言い分がよくわからんな
2011/02/12(土) 15:19:26
>>114
じゃあ、Java VM はどちらでもないの?

中間言語は使うが、実行中に必要な部分だけ
(ロードされた部分だけ)ネイティブに変換する
2011/02/12(土) 15:19:34
>>114
ハズレw

仮想機械は仕様
インタプリタは実装
118デフォルトの名無しさん
垢版 |
2011/02/12(土) 17:11:43
プ
119デフォルトの名無しさん
垢版 |
2011/02/12(土) 18:02:24
>>114
その定義だと、やはりPHPはPHP仮想マシンだなw
120デフォルトの名無しさん
垢版 |
2011/02/12(土) 18:03:49
>>117が一番しっくりくるな
2011/02/12(土) 19:19:27
Pコードインタプリタって仕様をもらって、自分でコンパイルしたプログラムを手で実行したことがあったなぁ。
2011/02/12(土) 19:46:06
仮想機械の仕様さえ満たせば
インタプリタ実装しようが
コンパイラ実装しようが
ハードウェア実装しようが
同じバイトコードが動く。

インタプリタ実装するにしても、
ベタなインタプリタでもいいし、
JITコンパイラ使ってもいいし、
複数の仮想機械で分散処理してもいい。
あくまで仮想機械の仕様さえ満たせば
コードを動かせる。

それが仮想機械じゃねえの?
123デフォルトの名無しさん
垢版 |
2011/02/12(土) 21:47:35
N88BASICのDOS版ってたしかPコードとJITコンパイラだったはず。
今みたいにインストールなんて概念がなく、
EXEファイルにJITコンパイラを埋め込む仕様で
ファイルサイズが絶望的なほどでかかった記憶がある。
2011/02/13(日) 02:36:09
>>123
今使えば信じられないほど小さくて速いだろうなw
2011/02/13(日) 18:24:09
マシン語でプログラミングするには人生は長すぎる
その前に精神が壊れる
2011/02/13(日) 22:54:39
>>125
人間なんだから少しは工夫しよう。今ならマクロ使えばCに近い書き方ができるし、
使いやすいライブラリを多く用意してそれらを活用すればだいぶ見やすく書ける。
2011/02/13(日) 23:02:27
>>126
昔は実際そうだったな。
今なら、そんなことするぐらいならC使って、パフォーマンスいるところだけグリグリやるところだけ。
128デフォルトの名無しさん
垢版 |
2011/02/14(月) 00:02:12
「Cでプログラミングするには人生は短すぎる」と言いつつアセンブラ技術者募集の求人を出すミゲルさんw
http://twitter.com/migueldeicaza/status/9631116499615744
http://d.hatena.ne.jp/atsushieno/20101201/p1
2011/02/14(月) 00:08:48
おぉ、迷える子羊よ。彼は犠牲になったのだ
多くの人たちがCでプログラミングしないために
2011/02/14(月) 01:08:30
>>1
プログラミングをソフトウェアを生み出す為のプロセスとして捉えたらその通りだけど、
プログラミング自体が楽しいなら言語は何でも良いし、どれだけ時間が掛かっても良い。
なぜならプログラムを書く事自体が目的だから。
2011/02/14(月) 05:29:49
>>130
納期に追われ、デスマで死にそうな奴にそんなこと言ったら刺されるぞ。
2011/02/14(月) 08:23:51
間に合わせなければいいのに。
そうすれば自然と仕事を適切な規模のところに持っていってくれるし
死にそうな目には遭わずに済むのに。
2011/02/14(月) 08:51:06
間に合わせないと無能扱いされて会社を追い出される。追い出されても死にはしないが
金がなくなればやってけなくなる。
2011/02/14(月) 08:57:27
本当は俺プログラマになりたかったのに、そういう怖い話ばかり聞かされるから
結局ならんかったよ・・・

一日中コーディング出来るってちょっと羨ましい
2011/02/14(月) 12:45:12
コーディングって本当に楽しいか?

コーディング前の、どうやって実現しようかとか、
コーディング後の、なんで動かないんだろ、
と考えてる時の方が圧倒的に楽しくないか?

まぁ、そういうのも含めてコーディングって言ってるのかも知れんが
2011/02/14(月) 16:34:30
俺は設計よりコーディングの方が好き、
ステップ数が少なく機能的なコードを書くのが楽しい。

まぁ現状は理想論になりつつあるけど。。
2011/02/15(火) 08:47:57
LispやPerlはコード書くこと自体が楽しい
2011/02/15(火) 14:32:06
俺はPerlの記号だらけのソースは大嫌いなので見たくもないんだが
2011/02/15(火) 16:15:40
Perlは書きたくなることはあるが読みたくはないな
なので矛盾はしていない
2011/02/15(火) 20:03:13
俺の中でコーディングというのは感覚的には清書作業に近いな
2011/02/15(火) 20:58:22
Perlが好きな奴は三ヶ月後の自分への愛が足りない人
2011/02/15(火) 22:03:19
俺はコーディングしながら考えるタイプだから清書って感覚はないなあ
むしろ俺言語でいいからコードっぽいものに起こさないと
思考が遮られてはかどらないや
2011/02/15(火) 22:30:11
Haskell ではコーディングしながら考えてると死ぬ
2011/02/16(水) 03:27:33
そんなものは使ってはいけない。自分の時間を無駄に捨ててるようなもんだ。
2011/02/16(水) 03:38:03
そして時間は次から次へやってくる
146西野圭吾 ◆MBzg6vmZNmjx
垢版 |
2011/02/16(水) 05:10:49
あと少しで人生の終点。
2011/02/16(水) 10:11:18
だから時間を無駄に使うのはやめろということ。使いやすく、開発効率のいい言語を使え。
2011/02/16(水) 10:12:19
そんなものはない
2011/02/16(水) 11:05:04
ないと思うなら自分で作れ
2011/02/16(水) 11:18:10
言語とか開発環境の変化について行くだけの人生とかありえない
生産性(笑)
2011/02/16(水) 12:22:07
>>149
1.よし!作ろう
2.作るために、「使いやすく、開発効率のいい言語」を探す
3.「そんなものはない」事に気が付く
4.1へ
2011/02/16(水) 12:42:56
1.よし!作ろう
2.作るために、「使いやすく、開発効率のいい言語」を探す
3.何とか使えるのを探して作り始める
4.出来上がったら、不満があるところを改良していく
5.最初の目的が達成されたら公開する
だろ
2011/02/16(水) 12:55:12
Cが駄目なら、C++があるじゃないか
2011/02/16(水) 13:11:01
何とか使えるんならそれ使ってりゃいいやん
2011/02/16(水) 13:16:54
不便で生産性が悪いから改良するんだろ。
日本人は器用だから使いにくい道具をなんとか使いこなしてしまうが、西洋人は先に使いやすい道具を作る。
道具がいいと生産性が高くなるし誰でも使えるから生産コストがうんと下がる。
器用なことが必ずしもいい結果にならない。
2011/02/16(水) 14:27:56
Cで書かれている現役ソフトウェアは大量にある。
2011/02/16(水) 15:41:34
全てをJavaで置き換えられると錯覚しそして破滅する。
2011/02/16(水) 16:43:10
Cでダメな場面があまりないな
2011/02/16(水) 16:47:23
相当慣れないと面倒なだけで
2011/02/16(水) 17:23:19
Cで正規表現で置換。
2011/02/16(水) 17:31:02
POSIX正規表現 regex.h
2011/02/16(水) 17:43:59
検索はできても、置換は実装する必要があるのだよ。
2011/02/16(水) 17:51:51
え?まさかその程度のこともできないなんてことはないよな?
2011/02/16(水) 18:06:38
置換が必要なアプリだと、簡易的でもGCか賢いコンテナがないと
ヒープメモリがズタズタになってメモリリークしまくりとか。
2011/02/16(水) 18:20:18
>>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);
2011/02/16(水) 18:21:03
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;
}
2011/02/16(水) 18:21:46
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;
2011/02/16(水) 18:22:30
} 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 からコピペ
2011/02/16(水) 18:23:27
Perlだと一行で正規表現で置換できるんだが、POSIX Cだとこんな感じらしい。
2011/02/16(水) 19:03:47
これは…人生が短く感じるな
ちなみに、Perlで言うところのどんな操作なんだ?
2011/02/16(水) 19:29:21
>>170
こんな処理
while(<>){
s/[0-9]+/[number]/g;
print;
}
2011/02/16(水) 20:13:31
つまり数字が連続している文字列を [number] という文字列に変換するってことか?
PerlやRubyでも-peとかやったら1行になりそうだ
sedならむしろ2行以上に伸ばすほうが面倒だな…w
2011/02/16(水) 20:23:32
正規表現だけではなく、Cではリストやハッシュ等のコンテナがないので、せっせと実装することになる。
2011/02/16(水) 20:24:51
ハッシュ関数も自前で用意する事になるが、数学的に周期が短い関数になると、値が偏るので注意しないといけない。
2011/02/16(水) 20:27:14
ANSIには浮動小数点を文字列に変換する関数もない。
printfを使うと速度的に遅いため、高速な変換関数を用意する必要がある。
2011/02/16(水) 20:28:26
ANSIのソート関数は、比較関数のオーバーヘッドが大きいため、クイックソートやマージソートを必要に応じて実装する。
2011/02/16(水) 20:30:03
ANSI Cには標準的な機能が定義されていない。スレッドや排他処理、共有メモリ、GUIなどの現在のOSでは当然に使えるものの大半が、機種依存コードになる。
2011/02/16(水) 20:35:37
Cには、メモリ開放を忘れるリスクと同時に、解放後のポインタにアクセスしてしまうリスクがある。
ポインタが適切な位置を指しているかは、コンパイラはチェックしない。
2011/02/16(水) 20:37:03
>>165-168 >>174-178 の問題はJavaやスクリプト言語では解決済み。
2011/02/16(水) 20:39:35
そういう時はC++使うんじゃないの
2011/02/16(水) 20:41:39
ANSIの仕様にある物もない物も、実装済みである確率はさほど変わらない
2011/02/16(水) 21:01:25
最近はJavaからスクリプトを実行できるから面白い。
ある種開き直ったテンプレートエンジンとして使えるな。
2011/02/16(水) 21:45:02
なんつうか、どうでもいい部分ばかりだな。
184デフォルトの名無しさん
垢版 |
2011/02/17(木) 00:27:07
>>1のGLib作者みたいな人と一般PGでは認識が違うのは当然
2011/02/17(木) 15:51:25
スクリプトやJava等は、結局環境に応じた実行環境をネイティブ言語で書いておかなければならない。
所詮他の言語が存在しないと役立たずの分際で、デカイ顔してるんじゃないよ。
2011/02/17(木) 16:48:56
UI自体が言語だった時代には、Cとshなど複数言語が存在するのが当然だった。
GUIのせいで単一の言語にこだわる人間が増えた。

Cでプログラミングするのは何の問題もない。
問題は単一の言語にこだわることだ。
Cをよく知っている人はむしろこだわらない人の方が多い。
2011/02/17(木) 18:38:45
iPadみたいなキーボードレスなのが主流になったら、プログラミングも変わるのだろうかね。
2011/02/17(木) 21:41:35
MacBookにはキーボードが付いてるだろ?
2011/02/17(木) 22:42:28
>>187
iPad のソフトウェアキーボードを触らせてもらった事あるけど、使い易かったよ

ガシガシ入力するなら Bluetooth のキーボードを使うんじゃないかな
文字を入力する必要があるのはプログラマだけじゃないし
2011/02/17(木) 23:02:15
>>189
寝言は
2011/02/17(木) 23:08:56
むにゃむにゃ
2011/02/17(木) 23:11:52
もう食べられないよお
2011/02/17(木) 23:27:12
>>189
スマホよりは使いやすいわな。
194デフォルトの名無しさん
垢版 |
2011/02/18(金) 12:35:15
Macの超絶クソなアイソレートキーボードより、iPadのソフトキーボードの方が使いやすいくらいだしなw
2011/02/18(金) 16:35:53
ねーよ
2011/02/19(土) 17:24:39
>>3
そもそもcはランタイム支援のない環境でインフラを
構築するために作られた言語。
基礎が整った環境でcを使うなとk&rやlinusも
言っている。
目的を達成できるならshellやら
出来るだけ抽象的なものを使うべき
2011/02/19(土) 17:26:57
昔は crt って無かったのかな

C は C で進化してるんだよね
次のスペックではマルチスレッドも採用されるみたいだし
2011/02/19(土) 17:36:10
>>28
C++の肩持つ訳じゃないが4%ってどっから出てきた数字だ?
テンプレ関数+スタック変数 (C++)
vs
オーバーライド+new (C#)

だと10倍近く差が出たんだがな。
2011/02/19(土) 17:38:27
まぁアプリ全体でずっとnewしてるわけじゃないから
2011/02/19(土) 17:46:41
>>66
vb6何て死んだも同然だけど
いまだに使われてるよな。
32bitのサポートが終わったら完全にしぬだろうけど。
2011/02/19(土) 17:47:22
Microsoftは潰れてないじゃん。比較にもなってない
■ このスレッドは過去ログ倉庫に格納されています
5ちゃんねるの広告が気に入らない場合は、こちらをクリックしてください。

ニューススポーツなんでも実況