1read 100read
2012年6月プログラム549: 新C言語を作ろう (862)
TOP カテ一覧 スレ一覧 2ch元 削除依頼 ▼
Lisp Scheme Part34 (659)
ハンガリアン記法 [part1] (225)
2 part forth (645)
理系しねよ (201)
ASP.NET + Atlas or Ajax について (316)
フリーソフトなどに使われる言語は? (235)
新C言語を作ろう
1 :07/07/21 〜 最終レス :11/12/19 これまでの古いC言語から新しいC言語を作りましょう。 C言語に足りない、欲しい機能を追加して最終的には標準化しましょう。 いまここに新C言語作成委員会の発足を宣言します。 とりあえず必要と思われる機能は ・クラス ・テンプレート などでしょうか?
2 : D言語で
3 : >>1 この素人め お前には無理 削除依頼出しとけ
4 : コンパイラ誰が作ってくれるんだよ
5 : 変数は文字列型と実数型のみで。
6 : 実数は誤差なしで
7 : インタプリタで。
8 : Interpreter C言語
9 : >>1 それなんてC++
10 : ぐぐらずに質問。 C++ってjavaみたいにnew演算子で動的にオブジェクト生成できるけど、 あれってC++にもガーベージコレクションがついてるってこと? VMでもないのにどうなってるの? コンパイル時にコンパイラが スコープとか計算してメモリ開放処理を付け加えてるの?
11 : >>10 newしたらdeleteしなきゃならん。 mallocしたらfreeするのと同じ。
12 : >コンパイル時にコンパイラが >スコープとか計算してメモリ開放処理を付け加えてるの? じゃあこの機能欲しいね。
13 : 最近の小学校は夏休みの宿題にC言語を作らせるのか
14 : コンパイラは作らない。 機能内容と実装方法の提案だけ。
15 : といっても、JavaとかC++とかC#とか他ruby、関数型言語の 後追いをしても仕方がないので あくまでもC言語をベースに革新的な言語を作る
16 : >>10 > コンパイル時にコンパイラが > スコープとか計算してメモリ開放処理を付け加えてるの? scoped_ptrやshared_ptrならまさにそんなことをやってくれる。
17 : 言語仕様はそのままでDirectXかopenGLのプログラムしかつくれないC言語は? C+ライブラリの開発環境だとめんどくさいことが多い。 最初から3Dを意識した仕様にしてみては?
18 : >>17 言語仕様がそのままなら、一体何をするっての?バカだろ
19 : C++やObjective-Cに秋田から Cでいいや
20 : だが、今更Cに戻る気にもなれない。
21 : 言語使用って言ったのが悪かった。 構文はそのままって意味。
22 : >>21 nara Java demo yookune?
23 : 重箱の隅
24 : Objective-C C++ D 好きなのを選ぶヨロシ。
25 : 車輪の再発明スレか
26 : D言語改良するんだったら期待するのに。
27 : C系の言語にはまだ型推論の導入された言語ってないんじゃね?
28 : でもさ、ラムダ式ベースの構文じゃないのに 型推論って導入できるの? あ、構文木をラムダ式に変換すればいいだけなのかな
29 : C++0xでどうなるか期待
30 : >>27 DとかC# 3.0とか
31 : ところでC++の例外処理ってどうなってるの? VMもないのにどうやって検出されるの?
32 : setjump/longjumpを応用したり、 (g++のsjlj eh) OSが例外処理を持っていたり。(WindowsのSEH)
33 : >>32 1つめのはコンパイル時に自動挿入ですか?(setjump/longjump)
34 : どう見てもバグであろう部分を、自動的に補正してくれるバグ推論ができたら、是非宜しくお願い致します
35 : >>33 それは当然。 例外処理なんてようするに関数を越えたジャンプにデストラクタの後片付けを入れただけ。 検出するなんてものではないと思う。
36 : >>34 もっと酷いバグ作りこむかもしれないけど、それでいい?
37 : 変数名や関数名に日本語が使えるようにしてほしい。 プログラムの保守性が絶対に上がるよ。
38 : 使えたとしても使わないのが多数じゃないか? Javaは使えたよな?C++も使えるんだっけ? ジョークプログラムでたまに見るが、?が頭を駆け巡る。 慣れの問題で済む程度じゃないと思う。
39 : 変換とかさせる言語はクソ ひ○わり なで○こ
40 : C にクラス「だけ」を追加した言語が欲しい それ以外の、C の素朴さを損なう様な追加機能は要らない カプセル化はオブジェクト指向の本質ではないので要らない テンプレートでメタプログラミングとかも要らない 総称関数も要らない GC も要らない クロージャはあったら嬉しいけど、動的クロージャなら何の役にも立たない 本来の意味の C w/ Class が欲しい GLib とかじゃなくて みたいな事を考えてた事もあった
41 : C って素朴か……?
42 : とりあえずC言語に足りないものを全て列挙してみようか
43 : 処理系依存
44 : 排他的再帰
45 :
46 : 自動コーディング
47 : 型推論と例外処理とクラスだけのオブジェクト指向とnew演算子
48 : 逆にプリプロセッサ要らない。 何らかの代替機能を用意した上で廃止してくれ。
49 : java 使ってると C のマクロが非常に恋しくなる。マクロは残してもらいたいなぁ。
50 : むしろlisp級にまでマクロ強化
51 : 結局C++が出来上がる気がするな
52 : C+++
53 : C--
54 : >>50 ではないが、俺もマクロの強化を望む。 lisp の defmacro の強力さを知らんのだよ。 Symbolics の FORTRAN はマクロによって lisp に展開されていた。 餓鬼どもには想像も出来んだろうがな(w
55 : 実はC言語はこんなこともできないのです。 int f(int n) { return n + 1; } int g(int n) { int x = f(n); { int x = f(x); { int x = f(x); return x; } } } int main() { printf("g()=%d\n", g(1)); return 0; } さて、g(1)はいくつを返すでしょう? このコードに対してエラーも警告も出さなかったコンパイラがあったら要注意です。 C言語は { int x = f(x); 〜} を期待通り処理しません。 初期化式中のxは変数宣言xによって既に親を上書きしています。 つまりこの規則は変数のアドレスを再帰的に初期化式に 適用したいというかなり特殊な状況以外に全く役に立ちません。 h() { struct _tag { struct _tag *next, *prev; } a = {&a, &a}; printf("&a=%d a.next=%d a.prev=%d\n", &a, a.next, a.prev); } 変数のアドレス限定なのは、初期化式中に変数の値を参照しても 何の意味もないからです。もし参照してたらエラーにすべきでしょう。
56 : ?
57 : int g(int x) { int x = f(x); { int x = f(x); { int x = f(x); return x; } } } だとエラーになった : error C2082: 仮引数 'x' が再定義されました。 int g(int n) だと警告 : warning C4700: 値が割り当てられていないローカルな変数 'x' に対して参照が行われました。 (VC6SP4)
58 : >>55 で、お前はそれがどうなったらいいと思う? 初期化式では、初期化対象の変数がまだ見えないようにするのか、 そもそもコンパイルエラーになるようにするのか、 はたまたそれ以外の方法があるというのか。
59 : では、この辺の規則がしっかりしてるSchemeだとどうなるでしょう。 (define (f x) (+ x 1)) (define (g x) (let ((x (f x))) (let ((x (f x))) (let ((x (f x))) x)))) (g 1) =>4 まさに期待通りです。 まったくSchemeは素晴らしいですね。
60 : >>55 そんなの当たり前のじゃん…
61 : >>50 LISPみたいなのだったらありだ。 Cプロセッサは、C自体の字句解析と独立しているから、 IDEの入力支援機能なんかと相性が悪いはず。俺はそれが嫌なんだ。
62 : >>57 いきなり関数の引き数と同じ名前で自動変数宣言すんなw
63 : むしろ何を期待すれば>>55 になるの?
64 : >>55-59 そりゃ、変数に対する考え方が違うから当然だろ。 Cの変数つうか識別子は、つまるところ名前付きメモリ領域だからな。 ん、むしろ、これで当然(そしてSchemeも当然)と思える 俺の方がどうかしてるのか? 何か悩んだり面白がったりするものなのか?
65 : >>64 どうかしてる。 >>57 相当の事をしたいとなると、わざわざ別名を考える必要が 出てきて思考の妨げになるじゃん。
66 : 変数の初期化式中にその変数自身が含まれるべき、 なんて普通は考えないからな。違うスコープにある方が自然だろ。 C言語が一般的になりすぎたとか、そういう言語に慣れすぎたとかで、 その違和感に気付かないのかもしれないな。
67 : 変数でどうにかしようと考えるからだ。 C系言語的には、そういうときは変数名じゃなく型名を定義する事を考える。 つまりクラスにする。 あ、Cではクラス無理かw
68 : C言語だとマクロに変数が入る時とかで困るんでは。 #define G(n) do { int x = f(n); return x; } while(0) int g(int n) { int m = f(n); { int x = f(m); G(x); } } : warning C4700: 値が割り当てられていないローカルな変数 'x' に対して参照が行われました。
69 : その例なら、C99やC++でインライン関数使えばいいよ。
70 : すれはマクロでないと無理だなorz
71 : >>59 のgは (define (g x) ((lambda (x) ((lambda (x) ((lambda (x) x) (f x))) (f x))) (f x))) と等価という考え方であり、つまり初期化式は関数適用と同じスコープで 評価されるので、xは親を参照するという事が自然と自明になり、 文脈上のあいまいさもありません。Schemeにはletの他にlet*やletrecもあり、 こういった束縛規則をコントロールできます。 Schemeの変数束縛はとても理に適った設計なのです。
72 : 何か似たような問題を(もっと実用的な例で)解けるデザパタがあったような。 TMPという手もあるけど、それは今の流れ的にお呼びでなさそうだな
73 : >>71 だから変数の考え方が違うと何度言えば
74 : つまりboost::lambdaがあるC++最強だな
75 : > struct _tag { > struct _tag *next, *prev; > } a = {&a, &a}; おれもこれは最初キモイなーと思ったけど、必要悪かな。 グローバル変数のテーブルの初期化とかでちょっとイイ思いができるとか。 (初期化でコードを書かなくて済む) 書き忘れさせないとか、消極的な理由。 今の言語にはコンストラクタがあるから、そういう事気にするのは減ったけど。
76 : >>73 そのオメエの考え方がそもそもキモイんだよ、というお話では
77 : >>74 違うw
78 : 新しいC言語には classical int x = f(x) ; // エラー int x = f(x) ; // OK という風にclassicalキーワードを用意してみては struct _tag { struct _tag *next, *prev; } a = {&a, &a}; // えらー 無効なaを参照した
79 : >>78 そのfに渡す初期値はどう決めるのよ? >>74 boost::scheme…いや何でもない。冗談。
80 : ヘッダファイルをやめようぜ
81 : 同意。 コンポーネント単位でインクルード出来てもいい。
82 : 確かに>>55 は見ただけだと問題なく通りそうではあるし、 移植を繰り返して警告沢山出る様な引継ぎコードの一部だったりして、 しかもテスト環境がたまたまxが普通の値をとったりして、 とんでもない間違いにそのまま気付かないでデスマーチ突入とか ありそうで笑える。
83 : 俺ならこんなの発見したら、 即消して書き直すかな…
84 : つーか int x = f(x); と書いている時点で相当キモイ こういうキモイ書き方を右辺のxがより広いスコープのxだと思って書く奴はもっとキモイ そしてそれを期待する奴はどうしようもなくキモイ そうなる様に言語仕様を変えろという奴はくれ
85 : lisperは害悪ということだけは分かった
86 : >>84 お前が子ねカス
87 : >>84 DとかC#とかだとコンパイルエラーになったような気がする。
88 : 階層的なデータ構造をコードで記述していく場合、 同じ名前の変数を宣言したい事がよくある。 例えばこういう画面レイアウトの構造を定義したい時、 -------------------------- [button1] (空き) [button2] -------------------------- [button3] (空き) [button4] ------------------------- こんな感じの定義方法を思いついた。 { void *resource; lay_t lay = layout_create(); { lay_t vert = layout_push_vertical(lay); { lay_t vert2 = layout_push_vertical(vert); layout_push_control(vert2, "button1"); layout_push_blank(vert2); layout_push_control(vert2, "button2"); } { lay_t horiz = layout_push_horizontal(vert); layout_push_control(horiz, "button3"); layout_push_blank(horiz); layout_push_control(horiz, "button4"); }} resource = layout_make_resource(lay); layout_destroy(lay); return resource; } この時、vert2の箇所をそのままvertとしてしまったり、 さらに階層が必要になった時、その変更を元に戻したくなった時、 定義した構造ブロックを他で使いまわしたい時、 などで修正が面倒になる。 まあ適当な構造記述言語でも作ればいいんだけど。
89 : ごめん、上で定義した構造は↓の間違い。 -------------------------- [button1] (空き) [button2] -------------------------- [button3] (空き) [button4] --------------------------
90 : もうね、関数内でも名前空間を定義できるようにしたら万事解決だよ。 int g(int n) { namespace n1 { int x = f(n); namespace n2 { int x = f(n1::x); namespace n3 { int x = f(n1::n2::x); //C++的名前空間ならn2::xでもいけると思う return x; } } } } 俺はこんなの欲しくないけど。
91 : Perlだと理屈の上ではpackageでそれができる。 しかしそういうキモイ書き方使い方は見たことない。
92 : 話がズレ始めてるんで一応書いておきますが、 特別な事をしなくとも #define letend }} #define let1(type, var, init) \ { type let_tmp = init; \ { type var = let_tmp; #define let2(type, var, init, type2, var2, init2) \ { type let_tmp = init; type2 let_tmp2 = init2; \ { type var = let_tmp; type2 var2 = let_tmp2; 実はこれだけでschemeのlet束縛を再現できます。(>>72 おしい) int f(int n) { return n + 1; } int g(int x) let2(int, x, f(x), int, y, x) printf("x=%d, y=%d\n", x, y); let1(int, x, f(x)) let1(int, x, f(x)) return x; letend letend letend ここでyの初期化式として使われるxはgの引数のままであり、 f(x)の影響を受けません。g(1)を実行するとx=2, y=1と 表示されることから、Schemeのletと同じ動作だと確認できます。
93 : あーブロック2重にするのか。思いつかんかった。
94 : コンパイラの実装の手間も考えようぜ。
95 : 標準Cコンパイラのソースってどこかに無料であったりするの? それを拡張していけばいいのでは
96 : GCCは? すでに拡張されてるけど
97 : tccとか
98 : なぜ今更C言語を拡張? D言語(gdc)やC++0x(g++)をベースに改良すればいいのに。
99 : D言語w
100read 1read
1read 100read
TOP カテ一覧 スレ一覧 2ch元 削除依頼 ▲
新C言語を作ろう (862)
CVS導入スレ〜 Rev.3 (836)
「コンパイラ・スクリプトエンジン」相談室15 (473)
D言語 Part29 (763)
java講座を一緒に受けよう! (661)
ネトゲ開発なら俺に聞け! (374)
--log9.info------------------
●アンチャンネル桜●『 ロザリー & いちのへ の○○すべき!コテハンの道 今日のツイッター』 零号機 (469)
「本スレ」ニコニコ生放送実況part1 (226)
ドラゴンズドグマ配信8◆あづみ(age推奨) (482)
6月3日はMousaの日 公式オフ会 (708)
コードギアス ニュープロジェクト発表会 2 (784)
【ニコニコ】1ケ月 777タウン パチドル決定戦!【生放送】part3 (879)
神聖かまってちゃん 好きなフレーズ (480)
GLAY生放送実況スレ (495)
ユーストリーム実況 part1 (542)
【ニコニコ】しろなPart1【生放送】 (628)
【MTG】プロツアー・アヴァシンの帰還 (466)
境界線上のホライゾン 公式サイト配信実況22 (203)
miwa「guitarium」リリース記念スペシャルトーク&ライフ ゙ (204)
【ニコ生】福島原発スレ避難所【ust】 (251)
りゅーと雑談 (739)
B'z LIVE-GYM 2011 北米ツアー最終公演実況3 (905)
--log55.com------------------
スルガ銀行
【ステマ万歳】食べログステマレビュアーを晒すスレ1【無銭飲食】
東京ワンコインめし
最高級の昆布は東日本
岩手・盛岡の豆腐買地蔵(とうふがいじぞう)伝説😇
【自治】食べ物板自治スレ
【自治】地域煽り・啜りスレを追い出そう
食べログ ブラブラ3