新C言語を作ろう

このエントリーをはてなブックマークに追加
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デフォルトの名無しさん:2007/07/24(火) 21:42:19
?
57デフォルトの名無しさん:2007/07/24(火) 21:47:19
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デフォルトの名無しさん:2007/07/24(火) 21:47:59
>>55
で、お前はそれがどうなったらいいと思う?

初期化式では、初期化対象の変数がまだ見えないようにするのか、
そもそもコンパイルエラーになるようにするのか、
はたまたそれ以外の方法があるというのか。
59デフォルトの名無しさん:2007/07/24(火) 21:48:56
では、この辺の規則がしっかりしてる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デフォルトの名無しさん:2007/07/24(火) 21:51:18
>>55
そんなの当たり前のじゃん…
6148:2007/07/24(火) 21:51:33
>>50
LISPみたいなのだったらありだ。

Cプロセッサは、C自体の字句解析と独立しているから、
IDEの入力支援機能なんかと相性が悪いはず。俺はそれが嫌なんだ。
62デフォルトの名無しさん:2007/07/24(火) 21:53:26
>>57
いきなり関数の引き数と同じ名前で自動変数宣言すんなw
63デフォルトの名無しさん:2007/07/24(火) 21:55:39
むしろ何を期待すれば>>55になるの?
64デフォルトの名無しさん:2007/07/24(火) 22:02:49
>>55-59
そりゃ、変数に対する考え方が違うから当然だろ。
Cの変数つうか識別子は、つまるところ名前付きメモリ領域だからな。

ん、むしろ、これで当然(そしてSchemeも当然)と思える
俺の方がどうかしてるのか?
何か悩んだり面白がったりするものなのか?
65デフォルトの名無しさん:2007/07/24(火) 22:25:36
>>64
どうかしてる。
>>57相当の事をしたいとなると、わざわざ別名を考える必要が
出てきて思考の妨げになるじゃん。
66デフォルトの名無しさん:2007/07/24(火) 22:30:22
変数の初期化式中にその変数自身が含まれるべき、
なんて普通は考えないからな。違うスコープにある方が自然だろ。
C言語が一般的になりすぎたとか、そういう言語に慣れすぎたとかで、
その違和感に気付かないのかもしれないな。
67デフォルトの名無しさん:2007/07/24(火) 22:33:17
変数でどうにかしようと考えるからだ。
C系言語的には、そういうときは変数名じゃなく型名を定義する事を考える。
つまりクラスにする。
あ、Cではクラス無理かw
68デフォルトの名無しさん:2007/07/24(火) 22:37:20
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デフォルトの名無しさん:2007/07/24(火) 22:45:27
その例なら、C99やC++でインライン関数使えばいいよ。
70デフォルトの名無しさん:2007/07/24(火) 22:45:58
すまんこれはマクロでないと無理だなorz
71デフォルトの名無しさん:2007/07/24(火) 22:47:58
>>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デフォルトの名無しさん:2007/07/24(火) 22:50:08
何か似たような問題を(もっと実用的な例で)解けるデザパタがあったような。
TMPという手もあるけど、それは今の流れ的にお呼びでなさそうだな
73デフォルトの名無しさん:2007/07/24(火) 22:54:15
>>71
だから変数の考え方が違うと何度言えば
74デフォルトの名無しさん:2007/07/24(火) 22:58:30
つまりboost::lambdaがあるC++最強だな
75デフォルトの名無しさん:2007/07/24(火) 22:59:37
> struct _tag {
> struct _tag *next, *prev;
> } a = {&a, &a};
おれもこれは最初キモイなーと思ったけど、必要悪かな。
グローバル変数のテーブルの初期化とかでちょっとイイ思いができるとか。
(初期化でコードを書かなくて済む)
書き忘れさせないとか、消極的な理由。
今の言語にはコンストラクタがあるから、そういう事気にするのは減ったけど。
76デフォルトの名無しさん:2007/07/24(火) 23:04:40
>>73
そのオメエの考え方がそもそもキモイんだよ、というお話では
77デフォルトの名無しさん:2007/07/24(火) 23:08:10
>>74違うw
78デフォルトの名無しさん:2007/07/24(火) 23:09:27
新しいC言語には
classical int x = f(x) ; // エラー
int x = f(x) ; // OK
という風にclassicalキーワードを用意してみては

struct _tag {
struct _tag *next, *prev;
} a = {&a, &a}; // えらー 無効なaを参照した
79デフォルトの名無しさん:2007/07/24(火) 23:14:31
>>78そのfに渡す初期値はどう決めるのよ?

>>74
boost::scheme…いや何でもない。冗談。
80デフォルトの名無しさん:2007/07/24(火) 23:16:15
ヘッダファイルをやめようぜ
81デフォルトの名無しさん:2007/07/24(火) 23:18:36
同意。
コンポーネント単位でインクルード出来てもいい。
82デフォルトの名無しさん:2007/07/24(火) 23:23:10
確かに>>55は見ただけだと問題なく通りそうではあるし、
移植を繰り返して警告沢山出る様な引継ぎコードの一部だったりして、
しかもテスト環境がたまたまxが普通の値をとったりして、
とんでもない間違いにそのまま気付かないでデスマーチ突入とか
ありそうで笑える。
83デフォルトの名無しさん:2007/07/24(火) 23:30:02
俺ならこんなの発見したら、
即消して書き直すかな…
84デフォルトの名無しさん:2007/07/24(火) 23:41:32
つーか
int x = f(x);
と書いている時点で相当キモイ
こういうキモイ書き方を右辺のxがより広いスコープのxだと思って書く奴はもっとキモイ
そしてそれを期待する奴はどうしようもなくキモイ
そうなる様に言語仕様を変えろという奴は氏んでくれ
85デフォルトの名無しさん:2007/07/24(火) 23:50:26
lisperは害悪ということだけは分かった
86デフォルトの名無しさん:2007/07/25(水) 00:01:30
>>84
お前が子ねカス
87デフォルトの名無しさん:2007/07/25(水) 00:10:35
>>84
DとかC#とかだとコンパイルエラーになったような気がする。
88デフォルトの名無しさん:2007/07/25(水) 00:38:45
階層的なデータ構造をコードで記述していく場合、
同じ名前の変数を宣言したい事がよくある。
例えばこういう画面レイアウトの構造を定義したい時、
--------------------------

[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デフォルトの名無しさん:2007/07/25(水) 00:42:52
ごめん、上で定義した構造は↓の間違い。
--------------------------
      [button1]
       (空き)
      [button2]
--------------------------

[button3]  (空き)  [button4]

--------------------------
90デフォルトの名無しさん:2007/07/25(水) 00:54:31
もうね、関数内でも名前空間を定義できるようにしたら万事解決だよ。
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デフォルトの名無しさん:2007/07/25(水) 08:56:14
Perlだと理屈の上ではpackageでそれができる。
しかしそういうキモイ書き方使い方は見たことない。
92デフォルトの名無しさん:2007/07/25(水) 09:23:20
話がズレ始めてるんで一応書いておきますが、
特別な事をしなくとも
#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デフォルトの名無しさん:2007/07/25(水) 14:06:47
あーブロック2重にするのか。思いつかんかった。
94デフォルトの名無しさん:2007/07/25(水) 19:17:15
コンパイラの実装の手間も考えようぜ。
95デフォルトの名無しさん:2007/07/25(水) 21:52:01
標準Cコンパイラのソースってどこかに無料であったりするの?
それを拡張していけばいいのでは
96デフォルトの名無しさん:2007/07/25(水) 21:54:00
GCCは?
すでに拡張されてるけど
97デフォルトの名無しさん:2007/07/25(水) 22:01:02
tccとか
98デフォルトの名無しさん:2007/07/25(水) 22:05:24
なぜ今更C言語を拡張?
D言語(gdc)やC++0x(g++)をベースに改良すればいいのに。
99デフォルトの名無しさん:2007/07/25(水) 22:28:07
D言語w
100デフォルトの名無しさん:2007/07/26(木) 02:15:52
>>98
D や C++ は太り過ぎだから
101デフォルトの名無しさん:2007/07/26(木) 04:32:28
Cがガンダム、初期C++がゼータ、テンプレ付きC++がダブルゼータだとしたら、
百式ぐらいのをきぼんぬ
つーかシャアが乗ってそうなやつ
102デフォルトの名無しさん:2007/07/26(木) 10:01:54
#include <stdio.h>
int main() {
 printf("Hello, World!\n");
 return 0;
}

とりあえず、これの拡張版はどんな感じになる?
103デフォルトの名無しさん:2007/07/26(木) 12:14:30
#using <mscorlib.dll>

int main()
{
  System::Console::WriteLine("Hello, World!");
}
104デフォルトの名無しさん:2007/07/26(木) 21:36:19


List x = [1,2,3,4,5];
List y = [];
for (int i=0; i < x.length; i++) {
y = x.drop(i)::y;
}

// y = [5,4,3,2,1]
105デフォルトの名無しさん:2007/07/26(木) 21:47:01
import std.stdio;
void main(){
  "Hello, World".writefln();
}
106デフォルトの名無しさん:2007/07/28(土) 10:20:53
おい、おまいらもっと一瞬見ただけで「それは使ってみたい」と思わせるような提案してください
107デフォルトの名無しさん:2007/07/28(土) 10:23:20
#pragmaで切り替えることで新CとC++のコードを混在できる。
108デフォルトの名無しさん:2007/07/28(土) 12:09:34
>>1
は夏休みに入った中学生かなんかだろ
もしかして本当に新C言語ができちゃうかも
そうしたら俺の名前って有名にならね?とか
109デフォルトの名無しさん:2007/07/28(土) 17:11:00
拡張からはじめたほうがいい。
拡張しやすいフリーのコンパイラは?
gccはなんかね・・。
C言語のコアの部分だけひっぱってきて。
110デフォルトの名無しさん:2007/07/28(土) 18:05:58
前方参照が欲しいなぁ。
111デフォルトの名無しさん:2007/07/28(土) 18:34:53
とりあえず今までスレで出たのまとめてみた。

重要なもの
-クラス・テンプレートの追加(>>1)
-型推論と例外処理(>>47)
-マクロ強化(>>50,>>54)
-ヘッダファイルをやめる(>>80-81)
-#pragmaで新CとC++を切り替えられる(>>107)
-前方参照(>>110)

あまり重要じゃないもの
-変数名・関数名で日本語が使えるように(>>37)
-関数内でも名前空間が使えるように(>>90)

矛盾しそうなもの
-言語仕様をDやC++より軽く(>>100)

ああ、それとC言語+クラスだけでいいならObjective-Cで十分な気ガス。
あと、これらを実装するならg++かgdcをベースに要らない機能を削ってってそれを基にした方が良いと思う。
112デフォルトの名無しさん:2007/07/28(土) 21:17:35
> -変数名・関数名で日本語が使えるように(>>37)
これ今の仕様でもできるっしょ。
113デフォルトの名無しさん:2007/07/28(土) 21:28:12
>>112
Cで出来たっけ?C99ではできるのか?
114デフォルトの名無しさん:2007/07/28(土) 21:28:59
日本語見ると、どうしても文字列リテラル内と勘違いするんだよな……
115デフォルトの名無しさん:2007/07/28(土) 21:32:37
自分C#もやってるけど日本語識別子は使ったこと無いな
116デフォルトの名無しさん:2007/07/28(土) 21:58:19
VBAでたまに使う>日本語
使う理由は英語スキルが低いので名前考えるのが面倒ってだけ。
117デフォルトの名無しさん:2007/07/28(土) 23:03:47
>>113
少なくとも処理系依存の範疇で可能なはず。
つまり、やれるようにしたところで規格違反にはならないということ。

それよりも個人的には全角空白を空白類文字として使用可能にしてほしい。
(もっと一般にUnicodeの空白系の文字全般を対象にすればいい)
掲示板で全角空白使ったコードをそのままコンパイルできないのは不便。
118デフォルトの名無しさん:2007/07/28(土) 23:36:45
119名無しさん@そうだ選挙に行こう:2007/07/29(日) 01:23:18
XML 2.0 で要素名にいろんな言語が利用できるようになったけど、これって互換性の維持や
他か国語の環境での可読性とかで酷評されてたと思う。

やっぱり日本語変数とかは勘弁して欲しいと思う。

日本国内の環境でも
enum SMAP {中居, ...};
とかで「草薙」が表示できるかできないかとかで悩まなければならないのはまずいと思うし。
120名無しさん@そうだ選挙に行こう:2007/07/29(日) 02:14:11
>>111
>ああ、それとC言語+クラスだけでいいならObjective-Cで十分な気ガス。

残念ながら ObjC は動的型付けなので、十分とは言えない人間も居るのです。
121名無しさん@そうだ選挙に行こう:2007/07/29(日) 06:08:46
>-前方参照(>>110)

これってどういうの?
122名無しさん@そうだ選挙に行こう:2007/07/29(日) 11:38:52
とりあえず、クラスだけ追加してみては。

その際に、C++よりjavaを基にしてほしい。
多重継承なし。とか、
C++のクラス定義はきもい。スコープ演算子::とか?
123名無しさん@そうだ選挙に行こう:2007/07/29(日) 12:10:39
C++の設計と進化 (D&E)によれば、最初は::ではなく . を使っていたんだが、
class X X;のようにクラス名と同名の変数が作られたときに曖昧さが起こるから、
これを回避するために::を導入したとある (§3.11.3)。
124110じゃないけど:2007/07/29(日) 18:02:20
>>121
後ろで宣言したものでも使える。後方参照とも言う。
Dの例(前方参照あり):
void foo(){
  bar();
}
void bar(){
}

Cの例(前方参照無し):
void bar(void);
void foo(void){
  bar();
}
void bar(void){
}
125名無しさん@そうだ選挙に行こう:2007/07/29(日) 18:34:48
>>121 じゃないけど、後方参照は知ってるが、後方参照の事を前方参照と呼ぶ人もいたのか
どっちが一般的なんだろ
126名無しさん@そうだ選挙に行こう:2007/07/29(日) 18:54:23
「前”から”参照」 か 「前”を”参照」 かのどっちかなんだから、あまり気にしないほうが良いと思う。
127名無しさん@そうだ選挙に行こう:2007/07/29(日) 18:58:49
forward referenceとback referenceが区別できないのは困ると思うけど。
128名無しさん@そうだ選挙に行こう:2007/07/29(日) 19:17:20
前方参照 後方参照
前方宣言 後方宣言
129デフォルトの名無しさん:2007/07/29(日) 21:11:10
>>124
「後ろで宣言した」と言うのが間違い。

コンパイラは「ソースを読み進めて行く」んだから、
ソースの下のほうが「前方」だよ。

勘違いしている人が多いので、後方参照とか書いてあるバカ本があったりする。
130デフォルトの名無しさん:2007/07/29(日) 21:58:02
なるほろ
視点はあくまでコンパイラ…と
131デフォルトの名無しさん:2007/07/30(月) 00:29:29
へー、そういう解釈の一派もあるんだ…
132デフォルトの名無しさん:2007/07/30(月) 21:29:18
先読みって言い方はするね
133デフォルトの名無しさん:2007/07/30(月) 22:13:52
>>131 バカ本著者乙 (w
134デフォルトの名無しさん:2007/07/31(火) 00:32:44
>>133
誤爆?
135デフォルトの名無しさん:2007/07/31(火) 01:22:21
まともに(?)煽っていて誤爆に見えないが。
136デフォルトの名無しさん:2007/07/31(火) 01:42:48
まともには見えないが。
137デフォルトの名無しさん:2007/07/31(火) 07:11:23
それはあなたが無知だからです。
138デフォルトの名無しさん:2007/07/31(火) 11:44:19
>>133 を読むのに知識が必要とは思えないが。
139デフォルトの名無しさん:2007/07/31(火) 12:40:00
>>135を読み取る知識が無かったということです。
140デフォルトの名無しさん:2007/07/31(火) 12:51:57
>>135 が言っているのはこういう事でしょ。

1. >>133 は煽っている
2. >>133 の煽りは煽りとしては特に不可解な所は無い
3. よって >>133 は誤爆ではない

俺は >>133 は煽りとして不可解だと感じたから、誤爆だろうと思った。
あまり知性も感じられない書き込みだし、よく誤爆する人間なんだろうと。
141デフォルトの名無しさん:2007/07/31(火) 14:16:52
知力のない人間が知性のない人間に突っ込んだわけだ
142デフォルトの名無しさん:2007/07/31(火) 14:43:20
単に136が135の「まとも」の使い方を誤読しただけ
143デフォルトの名無しさん:2007/07/31(火) 20:38:33
>>142
>>140>>135 の意図した事と異なるのであれば、
>>135 がまともな日本語でないのが原因だよ。
まともに相手してあげた俺がバカだったみたいだね。
144デフォルトの名無しさん:2007/07/31(火) 21:31:49
なぜか140の話を始める阿呆がいる
145デフォルトの名無しさん:2007/07/31(火) 21:36:34
いちいち阿呆とか馬鹿とか付けないと文章書けない人か
146デフォルトの名無しさん:2007/07/31(火) 22:05:24
C言語はハードに近い部分を記述することができますが
最近の言語では、それは無くなってきていますね。
良いことか分かりませんが。
147デフォルトの名無しさん:2007/07/31(火) 22:20:59
148デフォルトの名無しさん:2007/07/31(火) 22:23:57
>>146
> 最近の言語では、それは無くなってきていますね。

FORTRAN の時代からハードに近い部分は高級言語では書けなかったけど?
149デフォルトの名無しさん:2007/07/31(火) 22:26:56
>>147
自演つーか、明らかに全部俺だけど…
もしかして今まで気付いてなかったのか?
大丈夫?
150デフォルトの名無しさん:2007/07/31(火) 22:44:19
>>146
148という訳で、むしろCのほうが異例とさえ言える。
151デフォルトの名無しさん:2007/07/31(火) 22:49:24
>>147は自分が正しいと思ったら絶対曲げないタイプでしょ?
152デフォルトの名無しさん:2007/07/31(火) 23:37:04
OS が書ける言語ならハードに近い部分も書けるんじゃないのかな。
Pascal, Oberon, Lisp, Smalltalk, C++, etc...
153デフォルトの名無しさん:2007/07/31(火) 23:53:30
c言語+gcc拡張で書き直されたosのsetup codeの例
http://kerneltrap.org/node/11754
http://lkml.org/lkml/2007/7/11/362

それでもまだアセンブラ(*.S)な部分があるのがなんだかなぁだが。
154デフォルトの名無しさん:2007/08/01(水) 00:06:47
個人的には、コンパイラに強く依存するくらいならアセンブラで書いた方が良いな
155デフォルトの名無しさん:2007/08/01(水) 00:09:57
アセンブラはCPUに強く依存しないか?
156デフォルトの名無しさん:2007/08/01(水) 00:19:19
それがアセンブラで書くべき局面なら躊躇無くアセンブラで書くよ
157デフォルトの名無しさん:2007/08/01(水) 00:42:40
移植性がなくても、可読性や保守性の点で高級言語を使う利点もあるでしょ。
158デフォルトの名無しさん:2007/08/01(水) 07:06:38
コンサバじゃないGC
159デフォルトの名無しさん:2007/08/01(水) 21:49:59
>>151
間違ってると言うなら、ソースつきで反論どうぞ。
バカ本はダメだよ。(w

>>152
Pascal と Lisp には標準ではハードを直接触る機能はないと思ったけど。

Oberon, Smalltalk は使ってことないからよくわからんが。
160デフォルトの名無しさん:2007/08/01(水) 23:22:13
頭固い奴だな
OSのアセンブラコードを吐くプログラム書けばいいじゃん
161デフォルトの名無しさん:2007/08/01(水) 23:27:30
それを実行時にやるというなら、生成したコードを実行するために、
任意のアドレスへジャンプもしくは関数呼出などができる機能を
持っている必要があるという制約が生じるね。
162デフォルトの名無しさん:2007/08/01(水) 23:35:31
頭固い奴だな
実行ファイル吐く(略
163デフォルトの名無しさん:2007/08/01(水) 23:42:03
ようするにブートストラップという概念を知らんのね。
164デフォルトの名無しさん:2007/08/01(水) 23:48:23
Lisp も弄った事無いで話してそうだな
165デフォルトの名無しさん:2007/08/01(水) 23:49:53
>>163
ブートキャンプしか知りません。
166デフォルトの名無しさん:2007/08/02(木) 15:00:59
>>159
本云々じゃなくて、お前の人間性な
167デフォルトの名無しさん:2007/08/04(土) 00:49:02
>>160
OSのアセンブラコードってなんだ?

自分用語は、ご自身のブログだけにしといてくれ。

>>166
反論できないから、人格攻撃か。

わかりやすい奴だな。(w
168デフォルトの名無しさん:2007/08/04(土) 01:00:32
>>147に対する「ソース付きの反論」って
どんなのを想定してたんだろう、この子。
169デフォルトの名無しさん:2007/08/04(土) 01:43:29
恐らく本人も良く分かってないのではないかな
脊髄反射で何となく汚い言葉を並べているだけでしょう
だいぶ前から会話が成立していない様ですし
170デフォルトの名無しさん:2007/08/04(土) 06:58:50
>>167
じゃあさ、お前1冊でも本書いてみろよ
俺様が添削してやるから
171pp:2007/08/04(土) 22:15:25
>>168-169
反論できないから、人格攻撃か。

わかりやすい奴だな。(w

# 夜中まで乙。

>>170
指摘されたぐらいでそんなに熱くなるな。
172デフォルトの名無しさん:2007/08/04(土) 22:25:25
以上、言い負けてから先が威勢の良い典型的な厨房でした。
173デフォルトの名無しさん:2007/08/04(土) 22:32:12
簡単な技術の話も出来ないなら他所へ行ったら良いのにな。

それはさておき、C に機能を追加する話題ばかりだったけど、
C から取り除いた方が良いと思われる機能は無いのかな。
174デフォルトの名無しさん:2007/08/05(日) 10:43:00
>>172-173
> 典型的な厨房でした。

反論できないから、人格攻撃か。
わかりやすい奴だな。

> 簡単な技術の話も出来ないなら他所へ行ったら良いのにな。

で、おまえ等 (一人かも知れんが) のレスのどこに技術の話があるんだ?

反論したければ、単に >>129 の解釈に対する反例をあげれば済む話なのに
できないからうだうだ言ってるんだろ?
175デフォルトの名無しさん:2007/08/05(日) 11:17:42
そんな下らない事で息巻いてたのか…
176デフォルトの名無しさん:2007/08/05(日) 11:26:58
>>174
>で、おまえ等 (一人かも知れんが) のレスのどこに技術の話があるんだ?

俺じゃなくてさ、>>159 の書いてる事が素人っぽかったからね。
「Oberon, Smalltalk は使ってことない」らしいけど、Pascal と Lisp も
殆ど知らないんだろうなと思って。
177デフォルトの名無しさん:2007/08/05(日) 12:26:28
>>175
へ〜、君はもっと凄いことについてレスしてるつもりだったんだ。
詳しく説明してくれるかな?

>>176
> Pascal と Lisp も殆ど知らないんだろうなと思って。

そう思うなら、どこか素人っぽいか指摘すればいいだけ。

指摘もできないから、「知らないんだろうな」とか言う技術的じゃ
ないことしか書けないんだろ?

# まさか、「OSのアセンブラコードを吐く」なんて言うわけわかめ
# のことを言ってた奴が絡んでるのかなぁ...。(w
178デフォルトの名無しさん:2007/08/05(日) 12:54:10
この人、リアルでは孤独なんだろうな。。
179デフォルトの名無しさん:2007/08/05(日) 12:57:02
おやまあ
180デフォルトの名無しさん:2007/08/05(日) 12:59:30
シャープマンはそろそろおとなしくしてね
181デフォルトの名無しさん:2007/08/05(日) 13:02:52
"ハードに近い"の定義がされてないのに何この荒れよう。
人によってリアルモードのことだったり割り込みのことだったりしそう。
#リンカスクリプトを言語に統合まだー?
182デフォルトの名無しさん:2007/08/05(日) 13:08:05
自分でやれよwwwwwwwww
183160:2007/08/05(日) 13:15:35
>>177
「OSの」は余計って事か。ごめんね。
書いたときは>>152以前は読んでなかったから、OSでも書くつもりなのかと思ってたよ。
>>161には話通じてるみたいだし、スルーされたと思って放置してた。
どのみちファイルに出力できる言語なら何でもできるだろ、
って事を>>148みたいな人へ言いたかったんだけど。
184デフォルトの名無しさん:2007/08/05(日) 13:24:18
ホントにどんな事にでも噛み付いてくる奴は居るもんだな
185デフォルトの名無しさん:2007/08/05(日) 13:41:40
夏だからな
186デフォルトの名無しさん:2007/08/05(日) 13:50:23
>>178-180, >>184-185
「技術的に指摘して」って言ったらこの様ですか...。

まあ、>>185 が言う通り 夏 なんだろうな。

>>181
> "ハードに近い"の定義がされてないのに何この荒れよう。

まあ、最低限として任意のメモリの読み書きができないとダメだろうな。

て言うか、リアルモードとか割り込みなんて事まで言い出すと特定プロセサ
シリーズ専用の言語になるから「標準」でと言うのはないだろうな。

>>183
単に茶化しただけだ、気にしないくれ。

そもそも、>>160 の書き込み自体洒落 (=原理的には可能だけど、実施が
大変面倒なので実際的じゃないという意味) だろ?

て言うか、このスレ自体がネタスレだし...。

> どのみちファイルに出力できる言語なら何でもできるだろ、

>>161 が指摘してる通りそのファイルを実行する手段が必要。
標準の言語仕様としてその機能を持ってる言語ってそんなに多くないよ。
187デフォルトの名無しさん:2007/08/05(日) 14:00:54
>>186
餌欲しい?
188デフォルトの名無しさん:2007/08/05(日) 14:09:42
>>186
各arch毎に言語拡張すれば良くね?
189デフォルトの名無しさん:2007/08/05(日) 14:37:07
>>186
言語仕様に含まれてなくとも、大抵は処理系毎にFFIとかが整備されてるもんだよ。
C言語にしてもasmは標準ではないし、C言語で適当なバイト列を関数アドレスとして
キャストして実行できたりするのも処理系が「たまたま」許してるだけ。
そんな所を君がごちゃ混ぜに語っているのが、分かってないのでは
と言われる理由かと。
190デフォルトの名無しさん:2007/08/05(日) 15:05:34
>186
>そもそも、>>160 の書き込み自体洒落 (=原理的には可能だけど、実施が
>大変面倒なので実際的じゃないという意味) だろ?

大変面倒というのは君の主観でしかないよね。
そういうのは一度作ってしまえばその環境で使いまわせるし、
やることも極めて単純な変換作業だよ。
エミュレータやコンパイラ作ったりする人なら普通に思いつく発想。
で、

>て言うか、このスレ自体がネタスレだし...。

このスレは仮にも「新C言語を作ろう」なんだから、その程度を、
大変面倒と言ってしまうレベルの人間の横槍は遠慮してもらいたい。
191デフォルトの名無しさん:2007/08/05(日) 15:10:02
>>173
ないわけではないよ>>48-61


>>188
似たようなこととして、DがCPU毎にインラインアセンブリを定めていたはず。
192デフォルトの名無しさん:2007/08/05(日) 15:16:30
>>191
D言語のインラインアセンブラはx86しか(ry
gdcは他のarchの為にasm(gasの文字列);に対応してるけど。
193>>187 かわいそう...:2007/08/05(日) 15:51:36
>>188
そう、実用的には処理系毎の定義と、何らかの言語拡張がなされているのが普通。

特に、ハード周りとかファイル関連はアーキテクチャやシステム毎の差異が大きいので
標準の言語仕様では定義してない方が多い。

C言語は、PDP + Unix と言うある意味特定環境用の言語として作られたから生い立ちと
して他の言語に比べてそこら辺の定義が比較的されていたんだ。

>>189 の言うキャストなんかも、アーキテクチャが決まっていたから許されていたが、
8086 + DOS みたいにメモリモデルによっては関数へのポインタとデータへのポインタで
ビット幅が違うなんて言う変態的なアーキテクチャだと破綻するので言語仕様からはず
されただけ。

>>189
そういう突込みを避けるために、わざわざ゛>>159 に「標準では」って
言う言葉を入れてあるんだが。

> そんな所を君がごちゃ混ぜに語っている

具体的に指摘よろしく。

>>190
まあ、ちょっと落ち着け。

そういう仕組みを作るのが面倒じゃなくて、単に「ハードに触る」だけで、ファイル作っ
てそれを実行して (必要に応じて結果を) 得るって言うことが面倒だ言ってるんだけど、
理解できてる?
194デフォルトの名無しさん:2007/08/05(日) 15:55:05
もっと毒吐けよwwww
195デフォルトの名無しさん:2007/08/05(日) 16:19:14
>>193
処理系毎じゃなくてarch毎に拡張の標準を決めるべきでね?
196デフォルトの名無しさん:2007/08/05(日) 17:22:27
>>193
>理解できてる?
何を言ってるのかさっぱりわかりませんがその前に、
「君の主観でしかないよね」って言葉は理解してるのかな?
ともかく、何が面倒なのかを焦点に議論するのは無駄でしょう。
重要なのはどういった手法であれ、目的が達成できるかどうか。
よりベターな方法なんて後からいくらでも考えればいい。

>具体的に指摘よろしく。
自覚がないなら遠慮しておきます。
それこそ「面倒」なんで。
197デフォルトの名無しさん:2007/08/05(日) 17:24:43
ANSI Common Lispという本の導入、クロージャを紹介する所でこんなのがある。

(defun addn (n) #'(lambda (x) (+ x n)))

「Cではaddnはどうなるだろう?ちょっとすぐには書けないだろう。
もっとも読者はこんなふうに思うかもしれない。大体こんなことをしたいなどと考え
たりするだろうか、と。しかし、そう考えたりしないのは、プログラミング言語が、それで
できないようなことは、やりたいと思わないように利用者を仕向けているからである。
プログラムを書く言語で考えなければならないのだから、それで書けないことをやり
たいとは考えにくい。私が初めてプログラムを書き始めたころ、それはBasicで書いて
いたのだが、再帰を使いたいなどとは考えなかった。そんなものがあることも知らな
かったのだ。私はBasicで考えていたのだ。
(中略)
(Lispを学習していく)努力の報酬として、上級のC++プログラマがBasicでの
プログラミングに感じるようなやりにくさを、C++に対して感じるようになるだろう。」
198デフォルトの名無しさん:2007/08/05(日) 18:11:01
>>195
例えば、86系用だと io 命令を拡張の標準にするとか?

ちょっとおもしろいかもしれない。

>>196
> 何を言ってるのかさっぱりわかりませんが

ああ、理解できてないなら別にもういいよ。

別に君の意見に反対する気はないし、そういう人に何を言っても無駄だ
と言うことも知ってるから。

> 自覚がないなら遠慮しておきます。
> それこそ「面倒」なんで。

# 指摘できない言い訳を2行も書くのは面倒じゃないんだ...。(w
199デフォルトの名無しさん:2007/08/05(日) 18:13:34
「俺はまともなんだが、どうにも馬鹿が多くて話が進まないなぁ」
と思ってるそこのキミ。それはつまりキミが馬鹿なんです。
200デフォルトの名無しさん:2007/08/05(日) 18:17:02
>>198
> > 自覚がないなら遠慮しておきます。
> > それこそ「面倒」なんで。
> # 指摘できない言い訳を2行も書くのは面倒じゃないんだ...。(w
>>196のこの部分は、
「ああ、理解できてないなら別にもういいよ。
別に君の意見に反対する気はないし、そういう人に何を言っても無駄だ
と言うことも知ってるから。」
という意味のことを、それよりは少し短く言ってるだけだと思うよ。
201デフォルトの名無しさん:2007/08/05(日) 18:17:51
その典型的な例がシャープ
202デフォルトの名無しさん:2007/08/05(日) 18:28:03
できない言い訳に、他人の無能さを持ち出す人って饒舌だからね
203デフォルトの名無しさん:2007/08/05(日) 19:21:10
>>200
はいはい、言い訳はもう結構です。
204デフォルトの名無しさん:2007/08/05(日) 20:37:33
何を話してるのかはさっぱりわからんが、誰が痛いかはよくわかる。
205デフォルトの名無しさん:2007/08/05(日) 20:48:27
>>204
だな。主観で話してるお前が一番痛い。
206デフォルトの名無しさん:2007/08/05(日) 20:57:42
いや、そいつは二番目だ。
一番は俺だからな。
207デフォルトの名無しさん:2007/08/05(日) 21:10:31
いやいや俺だ
208デフォルトの名無しさん:2007/08/19(日) 18:24:44
>>207
そうだな
209デフォルトの名無しさん:2007/08/19(日) 19:23:20
ここは誰が一番痛いか競うスレですかそうですか。
210デフォルトの名無しさん:2007/08/19(日) 19:32:53
そうだよ
君もエントリーするかい
211209:2007/08/19(日) 19:43:53
よろしくお願いします。
一応下記の至らぬスレの主です。

おら!Nをオトメに見つけて++Nを得るムを作らん?!
http://pc11.2ch.net/test/read.cgi/tech/1187428876/l50
212デフォルトの名無しさん:2007/08/19(日) 20:05:21
ワロタw
213デフォルトの名無しさん:2007/08/19(日) 20:10:54
>>211
糞スレ立てるな
214209:2007/08/19(日) 20:21:58
>>212-213
何も成果物を作れないかもしれませんが、
気長に見てやってください。

スレ違い及び売名行為失礼しました。
逝ってきます。
215デフォルトの名無しさん:2007/08/20(月) 18:32:13
酷いスレだな
216デフォルトの名無しさん:2007/08/25(土) 12:46:57
・変数スコープをなくし、全てグローバルとする。
スコープとはいわば開発者に脳内スタックの確保を一段
強要する機能であり、開発の邪魔である。
変数は全て設計者が関数一覧表とそれに付随する変数一覧表にて管理する。
ローカルだからと適当に変数を作り捨てるようなことをするから
ゴミ変数が増え、バグとなる。

・ポインタの廃止。ポインタは労多くして功少なしの典型機能。
・キーワードを全て大文字化する。小文字は小さく目に悪い。
217デフォルトの名無しさん:2007/08/25(土) 12:48:11
全部ボツ
218デフォルトの名無しさん:2007/08/25(土) 15:13:41
>>216
COBOL でも弄ってろ無能。
219デフォルトの名無しさん:2007/08/26(日) 17:08:28
>>216
要約するとガベージコレクションを付けろってことだな
220デフォルトの名無しさん:2007/08/27(月) 02:45:42
>>216
異論の余地がないほど同意
cなんかよりBASICのほうが1億光年優れてるよな
221デフォルトの名無しさん:2007/08/27(月) 18:09:12
>>220
>異論の余地がないほど同意
本人だからか?
222デフォルトの名無しさん:2007/09/06(木) 17:28:11
小学校でローマ字を習うまでは大文字しか読めなかったから
BASICはできてもCはできなかった
223デフォルトの名無しさん:2007/09/06(木) 17:39:30
自分は小学校でローマ字を習う以前に公文で英語やってたから小文字も読めた
でもプログラミングはやってなかった
つかPC自体が珍しい時代だった
224デフォルトの名無しさん:2007/09/20(木) 10:00:55
C言語にGCとデリゲートとコルーチンっていうか、ファイバーっていうんだっけ?中断できるやつ。があれば割とすごいことになりそうな感じ。
あ、あとエクスポート可能なテンプレートかジェネリックスもね。

はっきり言ってクラスはなくても何とかなる。thisコールが結構べんりっちゃーべんりだけど。
225デフォルトの名無しさん:2007/09/20(木) 10:25:33
>>216
ローカル変数は無いと再帰処理が出来なくて悲惨だぞ。その再帰も深くなるとばぐっちゃうけどね。
ポインタはローレベル叩くとき必要だけど、普段はあんまり恩恵ないな。イテレータにしても実用上は問題ないかもね。
キーワードは、色つきエディタ使えば解決。え!?もってないの???VCが無料だって言うのに。
226デフォルトの名無しさん:2007/09/20(木) 11:41:51
>>216
int i; とかをグローバルにする知り合いがいたんだが、

void g(void) {
  for (i = 0; i < Y; i++) 何かする;
}

void f(void) {
  for (i = 0; i < X; i++) g();
}

みたいなことやってバグってハマってたな
227デフォルトの名無しさん:2007/09/20(木) 13:09:15
>>216
異論の余地がないほど同意
cなんかよりBASICのほうが1億光年優れてるよな
228デフォルトの名無しさん:2007/09/20(木) 13:22:00
同意するなら異論に反論してからにすれば
229デフォルトの名無しさん:2007/09/20(木) 14:06:23
B    A    S     I      C
230デフォルトの名無しさん:2007/09/20(木) 15:20:03
俺の専ブラが>>216をグロ判定したんだけど
231デフォルトの名無しさん:2007/09/20(木) 22:53:59
暇があったら俺のじゃんけんプログラム倒してくれ。

*N88互換BASICを使っている人・・・・
ttp://pc11.2ch.net/test/read.cgi/tech/1189476569/l50 の 24 参照
232デフォルトの名無しさん:2007/09/21(金) 18:11:30
タートルグラフィックを準標準に入れてくれないかねぇ。
任意で実装って感じでさ。
あれこそ、コンピュータグラフィックスだよ。
233デフォルトの名無しさん:2007/09/23(日) 21:37:44
ただのタートルグラフィックじゃだめだな。
3次元に拡張して、タートルがグリグリ動く奴でヨロ。
234デフォルトの名無しさん:2007/12/24(月) 02:30:36
よし、ゲーム向け言語


  #include<game.h>
  
  int main()
  {
    CreateGame(CG_SHOOTING)
    return 0;
  }


これでシューティングゲームができる言語を作ってみそ
235デフォルトの名無しさん:2008/01/27(日) 17:24:03
無理だろうけど
#iconfile iconfilename
と書くと作成される実行ファイルにiconfilenameで指定したアイコンファイルが関連付けられる機能
236デフォルトの名無しさん:2008/01/28(月) 18:42:16
break+数字で複数のループを抜ける。

while(1) { /* ループ1 */
   while(1) { /* ループ2 */
     break2;
   }
}
237デフォルトの名無しさん:2008/01/28(月) 18:45:05
gotoでいいじゃん。
238デフォルトの名無しさん:2008/01/28(月) 19:09:53
>>236
UWSCで使えるけど便利だよね。

あと、forループで規定回数で抜けるのと途中で抜けるのとをスイッチするオプションがあれば・・・
あ、普通にフラグとスイッチ使えばいっか。
239デフォルトの名無しさん:2008/01/28(月) 21:36:08
>>236
数字はやだ、ラベルにしてくれ。

Loop:
 while(1) { /* ループ1 */
  while(1) { /* ループ2 */
   break Loop;
  }
 }
240デフォルトの名無しさん:2008/01/28(月) 21:37:48
それ gotoって言うんだよ
241デフォルトの名無しさん:2008/01/28(月) 22:57:11
そんなこと言い出したから、while だって、if + goto なわけだが。
242デフォルトの名無しさん:2008/01/29(火) 17:27:37
>>239
まんまD言語な件。いや、Javaでもあったかな。
243デフォルトの名無しさん:2008/02/17(日) 19:38:46
int main(int argc, char *argv[]) {
    switch(VersionComparison(argv[1], argv[2])) {
        case 1:
            printf("%sの方がバージョンが新しいです。\n", argv[1]);
            break;
        case 2:
            printf("%sの方がバージョンが新しいです。\n", argv[2]);
            break;
        default:
            printf("%s, %sのいずれもバージョン情報を含んでおりません。\n", argv[1], argv[2]);
            break;
    }
    return 0;
}
244デフォルトの名無しさん:2008/04/09(水) 20:32:13
あげもかねてC言語ネタ投稿 実際にはコンパイルできないソースファイル

#include "Windows.h"
extern "C" __declspec (dllexport) int isosmode(void);
int _tmain() {
  switch(isosmode()) {
    csae 0:
      MessageBox(NULL, "現在のモードは、アドバンスモードです。", "モード判定", MB_ICONINFORMATION);
      break;
    case 1:
      MessageBox(NULL, "現在のモードは、セーフモードです。", "モード判定", MB_ICONINFORMATION);
      break;
    case 2:
      MessageBox(NULL, "現在のモードは、デバックモードです。", "モード判定", MB_ICONINFORMATION);
      break;
    default:
      MessageBox(NULL, "CHKMODE.DLLは存在しません。", "ファイルの欠落によるエラー", MB_STOP);
      break;
  }
  MessageBox(NULL, "なんちゃって、isosmode()もCHKMODE.DLLも実際には存在しません。", "注意", MB_ICONINFORMATION);
  return 0;
}
245デフォルトの名無しさん:2008/04/09(水) 20:36:34
printf("私は弱者を愛し、守っていきます。");

紳士言語
246デフォルトの名無しさん:2008/04/09(水) 21:05:21
>>245
ここではスレ違いの内容だよ
そういう書き込みは“適当に作ったC言語の関数を貼っていくスレ”の方で。
247デフォルトの名無しさん:2008/06/19(木) 18:33:34
>>225
関数の引数を増やしてそれをローカル変数代りにすればOK。
216が関数の引数もなくせ、と言っているなら知らんが...。
248デフォルトの名無しさん:2008/06/19(木) 21:27:03
>>241
if + goto + goto だと思うが。
249デフォルトの名無しさん:2008/06/19(木) 21:52:07
>>248
大抵のコンパイラは

 goto L1
L2:
 ...
 if(...) goto L2

に展開するから、goto + if + goto が正しいな。

って言うか、5ヵ月近く前のレスにレスするほどの内容か?
250>>249:2008/06/19(木) 21:53:13
ラベル付け忘れた... orz

 goto L1
L2:
 ...
L1:
 if(...) goto L2
251デフォルトの名無しさん:2008/06/20(金) 22:40:22
>>249
どうしてもレスつけたかったんです、勘弁してください。
252デフォルトの名無しさん:2008/07/24(木) 01:36:50
>>1
やる気があるなら、予約語を全部排除して、
全部自前で定義できるようにしてくれ。
そういう仕様なら乗ってやる。
253デフォルトの名無しさん:2009/01/29(木) 00:57:56
>>252
予約語を自前で定義して何の得があるんだよwwwww
254デフォルトの名無しさん:2009/01/29(木) 01:56:38
>>252
PL/I思い出した
255デフォルトの名無しさん:2009/01/30(金) 21:43:19
>>252

俺様専用の俺言語が定義できる。
256デフォルトの名無しさん:2009/01/30(金) 23:44:01
schemeでいいよ
257デフォルトの名無しさん:2009/01/30(金) 23:47:48
D言語でいいよ
258デフォルトの名無しさん:2009/02/01(日) 05:23:02
boolは欲しいな。あれ、追加されてたんだっけか。
あと、複素数型とか、HLSLみたいにベクトル扱いやすくする機能も欲しい。
数値計算に特化すれば需要あるんじゃね?
259デフォルトの名無しさん:2009/02/01(日) 05:48:44
そんなのよりステータスレジスタを抽象化して見れるようにしてほしい
わざわざアセンブラで書く手間を減らすために
260デフォルトの名無しさん:2009/02/01(日) 07:48:44
>258
_Bool と _Complex は C99 で追加されている。
261デフォルトの名無しさん:2009/02/01(日) 11:35:51
>>259 無いプロセッサはどうすんだよw
262デフォルトの名無しさん:2009/02/03(火) 22:31:14
ttp://d.hatena.ne.jp/textfile/20090128/lang
こんなのもあるんだな
1つ目のリンクは切れてるみたいだけど
263デフォルトの名無しさん:2009/02/03(火) 22:47:48
C++のように無秩序に機能を増やすのではなく、
Cの良さを守りつつ、Cと同じ次元でより使いやすいCを作りたい。

名づけてC+

・オブジェクト指向(クラスその他)は導入せず。
・当然ガベコレなんてついてない。
・標準関数ライブラリは古くなってしまったので全面改訂。
・文字列を扱うstring型の追加。文字列の扱いに関しては全面強化。
・配列・ポインタは当然維持。ただし分かりにくい構文は改訂する。
 (配列は int[] array; のように宣言を行うようにする。ポインタも long* x, y; だと*は型名に付いているとする。)
・malloc関数, free関数のキーワード昇格。
・namespace導入。
・ヘッダファイルは不要に。関数プロトタイプ宣言不要。
264デフォルトの名無しさん:2009/02/03(火) 23:27:09
> 名づけてC+

+ は単項演算子じゃないから文法エラーとか
265デフォルトの名無しさん:2009/02/04(水) 02:01:50
互換性は捨てるのね…。
266デフォルトの名無しさん:2009/02/04(水) 12:20:40
>>263
>・当然ガベコレなんてついてない。
けど
>・文字列を扱うstring型の追加。
なのか。遅そうだな。
267デフォルトの名無しさん:2009/02/04(水) 21:58:46
>263
なんかCycloneのサブセットな気が。
268デフォルトの名無しさん:2009/02/15(日) 10:30:52
cycloneってこれ?
ttp://cyclone.thelanguage.org/
269デフォルトの名無しさん:2009/02/15(日) 13:36:48
GCと境界チェックさえつけてくれればおk
270デフォルトの名無しさん:2009/03/03(火) 01:54:47
>>263 に型周りの強化(強力な型推論、総称型)が入れば十分かなと思う。
271デフォルトの名無しさん:2009/03/03(火) 09:57:34
いろんな言語混在できる言語で。
272デフォルトの名無しさん:2009/03/03(火) 20:25:41
いろいろつけるから、ごちゃごちゃして、使いづらくバグの温床になる。
いっそのこと、ばっさり機能を削ぎ落とすのがよろしい。でも低レベルな操作は行いたい。
というわけで、新仕様を次のようにする。

--
void main()
{
asm文の繰り返しのみ;
}

--
以上。変数も条件文もgoto文も制御構造も何も無いので、覚えやすい。
273デフォルトの名無しさん:2009/03/03(火) 22:51:49
null終端文字列じゃなくて、文字数で管理するようにしようぜ
いや現状のCでも文字数で管理は可能だけど、標準ライブラリがnull終端前提じゃん
274>>249:2009/03/03(火) 23:16:41
標準ライブラリ以前に、文字列定数が文字数で管理するような形になら
ないから、現状のCでそういうことやるのは激しく困難だと思う。
275デフォルトの名無しさん:2009/03/04(水) 11:56:02
>>273
Pascalでよくね?
276デフォルトの名無しさん:2009/03/04(水) 12:04:03
>>272
各種ジャンプがあるだろ。
277デフォルトの名無しさん:2009/03/04(水) 21:56:44
perlのコードが混ざっててもエラーにならないように作ってくれ
278デフォルトの名無しさん:2009/03/05(木) 00:24:05
>>273
pascal キーワードを導入すればいい。

string cstr = "This is a C string." ; // ヌル終端の標準C文字列型
pascal string pastr = P"This is a Pascal string."; // 先頭がバイト数のPascal文字列型
279デフォルトの名無しさん:2009/03/05(木) 01:22:45
いっそのことコンパイラ作りに特化した仕様にしちゃえYO
その後は各自自分仕様の言語を作ると
280デフォルトの名無しさん:2009/03/05(木) 01:41:25
これからの時代は予約語オーバーロードですよ
281デフォルトの名無しさん:2009/03/05(木) 19:05:08
>>280
それは凶悪すぎるだろうww

282デフォルトの名無しさん:2009/03/05(木) 20:34:09
C#からもってこれそうなのある?
283デフォルトの名無しさん:2009/03/06(金) 01:17:52
予約語オーバーロード
284デフォルトの名無しさん:2009/03/06(金) 04:22:43
組み込み型に対する演算子オーバーロード
285デフォルトの名無しさん:2009/03/09(月) 11:45:37
匿名メソッド (関数ポインタ)
286デフォルトの名無しさん:2009/03/10(火) 23:55:37
型水路
287デフォルトの名無しさん:2009/03/11(水) 14:03:58
CMカット
288デフォルトの名無しさん:2009/03/11(水) 16:23:26
既存のCのソースを利用したりCへ必ず変換できる言語にしたい。
文法はCと非互換でよい。
現状のマクロをなんとかしたい。
短い記述で濃い内容を書きたい。
289デフォルトの名無しさん:2009/03/11(水) 16:25:42
スクリプトっぽく書けるようにしたい。

グローバルに
puts("hoge");
って書けば

int main(){
 puts("hoge");
}
と同じ意味にしたい。
290デフォルトの名無しさん:2009/03/11(水) 16:28:34
do-whileって判定を後ろに書くのが人気無いよね。
前に書けるようにするか。
他言語ではbefore until after untilの構文どうなってるかな。
291デフォルトの名無しさん:2009/03/11(水) 16:31:05
for(int i=0;i<n;++i)
は定型化してるから、もっと単純化できる。
いい構文ある?
292デフォルトの名無しさん:2009/03/11(水) 16:34:28
JavaScriptっぽく;(セミコロン)の省略できたっていいよな。
Pythonっぽくインデントでブロック作れてもいいよな。

いずれも問題点や文句言う奴がいるがうまく丸く収まんないかな。
293デフォルトの名無しさん:2009/03/11(水) 16:41:24
>>285
qsort,signalなんかで使えたらうれしいよね。
294デフォルトの名無しさん:2009/03/11(水) 17:38:55
GCとかの実行時のサポートに頼らない範囲で、出来る限り高水準な言語を作るというのが面白そう
強力な型システムやメタプログラミング能力を用意して、少なくとも無名関数くらいはGCのある言語に近い気楽さで書けるように
一番の問題はたぶんメモリ管理だけど、線形型を使ってなんとかできないだろうか
295デフォルトの名無しさん:2009/03/14(土) 01:08:44
>>283
予約語オーバーライドができる言語なら知ってるんだが
296デフォルトの名無しさん:2009/03/14(土) 04:46:04
#define ですね、わかります
297デフォルトの名無しさん:2009/03/14(土) 04:49:47
#define内で#defineや#ifとかが使えればいいのに
298デフォルトの名無しさん:2009/04/16(木) 00:38:30
そうかなあ
299デフォルトの名無しさん:2009/05/31(日) 20:27:15
いろんなとこから仕様はいただいて、テキトーに短くしたらこうなった

c/Hello{
static v/main(str[] args) >> pub{
printw("Hello,World!");
}
}



300デフォルトの名無しさん:2009/06/04(木) 18:49:17
いじくるつくーるなら for(0,i<n) { (命令文) }; という構文がある。
たぶんC言語では無理。
301デフォルトの名無しさん:2009/06/04(木) 21:57:33
D言語ならforeach(i;0..n)でおk
302デフォルトの名無しさん:2009/06/04(木) 22:00:26
指定したハンドルのレジストリキーに関する情報をlpc構造体に渡すRegQueryInfoKey

LPC lpc;
char n[100];
RegQueryInfoKey(HKEY_CLASSES_ROOT, lpc);
wsprintf(n, "HKEY_CLASSES_ROOTの1つ下には%i個のサブキーがあります。", lpc.Subkeys);
MessageBox(NULL, n, "関数RegQueryInfoKey", MB_OK);
303デフォルトの名無しさん:2009/06/18(木) 22:48:47
というかOSがかける程度に強力であり、
かつ高尚で可読性に優れたものが書けるならいうことなしだ

そうするとおもいっきりModula-2になるわけだが。

だからあのキモイbegin〜end構文を{〜}の構文にして、
コンパイラの実装がしやすく、またプログラミング初心者も覚えやすいような
簡潔な文法があればいい。
あとこれは個人的意見だけど、できるだけソースコードは短く書けたほうがいい。
じぶんのキーボードの打ち方が間違ってるのだろうけど、腱鞘炎になりかけたことがあるから。
304303:2009/06/19(金) 18:52:46
>>291
ちなみにこれについてちょいと思い付いたので書いておく。
型宣言した時点でその型の初期値に初期化されるとして…
for((int i)++ < 5){
//....
}
305デフォルトの名無しさん:2009/06/19(金) 22:13:54
Inferno って OS で使われてる limboo はどう?
306デフォルトの名無しさん:2009/06/20(土) 21:50:33
>>305
後でちょいと調べてみる。

ついでに>>236>>239について思いついたので書いておく。
nest(1)://"nest"とは入れ子という意味。
while(..){
nest(2):
while(..){
break(1);//nest(1)のループを抜ける
}
}
307303 ◆pFphp4Ej4w :2009/06/24(水) 19:28:40
>>278
これについては、
C言語文字列
nullStr
Pascal文字列
byteStr
とすればいい。
この用途のみでPascalキーワードが存在するのは許せない。
あと、306は私だ。
308303 ◆pFphp4Ej4w :2009/06/29(月) 08:17:32
取りあえず考えてみた。
1.変数宣言
変数宣言はC言語のそれとは全く逆。
例)x int;
これは英語の文法にあわせて読みやすくしたため。
2.ポインタ
ポインタは次のように宣言。
例)p: point(int);
or
p: int:;
続きは家に帰ってから。
309303 ◆pFphp4Ej4w :2009/06/30(火) 08:05:49
3.代入演算子
代入演算子には
:=
を使用する。
例)
a int:=5;
3.比較演算子
比較演算子には
=
を使用する。
例)
if(x=0){
...
}
310デフォルトの名無しさん:2009/06/30(火) 23:13:46
C言語への不満ってそういうところじゃねーと思うが。
例えば実行時のコンテキストとソースコード上のlexicalなコンテキストが同一で
あるところとかそういうモデルな部分に革新が必要なんじゃないか?
読みやすさも大事だと思うがそういうのはおれスクリプト言語でやってればよし。
311303 ◆pFphp4Ej4w :2009/07/01(水) 07:45:40
>>310
なるほどねぇ…
確かにそうかもしれない。
その抜本的な改革についてちょっと考えてみるよ。
それと、ポインタ型の宣言について、
p: point(int);
よりも
p point(int);
こっちの方がいいかな?

ただこうするとpがポインタ型と言うことが分かりにくくなってミスが増えるかも。
312303 ◆pFphp4Ej4w :2009/07/01(水) 08:18:08
あと一つ質問。

匿名メソッドは必要かね?と言うかデリゲートは必要か?
313デフォルトの名無しさん:2009/07/01(水) 13:13:15
今からなら新C言語はC言語をベースにするよりD言語からクラス抜いたものをベースにした方が良いと思われ。それにビットフィールドとかC99とかgccの拡張部分とか足してきゃいいよ。
ポインタの実体化はDelphiのがいい。
関数の戻り値の型の書き方はC++0xやEMACScript4で提案されているような後置も特殊化用引数(テンプレート/ジェネリックパラメタ)を戻り値の型より前に持ってくるという点で一理あるが、読みやすさという点では従来の方が高い。まぁ難しい所だね。
314303 ◆pFphp4Ej4w :2009/07/01(水) 16:16:39
>>313
わし的には、
ベースはC言語
クラス、インタフェース、また必要であればデリゲートなどの匿名メソッドの導入(個人的にアレは嫌いだ)
強力な型推論の導入
メモリ管理にはガベージコレクタは用いず、malloc/new・free/delete演算子を使用
ポインタは廃止しない(廃止すると複雑なデータ構造がつくれなくなる。)
文法の抜本的な変更
nullchar/bytechar型の導入
を考えていたのだが…(ついでに名前はシーキューブ。C3またはCqbと書く)

D言語かぁ…
それもありだね。
そしたら名前はD++かな?
315デフォルトの名無しさん:2009/07/01(水) 16:48:50
>>314
D言語は
-class、interface、delegate全てある
-変数初期化時・関数の戻り値の型推論がある
-ポインタも当然ある。
-invariant(char)* (C言語の文字列)とinvariant(char)[] (Pascalの文字列)がある
まぁ違う所は
-メモリ管理はGC基本でマニュアル管理はカスタムアロケータがある
-文法はC言語由来が多い。
って所か。
316303 ◆pFphp4Ej4w :2009/07/01(水) 18:28:42
>>315
となるとD言語からGCを取り外しただけの言語になるわな。

なんか「これがほしい!」って言うのはないの?
317デフォルトの名無しさん:2009/07/01(水) 18:52:26
D言語は細かい所がなおざりだから、改善すべき点は文法も含め多いと思うよ。
318303 ◆pFphp4Ej4w :2009/07/04(土) 20:53:44
そういえば、マクロのこと書きそびれてた。
マクロは#〜で定義され複数行をサポートする。
例)
#hoge
...
#hoge end
319デフォルトの名無しさん:2009/07/12(日) 23:56:48
303 はもういないの?
320303 ◆pFphp4Ej4w :2009/07/13(月) 18:50:34
ごめん。この間まで期末テストで今は風邪でダウン中。
321303 ◆pFphp4Ej4w :2009/07/13(月) 21:45:52
追記:

明日から4日ぐらいはずっと学校が休みなのでこのスレに張り付いていられると思います。
322デフォルトの名無しさん:2009/07/14(火) 00:21:22
とりあえず現状どうなってんのか、まとめみたいなのがほしいかな
323デフォルトの名無しさん:2009/07/14(火) 05:29:59
構文変えるなら利点と欠点まとめてほしい。
忘れないで欲しいのが、パーサによる解析しやすさ、IDEによる入力支援の効きやすさ、他人による読みやすさ、データの流れの追いやすさ、書きやすさ。
324デフォルトの名無しさん:2009/07/14(火) 12:29:10
>パーサによる解析しやすさ
こんなこと考えるから C の宣言は判り難くなったんだ。
325303 ◆pFphp4Ej4w :2009/07/14(火) 16:17:01
>>322
了解です。今から書きます。

>>323
>>303でも書いたように
> コンパイラの実装がしやすい
言語にしたいと思ってはいるのでできれば解析はしやすくしたいと思っています。
しかし>>324さんが述べているように構文の読みやすさ、書きやすさなんかを
犠牲にするのはちょっとカンベン・・・
というわけでもしかしたらその点は犠牲になる可能性があります。

とりあえず今のところ(私の中で)決まっている言語仕様:
1.変数宣言
変数は次のようにして宣言される
x int;
利点:英語に従った文法なので初心者が読みやすくなる。
欠点:Cに慣れた人は確実に間違えてエラーを多発させる要因になる。
2.クラス・関数の定義
クラス・関数は次のようにして定義
c/hoge{
void hogehoge(){
...
}
}
クラスに内包されない関数も定義可能。
void hoge(){
...
}
int hogehoge(){
...
}
続く
326303 ◆pFphp4Ej4w :2009/07/14(火) 17:06:23
続き
利点:c/〜とやると若干短くなる。
欠点:c/〜じゃ最初見た人は何かと思うかもしれない。
また実行時に実行される関数は
int main(){
...
returrn 0;
}
でOK。

3.演算子について
代入演算子
:=
比較演算子
=
!=
<
>
<=
>=
とする。(代入演算子にほんとうは<=を使いたいのだがこれじゃ間違える人が続出すると思うので今のところはこれで。今後変更の可能性大。)

利点:"==”は比較演算子ではないのでで初心者のミスが減る(一人よがりかなぁ?)
欠点:確実に間違えられる。
今日のところはここまで。
327デフォルトの名無しさん:2009/07/14(火) 18:58:54
int foo[][] vs. int[][] fooな論争があるが、foo int[][] (foo is int of array of array)にしちゃうのかぁ。パーサに先読みが必要になるのでかなり速度が低下するのと、IDEの補完的にマイナス…いやこれは既に定義された名前を避けるという意味では問題ないか。
クラス定義は、"c/"を識別子にするってことかな。そうだとすると変数でcを宣言した場合に厄介なことになる。識別子にしないとなるとlexerで分離できないので速度が低下する。
演算子についてはDelphi的なので言うことは無いかな。
328デフォルトの名無しさん:2009/07/14(火) 19:08:55
それと、識別子に使える記号の数は少ないので、アルファベット+記号を識別子にすること自体は賛成かな。
329303 ◆pFphp4Ej4w :2009/07/14(火) 19:41:05
追記:
これはやだ・これを追加しろ・この構文はやだ等ご意見があればご自由に。
と書こうと思っていたら>>327さんがもう書いていらっしゃいました。素早い…
それはさておき、ご意見ありがとうございます。
パーサの速度にしたがってコンパイル速度も落ちるので、これは重大な問題です。しかもこれを解消するには構文を捨てないといけないという…
これについては今後なるべく早く議論して解決策を決定すべきでしょう。(この過疎スレで人が集まるかどうか…)
解決策の一つとしてはこの言語のみに特化したパーサを開発することですが、これじゃ焼け石に水です。
どうしましょうかねぇ…
330デフォルトの名無しさん:2009/07/14(火) 19:45:55
幾つか意見を言わせて貰うね。

----

"c/" は、俺は否定的。

"c" + "/" として扱っても、"c/" としてまとめて扱っても、どちらにせよ 『 b := c/a; 』 が書きにくくなる。
トップレベルに書いた "c/" のみを特別扱いすれば問題ないとは思うけど、CP が悪いわな。

そんなに 100 も 200 もクラス定義するわけじゃないんだから、得られるものは少ないと思うよ。

----

変数宣言と関数宣言の型指定が正反対なのが気になるところ。

変数にあわせるならば 『 hoge() void { 〜 } 』 になるんじゃないかな。
C に慣れたひとも、VB or Pascal に慣れた人も、どちらも間違えると思うよ。
どちらかに統一すべきだと思う。

----

代入演算子、"<-" を使ってみたらどうかな。打ちにくいけど。

----

比較演算子で気になるのは、= と != の文字数が違うところかな。
細かいことだけど。
331303 ◆pFphp4Ej4w :2009/07/14(火) 19:50:44
追記:
>>329というわけでこの過疎スレに議論のために人を呼び込まねばなりません。ですから、これからはage進行で行きましょう。
ってなわけでage!
332303 ◆pFphp4Ej4w :2009/07/14(火) 19:57:26
>>330
すびません、リロードし忘れてましたorz
いま外出中で携帯から書き込んでるので家に帰りつくまでお待ちください。
333デフォルトの名無しさん:2009/07/14(火) 20:16:45
>代入演算子、"<-"
a<-5とかそれなりに使う気がするので止めてほしい。
:=も条件演算子との兼ね合いで(識別子として扱えば問題は無いものの)読みにくくなりそう。
334デフォルトの名無しさん:2009/07/14(火) 20:18:42
個人的な案。
c -> newC
= :=
== = or !!=
!= !=
< < or !>=
<= <= or !>
> > or !<=
>= >= or !<
要は、!に否定と言う意味を持たせるなら演算子そのものも否定できたらどうかな、と。
# !の多重を認め出すと、!!!!!!!!!!=なんて書けてしまうのは実は問題かもしれないw
335334:2009/07/14(火) 20:21:18
失礼。醜かったので書き直し。
--
c → newC
= → :=
== → = or !!=
!= → !=
< → < or !>=
<= → <= or !>
> → > or !<=
>= → >= or !<
336デフォルトの名無しさん:2009/07/14(火) 20:22:21
>>334
D言語には!>=とか普通にあるが<とは意味が違う(浮動小数点のNAN的な意味で)。
337336:2009/07/14(火) 20:25:50
これな。
http://www.digitalmars.com/d/2.0/expression.html#floating_point_comparisons
<>とか<>=とか!<>=とかもある
338303 ◆pFphp4Ej4w :2009/07/14(火) 20:46:16
今家に帰り着きました。
・・・つついてみれば意外と人がいるもんですね。

>>330
については、そこまで頭回ってなかった私の問題です。申し訳ない。
というわけで改訂版。
2.クラス・関数の定義
クラス・関数は次のようにして定義
c/hoge{
hogehoge void(){
...
}
}
クラスに内包されない関数も定義可能。
hoge void(){
...
}
hogehoge int(){
...
}

あと"c/"について。

そうですか・・・。やっぱりclass{...}にしたほうがいいですかね?
ここは議論の余地があるようです。

>>334さんのは全面採用したいですね・・・
まぁ"!"は2文字以下でという限定をつければいいと思うので。
339デフォルトの名無しさん:2009/07/14(火) 20:51:10
>>338
hoge int() { ... }

って表記はどうなのかな。
変数宣言と合わせると LALR なら問題ないだろうけど、LL なら 3 くらいは欲しいよね。
340303 ◆pFphp4Ej4w :2009/07/14(火) 21:42:41
>>339
なんだか考えるべきことが大量に増えてきましたね…
私はそろそろ寝たいと思います。(風邪も治したいので。)では、おやすみなさい。
341デフォルトの名無しさん:2009/07/14(火) 22:02:02
>>1
C++の何が不満なのかまず説明してくれ
それが説明出来ないなら議論する価値もない
342デフォルトの名無しさん:2009/07/14(火) 22:50:14
a = a + b を a += b と書けるように、
別の書き方をしたら記述量が減るなら意味があるけど、
>>334 みたいなのにどういう利点があるのかいまいちわからない。
343デフォルトの名無しさん:2009/07/14(火) 22:54:15
まあでも代入と比較が:=と=なのは趣味の問題、別に構わないと思う。
Cっぽくない構文の言語なら珍しくはない。
344デフォルトの名無しさん:2009/07/15(水) 01:43:31
ちょっと視野が狭すぎやしないか?
その程度の違いならC言語でいいじゃんと思ってしまう。
参考までに303 ◆pFphp4Ej4wが使えるプログラミング言語は何だい?
345デフォルトの名無しさん:2009/07/15(水) 03:30:46
GNOME 用の C 言語拡張みたい

Valaについて語りませんか
http://pc11.2ch.net/test/read.cgi/linux/1246771919/
346303 ◆pFphp4Ej4w :2009/07/15(水) 09:11:34
>>344
私が使えるのですか?
ObjectPascal
Java
C言語
C++
D言語は現在勉強中。
347デフォルトの名無しさん:2009/07/15(水) 21:09:58
>>341
たしかにそこは聞きたいな。C++でなくてもいいけど。
今あるCの後継的な雰囲気の言語のどこがまずいと考えていて、
どう直そうとしているのか。それによって何が良くなるのか。
誰(言語ユーザ、コンパイラ制作者、ライブラリ制作者、IDE、etc)が得するのかなどなど……。
348デフォルトの名無しさん:2009/07/15(水) 21:26:49
代入演算子変えるなら、もはや「新C言語」じゃないのでは?
349303 ◆pFphp4Ej4w :2009/07/15(水) 22:01:26
>>348
それいっちゃオシマイです…
それと、>>305についていまさらながら調べてみました。
LimbooというのはC言語の作者が設計したPascalライクなC言語のようです。
やはりC言語をつくった人にも思うとこがあったのですかねぇ…
350デフォルトの名無しさん:2009/07/15(水) 22:25:00
演算子なんてjavascript程度が用意してるので十分だと思うんだよね。
そんなに既存のcやその他追随してる言語に不都合な点があるのかな。
351デフォルトの名無しさん:2009/07/15(水) 22:28:42
>>350
Perlまで増やせとは言わんが、ECMAScript 3程度じゃ全然足りん。
352デフォルトの名無しさん:2009/07/15(水) 22:33:24
演算子いらね, 結局 (+ x y) の 2 引数関数じゃん
353デフォルトの名無しさん:2009/07/15(水) 22:36:33
もっと三項演算子を増やせとな?
354デフォルトの名無しさん:2009/07/15(水) 22:39:24
宣言以外の文を無くして全部式にしようぜ
355303 ◆pFphp4Ej4w :2009/07/15(水) 23:18:57
>>354
それじゃ関数型言語そっくりに…

どうもわたしは規制に巻き込まれたようです。
何もしてないんだけどな…
こういうもんなんですかね?
356デフォルトの名無しさん:2009/07/15(水) 23:25:40
そういうもんです。

ぶっちゃけ、既存の言語を超えようとしたり、改善しようとしたりするのが間違ってると思う。
自分が作りたいものを作りたいように作ればいいんじゃないかな。俺はそれで満足する。
357デフォルトの名無しさん:2009/07/15(水) 23:35:13
>>356
目的が自分が満足するためならそれでいいのだろうけど。
358303 ◆pFphp4Ej4w :2009/07/15(水) 23:56:47
>>356
確かに。それの見本がC++ですね。
359デフォルトの名無しさん:2009/07/16(木) 06:25:30
>>349
LimbooじゃなくてLimboだよ。w
Limbo は並行計算が目玉と思われ。Erlangよりずっと分かりやすい。
C言語の悪評極まる宣言についてはリッチー先生さすがに反省したようで
Pascal風に直してあるね。
Limboに先行してAlefという言語もある。
360303 ◆pFphp4Ej4w :2009/07/16(木) 10:25:19
>>359
すいません。おっちょこちょいなもんで…
361303 ◆pFphp4Ej4w :2009/07/17(金) 22:43:22
なんか規制解除されてるかわかんないので携帯から書き込みます。

4.基本構文
4.1for構文
for構文とは指定した回数だけその命令を繰り返す構文である。
for構文は次のように定義する。
(とりあえず3回繰り返す場合。)
for((i int)++ < 3){
...
}
362303 ◆pFphp4Ej4w :2009/07/17(金) 22:47:18
>>361
ま、間違えた…
4じゃなくて3だった…

あと、言いそびれてましたが変数は定義したときにその変数の初期値に初期化されます。
363デフォルトの名無しさん:2009/07/17(金) 23:02:05
指定した回数繰り返すと言うのなら、<演算子を使う必要はないのでは?
<が出て来るということは、今のCのforみたいにwhileのような自由な条件指定を許すように思える。
それなのに、361の文章では、「指定した回数繰り返す」と言い切っている点が気になる。
単に、今のCのforみたいに、主に指定回数の繰り返しに使われるというのなら理解できるけど。
364363:2009/07/17(金) 23:05:40
例えば、BasicのFor i = 0 To 2やRubyの3.timesなんかが
比較演算子を使わずに繰り返しの構文を実現している。
(もちろん、どっちもwhileが別にある)
365デフォルトの名無しさん:2009/07/17(金) 23:11:08
MATLABの構文もそんな感じだったな
for i = 1 : 1 :10
1ずつ増やしながら1〜10まで繰り返すみたいな
366デフォルトの名無しさん:2009/07/17(金) 23:13:17
fortranっぽい配列使えるようにしてくれ
367303 ◆pFphp4Ej4w :2009/07/17(金) 23:31:12
>>363
ぬわぁ…
すみません。
毎回毎回勉強になるなぁ…
とりあえずここでは「主に指定した回数だけ繰り返される」とします。
これを踏まえて一つ質問を。
ある命令を指定した回数のみ実行するのみの構文は必要でしょうか?
368デフォルトの名無しさん:2009/07/18(土) 00:11:15
どういう方向性か知らないけど、foreachがあればforなんてなくてもなんとかなるよ。Pythonのforがそう。

#リストlsの各要素を順に出力
ls = ["hoge", "foo", "bar"]
for x in ls:
  print x

#0から2までを順に出力
for x in xrange(3):
  print x

でもまあ、こんなところCのままでいいじゃないと思うけどね。
配列(のようなもの)の各要素に〜するって系統の関数を充実させれば、for/foreachの出番なんてぐっと少なくなるし。
369デフォルトの名無しさん:2009/07/18(土) 00:11:39
逆に何でそれがいるのかが聞きたい
370デフォルトの名無しさん:2009/07/18(土) 02:15:20
>>346
やはり似たような言語ばっかりだね。
limboがでてたけど、そんな感じの根本的に違う思想の
言語を一度勉強した方が参考になると思うよ。
特に関数プログラミング系は必須といっていいと思う。
listかschemeは当然だし、また実行効率の良さはMLとその派生も勉強になるものが多い。
C言語の拡張でいうとcycloneとかも見てみるといい。
あれはCの実行効率の良さを維持しつつ型安全性を組み入れてる。
そういうのみるとはっきり言って俺for文とかどうでもいい話に思えるよ。
バカにするつもりはないけどもう少し見聞を広げるべき。
371デフォルトの名無しさん:2009/07/18(土) 02:37:16
・C/C++
・Pascal
・Smalltalk
・Self
・Io
・Lisp, Scheme
・Haskell
・Prolog
・Erlang
・ConcurrentClean
・GHC/KL1
・BrainF*ck, Unlambda
・SKI combinator

これくらい見聞きすれば新しい世界が開けるよ
372デフォルトの名無しさん:2009/07/18(土) 02:50:21
>>371
その中で一つ選ぶならやっぱり Lisp だね。
常用する気にはなれないけど、学ぶ事は多かった。
373デフォルトの名無しさん:2009/07/18(土) 02:56:43
やっぱり並列プログラミングが安全で簡潔に書ける言語がほしいね。
単純なスレッドむき出しじゃないやつで。
374デフォルトの名無しさん:2009/07/18(土) 03:00:23
>>371
D(メタプログラミング・関数乗っ取り対抗策など)とかC#(LINQ)とかCω(スレッド周り)とかECMAScript3/ECMAScript4(プロトタイプ思考)とかJava(命名規則など)とかも必要。
誰か言語の良い所・悪い所をまとめてほしいかも。んで良いとこ取りすればおk。
375デフォルトの名無しさん:2009/07/18(土) 03:05:48
つーかC言語の後継であるなら、OSが書ける、デバドラが書ける、
とかそういうのが目的の言語であってほしい。
なんでもあり言語はPL/Iみたくなってうまくいかないでしょ。
376デフォルトの名無しさん:2009/07/18(土) 03:12:26
>>374
自分は、客観的な各言語の評価よりも、
303自身の主観でのCとその後に続く言語(>>346の中ではC++/Java/Dの)の評価を聞きたいな。
377デフォルトの名無しさん:2009/07/18(土) 05:17:21
>>375
PL/Iが普及しなかった理由はそういうことでは無いけど(MulticsはPL/Iで書かれている)、整理はされてて欲しいね。
378303 ◆pFphp4Ej4w :2009/07/18(土) 07:28:01
>>376
そうですねぇ…
Java
一番最初に使ったオブジェクト指向の言語です。
はっきり言ってしまうとかなりわかりやすく、簡単・便利で初心者に最適な言語だったと思います。
ただ、プログラマのもつ能力に足かせをはかせてるような感じがします。あと、私は結構パフォーマンスを気にするたちなので(ただの貧乏性)VMを使うせいで速度が遅い・メモリを触れないJavaはなんだか性にあいません。
C++
ポインタを理解するまでかなり時間を食いました。(C言語を始める前だった)
Javaだとそこら辺は巧妙にかくされてます。
ただ、C言語のようにプログラマのもつ能力を最大限生かせる点と速度がかなり速い点については最高だと思います。(これでコンパイルが速ければ…)
D言語
まだまだ学んでる途中なので細かいことは言えませんが、C++とJavaを足して2で割ったような言語です。
GCがついている以外に不満な点は特にありません。

つまりまとめちゃうと取りあえず私は、今あるC言語系の構文にこれといった不満をもっていません。
はっきりいうとこれまでだしてきた変数宣言や様々な構文は私が本心から考えているものではありません。ただ初心者に優しいであろうと思うもののみをあげているだけです。
ぶっちゃけJavaみたいに初心者に優しくて、Dみたくコンパイルが速くて、C++みたく柔軟な使い方ができて実行速度が速い言語なら私はそれでいいのです。
379デフォルトの名無しさん:2009/07/18(土) 10:05:40
とりあえず、「新C言語」という名前をやめてほしい。
こういう名前をつければ、スレッドの客寄せにはいいだろうが、
構想はまったくCと違う方向に進んでいる。

世の中で、C言語の改良版が欲しい人たちは、
Cとまったく違う変な構文なんて望んでいないはずだ。
まったく別の名前でまったく別の理念でやってくれ。
380デフォルトの名無しさん:2009/07/18(土) 10:16:35
G言語
381デフォルトの名無しさん:2009/07/18(土) 10:51:15
新C言語としてOCamlを開発すればよい
382デフォルトの名無しさん:2009/07/18(土) 12:23:13
>>380
自慰言語ですね。わかります
383デフォルトの名無しさん:2009/07/18(土) 12:42:19
コンパイル速度まで評価対象になるのなら、実装方法もコミで考えてかないと。
単にこんな機能が欲しい!だけじゃダメだろ。
384デフォルトの名無しさん:2009/07/18(土) 12:47:25
つーか、Cでのちょっとした不満とか良くないところの改善っていう目的を忘れたらあかん。
385デフォルトの名無しさん:2009/07/18(土) 18:45:24
コンパイラ屋さんの俺が来ましたよ。
専門は最適化なのでそっちしか興味ないんだけど、簡単なCへのトランスレータくらいだったら作ってみようかな〜
386303 ◆pFphp4Ej4w :2009/07/18(土) 20:27:00
>>384
ってなわけでじゃんじゃかC言語の悪いところを書き出してってください

>>385
ぜひともお願いします(まだ言語仕様さえも決まってませんが・・・)
387デフォルトの名無しさん:2009/07/18(土) 20:41:33
とりあえず文法を FIX しよう。話はそれからだ。
388デフォルトの名無しさん:2009/07/18(土) 20:43:12
あと、名称も FIX しないとね。
389デフォルトの名無しさん:2009/07/18(土) 21:00:07
はじめてきたんだけど
ちょっとここまでの進捗を3行でまとめて
390デフォルトの名無しさん:2009/07/18(土) 21:02:45


んでない
391385:2009/07/18(土) 21:17:44
>>386
とりあえずただCをパースしてCを吐くだけのやつを明日作ってみようか。でそのパーサなり何なりをいじって文法を修正していくと。
言語ががらっと変わるなら仕様を先に練る必要があるけど
392デフォルトの名無しさん:2009/07/18(土) 21:24:31
進んでないのか
また来るね

ヘッダファイルを編集するだけの簡単なお仕事です
393303 ◆pFphp4Ej4w :2009/07/18(土) 23:43:39
>>391
どうもありがとうございます。よろしくお願いします。
明日は模試があるので顔をだせないかもしれませんが…
394デフォルトの名無しさん:2009/07/19(日) 00:45:11
Java に乗っけたいね。JSR223 対応させて。
けど 303 にその気が無いようで残念。
395デフォルトの名無しさん:2009/07/19(日) 00:47:10
Javaにのせたい気持ちがわからない
396デフォルトの名無しさん:2009/07/19(日) 01:23:40
わかんない?
そいつは残念だ。
397デフォルトの名無しさん:2009/07/19(日) 01:26:42
それはC言語の役割ではない
398デフォルトの名無しさん:2009/07/19(日) 01:49:26
むしろJavaScriptで作ってブラウザ上に、というほうがまだ分かる。
それはともかく、やりたい人間が自分で作ればいいじゃないか、JRubyのように。
399394:2009/07/19(日) 02:03:01
いや、作る気が無いわけじゃないんだけど、
ポインタをサポートするなら JVM の上にさらに独自の VM 乗せることになって
そこまですることになるなら俺の能力を超えるなぁ、って考えていたところ。

Java じゃなくて、JavaScript でも似たようなことが起きるはず。
400デフォルトの名無しさん:2009/07/19(日) 03:21:48
Cくらい軽量で低水準な関数型言語が使いたいなー
401デフォルトの名無しさん:2009/07/19(日) 04:25:40
それなら、とりあえず全変数は読み取り専用、書き換え可能な変数はmutable修飾子を付けるという方向にしよう。
402デフォルトの名無しさん:2009/07/19(日) 10:51:16
>>400
runtimeなしで関数型言語作るのはかなり難しいだろう。
純粋関数型言語ならある程度可能だが。
403303 ◆pFphp4Ej4w :2009/07/19(日) 16:24:49
どうも。やっと模試が終わりました。死んだ…

>>401
なるほど。
それはprivate,public修飾子を残した上で付け加えるということでよいでしょうか?

この他「これがいやだからこうしてほしい」等要望をなんなりと。

それから、取りあえず「新C言語」の名前を決めたいのですが、なんかありませんか?(時期尚早と言うなら取り下げます。)
404デフォルトの名無しさん:2009/07/19(日) 16:51:31
「C」という文字を入れるか入れないか、それが問題だ。
入れなくてもいいなら、「 Zig 」とかをさっきふと思いついたり。

あと、こうしたいああしたいっていう要望聞くのは良いんだけど、
上手く舵取りして取捨選択しないと、汚い言語ができるよ。
ちゃんと設計理念ってものを自分なりに考えていかなきゃねー
405401:2009/07/19(日) 16:52:12
>>403
いや、構文的にはCのconst/volatileの位置を考えている。
406デフォルトの名無しさん:2009/07/19(日) 16:56:05
C言語のautoやregisterはキーワードとして再利用しても大丈夫だろう
407デフォルトの名無しさん:2009/07/19(日) 17:00:55
const int x = 123;
mutable int x = 123;

みたいな感じか。
408デフォルトの名無しさん:2009/07/19(日) 17:02:24
ここでふと聞いてみたい。
俺言語を作ろうと思ったことがある奴、実際に作ったことがある奴、どのくらいいるんだ?

409デフォルトの名無しさん:2009/07/19(日) 17:03:42
>>406
とりあえずautoはC++0x同様の型推論で決定だな。
410デフォルトの名無しさん:2009/07/19(日) 17:03:57
言語ってか、ADVツクールみたいなの作ろうとしたら、
どんどん言語っぽくなっていった。
411デフォルトの名無しさん:2009/07/19(日) 17:19:11
Cの実行モデル的にmutablは無駄にコードを長くするだけだと思うな…
412デフォルトの名無しさん:2009/07/19(日) 17:21:31
mutableね タイポ
413385:2009/07/19(日) 18:36:40
そんじゃ夜から何か作り始めるよ。
実装言語はバリアントがあるOCamlとかの方が楽だけど誰でも改造しやすいようにJavaとかにしたほうがいいのかな?

>>403
とりあえず名前だけでも決めてくれると嬉しい。
414デフォルトの名無しさん:2009/07/19(日) 18:46:18
>>413
いや、是非385自身が一番使いたい言語で実装してほしい。そっちに俺は1票を投じるぞ。
415デフォルトの名無しさん:2009/07/19(日) 18:49:21
新C言語だから・・・

SINCL: SINCL Is New C Language
416デフォルトの名無しさん:2009/07/19(日) 18:58:36
QINC Is Not C-language.
417303 ◆pFphp4Ej4w :2009/07/19(日) 19:47:12
>>405
なるほど。いいですね。
>>413
よろしくお願いします。私はそっち方面は全くわからないのですごく助かります。
>>415
>>416
GNUですかww
他に名前の候補ありませんか?
418デフォルトの名無しさん:2009/07/19(日) 19:52:56
開発コードネームはLouiseがいいです
419デフォルトの名無しさん:2009/07/19(日) 20:00:19
>>418
して、その心は?
420デフォルトの名無しさん:2009/07/19(日) 20:02:35
だって可愛いらしくて素敵な名前じゃないですか
421デフォルトの名無しさん:2009/07/19(日) 20:10:30
Lowrise?
422デフォルトの名無しさん:2009/07/19(日) 20:19:00
省略記法をたくさん作ってくれ
void引数の関数の()を省略できるとか
423デフォルトの名無しさん:2009/07/19(日) 20:43:27
>>422
関数ポインタとの区別をどうする?
という問題は置いといて、それは何が嬉しくなるの?
424デフォルトの名無しさん:2009/07/19(日) 20:54:06
省略が多いほうがタイプ楽でええやん
425デフォルトの名無しさん:2009/07/19(日) 20:54:25
構文糖は、劇的にコード量が変わったり新たな意味が付与されるものでない限り、
あると逆に邪魔になるものが多いよ。

Java の拡張 for とか Haskell の do とかなら存在意義があるけど、
単に省略できるようにしたいだけなら、

 引数 0 個の関数呼び出しでは、() を書いてはいけない

という仕様にしたほうが、まだ収まりが良いよね。
426385:2009/07/19(日) 21:39:24
帰宅したので今から作ります。
>>414 に甘えてOCamlで実装することにしました。
名前が決まっていないみたいだから、とりあえず一番早かったSINCLで書いとく。
427デフォルトの名無しさん:2009/07/19(日) 22:22:33
新Cを作るのなら

以下2点が希望かな
 関数のファーストクラス化
 プリプロセッサの廃止とその代替機能の追加

プラスアルファするとしたら
 名前空間またはモジュール機構
 並列処理の考慮(メモリモデル等)

機能追加は最小限でいい
比較的小さなのがCの良いところ
428385:2009/07/19(日) 23:05:03
Cは識別子の管理が激しくめんどい。
誰かに改良案考えてほしいな〜。
429デフォルトの名無しさん:2009/07/19(日) 23:08:27
識別子の管理ってどこが面倒なんだっけか。
430385:2009/07/19(日) 23:14:49
識別子の意味が文脈で変わるんだよ。
ttp://www.syuhitu.org/other/cparse/cparse.html
がとても分かりやすい。
とりあえずここのとおりに実装してる。
431デフォルトの名無しさん:2009/07/19(日) 23:26:23
typedef 周りか。解決策といったら……

その1:typedef なんて無くせばいいよ!
その2:型名は大文字から始まることにすればいいよ!
その3:AST 作ってから識別子を解析すればいいよ!

くらいじゃないのかな。
文法に注意すれば、それが型名なのか変数名なのかが一意に決まるから、
とりあえず構文木作っちゃえば良いんじゃないかと思う。
432303 ◆pFphp4Ej4w :2009/07/19(日) 23:47:33
>>426
頑張ってください!
>>431
typedefの消滅はちょっと…(私的には。)
だから現実的にはその2かその3が解決策だと思います。

その他ご希望をなんなりと。新C言語の名称も引き続き受け付けます。
433デフォルトの名無しさん:2009/07/19(日) 23:47:43
識別子が型名か変数名か分からないとASTが作れないのが問題なんじゃないのか?
434385:2009/07/19(日) 23:56:13
typedefの問題は構文を修正する事で解決できると思う。
typedefがstaticやexternなどと文法規則が同じだというがややこしい原因のようだ。
435デフォルトの名無しさん:2009/07/19(日) 23:56:36
>>430を斜め読みもしていなくて済まないけど、
typedefの宣言そのものが面倒のか、それともtypedefされた名前を使うのが面倒なのかどっち?
前者なら、typedefを別文法で実現すればいいはず(C#/C++0xのusingなど)。
後者は、Cっぽい文法を維持する限りどうしようもないよなあ。typedef禁止にしても
C++/Java/C#みたいにclass量産できれば同じような状況になるだろうし。
436デフォルトの名無しさん:2009/07/19(日) 23:57:49
>>432
ほむ。気分はわかる。

>>433
具体的に reduce/reduce 競合起こすのって、どことどこだっけ。
起こしたらその部分の文法を変えちゃえばいいんじゃないかなーと。
437デフォルトの名無しさん:2009/07/20(月) 00:09:34
すぐ思いつくのは、
変数宣言int (a);と関数呼び出しf(a);の区別が付かない
キャスト(int)(a)と関数呼び出し(f)(a)の区別が付かない
438385:2009/07/20(月) 00:19:42
とりあえずtypedefの問題は「typedefは必ず先頭に付ける」という規則があれば解決できるね。
つまり
typedef int x; などはOK
int typedef x; などはNG
にすればよい。
439デフォルトの名無しさん:2009/07/20(月) 00:23:52
reduce/reduce 競合起こすところを徹底的に消していけば、
とりあえず AST 作れるから、後はどうにでもなると思う。
440デフォルトの名無しさん:2009/07/20(月) 00:33:10
>>438
そういう誰も書かないやり方は新言語でも禁止してしまえ。
441385:2009/07/20(月) 00:43:27
修飾子の順番は制限しちゃってもよさそうですね。異論あるのかな。

int staticとか禁止。
void inline f(...) { ...}
とかも禁止でいいよね?

typedefやinline -> staticやextern -> intやdouble

という順番ということにして作ります。
442デフォルトの名無しさん:2009/07/20(月) 01:01:29
typedef は修飾詞なのか……
単に型名の別名を定義する構文にしちゃだめなのかな。

 typedef struct FOO { 〜 } BAR;

みたいなのも禁止で良いんじゃないかなって思う。

 struct FOO { 〜 };
 typedef struct FOO BAR;

だけ使えれば良いんじゃないかと。

というか、型名 "struct FOO" が使える理由ってなんなんだろう。
これも無くしちゃって良いんじゃない?
443デフォルトの名無しさん:2009/07/20(月) 01:04:14
Javaは規約でこういう順番に書こうってのがあったはずだけど、構文で縛っても構わないと思う。
強いていればC/C++でconst char*派のほか、希にchar const*派がいるくらい。

あと、inlineは要らないと思う。registerみたいにオプティマイザの決めることになりつつある。
持っている言語も珍しいし。
444385:2009/07/20(月) 02:36:19
寝ます。明日の午前中くらいには動くものが出来そうです。
>>303
の意見を全く聞いていないですが、現状では「修飾子の並び順」のみの修正のみをしてみます。
異論があれば後で直します。

それから自分が汚いと思ってた文法。見た目でなく文法がね。

unsigned, signed, short,long,char,intがすべて同じ種類の構文要素。修飾子とそうでないものがごちゃ混ぜ。

配列、ポインタの構文。
Javaみたいに
int[3] x;
とかの方が宣言文の構文が
{型} {識別子} ;
と統一できるのに。

switch文の構文
case x:
expr1;
expr2;
は構文的には
[ case x: expr1 ] と [ expr2 ]
というくくりになるが、
[ case x: ] と [ expr1; expr2; ]
となるべきでは?

etc.
445デフォルトの名無しさん:2009/07/20(月) 07:28:26
> 関数のファーストクラス化
意味わかって言ってんのか
> プリプロセッサの廃止とその代替機能の追加
むしろCPPは互換性ないと困るな
わざわざC言語を選択する理由には資産の活用がある

この手のスレは最終的にLISPに向かう事は判ってるんだから
LISPをどうやってLISPっぽくないよう変形するのかを考えた方が早いぞ
446303 ◆pFphp4Ej4w :2009/07/20(月) 08:32:15
>>444
全然聞かなくてOKですので。
447デフォルトの名無しさん:2009/07/20(月) 08:42:20
もうさ、Javaにポインタ付けて
ネイティブに対応させればいいんじゃない?

Javaの良さは、javaDocだと思うけどな
448デフォルトの名無しさん:2009/07/20(月) 08:47:09
>>447
それ何てC#のunsafe?
449デフォルトの名無しさん:2009/07/20(月) 09:06:11
>>447
何というD言語
450デフォルトの名無しさん:2009/07/20(月) 09:15:26
>>448
unsafe有ってもvm外せんからネイティブに対応とはならん気ガス

>>449
GCのメモリコンパクションやジェネリックが無いのが残念だな
まぁジェネリックはテンプレートである程度代用はできるが
451デフォルトの名無しさん:2009/07/20(月) 09:57:58
>>450
単に実装がないだけで、言語仕様ではVMに依存していないよ。
http://www.ecma-international.org/publications/standards/Ecma-334.htm
452385:2009/07/20(月) 12:08:46
おはようございます。すいません、今起きました。
午前中までというの取り消し。
453デフォルトの名無しさん:2009/07/20(月) 12:15:42
>>445
おまえよりはわかっているから大丈夫

互換性は捨てるって言ってるんだから
負の遺産を残す必要性はない
454303 ◆pFphp4Ej4w :2009/07/20(月) 13:43:01
>>451
そうなんですよね。誰かネイティブコンパイラ実装したら面白そうですね。(使いませんけど…)
>>452
急がなくてかまいませんよ。
455デフォルトの名無しさん:2009/07/20(月) 17:13:03
プリプロセッサで再帰的にマクロディレクティブを解釈できたらいい。
C++テンプレートの型なし縮小版みたいなことね。
456デフォルトの名無しさん:2009/07/20(月) 17:22:52
Cライクな新しい言語作るよりC++から機能削減した方が現実的じゃないだろうか。
独自警告設定ツールみたいなのを。
457デフォルトの名無しさん:2009/07/20(月) 23:30:54
何でもいいが、Cに変換できればいい
C++も最初はCへのトランスレータだったし
458385:2009/07/20(月) 23:46:09
パーサは完成して動作するようになりました。想像以上にめんどかった。
可変長引数とかビットフィールドとかいろいろ後回しにしてます。
Prettyprintを実装してトランスレータとして使えるようになったらうpします。どこがいいかな。

現状では文法はCのサブセットになってます。
さてこれをどういじりましょうか。
459303 ◆pFphp4Ej4w :2009/07/20(月) 23:51:02
>>458
激しく乙です。

これからどうしていくかはここでの議論で決まっていくでしょう。

というわけでみなさんアイデアをじゃんじゃかどうぞ。
460デフォルトの名無しさん:2009/07/21(火) 11:11:00
新言語は今ある全ての言語のスーパーセットにして、こんな感じで言語を切り替えられるようにして欲しい。Pl/Iっぽいけど。打倒SWIGで。
#lang C
void *do_something(void){
  return NULL;
}
#endlang
#lang Delphi
(*よー知らん*)
#endlang
#lang D
void main(string[] args){
  do_something();
}
#endlang

…perlにこんな機能有った気がする。
461デフォルトの名無しさん:2009/07/21(火) 11:43:28
455の言うプリプロセッサ側の強化は言語自体をいじるより有効だと思う。
文脈に関係なくコードをぶった切れるのは力だ。
462デフォルトの名無しさん:2009/07/21(火) 18:25:12
>>461
IDEにとって邪魔にならない?
C++やDのテンプレートやLispのマクロみたいに言語本体に組み込んだほうがいいと思うのだけど。
463303 ◆pFphp4Ej4w :2009/07/21(火) 21:30:16
>>460
こんなことしたらプログラマのミスがますます増えそうですが・・・

>>461
>>462
たしかにIDEにとっちゃすごく邪魔でしょうね。
これだとすごく「IDEがつかえない」言語になりそうです・・・
464デフォルトの名無しさん:2009/07/22(水) 02:55:47
>>462
そういやD言語がASTマクロを実装すると言ってたね。
これの45ページ目から。
http://s3.amazonaws.com/dconf2007/WalterAndrei.pdf
465デフォルトの名無しさん:2009/07/22(水) 06:08:07
突然で悪いけど、GCを使わない理由ってなんだろう
基本は手動メモリ管理だけど解放忘れやdangling pointerをコンパイル時に弾く、って言語を考えてるんだが、
調べれば調べるほどGCで良いような気がしてきた

一応、GCの明確な欠点としては「予測不可能なタイミングで長時間実行が止まること」があるんだが、他にはないかな
466デフォルトの名無しさん:2009/07/22(水) 06:56:40
弱参照やファイナライザに関する問題の洗い出しがむずかしそう
467デフォルトの名無しさん:2009/07/22(水) 07:02:45
>>465
っ リージョン推論

その欠点だけならインクリメンタルGCやコンカレントGCが明確な解決方法になっちゃいそう。
欠点をもうひとつ言うならば、挙動を静的に解決できないってのが挙げられるかと思う。
468デフォルトの名無しさん:2009/07/22(水) 07:38:06
>>466-467
ありがとう。結構微妙な話みたいだな
確かに静的な情報は減るけど、malloc/freeだって断片化云々の話なんかになったら静的には挙動が分からないし

ところでリージョン推論って使い物になるの?
極端な例だけど、リージョン推論をする言語でLispのインタプリタを素朴に(GCのある言語で書くのと同じように)書いたとして、
それがリークなしで動作するとは思えない(もしリークなしで動作したら実質的にGCがあるってことだよな?)
リージョン推論をするという触れ込みのJHCというHaskellコンパイラは、少なくとも俺が試した時点では目に余るほどリークしたし
やっぱりmalloc/freeをどこに入れるかはプログラマが考えないとダメなんじゃないかと思うんだが
469デフォルトの名無しさん:2009/07/22(水) 07:57:30
どっかにFIFOを用意してさ、別のスレッドで解放すればいいんじゃない?
470デフォルトの名無しさん:2009/07/22(水) 07:58:19
LispみたいなGC入り言語でも、malloc/freeを使わないのと同じように
GCを発生させない静的な区間を作る事はできるよ
言語で保証されてるわけでもなく、実装に詳しくないといけないけど
471385:2009/07/22(水) 13:38:37
昨日は作業できなかったですが、今日後でアップします。

>>468
詳しく読んでないですが少なくともCポインタのある言語でリージョン推論は実装できないと思われます。
メモリは基本的に一次元なので、ポインタが一つでもあればメモリ上の
あらゆるデータがアクセスされる可能性があります。
472デフォルトの名無しさん:2009/07/22(水) 14:05:53
何をうぷしてくれるん?
473303 ◆pFphp4Ej4w :2009/07/22(水) 16:13:54
>>472
すこしはレスを読んでください。

>>471
乙です。

>>465
俺様アプリをつくったとき、実行時のメモリ使用量をバージョンをあげるたびに減らしていくという楽しみが消失するから。
474252:2009/07/22(水) 20:13:34
今更だが、
>>253
C++の様な新たな機能が増えても予約語追加でない悲劇を防げる。
どっかで整合性を取る必要はあるけどな。
475デフォルトの名無しさん:2009/07/22(水) 20:24:00
ようするにschemeみたいにするのね
どんどんLISPに近づくね
476デフォルトの名無しさん:2009/07/22(水) 21:26:17
美しさを追求していくと、どうしてもLISPに近づいてしまうね。
でも、新C言語ってことは静的型になるわけだから、LISP風MLになる?

Cの場合、弱い静的型付けだけど、これを強くしたらどうなるんだろう。
替わりにパターンマッチを追加して。
でも、Cの利用場面を考えると型付けは弱くないとダメなのかな。
477デフォルトの名無しさん:2009/07/22(水) 21:30:24
>>474
コードの互換性が最低になる
478デフォルトの名無しさん:2009/07/22(水) 23:17:24
>>468
Cycloneではポインタの機能を制限してregion-inferenceを実現してるよ。GCあるけど。

JHCに関してはアルゴリズムが調整段階でメモリリーク起すって書いてるから、もしかしたらうまくいくはずなのかもしれない。
479デフォルトの名無しさん:2009/07/22(水) 23:40:27
GCがあろうとなかろうと、finally的に実行される処理をクラス定義内に書ける仕組み、
——C++デストラクタ、C#のusing/IDisposable、scopeクラスみたいなもの——は必ず欲しい。
GC管理のメモリ以外のリソースのために。
480デフォルトの名無しさん:2009/07/23(木) 00:11:06
じゃあC++かC#を使えよ
このスレの趣旨はなんだ?
481デフォルトの名無しさん:2009/07/23(木) 00:31:04
>>479
それって、loan patternで十分じゃない?
クロージャは必須になるが、どっちにしろクロージャは欲しいでしょ。
482デフォルトの名無しさん:2009/07/23(木) 00:48:16
クロージャすなわちGCだからイラネ

コンスト/デストラクタはあったらいいけど
既存のfinallyみたいな構文は場所が離れ過ぎて読みにくすぎる
変数の前後とかにまとめて書ける形になるといい

{ void *pool = __cons__ { return malloc(1024); } __dest__ { free(pool); };
}
みたいな
483デフォルトの名無しさん:2009/07/23(木) 00:51:25
これをtypedefできるといいかな
typedef void *pool_t = __cons__ { return malloc(1024); } __dest__(p) { free(p); };

{ pool_t a; // この時点で__cons__実行

} // __dest__実行
484デフォルトの名無しさん:2009/07/23(木) 00:56:42
ここまで書いて、例外機構が絡むとややこしくなると判る
setjmpも。内部的にデストラクタのチェインが必要になる
強制的に未処理の__dest__部を実行するunwindとか
485デフォルトの名無しさん:2009/07/23(木) 01:00:16
>>482
C# の using/IDisposable で必要十分なような。
486デフォルトの名無しさん:2009/07/23(木) 01:03:19
ああLispのwith系と同じやつね
487デフォルトの名無しさん:2009/07/23(木) 01:19:07
typedef char *fillmem_t =
__cons__(size_t size, int c) { char *p=malloc(size); memset(p, c, size); return p; }
__dest__(void *p) { free(p); };

{ fillmem_t m(1024, 0xff);
}
この場合サイズがわからないから別管理だね

typedef struct {
void *p;
size_t size;
} *mem_t =
__cons__(size_t size, int c) {
mem_t p=(mem_t)malloc(sizeof(*p));
p->size = size;
p->p = malloc(size);
memset(p->p, c, size);
return p; }
__dest__(p) { free(p->p); free(p); };
この場合__cons__中のmem_tとかポインタ渡しで破綻するね

{ mem_t a(1024, 0xff), b = a; // bの実体は?
}
488デフォルトの名無しさん:2009/07/23(木) 01:24:07
コピーコンストラクタを用意するかはともかく、
初期のC++と同じ轍を踏むことになるね
489385:2009/07/23(木) 01:33:18
githubにアカウントを作って現状の物を公開しました。

github.com/385

README読んで下さい。現状はCのコードをパースしてCのコードを吐くだけです。
型チェックなど一切してません。バグバグです。
まぁトイプログラムとして読んで下さい。

Cの文法の汚い部分を綺麗にしようといろいろいじりましたので、コンフリクトが沢山あります。
これらを解消するのは結構無理があるので完全にCの文法にするか、
一から文法を作り直した方がいいかもしれません。

文法をどうにかしたらクラスとか無名関数とか実装してみたいですね。
それが使いものになるかどうかは別にして個人的な興味として。
490479:2009/07/23(木) 01:46:40
>>481
ごめん忘れていた。自分の分類では、loan patternはあり。
491デフォルトの名無しさん:2009/07/23(木) 01:50:04
>>482
__dest__相当のほうは、D言語のscope(exit)が構文的に参考になると思う。

>>483
そこまで書くと、C++のクラス定義の構文糖にしか見えない。
492303 ◆pFphp4Ej4w :2009/07/23(木) 07:12:23
>>489
乙です。
493303 ◆pFphp4Ej4w :2009/07/23(木) 18:50:48
> これらを解消するのは結構無理があるので完全にCの文法にするか、
> 一から文法を作り直した方がいいかもしれません。Cの文法をとる場合
C++やC#のコピーみたくなる。(個人的にはこっちのほうがいい。)
完全にCの文法を捨てる場合
簡単な文法になるかもしれないが、ほかのプログラマが使ってくれることはまずない。

どっちをとりましょうか。
494303 ◆pFphp4Ej4w :2009/07/23(木) 19:08:39
申し訳ない。改行入れ忘れた。
495デフォルトの名無しさん:2009/07/23(木) 19:14:13
どの道Cのソース流用できないんだろうから、好きにやったほうが良いんじゃないの。
496デフォルトの名無しさん:2009/07/23(木) 20:12:35
構造化プログラミング推奨ということで
gotoは捨てて
指定数のループを脱出するbreak nを入れるのはどうか
497デフォルトの名無しさん:2009/07/23(木) 20:30:01
break :LABEL;
498デフォルトの名無しさん:2009/07/23(木) 20:31:38
nよりbreak ラベルの方がいいな
それってgoto
499デフォルトの名無しさん:2009/07/23(木) 20:35:25
データ型を即値とオブジェクトへの参照のみにするとか
そうするとGC必要かねえ
500デフォルトの名無しさん:2009/07/23(木) 20:40:00
言語の可能性を狭めてどうする
gotoは必須
gccのラベル配列相当も入れるべき
アセンブラで書くしかない所を(やや)高級言語でも書けるという事に価値がある
501デフォルトの名無しさん:2009/07/23(木) 20:43:49
廃止するならむしろcontinueだ
制御の流れを混乱させるだけ
continue ラベルなんてあったらどうよ
糞だろうが
502デフォルトの名無しさん:2009/07/23(木) 20:45:00
continue -> next
503デフォルトの名無しさん:2009/07/23(木) 20:47:59
switchのbreakを廃止して、必要なところはgotoで飛ばす・・・いや、
そうすると
case 0: case 1: case 2: case 3: case 4:
break;
みたいな楽ができない
どうせ入れるなら関数型のパータンマッチだろう
504デフォルトの名無しさん:2009/07/23(木) 20:51:30
だったらループ構文自体を廃止して全部再帰かgotoでいいよ
505デフォルトの名無しさん:2009/07/23(木) 20:57:38
制御構造の書式を凝っても仕方ない。
条件分岐とジャンプさえあれば極端な話どうでもいいわけだ。
それよりもデータの生存期間の方が重要だ。
506デフォルトの名無しさん:2009/07/23(木) 20:59:32
case 0, 1, 2, 3, 4:
break;
507デフォルトの名無しさん:2009/07/23(木) 21:05:57
Cでもスタックにあるデータの生存期間は
{}を使えば制御出来るけどな
508デフォルトの名無しさん:2009/07/23(木) 21:08:01
gotoでも?
509デフォルトの名無しさん:2009/07/23(木) 21:24:12
他のブロックへgoto飛ばしたらそいつの責任てことで
その処理系のエキスパートが判っててやる場合もあるから
あとは飛んで終りなのか、コンストラクタとかとも連携さすのか
インテリジェントgotoと名付けよう
510デフォルトの名無しさん:2009/07/23(木) 21:54:39
gotoを抽象化したものが継続だが、
継続は一旦その場所に行かないと得られない。
511デフォルトの名無しさん:2009/07/23(木) 21:57:56
ちなみに、C++だと、コンストラクタというか変数宣言を飛び越えるgotoは禁止、コンパイルエラー。
#include <string>
void f()
{
goto l;
std::string s;
l:;
}
ただし、ブロックごと飛び越える場合は問題ない。
void g()
{
goto l;
{
std::string s;
}
l:;
}
512385:2009/07/23(木) 23:03:50
>>493
一から作り直すというのは、Cの文法を元に拡張していくのはつらいので、
一からC風文法を作り直すという意味です。
ほとんどJavaとかC#とかの真似になると思いますね。
513303 ◆pFphp4Ej4w :2009/07/23(木) 23:10:20
>>496
まぁ、基本的に条件分岐と例外処理の構文さえ用意してあればgotoっていらないんですけどね…。
>>500
ごもっともです。言語の幅を狭めることはプログラマの「出来ること」をも狭めてしまう傾向にありますからね。
514303 ◆pFphp4Ej4w :2009/07/23(木) 23:14:45
>>512
うにゃ。すいません。
意味を取り違えてたみたいです。

あ、あと、人が結構増えてきたのでこれからはまたsageますね。
515デフォルトの名無しさん:2009/07/24(金) 03:02:56
>>503
case (1 or 2 or 3 or 4 or 6..9) and not5($_) : hoge();

とか

int t = case /\d/: ( case 2 : hoge(); case 3 : 5);

とか書けると最初だけ嬉しいかも

この構文を拡張して case 文っぽいものを関数みたいに自分で定義できるとおもしろいかも
516デフォルトの名無しさん:2009/07/24(金) 03:38:51
1 or 2 or 3 or 4 or 6..9 -> 15
517デフォルトの名無しさん:2009/07/24(金) 09:32:27
そういや範囲caseってgccの拡張構文にあったな
518デフォルトの名無しさん:2009/07/24(金) 10:58:26
そういうのはLISPだとすぐ試せる・・・
てか、デジャブをえらく感じるスレだ
519デフォルトの名無しさん:2009/07/24(金) 11:04:38
string型が欲しい。
520デフォルトの名無しさん:2009/07/24(金) 11:26:16
>>515
Scalaのパターンマッチが参考になるかもね。
ユーザ定義型を、自由にcaseに書ける。
521デフォルトの名無しさん:2009/07/24(金) 11:40:17
OCamlやF#でも515みたいなのは普通にできる
match 3 with 1 -> 1 | 3 -> hoge();;
let a = match 3 with i when i=1 or i=2 -> i | _ -> hoge();;
let b = match 2 with i when i=1 or i=2 -> i | _ -> hoge();;

aはhoge(),bは2
522303 ◆pFphp4Ej4w :2009/07/24(金) 16:31:24
「SINCL」の新しい構文の提案用テンプレ

構文名:
-----------------------
構文例:

-----------------------
メリット:
デメリット:
-----------------------
備考:
523303 ◆pFphp4Ej4w :2009/07/24(金) 23:41:48
>>522
あと、SINCLは仮称ね。
別にこれでいいならいいけど。
524デフォルトの名無しさん:2009/07/24(金) 23:56:47
303が何をしたいのか判らない
つまり提案しようがない
テンプレつーか一度方針をまとめてくれ
525デフォルトの名無しさん:2009/07/25(土) 00:07:57
>>524に同意
LL的な構文の工夫より、
まずどんな問題を解決する言語であるのかを決めるべきだと思う。
おれ的にはとりあえず
- あくまでシステム記述言語であること
- 効率的なマルチコアプログラミングが書きやすいこと
であってほしい。
526デフォルトの名無しさん:2009/07/25(土) 00:14:45
自分が実装できそうな手軽な範囲だと、ヘッダファイルを無くしたいのと、マクロを改良できるならしてみたいです。

まずはCへのトランスレータしか考えてないのでランタイムが必要な機能は無理です。

それから型推論とかですかねー
527385:2009/07/25(土) 00:16:29
メール欄と間違えました。すいません。
528デフォルトの名無しさん:2009/07/25(土) 00:41:37
言語仕様とはあんまり関係ないかもだけど、
マルチスレッドとかそういうのに対応するタイプのCってできないかね?
529デフォルトの名無しさん:2009/07/25(土) 00:43:29
>>526
型推論は地雷原だよー

foo(x) {
    return x;
}

ためしに、この関数 foo の型を求めてみい。
530デフォルトの名無しさん:2009/07/25(土) 00:54:24
>>525
>>303は主に構文に不満があるんだろ
だから構文を真っ先に議論するのは自然
531デフォルトの名無しさん:2009/07/25(土) 00:55:51
型推論とかいらなくね?
何でそんなのが必要なの?
532デフォルトの名無しさん:2009/07/25(土) 00:57:25
Haskellっぽくてかっこいいからに決まってるだろ
533385:2009/07/25(土) 01:00:26
>>526
関数型言語を作った事があるので分かります。
多相型をサポートしようとしたら確かに悲惨ですね〜。

ディクショナリパッシングとか考えたんですけど、Cではワード長が一定ではないので難しそうですね。
C++のtemplateのように型ごとに関数を展開するなら出来ないということもない気がしますが、ちゃんと考えてません。
534385:2009/07/25(土) 01:01:58
>>531
あまり必要だとは思ってません。自分は実装に興味があるだけです。
535デフォルトの名無しさん:2009/07/25(土) 01:04:09
>>533
へいゆー自分にアンカー付けてるぜよ。

template で多相型をサポートするなら(問題山盛りにせよ)可能だと思います。
ただ template 周りの文法と、コード生成に失敗したときのエラー表示が難点かと。
536385:2009/07/25(土) 01:12:24
あら。

>>535
確かにその通りですね。
ただC++のテンプレートは展開しながら,型エラーになったところで初めてエラーメッセージを生成するからあんなことになるんだと思っています。
ちゃんと型検査を事前に行えるような仕様にして,型検査に通ってから展開するようにすれば多少マシにできないでしょうか。
537デフォルトの名無しさん:2009/07/25(土) 02:02:33
>>529
a'->a'
538デフォルトの名無しさん:2009/07/25(土) 05:11:32
>>529
C++だと戻り値の型推論は面倒だね (この場合は楽だけど)。
D言語だとこんな感じ。
import std.stdio;

auto foo(T)(T x){
  return x;
}

void main(){
  writeln(foo(10));
  writeln(foo("str"));
}
539デフォルトの名無しさん:2009/07/25(土) 10:08:27
>>529
高階関数をサポートしないならa->aのみ
さもなければ多相型を含む最小の型は一意にきまるが(a->a)
この関数に適応する多相型は無限にある

型推論が全てのケースで動くなら
関数定義の際、引数と戻り値の型宣言も省略して

f(x){return x;}
g(x,y,z){return x(y(z));}

みたいにできるだろうね
C言語っぽくは見えないが
540303 ◆pFphp4Ej4w :2009/07/25(土) 13:16:21
>>524
お叱りごもっともです。
>>530
フォローありがとうございます。
しかし実際のところ、私は一つか二つ爆弾投下して逃げるつもりでした。その後なんだかズルズルとここまで来てしまったので、SINCL(仮称)の方針を明示する機会がありませんでした。
また、皆さんの「プログラミング言語に求めていること」を取り込んで言語仕様を提案しようと思っていたので、「もっとプログラマの意見を聞くべきではないか」と思っていました。
そのため、方針を示さなかったし、逆に示せなかったのです。それについて不快に思ったのであれば深くお詫びします。
さて、肝心の方針についてですが、385さんとまだコンタクトをとっていないので(すいません。近日中に連絡します。)深いことは決めていません。
541303 ◆pFphp4Ej4w :2009/07/25(土) 13:17:35
>>524
お叱りごもっともです。
>>530
フォローありがとうございます。
しかし実際のところ、私は一つか二つ爆弾投下して逃げるつもりでした。その後なんだかズルズルとここまで来てしまったので、SINCL(仮称)の方針を明示する機会がありませんでした。
また、皆さんの「プログラミング言語に求めていること」を取り込んで言語仕様を提案しようと思っていたので、「もっとプログラマの意見を聞くべきではないか」と思っていました。
そのため、方針を示さなかったし、逆に示せなかったのです。それについて不快に思ったのであれば深くお詫びします。
さて、肝心の方針についてですが、385さんとまだコンタクトをとっていないので(すいません。近日中に連絡します。)深いことは決めていません。
続く
542303 ◆pFphp4Ej4w :2009/07/25(土) 13:20:07
すいません。携帯から二重投稿してしまいました…

ただ、私のプログラミング言語に対する哲学としては「プログラミングは楽しむべき」だし、「やりかたはいくらでもある」べきです。
また、プログラマの能力を最大限サポートするよう柔軟であるべきだと考えています。ですからそのような言語方針が示されることになるでしょう。
…どうも私は木の根っこでなく葉っぱからはじめようとしていたようです。ごめんなさい。
続く
543303 ◆pFphp4Ej4w :2009/07/25(土) 13:22:11
それを踏まえた上で皆さんにお聞きします。
どのようなものをサポートした言語仕様がいいでしょうか。
皆様の意見をお聞かせください。
544デフォルトの名無しさん:2009/07/25(土) 14:17:21
あんまりCから逸脱するなら、もう新言語を作ろうスレでいいと思うw
545デフォルトの名無しさん:2009/07/25(土) 16:57:41
周りの意見を聞くのは良い事だけど、そもそも周りは、それぞれが自分の立場で
好き勝手言ってるだけだから、それらをぜんぶ取り入れたら無法地帯になるよね。

極端な話をするなら、C + Ruby + Lisp + Haskell + Java + Smalltalk のスーパーセットを作れば
みんな満足する素晴らしい言語ができると思うよ。素晴らしすぎて誰も使わないだろうけど。


そうじゃなくて、周りの意見を聞いたうえで 「さて何を取り入れようか」 を 303 には考えてもらいたい。
というより今までの流れの中で 「これだけは捨てられない」 ってポイントが、3点くらいはすぐに挙げられると思う。

そのポイントが「方針」だと思う。まずはそれを聞かせて欲しい。
546303 ◆pFphp4Ej4w :2009/07/25(土) 18:28:39
> 好き勝手言ってるだけだから、それらをぜんぶ取り入れたら無法地帯になるよね。

あぁ…それ忘れてた(;´д`)

> そうじゃなくて、周りの意見を聞いたうえで�「さて何を取り入れようか」�を�303�には考えてもらいたい。
> というより今までの流れの中で�「これだけは捨てられない」�ってポイントが、3点くらいはすぐに挙げられると思う。

そうですねぇ…
1.マルチスレッド周りの強化
2.後方参照の導入
3.ヘッダファイルの廃止
4.クラス、テンプレートの導入
ですね。なんか545さんの意見に便乗するようで悪いのですが、これが標準ということでよろしいですか?
547デフォルトの名無しさん:2009/07/25(土) 18:33:41
a ? b : c
みたいなのもっとくれ
548デフォルトの名無しさん:2009/07/25(土) 18:35:12
>>546
まんまD言語じゃん。D言語からGC外すの頑張った方が良くね?

>1.マルチスレッド周りの強化
標準でTLS、推移的なimmutableやsharedあり
>2.後方参照の導入
(前方参照と言うのだがまぁいいとして)これも採用されている。
>3.ヘッダファイルの廃止
ヘッダファイルもない。
>4.クラス、テンプレートの導入
クラスもC++以上のテンプレートもある。
549デフォルトの名無しさん:2009/07/25(土) 18:47:55
あんなバグ言語参考にするだけ毒
550デフォルトの名無しさん:2009/07/25(土) 18:50:52
D言語の仕様がバグってるの?
それともまともなコンパイラがないだけなの?
551デフォルトの名無しさん:2009/07/25(土) 18:56:54
549じゃないけど…
コンパイラのバグはまぁ多いかな。特に想定されてないと思われる組み合わせを使うとバグに遭遇しやすい。
仕様のバグもまぁぼちぼちあるが(配列リテラルのキャストとか)、直していける範囲だと思う。
552デフォルトの名無しさん:2009/07/25(土) 19:03:38
ただ再実装となるとD言語は複雑過ぎてC言語へのトランスレータですら現実的じゃない気が。
dmdのソース(GPL)を改造するならともかく。
553デフォルトの名無しさん:2009/07/25(土) 19:19:31
>>546
>>548でも指摘されてるけど向きはパーサ基準だから
画面の下方向が前方になるよ
554303 ◆pFphp4Ej4w :2009/07/25(土) 19:37:46
>>548
そうなんですよね…
いま現在のプログラミングの研究が進んだ社会ではC言語の後継を目指そうとオブジェクト指向を取り入れるとC#かD言語になってしまうのですよねぇ…

いっそのことオブジェクト指向はばっさりと切り捨ててしまいましょうか?
555デフォルトの名無しさん:2009/07/25(土) 19:40:30
新しいパラダイムを作り出すの?
556303 ◆pFphp4Ej4w :2009/07/25(土) 19:41:46
>>554
訂正

〜オブジェクト指向やその他諸々を取り入れるとC#かD言語になってしまうのですよねぇ…
557デフォルトの名無しさん:2009/07/25(土) 19:43:49
>>555
新しいパラダイムか。いいねぇ。
イベント駆動のパラダイムを全面に出した言語が欲しいなぁ
558303 ◆pFphp4Ej4w :2009/07/25(土) 20:11:59
>>557
本当は、構造化プログラミングパラダイムであるC言語のパラダイムを受け継ごうという意味だったのだけど、それはいいなぁ…
ちょっと考えてみるね。
559デフォルトの名無しさん:2009/07/25(土) 20:13:06
smalltalk
560デフォルトの名無しさん:2009/07/25(土) 23:16:29
入力と出力が複数ある、時間軸を持った言語
561デフォルトの名無しさん:2009/07/25(土) 23:22:30
インタプリタとしても使えるコンパイラ
562デフォルトの名無しさん:2009/07/25(土) 23:41:01
そういえば
kコンパイラ使ったわ
ほとんど覚えてないけど
563デフォルトの名無しさん:2009/07/26(日) 10:33:46
こーやって当初の方針からどんどん反れてガッカリ言語になるんですね。
564303 ◆pFphp4Ej4w :2009/07/26(日) 21:26:47
385さん、githubにアカウント登録してメールをお送りしましたので、お読みください。
565デフォルトの名無しさん:2009/07/27(月) 01:47:01
C言語の骨格はあまり変えないで欲しい。
ライブラリの話だけど、文字列バッファやファイル、ソケットとかを
一緒くたにできるようにしてほしい。
文字列をFILE *にアサインしてfprintfとかで読み書きでけるとか。
FILE *fp = string_open(buf, size, "r+b");
みたいな。
まあソケットへの適用は微妙だね。ソケットに対してfgets、ungetc
とか使えると便利ではあるけど。
ライブラリ作るのも大変だ。
566385:2009/07/27(月) 02:08:05
>>564
メール読みましたが,別にメールで話すようなことでもないのでここに書きますね。

私は主に実装に興味があるので面白ければなんでもいいんですが、客観的に意見をいうと
「イベント駆動のパラダイムを全面に出した言語」というのがそもそもどういったものを
指しているのか良くわかりません。

イベント駆動のプログラムは大体どんな言語でも書けますし、結局のところ
コールバックを登録するだけなのだから、こんな構文があったらうれしいとかいうのも
想像できません。
並列処理のことなども考えるとイベント駆動について考えるのは重要だと思いますが、
言語の中心に据えるようなものなんでしょうか?
567デフォルトの名無しさん:2009/07/27(月) 02:14:14
>>565
それ、fmemopen。今はPosix止まりだけど、今度のCの規格改定(C1X)で入る予定。
ソケットも、Unix系はfdopen、Windowsは_open_osfhandleして_fdopenでFILE*にできるのが現状。
だから、新言語のライブラリでもそう大変ではないはず。

なんでもファイル読み書きの如く扱えるのが当然という言語は多いけど、
なんだかんだでCでもそうできている。
自分はWindowsの人間なんで使ったこと無いけど、funopenやfopencookieとかも。
568デフォルトの名無しさん:2009/07/27(月) 04:00:14
>>566
>「イベント駆動のパラダイムを全面に出した言語」
Reactive Programmingのこと言いたかったんじゃね?
似てるし。
569303 ◆pFphp4Ej4w :2009/07/27(月) 09:11:06
だんだん自分が何したいのかわかんなくなってきました…
いったん勉強して、また出直します…
570デフォルトの名無しさん:2009/07/27(月) 11:27:41
昔、C言語でOSのAPIみたいなのは使わずに、ラウンドロビンか何かで
スタック退避したりしてマルチタスクする、って本があった。
プリエンティブだったかどうか忘れたけど、
タスク切り替えのトリガは何だったかな。
571デフォルトの名無しさん:2009/07/27(月) 12:06:05
>>570
fiberのこと?
572デフォルトの名無しさん:2009/07/27(月) 12:08:26
microthreadって言った方がいいか。
573デフォルトの名無しさん:2009/07/27(月) 19:08:43
打ち止めか・・・
やっぱり登り始めちまったようだな
LISPへの道を
この道は険しいから、相当の覚悟が必要だ
574385:2009/07/27(月) 19:28:49
303が居なくなってしまったんで、自分で好き勝手に作って遊びます。
何かできたらここに書くかもしれないし書かないかもしれません。では。
575デフォルトの名無しさん:2009/07/27(月) 22:53:20
LISPから下りはじめたらどうなる?
576デフォルトの名無しさん:2009/07/27(月) 22:55:06
Cだけに未完!
577デフォルトの名無しさん:2009/07/28(火) 00:13:42
綺麗なオチしてるだろ・・・
死んでるんだぜ、スレ
578デフォルトの名無しさん:2009/07/28(火) 00:58:09
ま、勝つことが目的になってたら、勝てるものも勝てないよな。言語作りは奥が深いよ。

303 の悪いところは、良い所だけを考えて、それ以外の細かい部分を疎かにしていたこと、かな。
最後まで作りこんだ経験があればまた話は違ったのかもしれないけどね。
579デフォルトの名無しさん:2009/07/28(火) 01:05:53
……批判してばかりもなんだし、劣化コピー前提で色々考えてみるかな。
思い立ったが吉日生活さー
580デフォルトの名無しさん:2009/07/28(火) 11:04:16
>>510ってどういう事?
581デフォルトの名無しさん:2009/07/28(火) 13:07:34
>>580
抽象化って言葉がバズワード化してる。

継続を得ると言っているのはおそらく
returnとかbreakとかcontinueのようなオブジェクトを得る
ということ。
582デフォルトの名無しさん:2009/07/28(火) 20:03:21
You shall never return home.
583デフォルトの名無しさん:2009/08/01(土) 20:23:03
>>581
バズワード化なんてしてないと思うけど。
単にキミが頭悪いだけじゃないの?
>>510の2行目の表現はちょっと意味不明なところがあるが…

言っとくけど俺は>>510じゃないよ。
584303 ◆pFphp4Ej4w :2009/08/02(日) 00:17:33
みなさんどうもお久しぶりです。303です。とりあえず近況報告のみさせていただきます。

あれから自分の頭を冷やし、他の言語の仕様を調べたり、関数型言語を軽く調べたり、学んだりしていました。
そのかいあってか、私の中ではかなり具体的にSINCLの言語仕様が固まってきました。
おそらく近日中にSINCLの言語仕様案をこのスレのなかで提示することが出来ると思っております。
またSINCLの言語としての方針もそのとき示すことができるでしょう。

とりあえず今日言いたかったことはこれだけです。それでは失礼いたします。おやすみなさい。
585デフォルトの名無しさん:2009/08/02(日) 06:26:23
楽しみにしてるよー
586303 ◆pFphp4Ej4w :2009/08/07(金) 15:48:17
諸事情ありまして発表が大幅に遅れます。
申し訳ございません。(発表待ってる人いないと思うけどとりあえず。)
587デフォルトの名無しさん:2009/08/07(金) 18:57:24
えー
588303 ◆pFphp4Ej4w :2009/08/13(木) 17:27:02
みなさん、お久しぶりです。303です。
いま携帯から書き込んでいるので今後のSINCL(仮称)の方針についてお話しするに留めておきます。
当分はC言語へのトランスレーター向けの言語仕様を策定していくつもりです。これがSINCL(仮称) version1となります。
恐らく言語仕様に盛り込まれるのは
テンプレート
名前空間
半端な型推論
となるでしょう。文法はあまりC言語とは変わらなくなると思います。(一部の変態的構文のみ廃止または改訂されます。)
SINCL version2(仮称)はコンパイラ向けの言語仕様になると思います。
SINCL(仮称) version3はオブジェクト指向が盛り込まれると思います。
SINCL(仮称) version4は返り値に関数が指定できるようになると思います。
…これらが今後のSINCL(仮称)について私が抱いている青写真です。
今後このプロジェクトがどのような方向に進むかわかりませんがどうか皆様よろしくお願いします。
それでは、失礼いたします。
589デフォルトの名無しさん:2009/08/13(木) 20:11:57
頑張れー
590デフォルトの名無しさん:2009/08/13(木) 23:21:00
SINCLはSuper INdent C Languageの略称です
591デフォルトの名無しさん:2009/08/13(木) 23:29:44
関数が返せるってのはつまりクロージャ?
どうやって実装するつもり?
592デフォルトの名無しさん:2009/08/14(金) 01:00:43
クロージャを受けるオブジェクトと参照カウンタで作れる
593デフォルトの名無しさん:2009/08/14(金) 01:10:54
その作り方はセンスないだろ
あくまで新C言語なんだから。
594デフォルトの名無しさん:2009/08/14(金) 01:31:43
>>588
何かもうそれだとC++0xっで良くね?
595303 ◆pFphp4Ej4w :2009/08/14(金) 10:37:17
>>591
>>592氏が言っているようなやり方でできると思います。
まぁversion4での話ですから、言語仕様の策定は当分先、早くても2011年頃になると思います。
ですから今から実装の話をするのはちょっと早すぎるような…
そこらへんは385氏と話さないとなんとも言えませんね…

>>594
SINCL(仮称)はオブジェクト指向でないという点が違います。(version2まで)
596デフォルトの名無しさん:2009/08/14(金) 13:09:30
つまりversion3からはC++0x?
597303 ◆pFphp4Ej4w :2009/08/14(金) 14:33:45
>>596
そういうことになるのかなぁ…

ただ、SINCL(仮称)=C++と言う訳ではないので同じものであるとは言えません。
ま、まだ先の話ですから。
598デフォルトの名無しさん:2009/08/15(土) 06:58:02
全然目的が見えない。
599303 ◆pFphp4Ej4w :2009/08/15(土) 14:31:17
>>598
目的…それは今のC言語の特徴を残しつつ、それを越えたプログラミング言語(新C言語)を、実装・言語仕様共に皆様に提供することに他ならないと私は考えています。
600デフォルトの名無しさん:2009/08/15(土) 18:54:47
残したいC言語の特徴って何?
601デフォルトの名無しさん:2009/08/15(土) 19:53:00
303
お前は何も作る気が無いと言ってるのと同じ
しかもまだ385に頼るつもりでいるのか?
別に誰も期待してないし、もう出てこなくていいよ
602303 ◆pFphp4Ej4w :2009/08/15(土) 19:54:07
>>600
重要度の高いものから順に
1.高い移植性
2.OSさえも(アセンブリ言語を一部使用しなければならないにしても)書けてしまうという高い柔軟性
3.高いパフォーマンス性能
603デフォルトの名無しさん:2009/08/15(土) 20:34:56
>>602
評論家みたいな抽象論だね。
1.と3.は要するに言語仕様に環境に依存する機能は含めない(環境の違いは
ライブラリで吸収)すること、2.は要するにポインタのことでしょ。

しかし、何もガラガラポンの全とっかえである必要は何もないと思うんだが。
Cのマズい仕様を変更し、不足している機能を補う、それで十分じゃないのか。
発展的継承って理論でもものづくりでも一番オーソドックスな進歩の方法でしょ。
604デフォルトの名無しさん:2009/08/15(土) 20:37:14
Cへのトランスレータなんだから、全とっかえでは無いのじゃないかな

と、横槍
605デフォルトの名無しさん:2009/08/15(土) 20:53:12
ガキじゃないんだったら否定するまえにアイデアをだせな。

おれはメモリ空間を超えられる言語がおもしろいと思うな。
OpenCLとかあるけど、仕様が現行GPUの都合で決められてて汚すぎ。
GPU以外にも例えばCell B/EのPPEとSPEがシームレスにプログラミングできるとか、
サーバクライアントのアプリががひとつのソースから作れるとか。
ランタイムをどれだけ最小限に抑えられるかがミソだと思う。

つうかこれ数年前に作り始めて途中で挫折したんだけどさ。
606303 ◆pFphp4Ej4w :2009/08/15(土) 20:55:21
>>603
そういうつもりなんですが、あの文じゃわかんないか(;´д`)
607デフォルトの名無しさん:2009/08/15(土) 21:05:54
>>602
C言語へのトランスレータだった時代のC++のサブセットを再発明して、その後C++0xのサブセットを再発明するとしか見えない。
がっかりだ。
608デフォルトの名無しさん:2009/08/15(土) 23:18:21
何ががっかりだよ。
じゃあお前は何をつくれるんだ?
609デフォルトの名無しさん:2009/08/15(土) 23:23:08
何故そういう話になるんだか。
610デフォルトの名無しさん:2009/08/15(土) 23:28:04
上から目線で否定してるのは確かにいらっとする。
建設的な話ができないやつは厨房って自覚した方がいいね。
611デフォルトの名無しさん:2009/08/15(土) 23:32:15
建設的って。建設的な話題は手前の方で出したよ。
その結果がこれじゃぁね。
#あるコンパイラを弄ったことあるから協力するつもりで居たのに残念という意味合いが強い。まぁ期待しすぎただけだが。
612デフォルトの名無しさん:2009/08/15(土) 23:34:22
作る本人は良いとして、これができたからと
いって、使い道はあるんだろうかね。
613デフォルトの名無しさん:2009/08/15(土) 23:35:44
個人的に強力なジェネリックとかあると使ってみたい気はするが。
614デフォルトの名無しさん:2009/08/15(土) 23:36:28
ネイティブ言語でのジェネリックは俺も興味あるな
615303 ◆pFphp4Ej4w :2009/08/15(土) 23:58:58
>>607
ここでつくられる言語がガッカリなものになるかどうかはここで皆様が下さる助言に少なからず関わってくると思います。

あ、あと、あまり私に過度な期待をかけないほうがいいと思います。
投げ出すつもりはありませんが、所詮はどこにでもいる高校1年生ですし。
616デフォルトの名無しさん:2009/08/16(日) 00:04:10
どうせ釣るんなら
ちなみに女です
とか気を利かせろよ
617デフォルトの名無しさん:2009/08/16(日) 00:18:13
>>615
仕様制定のプロセスの問題について言いたいこともあるが、まぁいいや。
まずは既存の実装のソースを弄ることから始めてみるといいよ。そうしないと全体像掴めないだろうしね。C言語コンパイラのtccやD言語コンパイラのdmd辺りを弄るのがお手軽かな。
本当は分かりやすいC++実装があると良いのだけどね。
http://bellard.org/tcc/
http://ftp.digitalmars.com/dmd.2.031.zip (dmd2/src/dmd内)
#llvmのclang(cfe)とかgccとかは試してないので難しさは分からないけどざっと見ややこしそう。
#上の方で紹介されてたcycloneもソースあるようだけどもcyclone自身で書かれているようなので理解には向かない予感。
618303 ◆pFphp4Ej4w :2009/08/16(日) 00:29:18
> >>615
> 仕様制定のプロセスの問題について言いたいこともあるが、まぁいいや。

言いたいことはじゃんじゃか言ってしまって結構ですよ。

とりあえず紹介して下さった実装のソースコードを見てみることにします。
619デフォルトの名無しさん:2009/08/16(日) 00:40:52
>>618
>言いたいこと
後でいいや。

>ソースコードを見てみることにします
忘れてたけどこれも張っとく。
ソースコードを読むための技術
http://i.loveruby.net/ja/misc/readingcode.html
構造が分かるようになれば面白くなってくるから頑張れ。
620デフォルトの名無しさん:2009/08/16(日) 00:42:56
いつから初心者が作るコンパイラスレになったんだ
別スレたててやれよ
621デフォルトの名無しさん:2009/08/16(日) 00:46:22
実装知らんと仕様作れんだろjk
622303 ◆pFphp4Ej4w :2009/08/16(日) 18:46:00
えーっと、とりあえずversion3とversion4については皆さんの反感がかなり強いので、このバージョンの言語仕様の策定・実装の提供は一時的に凍結いたします。

今後皆さんの要望があれば凍結が解除されると思いますが、これじゃそんなことはないだろうな(;´д`)
623デフォルトの名無しさん:2009/08/16(日) 19:21:24
>>622
頑張れ。技評の"要求を仕様化する技術・表現する技術"って本読んでおくと良いよ。プロセスの問題が分かるから。
624303 ◆pFphp4Ej4w :2009/08/16(日) 20:38:25
>>623
ちょいと図書館で探して見ます。
625デフォルトの名無しさん:2009/08/17(月) 23:31:16
今日本屋に行ったら、コンパイラを作るって本が売ってたな。
作例がCフラットとかいうのw
626デフォルトの名無しさん:2009/08/18(火) 00:59:12

日本屋
627303 ◆pFphp4Ej4w :2009/08/18(火) 09:37:00
>>625
そういえば今年はコンパイラ関係の本が次から次へと出版されてますよね。ドラゴンブックとか。

今年はコンパイラ本の当たり年なんですかね。
628デフォルトの名無しさん:2009/08/20(木) 09:44:14
ネーミング(仮)のSINCLなんだけど
Common Lisp と間違えそう
629デフォルトの名無しさん:2009/08/20(木) 10:10:34
じゃあ間違えないようにCommonLisp処理系作ればいいよ
630303 ◆pFphp4Ej4w :2009/08/20(木) 18:27:48
>>628
…いいかげん仮称じゃなくて正式名称をきめたいですねぇ…
631デフォルトの名無しさん:2009/08/20(木) 18:54:14
もう、面倒だから"303c"でいいよ。
632303 ◆pFphp4Ej4w :2009/08/20(木) 19:33:48
>>631
いやいや。ここの人たちのアドバイスがなきゃ私は言語仕様作れませんし。
それじゃ株式会社ジェーンの二の舞に…
633デフォルトの名無しさん:2009/08/20(木) 21:30:20
どうせ作る気もないんだろ。
303c、TB303みたいでかっこいいじゃん。
634デフォルトの名無しさん:2009/08/21(金) 00:12:55
CB-303とかパチモン臭強くした方がいい。

さて、Bは何の略にしようか。
635デフォルトの名無しさん:2009/08/21(金) 06:19:03
C委員長
636デフォルトの名無しさん:2009/08/21(金) 08:42:07
名前って結構悩むよね
実務で変数とか関数にhogeとかつけてるとすぐにクレームが^^;

スレ主が決めちゃえばいいと思うんだけど「みんなで決めよう」ってことなら
開発用のコードネームをとりあえず決めちゃえばいいんじゃない?
SINCLでもいいと思うよ

仕様が決まり出してから正式名を決めれば?(アンケートとかで)

303好きな人が多いのでリアルタイム特化型にしたら
CR-303とかパチンコみたいな名前になるかも
637303 ◆pFphp4Ej4w :2009/08/21(金) 11:46:22
>>636
そうします。
638デフォルトの名無しさん:2009/08/21(金) 12:15:27
高校1年生でコンパイラ作れるってすごいな。
C言語のトランスレータだったら最適化フェーズはないんだろうけど。
それでもすごい。
コンパイラ構成論の勉強したの?
名前は美緒さんとかw
639デフォルトの名無しさん:2009/08/21(金) 12:33:59
>CR-303
ボタン電池みたいだな。
だがそれがいい。
640デフォルトの名無しさん:2009/08/22(土) 04:23:40
名前は
コンパ イラ
641デフォルトの名無しさん:2009/08/22(土) 05:56:14
>>639
30mm x 3mmですね。わかります
642デフォルトの名無しさん:2009/08/23(日) 04:13:39
Cの当時からlambdaが導入されてりゃC++ももっと違う言語になってたろうな。

Bool bool(a==b);
bool.
 True([](){puts("Equal")}).
 False([](){puts("Not Equal")});

こんなSmalltalkライクな構文も書ける訳だし。
643デフォルトの名無しさん:2009/08/23(日) 09:40:35
生存期間の問題がある
644デフォルトの名無しさん:2009/08/23(日) 10:58:31
クロージャをコピー不可にすれば大丈夫じゃね?
645デフォルトの名無しさん:2009/08/23(日) 11:23:59
↑クロージャへの参照(ポインタ)のコピーだった。
関数の引数として渡すのはOK
646デフォルトの名無しさん:2009/08/23(日) 23:24:43
マルチスレッドですぐ破綻するクロージャなんてない方がまし
647デフォルトの名無しさん:2009/08/24(月) 02:33:56
そういう使い方ならスタティックやヒープに置けば問題ない。
要するに置き場所を選べるように作ればいい。
648デフォルトの名無しさん:2009/08/24(月) 17:25:04
>>641
寧ろそれは、3mmΦ*0.3mm厚じゃないのか?
例えばCR-2016は20mmΦ*1.6mm厚だぞ。
649デフォルトの名無しさん:2009/08/27(木) 23:00:23
あんま関係なさそうな話だけど、

s = hogehoge(s);

みたいなのを、

s *= hogehoge;

とかみたいに書けるってのはどうだろう。記号はともかくとして。
++がアリなら、こういうのもアリな気はする。

他の言語だとどんな文法使うんだろ。こういうのって。
650デフォルトの名無しさん:2009/08/27(木) 23:11:53
>>649
それ少しも複雑性が減ってるように思えないんだけど・・・
しかも代入演算子の書き方と少しもシンメトリックじゃないってどういうことだ
651デフォルトの名無しさん:2009/08/27(木) 23:29:16
a = a - b;
a = b - a;
代入演算子を使えるのは前者のみ
652デフォルトの名無しさん:2009/08/28(金) 00:39:57
>>650
perlの正規表現みたいな感覚でもいいんだけど、
そういうのにふさわしい記号が思いつかない。
653デフォルトの名無しさん:2009/08/28(金) 01:09:52
むしろ
s.hogehoge
ですな
追加のような単純な処理ではなく、
全体に変更を加えるような意図なら
演算子化は避けるべき
654デフォルトの名無しさん:2009/08/28(金) 04:57:22
>>649
hogehoge(&s);
655デフォルトの名無しさん:2009/09/02(水) 22:12:36
興味あるので落ちないように上げとく
自分としては強力なマクロが欲しい
m4ぐらいの…

あまり無理せずにマターリと!
656303 ◆pFphp4Ej4w :2009/09/02(水) 22:48:59
>>655
どうもありがとうございます。自分なりにリファレンス書いたり実装をちょびちょび書いているのですが…もうすぐ学校の文化祭でして(10月)しばらく手がつけられなさそうです。
657デフォルトの名無しさん:2009/09/02(水) 23:04:07
高校生がC言語ライクなコンパイラ作れるってすげーな。
理論は独学?
658デフォルトの名無しさん:2009/09/02(水) 23:09:20
高校生なの?凄いな最低でも大学生かと思ってたわ
659デフォルトの名無しさん:2009/09/03(木) 00:00:22
>>657
いやいやただのトランスレーターですよ。
まぁそのうちコンパイラも…
660303 ◆pFphp4Ej4w :2009/09/03(木) 00:04:27
>>657
いやいや、ただのトランスレーターですよ。
まぁそのうちコンパイラも…
ただ最適化とかいれるとなると私の手におえなくなりますが…

第一こんなアホな発言ばっかりしてるのに大学生と思われてたってのは…何?
661303 ◆pFphp4Ej4w :2009/09/03(木) 00:16:02
だぁっ!
二重投稿してしまった…
662デフォルトの名無しさん:2009/09/03(木) 06:21:45
>>303 は大学受験に落ちる
663デフォルトの名無しさん:2009/09/03(木) 16:59:17
これが303の人生で最大の偉業になるかもな
664デフォルトの名無しさん:2009/09/05(土) 02:03:54
トランスレータでも構文解析の知識はいるだろうに。
665デフォルトの名無しさん:2009/09/05(土) 13:16:04
その辺もすべて385にやらせようとしてたみたいだが・・・
技術者より経営者に向いてるかもよ!
666デフォルトの名無しさん:2009/09/06(日) 07:26:28
ソースはどこで見れんの?
667デフォルトの名無しさん:2009/09/06(日) 07:37:40
俺も以前C言語作ろうとしたんだけど
C言語て記号いろいろ使ってて、作るのめんどくなって途中で投げたんだ
printfと、if,elseまで作った時点でかなりソースが膨らんでてやる気がな・・・・
303がどこまで作れたのか興味深い
668303 ◆pFphp4Ej4w :2009/09/06(日) 09:00:21
>>664
まぁそうですが、最適化と実行ファイル生成とかがないだけ楽です。

>>666
http://github.com/385

で385氏がOCamlで書いたものが見れます…と思ったら無くなってますね…
とりあえずソースは手元にあるのでどこかうpろだ紹介してくださればそこにあげます。

>>667
C系の言語って他のプログラミング言語より圧倒的に演算子が多いですからね…
669303 ◆pFphp4Ej4w :2009/09/06(日) 09:11:00
あ。h抜き忘れた。
670デフォルトの名無しさん:2009/09/10(木) 10:20:15
>>668
That page doesn't exist!ってなってる
671デフォルトの名無しさん:2009/09/10(木) 20:45:51
>>668

>で385氏がOCamlで書いたものが見れます…と思ったら無くなってますね…
>とりあえずソースは手元にあるのでどこかうpろだ紹介してくださればそこにあげます。
672デフォルトの名無しさん:2009/09/10(木) 22:23:36
>>668
Wikiを作ってWikisourceみたいな使い方すればリファレンスも書けて一石二鳥
673デフォルトの名無しさん:2009/09/10(木) 22:30:09
俺はもうこれで良いや。特にクロージャの追加の所。

http://www.open-std.org/jtc1/sc22/WG14/www/docs/n1370.pdf
674デフォルトの名無しさん:2009/09/12(土) 00:28:34
675デフォルトの名無しさん:2009/09/12(土) 08:15:57
ちょwww
ああああふぃぃいぃぃぃ 多いよ^^;
676303 ◆pFphp4Ej4w :2009/09/12(土) 14:13:26
>>674
作ってくださったのですか?ありがとうございます。
677デフォルトの名無しさん:2009/09/12(土) 21:11:08
atwikiとかのが無難だろ
ああそうか、わざわざ変な道を行くのがこのスレの趣旨でしたね
678デフォルトの名無しさん:2009/09/12(土) 21:40:53
ウィキペディアがいろいろと普及? したので、
MediaWikiで書きたいという需要が最近増えてるが、
atwikiだとMediaWiki互換機能はかなりあやしい。
679674:2009/09/12(土) 23:05:18
>>677
atwikiだとソースコードモードで10000行200000バイトまでしかかけないのでMediaWikiかなと。
680デフォルトの名無しさん:2009/09/13(日) 03:42:41
どちらかというとpukiwiki系の方が好きだな
681デフォルトの名無しさん:2009/09/13(日) 08:37:13
Pukiwiki使っているところはページの階層構造が分かりにくいことが多いと自分は感じる。
管理のしっかりしているサイトなら気にならないんだけど。

MediaWikiはカテゴリによって適当にやってもそれなりに階層構造ができているように見えるのがいい。
WikipediaやChakuWikiのような誰でも編集できるところはMediaWikiがあっていると思う。
682デフォルトの名無しさん:2009/09/14(月) 22:48:09
gccを適当に拡張して本家にマージさせたら楽そうだな
アレ以上何を拡張するんだか知らんが
683デフォルトの名無しさん:2009/09/16(水) 22:30:30
gccフロントエンドは結構な鬼門のイメージがあるがな
684デフォルトの名無しさん:2009/09/17(木) 00:51:42
え、何?
LLVM のフロントエンドを作りたいの?
685303 ◆pFphp4Ej4w :2009/09/18(金) 21:11:39
>>625にあった「ふつうのコンパイラをつくろう」を学校のメディアセンター(図書室)に注文しました。
いずれはコンパイラを作ることになるので今のうちに読んでおこうかと。
686デフォルトの名無しさん:2009/09/18(金) 21:40:50
コンパイラまで作る気あるんだ
687デフォルトの名無しさん:2009/09/19(土) 01:59:07
よくある、関数で最初に1回だけ実行される部分を何かの書き方にするのはどうか。

static int first = 1;
if(first){ ほげほげ first = 0; }

みたいなのを、

first{
ほげほげ
}

みたいに書けるとか。
688デフォルトの名無しさん:2009/09/19(土) 02:05:11
じゃあ2回だけ実行されるのも追加しないとな
689デフォルトの名無しさん:2009/09/19(土) 02:33:55
first よりも once の方が良いかもね。

static int once = 1;
while(once--) { ikkaidake() };
690デフォルトの名無しさん:2009/09/19(土) 07:20:42
なかなか便利そうですね

int hogehoge() {
何かの処理
once { huga1 }
何かの処理
once { huga2 }
}

みたいに複数書けるとさらにうれしいかも
691ぅゅ ◆e6.oHu1j.o :2009/09/19(土) 14:04:30
#define Ikkai \
static int ikkai; \
if( !( ikkai || ikkai++ ) )

defineでやれるだろカス
てかこれ、バグの元になるってのわかってんの?

初心者はそこらじゅうに
static int first = 1;
if(first){ ほげほげ first = 0; }
こんなソース書きまくるが
それはさっさとやめさせてまともな設計を考えさせるべき
692デフォルトの名無しさん:2009/09/19(土) 14:08:34
まともな設計をするときは、C++でやるお(^q^)
693ぅゅ ◆e6.oHu1j.o :2009/09/19(土) 14:51:08
きーてねーよカス
694デフォルトの名無しさん:2009/09/19(土) 15:01:16
>>687-690の構文は議論の余地があると思うけど、基本的にはあるべきと感じる。
>>691のマクロもマルチスレッド時を考慮していないように見えるのが残念。

Javaの静的初期化ブロック、C#の静的コンストラクタ、VistaのInitOnceExecuteOnceなど、
マルチスレッドプログラムで1度しか実行されない保証というのは需要がある。
だから、そのための構文を作るアイディアは悪くないと思う。
というより、上に例を挙げたように正直に言って珍しくもなんともない。
あとは、どういう構文にするか。
695デフォルトの名無しさん:2009/09/19(土) 15:55:36
>>689は構文というか、現行のCで使える方法だよ。
696ぅゅ ◆e6.oHu1j.o :2009/09/19(土) 19:01:39
>>694
>マルチスレッド時を考慮していないように見えるのが残念。
は?
この流れでマルチスレッドって発想は無かった

俺はもう一種類この手のマクロを持ってる
それはこのマクロで宣言されるstatic変数のアドレスを保存していって
初期化したくなったら、初期化関数を呼んで、またブロックを1回だけ通るようにするという仕組み
俺はマルチスレッドプログラムは組まないけど
Aスレッドが1個しか走らないプログラムなら
そのスレッドの終了時に初期化させればいいし
Aスレッドが同時にいくつも走るならスレッド作成時に識別子を与えれば普通に判定できるんじゃね
697デフォルトの名無しさん:2009/09/20(日) 05:38:17
>>691
バグの元になりそうなのでマクロじゃなく構文に入れようとしてるんだろ?
698ぅゅ ◆e6.oHu1j.o :2009/09/20(日) 07:35:42
そうなんですか?
じゃあ一つ385、303の書いてるソースもっていたら
static int first = 1;
if(first){ ほげほげ first = 0; }
こういう処理やってる場所を探し出してもらえませんか
ソース何処にあるか知らないけど
コンパイラとか作ってるならソース見なくても普通は無いと確信できる
699ぅゅ ◆e6.oHu1j.o :2009/09/20(日) 07:38:08
スレ汚したな
自分の好きなように作ればいいよ
その処理は悪用されると怖いってだけで自分も極まれに使う事はある
700デフォルトの名無しさん:2009/09/20(日) 09:48:34
なんか言っていることがよく解らないんだが…

トランスレータなりコンパイラなりを作ろうとしているんでバグが発生しやすいような
こういう処理やよく書く処理をこういう風に展開して欲しいとみんな言ってるのだと思う
701デフォルトの名無しさん:2009/09/20(日) 12:40:11
>>698の意図がよく分からん。彼は何がしたかったんだろうか。
702デフォルトの名無しさん:2009/09/20(日) 13:28:21
つーか、マルチスレッドはともかく、こんなの超安全な部類だと思うが。
それよりも自称プロがなんかわざわざ難しく見えるコード書いて俺SUGEEしてる方が危険w
703デフォルトの名無しさん:2009/09/20(日) 13:34:04
トランスレーター系はバグが出たらかなりデバッグしにくい。
トランスレーターの出力をある程度理解している人間じゃないと使えないから
結局統合される運命にある。
だからそのままリリースしておしまいってことにはならない。
もしそうなら開発者のオナニ−でしかいない。
LISPはその辺うまくできている。
704デフォルトの名無しさん:2009/09/20(日) 13:52:22
Lisp がどうかはさておき、そんな当たり前の話を上から目線で話されてもなあ…
705デフォルトの名無しさん:2009/09/20(日) 13:55:56
ついでに言えば、CL だろうと Scheme だろうとマクロにバグがあったら
デバッグはそれなりに面倒だと思うけど…
706デフォルトの名無しさん:2009/09/20(日) 23:37:23
関数で最初に1回だけ実行される
ってのがそもそも設計間違ってる可能性が高いと思うんだが。
関数に状態持たせるなよ。
707デフォルトの名無しさん:2009/09/20(日) 23:53:57
つまり君は、クロージャを採用している言語は設計間違ってる可能性が高いと思う訳か。
おいそれと JavaScript も書けんな…
708デフォルトの名無しさん:2009/09/21(月) 00:09:28
新C言語だろ?
クロージャ採用は間違ってる可能性が高いと俺も思う
709デフォルトの名無しさん:2009/09/21(月) 00:14:18
世の流れに棹さすのも悪くないと思うけど、理由くらい言って行こうや。
710デフォルトの名無しさん:2009/09/21(月) 00:18:04
>>706
そうだよ。
ただ、インスタンス的に関数を使うやり方なだけだからな。
711デフォルトの名無しさん:2009/09/21(月) 00:18:28
>>707
はぁ?
クロージャはモデルが違うだろ。
クロージャオブジェクトが関数と環境を持ってるんだよ。
言語スレの住人だったらメタモデルぐらい考えてみような。
712デフォルトの名無しさん:2009/09/21(月) 00:18:34
>>708
>新C言語だろ?

つうか Blocks 知らんのか…
713デフォルトの名無しさん:2009/09/21(月) 00:21:34
>>711
君は自分で自分の言ってる事が理解出来てるのかな?
714デフォルトの名無しさん:2009/09/21(月) 00:29:02
>>713
さぁね。
環境という言い方でわかる人はわかるはずだけどね。
715デフォルトの名無しさん:2009/09/21(月) 00:35:12
つまり君は『状態』と『環境』の違いを知っていると言う訳だ?
716デフォルトの名無しさん:2009/09/21(月) 00:37:36
つーか、クロージャの場合はそういう話ではないと思うが。
ジェネレータの話か?
717デフォルトの名無しさん:2009/09/21(月) 00:38:34
何かこの会話には、暫く前にデザパタが流行った時と同じ空しさを感じるな…

>>716
>>713
718デフォルトの名無しさん:2009/09/21(月) 00:50:41
そうだね。
>>707の突っ込みが的外れなわけで。
それを認めるのがいやで言葉尻をとらえようと必死になってる。
そういう構図。
719デフォルトの名無しさん:2009/09/21(月) 00:55:02
さぁ盛り上がって参りましたw
720デフォルトの名無しさん:2009/09/21(月) 04:44:27
もっと中身の無い口先だけの議論を見たかったのに〜
721デフォルトの名無しさん:2009/09/21(月) 09:35:19
いいスレですよね〜
スキルの高そうな人たちがそれぞれの信念のもとに突っ込んできますね〜

書き込んでる人全員の意見を考慮し出したら前へ進まないので
作ろうとしている人たちが採用/不採用を決めればいいと思います

自分の意見としては
a:いろんなOS/アーキテクチャで使用できる
b:既存のC/C++のコードを最小限の変更(変更なしが望ましい)で流用できる
が最低限必要かと思います

a,bが満たされないとオナニー言語で終わってしまうかもしれません
逆に満たされると「スーパーコンピュータでも使えます」みたいな〜

C言語へのトランスレータが良いかも(異議は認める)
722デフォルトの名無しさん:2009/09/21(月) 12:19:28
関数内スコープな関数が有用か否かって問題でそ
723303 ◆pFphp4Ej4w :2009/09/21(月) 14:02:15
なんかとてもめんどくさい流れになってますね…
>>708
クロージャ採用の話は凍結になったはずですが。

>>721
C言語へのトランスレーターである限りではどっちも満たせるんじゃないかと。
724デフォルトの名無しさん:2009/09/21(月) 15:56:55
303が調子に乗ってる
なんかむかつく!
725デフォルトの名無しさん:2009/09/22(火) 11:31:44
○既存言語の一部を仕様変更する際に、トランスレータは有効である (>>721)
×トランスレータは、既存言語の一部を仕様変更するために作成される (>>723)

303 の用語の使い方に、揚げ足取り。
726303 ◆pFphp4Ej4w :2009/09/23(水) 20:07:43
wikiに385氏の実装のソースコードあげました。
と言ってもPDFファイルとODTファイルですが…
727デフォルトの名無しさん:2009/09/24(木) 01:40:59
変更したい症候群の方は一度LISPを使ってみるべき
728デフォルトの名無しさん:2009/09/25(金) 22:56:07
LISPで下痢が治りました
729デフォルトの名無しさん:2009/09/26(土) 07:41:06
gelips
730デフォルトの名無しさん:2009/09/27(日) 07:58:11
まだかなあ
731デフォルトの名無しさん:2009/09/27(日) 11:52:04
俺的には
ジェネリックとオーバーロードと名前空間を足したCがあれば満足
クラスとかはいらんぽ
あとは型安全性の強化
732デフォルトの名無しさん:2009/09/28(月) 01:03:07
>>731
オーバーロードの機能をよく吟味すると、C++と同じ型ロジックが必要だとわかるよ
つまりC++使えって事
733デフォルトの名無しさん:2009/09/28(月) 03:06:59
C++を使うならJavaかDの方がいいな
734デフォルトの名無しさん:2009/09/28(月) 03:13:05
このスレ的にGC言語はお呼びでないだろ
735デフォルトの名無しさん:2009/09/28(月) 10:57:46
つまりDでいいと
736デフォルトの名無しさん:2009/09/28(月) 11:03:47
そもそもC++なんかでいいなら新C言語なんて発想はない訳で…
737デフォルトの名無しさん:2009/09/28(月) 20:36:41
>>1
現状報告をして下さい
738303 ◆pFphp4Ej4w :2009/09/28(月) 21:08:42
>>731
ジェネリックはテンプレートでどうにかなるかと。
でもC++みたいなテンプレートだと時間かかるんだよなぁ…
739デフォルトの名無しさん:2009/09/28(月) 23:05:11
>>1は逃げたの?
740デフォルトの名無しさん:2009/09/29(火) 01:56:36
1は最初からいねーだろw
741デフォルトの名無しさん:2009/10/01(木) 18:56:57
>>739
実現できそうになるのに2年かかるから>>1はいなくなったと考えるのが普通。
742デフォルトの名無しさん:2009/10/13(火) 01:00:13
っ[age]
743デフォルトの名無しさん:2009/10/13(火) 04:34:45
>>738
それはC++の実装というか仕様が糞なだけ。
744303 ◆pFphp4Ej4w :2009/10/18(日) 02:13:02
保守あげ。


#年内にリリース出来たらいいなと希望的憶測でものを言ってみる。
745デフォルトの名無しさん:2009/10/18(日) 02:25:47
tamarimahenna
746デフォルトの名無しさん:2009/10/18(日) 04:46:05
C++、Java、C#の類は新C言語じゃねーの?シンタックス的に。
てかC99とC++のextern Cってどの程度同居できるの?
747デフォルトの名無しさん:2009/10/19(月) 00:31:01
extern "C"は通常、名前修飾に関する扱いがCと同じになるというだけだが、
名前修飾がC99とそれ以前と異なる処理系なんて見たことないぞ。
748デフォルトの名無しさん:2009/10/20(火) 18:09:27
名前修飾?
@マークつきDLL関数ってCだとLoadLibraly使わないといけないけど
Basicだとそのまんま@マークつきで関数定義できちゃうよね。

そういう話じゃなくて?
749デフォルトの名無しさん:2009/10/20(火) 22:22:48
Windows以外も触っとけよ
750デフォルトの名無しさん:2009/11/03(火) 17:40:08
ほしゅ
751デフォルトの名無しさん:2009/11/04(水) 21:33:06
C + Smalltalk -> Objective-C
みたいなかんじで
C + CLOS -> 新C を妄想する
752303 ◆pFphp4Ej4w :2009/11/04(水) 22:44:53
どうも。303です。
githubにあった385氏の実装のコード置き場が復活していました。
(落ちる前にわしがフォローしていたから?)

ttp://github.com/303/SINCL

と言うわけで、385氏の実装をビルドする際はgithubからソースを取ってきてビルドすることを強く推奨します。
ではでは。
753303 ◆pFphp4Ej4w :2009/11/12(木) 07:03:26
なんかGoなんてのが出てきたみたいですね…。
利点:
コンパイルが速い
GC付き
並列処理を意識した設計
欠点:
パフォーマンスはCと比べ10%程悪い?(GCを採用しているからか?)
テンプレートがない
GCがある

構文はPascalとCを足して2で割ったような感じですね。D言語のスレで「将来的にDと競合するのでは?」なんて議論されてますが、むしろSINCLと競合するような気がしてなりません。被害妄想だと言われればそれまでですが。(まだ実装さえ出してないし)

Googleは何を目指してるんですかね…

…というわけで何が言いたいのかわからない雑文でした。

ついでにあげます。
754デフォルトの名無しさん:2009/11/12(木) 08:38:59
Cには似てない
Pascal+Javascriptに見える
755303 ◆pFphp4Ej4w :2009/11/14(土) 10:07:51
GoとかD言語のスレは盛り上がっているのにここは全然盛り上がらない(´;ω;`)ブワッ
756デフォルトの名無しさん:2009/11/14(土) 10:55:39
速いは正義
757デフォルトの名無しさん:2009/11/14(土) 11:41:57
動くものが正義だよ。
758デフォルトの名無しさん:2009/11/14(土) 14:20:11
かわいいは正義
759デフォルトの名無しさん:2009/11/14(土) 20:00:37
正義すぎる市議
760デフォルトの名無しさん:2009/11/15(日) 15:44:15
SBのCEOは正義
761デフォルトの名無しさん:2009/11/16(月) 01:14:30
孫なこと聞いてねーよ
762デフォルトの名無しさん:2009/11/16(月) 14:37:36
孫に関わると皆損する
763デフォルトの名無しさん:2009/11/19(木) 19:12:49
ちんぽ切ると皆損する
764デフォルトの名無しさん:2009/11/25(水) 17:12:39
「コンパイラ・スクリプトエンジン」相談室14
http://pc12.2ch.net/test/read.cgi/tech/1258431145/

このスレで今「俺言語」が話題になってる。
「俺言語」の変換先言語を感がえてみては?
765303 ◆pFphp4Ej4w :2009/12/09(水) 11:32:34
すみません、
typedef struct Hoge{
/* ... */
union piyo{
int foo;
char bar;
}u;
}Hoge;

Hoge hogege;
hogege.u.foo = 3;

って感じで共用体をを使う人ってどれくらいいます?
766デフォルトの名無しさん:2009/12/09(水) 11:35:53
>>765
unionは普通そういう使い方はしない。
構造体内でバイト列の読み替えをするのに定義することが多い。

union piyo {
int foo;
char bar[4];
short poo[2];
};

といった感じ。
767303 ◆pFphp4Ej4w :2009/12/09(水) 11:44:40
>>766
確かにそういう使い方もありますわな。(完璧に処理系依存で、ほめられた使い方じゃないですが)

…で今回聞きたいのはそういうことではなくて、「構造体の中で共用体を宣言してしまう」人がいるか聞いたのですが…
768303 ◆pFphp4Ej4w :2009/12/09(水) 11:49:21
あ、間違えた。

> 「構造体の中で共用体を宣言してしまう」

じゃなくて
「構造体の中で、共用体の宣言と共用体の変数宣言を同時にやってしまう」でした…
769デフォルトの名無しさん:2009/12/09(水) 12:41:07
>>767
おいおい。処理系依存じゃないよ。char、short、long intは
それぞれ最低取りうる値の範囲がC言語の規格書で決められているぞ。
(ただし1バイトが8ビットかどうかは処理系定義と明記してあるが)

その意味ではintと書いて4バイトとみなすのは「処理系依存」だが、それならlong intと書けばいい。

せめてJISの規格書くらいは目を通そうな。
http://www.jisc.go.jp/app/pager?id=32303

>…で今回聞きたいのはそういうことではなくて、「構造体の中で共用体を宣言してしまう」人がいるか聞いたのですが…
Linuxカーネルのソースコード読んでみな。
770303 ◆pFphp4Ej4w :2009/12/09(水) 13:08:58
>>769
> その意味ではintと書いて4バイトとみなすのは「処理系依存」だが、

あ、そういう意味です。申し訳ない。

> Linuxカーネルのソースコード読んでみな。

やっぱ結構いるんですかねぇ…

なんでこんなことを聞いたかと言うと、struct hoge型の宣言と変数宣言を同時に行うことはSINCLでは出来ないので(同様に配列、共用体なども)、
struct Hoge{
/* ... */
};<-この";"(名前忘れたorz)はなくてもいいんでないかと考えたからです。(…typedefはどうしたって?
もうstructとかの名前の扱い方C++と同じでいいと思って…
でも、こうするとこんどはstructの一括代入が不可能なCでは色々とめんどくさいのですがそれはおいといて。)
771303 ◆pFphp4Ej4w :2009/12/09(水) 20:41:38
>>769
って配列関係ないわ。わし頭ダイジョブか?
772303 ◆pFphp4Ej4w :2009/12/09(水) 20:42:41
>>771
しかも指定するレス番号間違えた…orz
773デフォルトの名無しさん:2009/12/12(土) 01:12:33
セミコロン
774デフォルトの名無しさん:2009/12/23(水) 07:39:03
775303 ◆pFphp4Ej4w :2009/12/24(木) 13:35:54
>>774
?
776デフォルトの名無しさん:2009/12/24(木) 14:14:21
>>774
777デフォルトの名無しさん:2009/12/24(木) 19:44:29
結局今年も何の成果もなかったな!
778デフォルトの名無しさん:2009/12/24(木) 22:17:17
#BEGIN
#END
みたいなのを導入してマクロをスコープ付きにしてくれ
779303 ◆pFphp4Ej4w :2009/12/25(金) 12:42:25
>>777

そーっすね。。。申し訳ない。

>>778

#undefのとき便利そう?
780デフォルトの名無しさん:2009/12/25(金) 13:20:01
#define中に#define書けて再帰定義できるといい
781303 ◆pFphp4Ej4w :2009/12/25(金) 18:09:33
>>780
プリプロセッサがどんどん高機能になっていく…
782デフォルトの名無しさん:2009/12/26(土) 04:14:41
もういっそプリプロセッサをCの構文完全互換にしたらどうだろう。
783303 ◆pFphp4Ej4w :2009/12/26(土) 08:05:46
>>782
…それしかないかもしれないけど、すごく読みにくそう…

#include <stdio.h>
#define(TEST) => (3){

int main(void){
int i = 10;
i += 2;
#ifdef("debug"){
printf("i..%d\n", i);
#}
i += TEST;
printf("i..%d\n", i);
return 0;
}

#}

こんな感じかな?
784デフォルトの名無しさん:2009/12/26(土) 16:15:03
10進数のPCを作れば、誤差は無くなる。

速度より精度で勝負してみれば良いんじゃない?
785デフォルトの名無しさん:2009/12/26(土) 16:48:25
工夫すれば10進数表現できるからいらねぇ
786303 ◆pFphp4Ej4w :2009/12/26(土) 20:21:07
>>783
> 783:303 ◆pFphp4Ej4w (age)
> 2009/12/26(土) 08:05:46
> >>782
> …それしかないかもしれないけど、すごく読みにくそう…
>
> #include <stdio.h>
> #define(TEST) => (3){
>
> int main(void){
> int i = 10;
> i += 2;
> #ifdef("debug"){
> printf("i..%d\n", i);
> #}
> i += TEST;
> printf("i..%d\n", i);
> return 0;
> }
>
> #}
>
> こんな感じかな?
787303 ◆pFphp4Ej4w :2009/12/26(土) 20:24:01
ちょいと訂正。

> #define("TEST") => (3){

のほうがいいな。
788デフォルトの名無しさん:2009/12/26(土) 22:18:05
むしろ、マクロは縮小・廃止した方がいい。
789デフォルトの名無しさん:2009/12/26(土) 23:38:44
でも結局マクロ的なものはいるよ
コードの自動生成もマクロの別解みたいなもんだし
いろんな言語にある eval もそうだ

超言語的変形は実際に便利だし
言語の枠内でやるとどんなに頑張っても1000行になるコードが
マクロ使えば50行になることもあるし

言語本体よりもプラットフォーム間で互換性の高い変形手段は必要だ
790デフォルトの名無しさん:2009/12/27(日) 02:03:03
もう関数型言語にしちゃいなよw
791デフォルトの名無しさん:2009/12/27(日) 02:36:34
メタ言語=対象言語となると結局Lisp最強。
792デフォルトの名無しさん:2009/12/27(日) 13:53:14
LISPのマクロは可変引数の各パラメーターを自在に取り出せる。
C言語型のプリプロセッサでこれができると全く違うものになる気がする。
既存の__VAR_ARGS__という可変引数の「かたまり」のままでは無理。
carとcdrみたいに各パラメーターを分解できて個別に処理できないと
LISPのマクロ=構文と言わしめる芸当はできない。
793303 ◆pFphp4Ej4w :2009/12/28(月) 10:32:42
>>788-792

C言語のマクロは毒にも薬にもなりますからねぇ…

わたし的には現在のマクロに、スコープさえ入ってればいいかなぁと思っています。
794デフォルトの名無しさん:2009/12/28(月) 18:46:52
795sage:2009/12/30(水) 03:50:08
function(a,b,c ... d)がS式で(function a b c . d)
function(a,b,c)がS式で(function (',' (',' a b) c))
にそれぞれ対応し、cが可変長引数部に出来るといいのではないかと思います。
796303 ◆pFphp4Ej4w :2010/01/12(火) 20:48:38
話しぶった切って投下。

もしもSINCLにJavaDocみたいなのが入るとしたら、以下のうちのどれがいいですかね。

1)JavaDoc風のコメントでドキュメント生成
2)C#風のコメントでドキュメント生成
3)プリプロセッサと統合する。こんな感じ:

#doc
 #author   Hoge
 #summary メイン関数。
#enddoc

int main(){
 //....
 return 0;
}
797デフォルトの名無しさん:2010/01/17(日) 13:12:42
そもそも、JavaDocはなぜ今の形なんでしょう?
C#はJavaDocの改良でxmlをコメント内に書くことになった感じ?
プリプロセッサに統合ということはプリプロセッサが関数やらclassを認識するのでしょうか?
それともプリプロセッサの変換結果、別なSINCL構文になるのでしょうか?
SINCLの関数説明用コメント構文とASTがどうなるのかを考えたほうがよさそう?
たとえばXMLとSINCLをE4Xのように統合されていてドキュメントも自然に書けたりするとか。

@doc <function>
 <summary>メイン関数</summery>
 <author>Hoge</author>
 <return>0:正常終了 1:異常終了</return>
</function>
int main() {
XML xml=<b>hello world</b>;
 printf("%XML doc %XML\n", xml, this.doc);
}

あと、ドキュメント生成は自由にカスタマイズできて
<sincle file="hello.c">
 <function type="int" name="main">
  <author>hoge</author>
  <summary>メイン関数</summary>
  <return>0:正常終了 1:異常終了</return>
 </function>
</sincle>
とかいうxmlで取得できるといいかも。
798デフォルトの名無しさん:2010/01/17(日) 19:09:18
いっそのこと文芸的プログラミングとかどうだろう。
799303:2010/01/22(金) 22:47:25
現在規制中により、郵便で送ります。
>>797
> C#はJavaDocの改良でxmlをコメント内に書くことになった感じ?

そういうことなのかなぁ…だれかC#の歴史に精通してるひとっていません?

> プリプロセッサに統合ということはプリプロセッサが関数やらclassを認識するのでしょうか?

Yes.
本音を言ってしまうとxmlっていちいち長ったらしくて(個人的偏見)エディタの支援がないと書くのが面倒かなぁ…と思ったからなのですが、
実際のところどうなのかな…

それと、sf.netにSINCLのプロジェクトページを立ち上げました。(ttp://sourceforge.net/projects/sincl/)
参加したいと言う方はこのスレで参加したい皆を宣言するか、sf.netの私のアカウントまでメールをお送りください。
注意)メールはめったに確認しないのでスレで宣言するほうがベターです。

なお、wikiのほうは当面の間公式wikiとして使っていきます。
800デフォルトの名無しさん:2010/01/22(金) 22:58:11
xmlなんてアホだと思う
801デフォルトの名無しさん:2010/01/25(月) 14:35:04
ActionScriptやScalaがxmlを統合してきているので、コメントにもXMLをいいかなと思ったのですけど。

C言語のプリプロセッサが
#if #endif
のように書くから拡張して
ドキュメントの構文は#doc #enddocという風に書くことにしたんですよね。
JavaやC#等はプリプロセッサを捨てたのでコメントに書いているけど、
SINCLではプリプロセッサありで考えているのでプリプロセッサの役割になると。

プリプロセッサの機能を高機能にしてC言語のプリプロセッサのいろいろな問題を解決できたらいいですね。
#define a 3
ではなくて
#const int a = 3;
等と機能別に細分化して使うようにするとか。
Javaのアノテーションなども取り入れるとか。
802デフォルトの名無しさん:2010/01/25(月) 18:42:39
いっそのこと、クヌースみたいにドキュメントコード一体の「何か」を作ったら?
HTMLに埋め込んだコードがそのままコンパイラに通るとか
803デフォルトの名無しさん:2010/01/26(火) 05:21:29
ソースのファイル単位での管理を脱却してRDBで管理できるようにできないかな
804デフォルトの名無しさん:2010/01/26(火) 11:01:59
g++ "select code from source where src='c' or src='cpp'"
どっかで見覚えがあるな
805303 ◆pFphp4Ej4w :2010/01/26(火) 21:29:12
>>801
なんかすみません…

>>802
本音:パースめんどい。(と言ってもパース処理は全部Boost.Spiritに丸投げしてるのでこんなこと言ったら罰当たりそうですが)

それと、なんか急に外人からメールが来まして、
最初はこんな文で、
subject:wanted to join
mail:can u just elaborate the your ideal my giving simple ex.
そいでSINCLの簡単なサンプルコードぶち込んで送り返したら、
subject:hi
mail:can we fix some time to talk... about Amatory prj..(let me now ur free time).
この場合"Amatory prj"をどう訳すべきですかね。そのまま訳すと「恋愛プロジェクト」になって、まぁ、こんなやつとメールしちゃいけない、と。
でも無理やり意訳すればSINCLプロジェクトのこととも取れますし…
806デフォルトの名無しさん:2010/02/15(月) 01:32:58
 最近のCPUのアセンブラをそのまま記述出来る、C言語ライクな
ものが欲しいかな・・・とは思っていました。
 でも、もう言語仕様の方向性は決まっちゃったのかな(;´3`)
807デフォルトの名無しさん:2010/02/15(月) 12:59:05
これ開発の参考になりそうかな?Ecere SDK :http://www.ecere.com/
MingWの上にeCというC上位互換OO言語(現在はトランスレータとして実装)と統合環境、
各種ライブラリを乗せたマルチプラットホーム言語っぽいね。ライセンスはBSDだそうな。

>>806
JWASMは? : ttp://www.japheth.de/JWasm.html
あるいはSphnix C--を改造 : ttp://www.dmoz.org/Computers/Programming/Languages/C/C--/
808303 ◆pFphp4Ej4w :2010/02/17(水) 22:12:48
>>806
決まっちゃいましたね…すみません。

そういや言語使用の方向性についてまだ言及してなかったので言及しておくと、当分は

C++、Javaなどがとるオブジェクト志向を避けながらどれだけ高級な書き方ができるかの実験

という名目でやっていくつもりです。
ですからオブジェクト指向を取り入れることは当分ありません。

>>807
ありがとうございます。ちょっと見てきます。

#何でか知らんがsctのコード書いてるとIDEが固まるんだが…これはIDEのバグなのかそれともBoostなんか使ってるからか…
809303 ◆pFphp4Ej4w :2010/03/07(日) 20:32:46
レキサー実装中。。。
810デフォルトの名無しさん:2010/03/18(木) 21:26:50
querykeyst keyinfo; char view[66];
if (RegQueryInfoKeyStatic(HKEY_CURRENT_USER, keyinfo) == ERROR_SUCCESS) {
    sprintf(view, "HKEY_CURRENT_USERのトップには、%d個のサブキーがあります。", keyinfo.SubKeys);
    MessageBox(NULL, view, "テスト", MB_OK);
}
else {
    MessageBox(NULL, "RegQueryInfoKeyStatic の実行に失敗しました。", "テスト", MB_OK);
}
811デフォルトの名無しさん:2010/04/09(金) 21:25:45
その昔、方言だったけど2進数を0b0000_1111_0000_1111みたいにアンダースコアで
区切る事を許していた処理系がありました。
おいらこれで入門したものだから、まっとうなGCCで苦労した・・・読みにくくて読みにくくて。

ま、ちょっと考えれば簡単に回避出来たのだけど。
それでも、実装されると嬉しい。
812デフォルトの名無しさん:2010/04/09(金) 23:18:40

0b0000\
1111\
0000\
1111
813303 ◆pFphp4Ej4w :2010/04/10(土) 23:51:45
>>811
そんなのあるんですね。確かに読みやすいし面白い。
でも実装するとしたら

int i = 0b0001; // OK
int j = 0b0000_0002; // NG

#pragma use_uscore_in_0b

int k = 0b0800_0000; // OK

とかになっちゃいそうですが。
814デフォルトの名無しさん:2010/05/02(日) 23:41:26
プ
815デフォルトの名無しさん:2010/05/04(火) 16:05:08
>>303
ところで、D言語は触ってみたことある?
816303 ◆pFphp4Ej4w :2010/05/08(土) 19:13:16
>>815
さらりと触ったことはあります。ただ、verupするたびどこかしらコンパイルが通らなくなるのでやめましたが…
817デフォルトの名無しさん:2010/05/08(土) 22:05:52
色々違うところがあって一言では語れないが、
強力なtemplateおよびmixin機能が追加されていて、基本的にプリプロセッサが不要になっている。
(というか、無くなっている)
#ifdef/ifndef にあたるのはversionおよびstatic ifに置き換えられている。

プリプロセッサよりもこういった言語に統合された静的な制御機能の方が便利だと思うんだけど、どうだろう。
818デフォルトの名無しさん:2010/05/09(日) 13:19:40
>>817
#ifdef __GNUG__
// ...
#elseif __VISUALC__
// ...
#endif

なんてするより、

version(__GNUG__) {
// ...
}
version(__VISUALC__) {
// ...
}

としたほうがずっとスマートであることは確かです。
ただ、これをトランスレータ(コンパイラ)に任せるのでは若干実装に手間がかかりますし(めんどくさいだけ)、個人的に"version"というよく使われそうな単語を予約語に含めるのはいかがなものかと思います。
とりあえずstatic_assertは入れてもいいかなとは思っていますが…
819デフォルトの名無しさん:2010/05/10(月) 17:13:01
原点復帰してA言語つくろうぜ
820デフォルトの名無しさん:2010/05/10(月) 17:26:42
原点と言えば
@言語
を連想する
821デフォルトの名無しさん:2010/05/10(月) 19:55:22
>>817
プリプロセッサはC言語と独立してるとこがメリットでもありデメリットでもあるわけで。
完全な置き換えは無理でしょ。
822デフォルトの名無しさん:2010/05/10(月) 20:12:08
>>821
であるからこそ、バグの温床であるとしてサポートしないのが今風。
823デフォルトの名無しさん:2010/05/10(月) 20:22:46
今風ってD言語みたいな思いつきの寄せ集め実装がいいわけ?
センスなさすぎ
824デフォルトの名無しさん:2010/05/11(火) 17:32:37
>>818
よけーに分かりにくい
825デフォルトの名無しさん:2010/05/11(火) 19:33:52
>>824
コンパイラがシンボルチェックに責任を持てるところが大きいんだよ。
ぱっと見は戸惑うかもしれないが、
これで連想配列的なversion設定値のチェック、設定、
static if / else / switch 構文相当が記述できるのでなかなかよくできてる。
C言語にも欲しいくらいだな、これは。
826デフォルトの名無しさん:2010/07/24(土) 19:30:49
スレ再利用してもいい?
作りたいのはC言語派生じゃなくて、もっと小さな計算モデル検証用の言語だけど。

そもそも何人が見ているのかわかんないけど。
827デフォルトの名無しさん:2010/07/24(土) 20:12:37
コンパイラが1000行ぐらい
VMが500行ぐらい
ならおk
828826:2010/07/24(土) 21:04:53
まあ、それはそれは。
そもそもコンパイル言語にはならなさそうだけど。
829デフォルトの名無しさん:2010/07/24(土) 21:21:04
じゃあ他所でやれやぁ
ここは俺のチラシの裏にするんじゃぁ
830826:2010/07/24(土) 21:34:47
>>829
どうぞどうぞどうぞ
831デフォルトの名無しさん:2010/07/25(日) 09:28:37
放置スレだしここを再利用すればいいと思うよ
832デフォルトの名無しさん:2011/03/07(月) 09:18:20.47
Cをオブジェクト指向化したのがC++、ObjectiveC等々ですよね。
Cを関数型化した言語ってあるんでしょうか。
833デフォルトの名無しさん:2011/03/07(月) 10:16:54.66
LISP
834デフォルトの名無しさん:2011/03/07(月) 10:18:39.34
オブジェクト指向と関数型は階層が異なる
835デフォルトの名無しさん:2011/03/07(月) 19:02:30.55
>>832
元はscheme風だったがC風に改めさせられたJavaScriptさんがいる
836天使 ◆uL5esZLBSE :2011/07/02(土) 18:49:30.28
これ ; デリミタっていうんだけどさ、これをつけなきゃエラーになるような
そんな言語使ってる奴ってどうみてもゴミだと思うんだけど

もしかして「;」これ打ち忘れてコンパイルエラー出すのが楽しいの?
そうか、二度と話かけんなよ
うるさいゴミ
837デフォルトの名無しさん:2011/07/02(土) 19:24:09.38
C言語のセミコロンはデリミタでなくターミネータだ

{ foo ; bar ; baz } ← 最後だったら要らないのがデリミタ
{ foo ; bar ; baz ; } ← 最後でも要るのはターミネータ
838天使 ◆uL5esZLBSE :2011/07/02(土) 20:53:23.30
これ ; デリミタっていうんだけどさ、よく打ち忘れるよね
Rubyだとつけなくてよくなるんだけど
ゴミ量産機
839天使 ◆uL5esZLBSE :2011/07/06(水) 05:16:26.52
2011年、Ruby,Perl,PHP,Pythonって並べたときにさ
ここで、Ruby以外を選ぶ奴ってマジでなんなんだろうな
でもお前はゴミなのにねw
840デフォルトの名無しさん:2011/07/06(水) 17:37:05.70
>>837
C言語だとブロックの最後は要らなくない?
841デフォルトの名無しさん:2011/07/06(水) 17:52:02.84
<複文> :== "{" <文>* "}"
<文> :== ... | <式文> | ...
<式文> :== <式> ";"

なので、いります。
842 忍法帖【Lv=9,xxxP】 :2011/07/25(月) 22:56:57.35
test
843 忍法帖【Lv=0,xxxP】 :2011/08/16(火) 18:05:56.81
ほむまど
844デフォルトの名無しさん:2011/10/13(木) 07:29:00.46
845デフォルトの名無しさん:2011/10/21(金) 10:23:05.06
846デフォルトの名無しさん:2011/10/21(金) 10:24:56.64
847デフォルトの名無しさん:2011/10/21(金) 19:56:38.05
3
848デフォルトの名無しさん:2011/11/04(金) 07:30:15.41
>>847
兄弟
849デフォルトの名無しさん:2011/11/04(金) 07:30:35.02
だいどろねる
850デフォルトの名無しさん:2011/11/04(金) 07:31:04.87
新しい朝が来た
851デフォルトの名無しさん:2011/11/20(日) 11:47:34.86
852デフォルトの名無しさん:2011/11/21(月) 17:57:44.57
断る
853デフォルトの名無しさん:2011/12/18(日) 14:46:44.66
854デフォルトの名無しさん:2011/12/18(日) 14:49:45.02
855デフォルトの名無しさん:2011/12/18(日) 14:50:52.62
856デフォルトの名無しさん:2011/12/18(日) 14:51:55.87
ふぁ
857デフォルトの名無しさん:2011/12/18(日) 14:52:50.09
858デフォルトの名無しさん:2011/12/18(日) 14:53:32.00
859デフォルトの名無しさん:2011/12/18(日) 14:54:05.48
860デフォルトの名無しさん:2011/12/18(日) 14:55:15.93
861デフォルトの名無しさん:2011/12/18(日) 14:59:09.64
ぷりきゅあ
862デフォルトの名無しさん



ワイが聞いた情報によると、もうじき中国はバブルがはじけて昔の貧乏な中国に戻るらしい
もう経済は破綻してて、取り戻すのは無理なんだそう


その世界ではごっつい有名な政府関係者筋から聞いた確かな情報や

まあお前ら頭の良い連中には、今さらなくらいのネタや、
お前らからすればもう常識的なくらいの知識や

君らのことだからこの情報ですでに財産は出してるはずだけど