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

■ このスレッドは過去ログ倉庫に格納されています
1デフォルトの名無しさん
垢版 |
2011/02/01(火) 00:02:54
Monoプロジェクトの公式発表ではないが、その主導者であるミゲル・デ・イカザ氏の言葉として、
「Cでプログラミングするには人生は短すぎる」という標語が掲げられている。
http://bit.ly/fJCXb0
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は潰れてないじゃん。比較にもなってない
2011/02/19(土) 17:53:15
>>199
ベクトル(線形幾何)演算やってると悲惨だぞ。
使うであろう座標、ベクトル、行列をstaticにするなり、
配列に集めるなりしてあらかじめ確保しとかにゃならん。
2011/02/19(土) 18:50:36
マルチスレッドが普及してから15年以上経って、仕様に取り込むところがC。
2011/02/19(土) 19:06:35
軽佻浮薄に流行を追いかけるチャラ男よりも、一本芯が通った時代遅れ。
それでいいじゃないか。
2011/02/19(土) 19:09:33
爺にウケるわけだ
2011/02/19(土) 19:12:43
C++ の仕様にスレッドって入ってたっけ?
2011/02/19(土) 19:26:15
最近入ったかも
2011/02/19(土) 19:55:15.80
>>202
スタックフレームを自作するとかな。
ベクトル用スタックフレーム
行列用スタックフレーム
四元数様用スタックフレームと。
それぞれあらかじめ30個位インスタンスぶちこんどくんだ。
あれ?これってC++の方が楽じゃね?
2011/02/19(土) 23:22:26.81
C++0xで入る
210デフォルトの名無しさん
垢版 |
2011/02/20(日) 05:43:23.73
でもまあ、Cでのマルチスレッドとか、ずいぶん前から、APIとしてほぼすべての環境にあったし。
というか、マルチスレッドを言語の機能にする方が間違ってると思うんだが。俺としては。
あくまで、OSが提供する機能だろう?ならばやっぱり、APIとして提供される形こそが理想だと思う。

なんでも言語の機能にすればいいというものではないと思うな。
2011/02/20(日) 06:03:02.75
>>210
言語の機能と API という区分がよく分からないけど、
C1x のスレッドはライブラリなんじゃないの?
2011/02/20(日) 06:17:18.55
>>210
言語仕様と言う意味では、その言語のコア機能だけで実装出来ない機能は
言語仕様に入れて良いと思う。C のコア機能だけではスレッドは実装する事が
出来ないので、スレッドを言語仕様に入れるのは問題無いでしょう。

それ以外にも、よく使用される機能が何度も繰り返し再実装されるのを避ける為に
言語仕様を定めるのも理に適っていると思う。昨今の CPU 実装の変化を考えると
スレッドはますます使用頻度が増えて行くのは確実で、言語仕様に入れるのは
正しいと思う。

標準仕様に含める事で、ポータビリティが上がるという利点もある。統一的な
仕様を決めておく事で、色々なプラットフォームで動作するプログラムを
効率よく実装する事が出来る。移植性の高いマルチスレッドのコードが書ける
様になるのは歓迎すべき事だと思う。

副次的な効果として、C の教科書でスレッドを教えるのが容易になるという点も
意外と重要じゃないかと思う。標準仕様で定まっていれば、初学者が学習する際に
迷う事が少なくなり、マルチスレッドプログラミングの普及がより進むと思う。

Programming languages should be designed not by piling feature on top of feature...
という一節が有名だけど、今の時代、スレッドは言語に含まれてしかるべき
機能だと思うよ。
2011/02/20(日) 06:18:44.59
>>211
言語の機能として実装する場合、その言語を実装する環境すべてでその機能が無いといけない。
つまりOSが無い環境へのコンパイラでも、マルチスレッドを実装するコードを生成しなければならなくなる。
2011/02/20(日) 06:55:12.78
>>213
実際は、freestanding の環境では複数のスレッドを起動しなくても良い事になってる。
C1x の 2010/12 のドラフトの 5.1.2.4 に書いてあるよ。
2011/02/20(日) 06:59:02.67
はて? C言語ってOSがない環境で
ファイル読み書きできたっけ?
2011/02/20(日) 07:29:20.57
>>215
それ、C言語とかんけいない。
2011/02/20(日) 07:57:10.99
まぁ普通OSが無くてもFW経由で読み書きできるんでないかい
2011/02/20(日) 10:05:25.33
>>216
標準ライブラリはISOのC言語仕様の一部ですよ
勿論ファイル入出力はそれに含まれています
2011/02/20(日) 14:09:46.65
>>218
言語の仕様には入っていない。
2011/02/20(日) 14:38:11.08
>>212
昨今の変化を考えるというなら
簡単に変化できないような堅苦しい仕様書を作ってはいけない
2011/02/20(日) 14:41:53.09
JavaのThreadは1994年から、ほとんど使い方に変化が無い。
2011/02/20(日) 15:30:16.47
>>220
今度の仕様で策定される様な部分はスレッドの本当に基本的な部分で
長年の実績に基づいた機能だから簡単に変化する様な物ではないと思われ

むしろ基本の部分の仕様が固まる事で、その上に様々なライブラリを
構築する事が容易になって、言語の発展に大いに寄与する事と思われる
2011/02/20(日) 15:34:09.91
>>221
Thread Classがあまり変わっていないだけで、それの使い方は大いに変わっている。
2011/02/20(日) 15:54:43.52
Class を変えずに色んな使い方が出来るなら結構な事じゃない
どう転んでも新しい技術の脚を引っ張らないって事でしょ
2011/02/20(日) 15:59:04.92
>>222
長年の実績で固まった機能が言語の発展に寄与した。
これは過去の話だ。
まともな人間なら「固まる事で、寄与する事と思われる」なんて言わない。
2011/02/20(日) 16:05:58.98
普通に言うだろ。
まともな人間は本筋に関係無い所で無意味な難癖をつけたりはしない物だよ。
2011/02/20(日) 16:06:50.77
だな
2011/02/20(日) 16:21:54.11
>>221
んなこたーない。
例えばスレッドの止め方一つ取っても当時と今じゃ全く違うだろ。
229デフォルトの名無しさん
垢版 |
2011/02/20(日) 16:40:02.04
>>228
詳しく。
2011/02/20(日) 16:46:05.03
deprecateされてるだろ
2011/02/20(日) 16:46:40.08
>>226
難癖つけるやつがいないなら、厳密な仕様書も要らない
2011/02/20(日) 16:48:01.46
そいつは結構、好都合
2011/02/20(日) 16:52:16.64
昔からスレッドはkillすると、システムが不安定になるもんです。API的には用意されているけどね。
2011/02/22(火) 08:46:18.42
>>215
I/Oの機械語コード並べた配列を関数ポインターにぶちこんで呼ぶか、
あればメモリマップドI/Oを使えばいい。
でも、これ物理デバイスを制御できるだけでファイルシステムは自前で
作らなきゃならん。
235デフォルトの名無しさん
垢版 |
2011/04/12(火) 10:56:28.52
「Cでプログラミングするには人生は短すぎる」か?
http://hibari.2ch.net/test/read.cgi/tech/1296486174/
2011/04/28(木) 05:31:53.80
工学や理学の問題を解きたくてプログラム勉強し始めたのに、
プログラミング技術の果てしない探求に取り付かれて
プログラムは手段である事をすっかり忘れちゃうよね。
解決したい問題をさっさと解ける可能な限りの高級言語を使うのがいいと思った。
2011/05/12(木) 05:14:24.87
手段が目的になっちゃうね
2011/05/13(金) 11:29:26.32
手段が目的になる。大いに結構。
目的が感嘆には達成されないからこそ人類の発展があったんだよ。
そうじゃなきゃメシ食ってSEXして寝るだけの存在になってただろう。
239デフォルトの名無しさん
垢版 |
2011/06/21(火) 08:41:39.60
「今こそAndroidはJavaを捨ててMonoを採用する時です」
http://twitter.com/#!/migueldeicaza/status/81755106231599104
2011/06/21(火) 15:14:06.84
>>238
気持ち悪いんだよ 氏ねゴミ


マジレスすると、Cはもうそんなに使えなくても良い
JAVA以外をやれよksが
■ このスレッドは過去ログ倉庫に格納されています
5ちゃんねるの広告が気に入らない場合は、こちらをクリックしてください。

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