10/04/23 08:50:46
70年代、Cは生まれ、それから30余年、現代においてもなお、低レベルなシステム開発に広く使われている。
しかし、2010年の今、もしもCが発明されていなかったとして、低レベルなシステム開発のためのプログラミング言語を
新たに作るとしたら、Cとは違う言語になるだろう。少なくとも、全く同じにはならないはずだ。
そこで、このスレッドでは、
低レベルなシステム開発のためのプログラミング言語
を一から考えたい。
既存の言語を使って何かをすることが目的ではなく、新たなプログラミング言語を考えることが目的であるから、
「既存のXX言語を使えばいい。」という類の発言は無意味である。
「既存のYY言語のZZ機能は、WWと言う点で有用だから採用したい。」という発言は歓迎だ。
現代の一流のプログラミング言語研究者が、最先端の研究成果を盛り込んで、
一から低レベルなシステム開発のためのプログラミング言語を作るとしたら、どのような言語になるだろうか、
という観点で考えたい。
◆前スレ
【超高速】C/C++に代わる低級言語を開発したい 3
スレリンク(tech板)
2:デフォルトの名無しさん
10/04/23 11:14:39
スレタイからC++を除け
3:デフォルトの名無しさん
10/04/23 13:22:01
4て
盛り上がってたんだな
4:デフォルトの名無しさん
10/04/23 17:04:26
このスレッドは天才チンパンジー「アイちゃん」が
言語訓練のために立てたものです。
アイと研究員とのやり取りに利用するスレッドなので、
関係者以外は書きこまないで下さい。
京都大学霊長類研究所
5:デフォルトの名無しさん
10/04/23 22:56:07
422* 名前:デフォルトの名無しさん [sage] 投稿日:2010/03/22(月) 20:49:29
それならCにできないけど低級言語に欲しい機能を挙げてみようぜ。
・Lispなみに弄くれるマクロ
- テンプレート
- 正規化された構文(S式とか)
・Forthなみに弄くれる駆動レコード
- コルーチン
- 強制インライン展開(レコードを新しく作らないルーチン)
- 駆動レコードへのアクセス
・実行制御
- 高度な並列処理(トランザクションとか)
- アトミック操作
- リアルタイム操作
こんなもんかね? 他にどんなの欲しい?
6:デフォルトの名無しさん
10/04/23 22:58:13
正直そこで上がってる項目はぐちゃぐちゃ過ぎて
ネタとしか思えない
S式とかマクロとか言ってる人は
URLリンク(www.atmarkit.co.jp)
こういう方向性もあるよ
7:デフォルトの名無しさん
10/04/23 22:58:15
個人的には(構文だけではないけど)
- ブロックを明示しやすくて文でクロージャ作れるし{}がいいと思う
- オフサイドルールはコードはすっきりするけど賢いエディタ前提で深さがわかりにくい
- Cよりシンプルな構文が望ましいが別にC系でいいんでは
- 演算子の再定義はスパゲッティ化しやすいから不要
- マクロもインラインとか定数型などの別な方法で実現可能なので不要
- XMLなんかは外でやればいいんでは
- 勝手にデータを付加しないASN.1とかCの構造体的なメモリイメージと直結したデータ構造
- 動的型付け、GCや動的メモリ管理は明示的に利用を限定出来るならいいかも
- その他のシンタックスシュガーは適度にアリ
8:デフォルトの名無しさん
10/04/23 23:08:10
◆新言語の要件 v0.1◆
(1)ハードウェアを直接操作する低レベルの記述が可能
(2)プログラマーが勘違いしてプログラマーの意図と違う動作をしないように言語仕様が直感的で学習が容易
(3)最新のオサレ機能が使えてワクワクしながらプログラミング可能
◆主な要望◆
・デバドラ屋だって、オサレ言語で開発したい!
・プログラマーの言語仕様の学習不足によるヒューマンエラーを最小限にするために、できるだけ小さな言語仕様にしたい。
・組込み屋だけど、関数型とダックタイピングしたい。
・shared_ptrの構文糖が欲しいな
・低レベル記述性(絶対条件) > 構文の美しさ(読みやすさ、学習の容易さ) > 再利用性(抽象性)
・算術演算以外の演算子は後置
・割込み、例外、非同期IOとかを統一扱えるイベント機能が欲しい。
9:デフォルトの名無しさん
10/04/23 23:12:54
>>8
>割込み、例外、非同期IOとかを統一扱えるイベント機能が欲しい。
ここで言う例外はCPU例外だよね。
C言語の代替案を考えるのだから、この言葉で混乱したくないので
以降、CPU例外は、「CPU例外」、プログラミングの例外処理は
「例外処理」と書こうではないか。
10:デフォルトの名無しさん
10/04/23 23:19:54
>>9
> ここで言う例外はCPU例外だよね。
いや、新言語の構文・実装はまだ明確ではないが、既存言語のtry-catchに相当するものだよ。つまり「例外処理」。
「CPU例外」は割込みに含まれる。
それらを統一的に扱うことを考える。チャレンジングな試みだ。
11:デフォルトの名無しさん
10/04/23 23:20:34
このスレッドは天才チンパンジー「アイちゃん」が
言語訓練のために立てたものです。
アイと研究員とのやり取りに利用するスレッドなので、
関係者以外は書きこまないで下さい。
京都大学霊長類研究所
12:デフォルトの名無しさん
10/04/23 23:21:25
話が進まんしマイルストーン設置しようぜ
まずPart10までに例外に決着な
13:デフォルトの名無しさん
10/04/23 23:21:40
>>4 >>11
京都大学霊長類研究所 必死過ぎるww
14:デフォルトの名無しさん
10/04/23 23:29:25
全部決まるのいつになんの
15:デフォルトの名無しさん
10/04/23 23:33:07
じゃあPart10からPart15までは「全部とは何か」を決めるからな
16:デフォルトの名無しさん
10/04/24 00:11:17
SC言語は,Common Lispで実装された,S式の(Scheme風の)構文を持つC言語です.
URLリンク(super.para.media.kyoto-u.ac.jp)
17:デフォルトの名無しさん
10/04/24 00:56:05
> (def (sum ar n) (fn long (ptr long) int)
仮引数と仮引数の型が隣接しないってどんだけクソ言語だよw
18:デフォルトの名無しさん
10/04/24 02:38:19
デストラクタ欲しいなぁ。
自動変数がスコープから外れるときに発動する仕掛けが欲しい。
19:デフォルトの名無しさん
10/04/24 02:43:54
もう、C/C++ でいいじゃん
20:デフォルトの名無しさん
10/04/24 02:47:49
>既存の言語を使って何かをすることが目的ではなく、新たなプログラミング言語を考えることが目的であるから、
>「既存のXX言語を使えばいい。」という類の発言は無意味である。
21:デフォルトの名無しさん
10/04/24 03:03:59
もう、D でいいじゃん
22:デフォルトの名無しさん
10/04/24 09:29:18
>>20
rubyもそんな感じじゃなかったっけ
23:デフォルトの名無しさん
10/04/24 09:30:28
>>20
それを、オナニーと呼ぶんだよ
24:デフォルトの名無しさん
10/04/24 11:30:12
「ぼくのかんがえたさいきょうのげんごしよう」を妄想するスレ
25:デフォルトの名無しさん
10/04/24 11:36:57
>>5
> ・Lispなみに弄くれるマクロ
> - テンプレート
> - 正規化された構文(S式とか)
先ず、これが欲しい。
26:デフォルトの名無しさん
10/04/24 12:11:03
僕の考えた最強の言語しよう
27:デフォルトの名無しさん
10/04/24 12:15:49
GAME言語があるじゃん。
28:デフォルトの名無しさん
10/04/24 12:16:16
JavaのようにIDE前提で、
とことんリファクタリング機能とかで楽できる言語がいいよ。
29:デフォルトの名無しさん
10/04/24 12:47:52
JavaがIDE前提???
30:デフォルトの名無しさん
10/04/24 13:05:32
実質そうだろ。
エディタ(Emacs含む)で書く奴がいるが、そいつらは変態なだけだ。
Cやらはマクロでトークンの置換とかヘタにできちゃうから、
リファクタリングツールを作成しづらい。
31:デフォルトの名無しさん
10/04/24 13:21:10
自分と違う人を片っ端から変態扱いするのはどうかと思うよ
32:デフォルトの名無しさん
10/04/24 13:26:27
IDEのサポートが無いととても書けない糞言語っていう意味だろ、合ってるよ。
33:デフォルトの名無しさん
10/04/24 13:31:05
長ったらしい命名基準や秩序が有るのか疑わしいライブラリ枝の膨張がIDE必須にしてるよね。
34:デフォルトの名無しさん
10/04/24 13:31:42
IDEも活用できない糞人間
35:デフォルトの名無しさん
10/04/24 13:33:31
windowsのメモ帳で書く俺は神
36:デフォルトの名無しさん
10/04/24 13:37:36
EmacsまごうことなきIDEですが。
37:デフォルトの名無しさん
10/04/24 13:38:35
windowsならサjyラエディタ
38:デフォルトの名無しさん
10/04/24 13:38:42
Emacs上でコーディング・デバッギング・コンパイル・パッケージングすべてできますね。
これを統合開発環境と言わずして何をそういうのでしょう。
39:デフォルトの名無しさん
10/04/24 13:39:16
クがjyになってでござる
40:デフォルトの名無しさん
10/04/24 13:44:12
URLリンク(tsushima.2ch.at)
41:デフォルトの名無しさん
10/04/24 13:53:59
>>38
じゃあ、Checkstyleやらリファクタリングやらはどうなんだろう。
クラスの階層を出せるだろうか、JARの中もきちんと検索できるだろうか。
もはやJava開発って↑みたいな機能ぜーんぶ前提で
動いているよなあ。(少なくとも業務系は)
42:デフォルトの名無しさん
10/04/24 15:44:56
IDEなしでも気楽に書けて、IDEの支援があればますます書きやすくなる。
新言語はそんな言語にしたいです。
43:デフォルトの名無しさん
10/04/24 15:45:46
LLですね
44:デフォルトの名無しさん
10/04/24 15:48:27
>>41
emacsではelispが動いているんだぜ。
できないことなんかないだろ。
45:デフォルトの名無しさん
10/04/24 15:49:19
秀丸では秀丸マクロが動いているが?
46:デフォルトの名無しさん
10/04/24 15:57:16
>>45
emacsのマネしてるだけ。
47:デフォルトの名無しさん
10/04/24 16:04:40
参照のせいでC++の関数呼び出しは可読性が著しく低下した。
Cでは、引数がポインタ型でなければ関数からの出力にはなり得なかった。
C++では、参照型の仮引数があるため、ポインタ型ではない引数であっても関数からの出力にはなってしまう。
下手に機能を増やすと使いにくくなる典型的な例だ。
48:デフォルトの名無しさん
10/04/24 16:06:24
>>47
実用とか互換性とかにばかり気をとられていると、
すぐにそういう問題を無視しちゃうんだよね。
だから教育用低級言語として開発した方がすっきりした物が作れるんじゃないかな。
49:デフォルトの名無しさん
10/04/24 16:08:20
あれだろあれ、なでしこ
50:デフォルトの名無しさん
10/04/24 16:11:19
>>49
それは低級言語じゃなくて低脳言語
51:デフォルトの名無しさん
10/04/24 16:14:32
>>47
その代わり、参照なら出力がNULLでないことを保証できるんだけどね
NULLを脱参照するような真似をしなければ
52:デフォルトの名無しさん
10/04/24 17:05:37
>>47
const参照だけ使えばいいよ
53:デフォルトの名無しさん
10/04/24 17:09:51
>>52
じゃあ、全プログラマーに周知徹底してくれ。
使える機能であれば、必ず使う人間が出てくるものだ。
そういう機能があるということがそもそも問題なんだ。
54:デフォルトの名無しさん
10/04/24 17:12:11
ポインタ使ったらNULLチェックが必要になって
それをさぼってバグが入り込んだり
そもそもNULLが渡された際の挙動が定義しづらかったりで
別の所でバグの温床になるだけだろ
55:デフォルトの名無しさん
10/04/24 17:15:18
ポインタ以外でも値域のチェックはするだろ?
56:デフォルトの名無しさん
10/04/24 17:16:24
自由だけど不安定か、不自由だけど安定かの問題だよ
後者が良さそうに見えるけど、ユーザーの不満は増える。その例がTeX
57:デフォルトの名無しさん
10/04/24 17:19:03
TeXのどこが不自由なんだ
58:デフォルトの名無しさん
10/04/24 17:21:31
とりあえずC++をリファクタリングしろww
59:デフォルトの名無しさん
10/04/24 17:22:01
もうTeXじゃなくてオフィスの数式エディタで良いやって人が増えるくらい不自由
60:デフォルトの名無しさん
10/04/24 17:41:10
数式書きたいだけの低脳の話かwwwww
61:デフォルトの名無しさん
10/04/24 17:44:39
問題はそこじゃないだろ
治安でも同じことが言える、単なる一般論
一般人を低能と切って捨てるのに新しい言語を作りたいって?
そんなのお前以外誰も使わないだろうな
62:デフォルトの名無しさん
10/04/24 17:47:40
>>61は誰と戦ってるんだ?
63:デフォルトの名無しさん
10/04/24 17:48:30
>>62
文脈読めないの?
64:デフォルトの名無しさん
10/04/24 17:49:02
無い文脈は読めない。
65:デフォルトの名無しさん
10/04/24 17:50:41
じゃあ一つだけ言うけど、数式書きたいだけの低脳の話ではない
66:デフォルトの名無しさん
10/04/24 17:51:11
「一般人を低能」とか言ってるの>>61だけだしな
67:デフォルトの名無しさん
10/04/24 17:53:19
話を戻すけど、>>53辺りの流れに対して
自由だけど不安定か、不自由だけど安定かの問題だよ
後者が良さそうに見えるけど、ユーザーの不満は増える。その例がTeX
68:デフォルトの名無しさん
10/04/24 17:56:26
TeXのどこが不自由なんだ
69:デフォルトの名無しさん
10/04/24 17:58:01
TeXへの批判も知らない低能が新言語なんて作れるわけないじゃん
70:デフォルトの名無しさん
10/04/24 18:06:27
>>25
この辺って、低級手続き型高水準言語のCと相性悪い、
と思うんだけど、もう少し詳しく説明して欲しい。
あんまり知らないんだよね、S式のメリットとか、
プログラミングパラダイスじゃなくて、パラダイムが
まるで違って、テレコテレコになりそうな気もするんだけど、
S式のメリット、Lisp並のマクロとかは、別レイヤーの
話のような気もするんだけどどうだろうか?
あれば便利なのは疑いようが無いんだけど、rubyとか
やっぱり、そういうレベルの言語の話ではないのだろうか?
と思うのですが。
71:デフォルトの名無しさん
10/04/24 18:06:45
それじゃあ、TeXへの批判を議論するところから初めてみようか。
72:デフォルトの名無しさん
10/04/24 18:08:55
>>70
> この辺って、低級手続き型高水準言語のCと相性悪い、
> と思うんだけど、もう少し詳しく説明して欲しい。
別にCを作るわけじゃないんだけど、Cとの相性の悪さを説明する意味あるの?
73:デフォルトの名無しさん
10/04/24 18:11:17
>>71
お前、何が問題なのか常に見えてないんだな
74:デフォルトの名無しさん
10/04/24 18:12:25
何が問題なんだ?
75:デフォルトの名無しさん
10/04/24 18:13:42
>>47
だよね、const参照をデフォルトにして、書き換えの場合、
variableキーワードを追加って言うのが、理想だったよね。
CとC++にそういうのが多すぎると思う。
必要最小限の拡張というポリシーが破綻してきてるので>>1
なんだと思う。
76:デフォルトの名無しさん
10/04/24 18:14:27
自由度
77:デフォルトの名無しさん
10/04/24 18:16:55
わざとか知らんが全角は確かに低能に見えるな
78:デフォルトの名無しさん
10/04/24 18:20:22
>>70
Cのマクロは貧弱すぎるってことじゃないの。
確かに、実行時の処理を抽象的にし過ぎると低級手続きの記述がしづらくなるかもれないけど
もう少しコンパイル時に処理はいろいろ便利に記述できてもいいと思う。
79:デフォルトの名無しさん
10/04/24 18:21:12
>>72
C的な言語との相性の悪さに同意いただいて何より、
であるとするならば、アセンブラとの相性の悪さ、
と言うか、Lisp言語の一行が、アセンブラで数百行にも
数千行にも展開されていくとなると、これはもう、
低級高水準言語じゃなくて、高級高水準言語だと思うので、
CやC++に代わる、という当初の目的よりは逸脱してると
考えるのです。
もろちん、もちろん、そんなことはない、マシンコードをよりよく
扱うためにこそ、S式なのだ、という見解もあるでしょう、ただ
私は勉強不足なのでおよそそのようには考えられないので、質問してる
訳です。質問の意図を汲んでいただき、お答え願えればと思います。
80:デフォルトの名無しさん
10/04/24 18:22:28
Lispのマクロは子供の木を生成するだけになってしまっているから
親の木も書き換えられたらどうだろう
81:デフォルトの名無しさん
10/04/24 18:23:24
>>78
それは言語では無くて、リファクタリングツールの設計ですな。。。
Cのマクロがリファクタリングツールなのか、という議論は不毛だと
思うのでご遠慮させていただきますが。
82:デフォルトの名無しさん
10/04/24 18:37:15
>>70, >>79
俺は>>25じゃないから、もともと書いた奴が
どういう意図で書いたかは分からんが、
マジレスすると、>>25には「構文」「マクロ」
つまり、コンパイル時の問題について書いてあるだけで、
「実行時に」S式のような、GC必須の動的なリストや木構造を扱いたいとは
一言も書いてないだろ
コンパイル時の問題なんだから、コンパイラが吐くプログラムが
低級か高級かといった問題とは全然関係ないぞ
83:デフォルトの名無しさん
10/04/24 18:39:32
その上で、実例としては>>6や>>16でも見ればいい
84:デフォルトの名無しさん
10/04/24 18:42:00
>>75
C++は踏み台だったのだよ・・・
後続言語では out が導入されたが、
当時はそういう発想はなかったんだろう
85:デフォルトの名無しさん
10/04/24 18:43:00
outも汚い
CのようなN-in 1-outな言語とインタフェースするときにはあったほうがいいが
多値リターンがあれば本来out引数なんて要らない
86:デフォルトの名無しさん
10/04/24 18:45:25
関数単位の例外処理もキレイに書けるシナー
87:デフォルトの名無しさん
10/04/24 18:47:42
>>83
どうも日本語が通じないようで・・・
だからS式導入の低水準高級言語としてのメリットを聞いてるんですよ。
>>6は高水準高級言語は素晴らしい、そのうえ定式化されてるので素晴らしい。
と読めるのですが?
88:デフォルトの名無しさん
10/04/24 18:48:24
>>87
・パースしやすい
・Lispの強力なマクロが使える
こんなものだろ
89:デフォルトの名無しさん
10/04/24 18:50:42
あ、こんだけ言われても
まだ「高水準言語」とか言ってるってことは全然理解して無いんだな
馬鹿だろ
リンク先読んでも理解できないんだからな
構文はS式だけど、構文がS式なだけでCと同じobjを吐けるんだよ
90:デフォルトの名無しさん
10/04/24 18:51:24
最初からS式で表されていると
たとえば、for文とかがどういう木を持っているか、
とかで悩まなくて済むんだよね
91:デフォルトの名無しさん
10/04/24 18:51:45
>>88
だ==========か============ら
>>79なので、ルビーが使いやすい、Lispが好きとか
言われても、議論にならないんですよ。
特に>>6はキチガイの戯言で、C++、と、テンプレートの
無い世界の話ですね。今の環境でC++とテンプレートが
存在しないことを前提にC言語の拡張を書いても訴えても
無意味なんですよ。2000年以降、こういう頓珍漢な話をする
文系が増えて無茶苦茶ですよ。
92:デフォルトの名無しさん
10/04/24 18:52:37
全角って馬鹿だな、まで読んだ
93:デフォルトの名無しさん
10/04/24 18:52:38
>>85
多値リターンと引数からのリターンには差があって、
多値リターンは常に何らかの値を返す必要があり、
引数からのリターンは(エラー時など)場合によって値を返さなくても良い
全て参照型ならとりあえずnull返しゃいいだろうけど
値型(特に構造体とか)があるならこの差はパフォーマンスに影響する
94:デフォルトの名無しさん
10/04/24 18:54:06
全角叩きしかしてない奴はなんなんだよw
95:デフォルトの名無しさん
10/04/24 18:54:25
>>89
だから、それはS式言語で、C及びC++に代わる。
じゃないでしょって言ってるんだけど?
96:デフォルトの名無しさん
10/04/24 18:55:20
最大の特徴は読みにくいってこった
マクロスパゲティは食いたくない
97:デフォルトの名無しさん
10/04/24 18:58:20
>>93
スタックマシーン勉強しなよ
98:デフォルトの名無しさん
10/04/24 19:01:12
LINQみたいなクエリ言語用意しようぜ
99:デフォルトの名無しさん
10/04/24 19:03:38
>>93
多値の複雑な型は返す場所に直返せるから
効率も稼げるよ
最近ならレジスタ数多いから数個の単純型もあんま問題ないしね
100:デフォルトの名無しさん
10/04/24 19:04:22
マクロも本体と同じ構文を採用すればいい
_PRE_hoge{}みたいにプリプロセスであることを明示できればいい
101:デフォルトの名無しさん
10/04/24 19:07:08
>>99
C++ベースで考えると戻り値最適化は初期化でしか使えない
代入だと既にあるオブジェクトを破棄する必要があるから
102:デフォルトの名無しさん
10/04/24 19:09:02
>>100
マクロは捨てたいと思う。リファクタリングツールとして、
別添えで考えたい。
マジでマジで、今のC言語の問題の多くは
マクロが存在してることに有ると思う。
ヘッダーファイルの読み込みは、必要だけど、それ以上のことは
やってくれるな、とか思う。
103:デフォルトの名無しさん
10/04/24 19:10:36
ヘッダも必要ないよ
104:デフォルトの名無しさん
10/04/24 19:14:57
>>101
俺の目線はc++はダメダメ
低級言語ならその場に明示されてない動作はしないのが望ましい
コンストラクタ、デストラクタはもっと高級な言語でやるべき
105:デフォルトの名無しさん
10/04/24 19:17:13
>>103
JAVAの人とよく喧嘩するんだけど、ヘッダーファイルは
実装を見せない、良い仕組みだと思うんだけど・・・
ただ、嫌う人の言い分もよく分かる気がするし。
実装を見せないと言いながら、クラス定義でprotectedな
メンバーも、ちゃっかり見せちゃうし。その辺整理すると、
記述があっちゃこっちゃしてウザイし、もうヘッダファイルいらね
と言うのもよく分かるのだが・・・
Javaみたいに無くても大丈夫、見せたくないときは別添えで、
ってのもありっちゃ有りなんだけど。
106:デフォルトの名無しさん
10/04/24 19:17:17
C/C++に代わるって言ってんだし
コンストラクタ、デストラクタ、代入演算子とか
考えてしかるべきじゃないのか・・・
107:デフォルトの名無しさん
10/04/24 19:18:06
>>105
ヘッダみたいなものはコンパイラが自動で出力すべき
108:デフォルトの名無しさん
10/04/24 19:21:39
>>102
リファクタリングはOOPが前提
アセンブラやCレベルでは不可能
マクロがなければ必然的にポータビリティが失われる
お前の言ってる仮想言語はCの代替にはなりえない
109:デフォルトの名無しさん
10/04/24 19:21:41
>>105
基本的に1度書けば情報量として十分なものを
2度以上のインクルードにも耐えられるように、
かつ、なんども書かされる作業は苦行なだけ。
110:デフォルトの名無しさん
10/04/24 19:21:56
>>106に賛成。
後、戻り値に関しては、参照渡しの不透明さ(何されるのか分からない)
って問題を文法で解決するべきという話だと思う。
111:デフォルトの名無しさん
10/04/24 19:25:14
>>107
それは良いかもね、foo.cをコンパイルしたときにfoo.hが出力されて、
foo関数を使う人は、foo.hをインクルードするって言う事にすれば
良いかも知れない。foo.hはコンパイラ以外書き換え不可と言うことに
すれば、とても幸せになれるように気がした。
112:デフォルトの名無しさん
10/04/24 19:28:00
>>108
ポータビリティに関してはDのversionを参考にするといいよ
113:デフォルトの名無しさん
10/04/24 19:33:19
>>110
構造体は代入演算子を定義できず、
代入は単純コピーのみとする、
という風にクラスと差別化すれば・・・
って、C/C++だとクラスも値型だよな
114:デフォルトの名無しさん
10/04/24 19:35:46
継続できるようにしてくれ。
115:デフォルトの名無しさん
10/04/24 19:37:19
イテレータいやっほーい
116:デフォルトの名無しさん
10/04/24 19:39:17
値型にもnullを作ればいいんじゃない
nullの代入は、何も代入しない事と同じ扱いになる、とか
117:デフォルトの名無しさん
10/04/24 19:40:01
ただし、単純型は除く
構造体とクラスのみ
118:デフォルトの名無しさん
10/04/24 19:42:49
エラー処理を考えると
戻り値は正否を表す値1つの方が便利なので
引数から値を返す方法はどうしても必要だな
全部例外に置き換えるとパフォーマンスに影響するし
119:デフォルトの名無しさん
10/04/24 19:43:54
スレ的にはちょっとズレた話になるけど
null大嫌い
nullableであることが必要でない場合も参照型にはnullを突っ込めてしまうので
型安全性にとっては有害以外の何者でもない
関数型のMaybeやOptionが正解
120:デフォルトの名無しさん
10/04/24 19:44:07
4値論理を導入しようか
121:デフォルトの名無しさん
10/04/24 19:44:40
C/C++ベースだとクラスも値型だから問題ない
122:デフォルトの名無しさん
10/04/24 19:50:50
オープンソースだから実装を見せないなんて論外
123:デフォルトの名無しさん
10/04/24 19:51:34
ついでにこの言語で実装されたアプリはGPL適用されるっていう事にすればいいんじゃね
124:デフォルトの名無しさん
10/04/24 19:52:50
>>123
じゃあコンパイルしたら
License.txtが自動的に出てくるっていうことにしよう
125:デフォルトの名無しさん
10/04/24 19:52:52
マジで作る奴なんかいないだろうからどうでもいいが
2chのライセンスはGPLのようなライセンスとは非互換だからねと
一応言っておく
126:デフォルトの名無しさん
10/04/24 19:52:54
そんなことしたらバイオハザードマークつくわ
127:デフォルトの名無しさん
10/04/24 19:56:01
GPLとかいうゴミなんか気にしなくて良いよ
128:デフォルトの名無しさん
10/04/24 19:59:00
>>81
「リファクタリングツール」が何のことかよくわからないが、
コンパイル時に処理するC++のテンプレートはリファクタリングツールなの?
そうであるなら、別に言語に「リファクタリングツール」という機能が入っていてもいいんじゃないの。
129:デフォルトの名無しさん
10/04/24 20:01:54
例えば、文字列をEUC_JPから、UTF-8に変換する関数だと
convert Parameter("EUC_JP","UTF-8") Source(euc_buf) Result(utf_8_buf);
とか、
>>125
言語の仕様は、著作権保護の対象外。言語仕様の記述は著作権保護されるけども。
130:デフォルトの名無しさん
10/04/24 20:07:47
2chのライセンスと称するものが法的に有効だという言質をどっかで取ってからまた来てね
131:デフォルトの名無しさん
10/04/24 20:13:04
>>130
ん?
2chの投稿規約に同意しないと書きこめないだろ
その時点で法的に規約に同意した、契約が成立したと認められるはずだ
現実に、基本的に2ch本の印税はひろゆきに行くだろ?
勿論その部分は書き込んだ奴にも流れるようだけれども
132:デフォルトの名無しさん
10/04/24 20:44:53
ところでこの言語は何で実装されるの?
133:デフォルトの名無しさん
10/04/24 20:47:04
開発者の情熱
134:デフォルトの名無しさん
10/04/24 21:59:07
実装の話は言語仕様ができてからでいい。
135:デフォルトの名無しさん
10/04/24 22:13:14
>>120
ウンモ星人乙
136:デフォルトの名無しさん
10/04/24 22:18:55
多値返しの場合、デフォルトアクセス方法は欲しいよな。
cの配列みたいに先頭のデータと配列の先頭を同一視するみたいな。
>102
マクロは必須だろ。cのマクロは捨てだけど。
マクロはむしろユーザーカスタム可能なコンパイラとして考えるべき。LispとかForthとかそんな感じだよな。
137:デフォルトの名無しさん
10/04/24 22:24:45
if (return, a, b = foo()) {
a.hoge(b);
}
あゝ、邪悪
138:デフォルトの名無しさん
10/04/24 23:29:18
多出力だと、その関数の型を決められないから、1出力にしたい。
それに合わせて、入力も1入力にしたい。
さらにプログラムの流れは基本的に左から右にしたい。
以上を総合して、こんな感じにしたい。{}はタプル型。
func({in1, in2}) -> {out1, out2, out3};
タプル型の型チェックはなんかうまくやる。
139:デフォルトの名無しさん
10/04/24 23:36:45
低レベル言語のスレだよな
頭がLLなヤツらばっか
140:デフォルトの名無しさん
10/04/24 23:46:08
低レベル言語でもオサレな機能を使いたいんだからしょうがないだろ
141:デフォルトの名無しさん
10/04/25 00:02:06
関数型言語やlispマクロとか
タプルとかが美しいか?
美意識の違いだな
142:デフォルトの名無しさん
10/04/25 00:05:57
隣の芝生なので
143:デフォルトの名無しさん
10/04/25 01:12:58
LL(笑)
144:デフォルトの名無しさん
10/04/25 01:16:32
変に意識して(笑)とか言って使えないより、道具として軽く使えたほうが便利だと思うけどね。
145:デフォルトの名無しさん
10/04/25 01:20:31
LLなんて適当に使い分ければいい話
粗大ゴミのC++を置き換えれる言語を考えようや
Cは神言語だから無理
146:デフォルトの名無しさん
10/04/25 01:41:23
おまえらにVSでサポートされるような言語を作れるのかな
147:デフォルトの名無しさん
10/04/25 01:42:03
作れるよ。
148:デフォルトの名無しさん
10/04/25 01:54:04
VSてなに
149:デフォルトの名無しさん
10/04/25 01:54:10
じゃあ、明日の朝までによろしく
150:デフォルトの名無しさん
10/04/25 01:55:01
Vitual Studioに決まってんだろど素人が
151:デフォルトの名無しさん
10/04/25 01:58:22
ゴミクズか
152:デフォルトの名無しさん
10/04/25 01:59:10
なんかGoogleが言語作ってなかったっけ?
153:デフォルトの名無しさん
10/04/25 02:04:15
>>151
使ってる低能がな
154:デフォルトの名無しさん
10/04/25 02:10:46
変に意識して(笑)とか言って使えないより、道具として軽く使えた方が便利だと思うけどね。
155:デフォルトの名無しさん
10/04/25 02:21:33
変に意識して(笑)とか言って使えないより、道具として軽く使えた方が便利だと思うけどね。
156:デフォルトの名無しさん
10/04/25 02:27:26
>>153
おやおや自己紹介ですか?
いくら低能でも、己がそうであるという事実を主張することはできるようですね。
あ、言葉が難しすぎて理解できませんか。低能ですからね。
では低能であるあなたにも分かるように言わんとすることを言わんとば、あなはた馬鹿だと言うことです、
、か。早く仕事が見つかるといいですね。
157:デフォルトの名無しさん
10/04/25 02:39:00
>>156
すまん。痛いとこだよな
やっぱ恥ずかしいもんな
158:デフォルトの名無しさん
10/04/25 02:41:54
>>108
お前の知ってる設計技術がオブジェクト指向しか無いからそういうんだろう。
159:デフォルトの名無しさん
10/04/25 02:43:51
はぁ、基本を勉強したことが無い土方叩き上げの連中は知識の幅が狭くて困る。
学生でも土方みたいな考え方の奴がたまにいるから困る。
そういうヤツに限って自分はプログラミングスキルが高いと勘違いしているから困る。
160:デフォルトの名無しさん
10/04/25 02:45:14
今日は自己紹介が多いな
161:デフォルトの名無しさん
10/04/25 02:45:35
せめて何か新しいことを提案するなら大学院の博士課程を卒業してからにして欲しいものだ。
それ以外の奴でもたまに広い見識を持った奴はいるけど、ほとんどがそうでないのだから、
言われた通り手を動かすだけにして欲しい。
162:デフォルトの名無しさん
10/04/25 02:46:22
オススメ
URLリンク(www.amazon.co.jp)
163:デフォルトの名無しさん
10/04/25 02:47:50
自分に足りないものを見つける能力がないと>>161みたいになってしまう
164:デフォルトの名無しさん
10/04/25 04:26:09
とりあえずD厨とVS脳とIDE厨と電波がいないと始まらない
165:デフォルトの名無しさん
10/04/25 04:56:19
IDE要否はライブラリの善し悪しだから言語の式記述能力とは別問題。
IDE使用前提のシーケンス言語でもいいけど
166:デフォルトの名無しさん
10/04/25 05:04:51
LISPでCのマクロを書けるのはいい。
だけどS式でCのプログラムは書きたくない。
で、どーしたらいいんだろう?
167:デフォルトの名無しさん
10/04/25 05:23:28
ファイルの拡張死は何がいい?
168:デフォルトの名無しさん
10/04/25 05:24:32
複雑なマクロはオナニー
lispだからこそ生きるもんだ
Cでもinlineとconst enumで大半が不要だろ
169:デフォルトの名無しさん
10/04/25 06:44:20
マクロ低機能化でよければ
代入だけでもC形式にすればだいぶ小奇麗になると思うよ
170:デフォルトの名無しさん
10/04/25 12:19:38
>>168
ある意味正しいけど
一人ないし少数精鋭で使うならオナニーでも結構使いでがあるんじゃないの
構文木が弄れるLispマクロなら、例えばCのswitchがいやなら
自分で構文を作れるし
fp = fopen(name, "r");
if (fp == NULL) エラー処理
else ...
みたいな決まりきった手続きを抽象化した構文を自分で作れる
171:デフォルトの名無しさん
10/04/25 12:23:16
>>170
やっぱり、ない方がいいな。
172:デフォルトの名無しさん
10/04/25 12:27:54
演算子オーバーロードの弊害が言われる中でそんな自由度追加しようだなんて
173:デフォルトの名無しさん
10/04/25 12:31:23
もしかしてLispのマクロが「そういうもんだ」と知らずに議論してたのかw
174:デフォルトの名無しさん
10/04/25 12:37:40
隣の芝生なので
175:デフォルトの名無しさん
10/04/25 12:55:28
JavaだってLispで言うようなマクロがないわけじゃあない。
ただ言語仕様に組み込まれているだけ。
たとえば、文字列の連結や、Enumによるswitch。
7だとStringによるswitch。こいつらはコンパイル時に別のソースコードに置き換わる。
ある文法構造をもっと平易な文法構造に書き直すようなことはよくあること。
ユーザが勝手にマクロ作るのも許すが、
基本的には言語のライブラリとしていくつか構文を用意して
それを使わせればいいんだろう。
176:デフォルトの名無しさん
10/04/25 13:01:04
#define BEGIN {
#define END }
#define FOREVER for (;;) BEGIN
ああ、すばらしい
177:デフォルトの名無しさん
10/04/25 13:02:15
Cのマクロはトークンの解釈しかしないから
その程度が限界
178:デフォルトの名無しさん
10/04/25 13:02:26
自由度を無造作に増やすと可読性が落ちることがなんでもっと問題視されないんだろうね。
179:デフォルトの名無しさん
10/04/25 13:05:41
>>178
それが嫌なら
Effective (これから作る言語名)
でもすぐに出版してマクロの使い方を啓蒙するしかないな
180:デフォルトの名無しさん
10/04/25 13:10:13
啓蒙なんて時間がかかるものは無駄。
言語仕様でシステムとして制限するほうが即効性高い。
181:デフォルトの名無しさん
10/04/25 13:13:15
あのね、庶民はバカがデフォだから啓蒙なんて意味がないんだよ。
だからバカでもチョンでも使える物じゃないとだめなんだよw
182:デフォルトの名無しさん
10/04/25 13:14:24
>>178
可読性は関係ない
不要なものをわざわざ作るのは無駄だが、既に作った後なら特に問題視されない
183:デフォルトの名無しさん
10/04/25 13:16:11
今のCで言えばコンパイラやCPUの互換性向上のために使う位か
後は定数のdefineをasmとCで共用できるのは便利
175みたいにコンパイラに組み込んでしまうのは全く別な議論だし
入れる際に相当揉むのに、安易に構文いじったりするためのマクロなんて全く不要
184:デフォルトの名無しさん
10/04/25 13:16:56
JavaもC++から学習要素を排除して受けた面があるな。
185:デフォルトの名無しさん
10/04/25 13:17:37
>>182
こういうやつがC++でオナニーしてるんだな
186:デフォルトの名無しさん
10/04/25 13:17:51
バカでもチョンでも使えて
バカやチョンが書いたコードはバカやチョンが強引にプロジェクトマージしてきても深い深いpackage-nameの奥へ自動的に追い遣られる言語がイイね
言語機能かどうか知らんけど
187:デフォルトの名無しさん
10/04/25 13:19:59
名前の衝突が困る人間なんてそうはいないのになんであんなに重要視されるのか不思議で仕方ない。
188:デフォルトの名無しさん
10/04/25 13:20:20
カメラで顔チェックしてデブサやバカやチョンが書いたコードは自動で排除
かわいい女の子が書いてたら俺んとこにメールするようなコンパイラが欲しいね
189:デフォルトの名無しさん
10/04/25 13:22:48
今のCマクロでいうと#define中で#ifXXで条件コンパイルしたい使いたいときはあるな
190:デフォルトの名無しさん
10/04/25 13:29:09
Javaを仕事で使ったことないんだが、リリース版とデバッグコードどう共存させてるの?
191:デフォルトの名無しさん
10/04/25 13:35:30
>>185
オブジェクト指向でオナニーしてると言えばいいのに
OOを擁護しつつC++だけ廃止するのは無理だよ
192:デフォルトの名無しさん
10/04/25 13:36:45
Cプログラマーは関数を特別のものと見做さない
Lispプログラマーは構文を特別のものと見做さない
それだけの話だ
193:デフォルトの名無しさん
10/04/25 13:40:48
>>190
基本同居。実行時も同居。
if(LOG.isDebugEnabled()){
~
}
ただし、finalなboolean定数にtrueかfalseを持たせて
if(IS_DEBUG){
~
}
なんてやれば、if自体はその定数にしたがって消滅したりするようにできたりする。
あとは設定ファイルでデバッグ用のコードをAOPさせたりとかかな。
194:デフォルトの名無しさん
10/04/25 13:48:16
だけとつけただけで強くなれた気がした15の夜
195:デフォルトの名無しさん
10/04/25 13:48:57
言語仕様で消えるほうが安心感あるな。バグも生むけどw。
196:デフォルトの名無しさん
10/04/25 13:50:02
>>192
lispに構文らしい構文なんてないからな
197:デフォルトの名無しさん
10/04/25 13:50:28
Cプログラマが構文を特別なものと見做さないとどうなります?
C言語を1次元のトークン配列から1パスで構文木を作るとパーサが大きくなる。
Lispはトークン配列を一度リストとして読み込みマクロ展開したあと
構文木を構築するというように2パスになっている。
トークンはリードマクロで変更可能だ。
通常のマクロはリストを操作するプログラムで読み込み時にS式のフィルタとして働く。
198:デフォルトの名無しさん
10/04/25 13:59:34
>>193
ひでえ
それじゃデバッグ用に大きなライブラリをリンクするようなケースには対応できないじゃん
まあjavaごときで速度だのサイズだのを気にするのが間違いなのか
199:デフォルトの名無しさん
10/04/25 14:01:02
人は両極端を好む
マクロを全く使いたくないか、使うとしたら最強のマクロを使いたくなる
200:デフォルトの名無しさん
10/04/25 14:07:28
>>198
Javaだとクラス単位でロードするから
ライブラリのファイルサイズはともかく、メモリ単位では関係無し。
クラスローダーが文句言わない範囲のリンクをすればいい。
201:デフォルトの名無しさん
10/04/25 14:10:27
>>198
だからeclipseはあれほど重い
202:デフォルトの名無しさん
10/04/25 14:14:30
>>201
Eclipseはあんだけ機能持ってれば重くて当然かな。
ほかの言語で実装しても正直重さは五十歩百歩になりうる。
ある種、富豪的プログラミングっちゃ富豪的。
このスレだと低級言語だから富豪的なのは禁止かな。
VM前提の方がいろいろとやりやすい事が多いんだけど、
たぶん近代的なOSで走るアセンブラに落とす前提だろうから。
203:デフォルトの名無しさん
10/04/25 14:15:45
> たぶん近代的なOSで走るアセンブラに落とす前提だろうから。
別にCトランスレータでもいいんじゃないの
「ソフトウェア作法」のratfor的な
204:デフォルトの名無しさん
10/04/25 14:16:54
分かった。アセンブラなのにC#みたいにGUIアプリが作り易い。これな
205:デフォルトの名無しさん
10/04/25 14:18:03
>>203
Cトランスレータ…
まるでC++の再誕を見ているようだ。
206:デフォルトの名無しさん
10/04/25 14:18:35
>>202
>ほかの言語で実装しても正直重さは五十歩百歩になりうる
そんな絶対に証明不可能なことを言い切られても
207:デフォルトの名無しさん
10/04/25 14:21:43
GC系の言語でかかれたアプリは、基本的にWindows XPとは相性最悪
貧乏性のXPは何かとワーキングセットを最小化しようとするが
一方でGCは非局所的にヒープを舐めたがるので、
GCのためだけにページが出たり入ったり
ウンザリするような事態が引き起こされる
208:デフォルトの名無しさん
10/04/25 14:23:24
>>198
そこでeppの登場ですよ。
eppを使えば、javaをS式として扱ってプリプロセッサを書ける。
これ最強。
209:デフォルトの名無しさん
10/04/25 14:27:52
結局S式が出てくんのはさー
ごくシンプルなルールで、木を簡単に記述できるからなんだよな
そんだけの話
XMLは冗長だしね
210:デフォルトの名無しさん
10/04/25 14:29:04
>>207
他のOSはどうなの?
使われないけど参照は残ってるものはswap行きだけどswapからの参照だけはメモリ上にもある
ようなOSってあるのかしら?
211:デフォルトの名無しさん
10/04/25 14:30:27
>>210
ある程度は似たような問題はあると思う
XPが特に酷いのは、ウィンドウを最小化しただけで
ワーキングセットを最小化するような仕様だからだよ
212:デフォルトの名無しさん
10/04/25 14:40:40
windows 7 とかなら実は、.netに対応して世代別GCに対応したMRUが搭載されてたりして
213:デフォルトの名無しさん
10/04/25 17:32:11
>>205
Objective Cもだな
C++が出始めた時勉強のために
プリプロセッサ作ったりしたが懐かしい
214:デフォルトの名無しさん
10/04/25 18:41:58
>>129
がガン無視されて寂しいんだけど、関数の引数を別けて定義するのは
良くないかな?
関数定義
int convert Parameter(char* source_code="EUC_JP",char*) ←Parameterはデフォルトを定義出来る
Source(char*)
Result(char*)
{
}
使う方。
convert Parameter("EUC_JP","UTF-8") Source(euc_buf) Result(utf_8_buf);
215:デフォルトの名無しさん
10/04/25 18:43:02
>>214
新しく作る言語からは糞長い名前付けをする文化を捨て去りたい。
216:デフォルトの名無しさん
10/04/25 18:43:43
source_codeとか長いからsrcとかsとかにしろよ
217:デフォルトの名無しさん
10/04/25 18:43:47
C系の悪習を更に悪化させた感じだな
218:デフォルトの名無しさん
10/04/25 18:48:10
functionを関数と訳すなよな
今更だが
ファンクションで良かったんじゃね?
219:デフォルトの名無しさん
10/04/25 18:51:54
>>214
名前付き引数で、「Parameter」だけは予約語ってこと?
220:デフォルトの名無しさん
10/04/25 18:57:56
>>219
やっとまともな人が来てくれた。
「Parameter」「Source」「Result」が予約語。
オブジェクト指向の多態の時にコンパイラが分かりやすくて良いんじゃないか
と思うんだ。Source以外は、省略可能と言うことで。
221:デフォルトの名無しさん
10/04/25 18:59:12
その程度の機能のために予約語3つww
222:デフォルトの名無しさん
10/04/25 19:05:06
>>221
いやいや、大切なことなんだよ、大域最適化の障害になってるから。
この引数はなんの目的があって、関数に渡されているのか分からないから
触れない。ってコンパイラの負担になってる。
Result以外は、その関数で変更がないって事はとても重要。
見た目にも読みやすいし、最近のGUI系のあの、山のような引数
どれがなんなのか、分からないし。一々関数のリファレンスに当らなくても、
ソース読んでるだけある程度その関数の動きが読める方が良いと思うし。
可読性と、コンパイラの最適化に有効なので、記述時のタイプ量が増える事は
払えるコストだと思うのです。
223:デフォルトの名無しさん
10/04/25 19:09:47
>>222
それなら、各パラメータにユーザー定義の任意の属性を付けられて、
各属性にコンパイラに対する情報を載せられるようにしたい。
さすがにその3つを予約後にするのは下品だし、オサレじゃない。
224:デフォルトの名無しさん
10/04/25 19:11:31
前スレでCPU固有言語にこだわってたヤツか?
225:デフォルトの名無しさん
10/04/25 19:12:12
この下品さは、そうだろうね。。
226:デフォルトの名無しさん
10/04/25 19:14:08
>>224
そうそう。俺それ。
>>223
そう言う反論は宗教論争なので、もう少し違った感じで。
例えば、ParameterとSourceの関係が問題になるとか、
そっちの頭の良い異論が欲しい。
227:デフォルトの名無しさん
10/04/25 19:18:36
低レベルプログラミングからも
コンパイラ作成からも遠そうだし
オサレ系でもないし
内容からして高校生位。。か?
228:デフォルトの名無しさん
10/04/25 19:20:19
>>224
お前のエスパー能力がうらやましい
229:デフォルトの名無しさん
10/04/25 19:24:05
>>226
定義もされていない「俺予約語」について頭の良い議論ができるわけ無いだろ
230:デフォルトの名無しさん
10/04/25 19:24:34
>>214
このコードが何を意味してるのかわからないんだが
戻り値はchar*なの?intなの?
231:デフォルトの名無しさん
10/04/25 19:28:03
>>214
仮引数の名前がないし、何が何だかわからん。
232:デフォルトの名無しさん
10/04/25 19:28:52
>>227
こう言うのは意外におっさんだったりする。
233:デフォルトの名無しさん
10/04/25 19:31:13
いっそ関数名には.exeをつけて
オプションには/をつけて結果には>でいんじゃね
234:デフォルトの名無しさん
10/04/25 19:32:08
>>232
俺のエスパー能力もこれまでか
235:デフォルトの名無しさん
10/04/25 19:36:40
Resultは多値を使って返したらすっきりすると思う。
パラメータとソースはうーん。たとえば、オブジェクト指向ならオブジェクトがソースで
パラメータは関数の引数にしたらいいのかなと。ソースが複数ある場合はコンビネーションメソッドみたいなのがあって
このオブジェクトとこのオブジェクトにメッセージをこのパラメータで送って渡すみたいにするとか。
char* (char* src_charset,char* dst_charset)::encode(char* src_string) {
return translate(src);
}
文字コードオブジェクト2つにエンコードメッセージをsrc_stringで渡すという具合に。
使い方は
char *rc = ("euc-jp","utf-8").encode("eucmojiretu");
という具合
236:デフォルトの名無しさん
10/04/25 19:44:21
全く意味不明
237:デフォルトの名無しさん
10/04/25 19:44:52
.演算子が泣いてるぜ
238:デフォルトの名無しさん
10/04/25 19:49:43
>>222
ParameterとSourceの違いは?
239:デフォルトの名無しさん
10/04/25 19:58:49
まずカリー化とかとは違うのかな
240:デフォルトの名無しさん
10/04/25 20:00:19
カリー化をしってる奴があんなトンチキなことを書くとは思えん
241:デフォルトの名無しさん
10/04/25 20:03:25
ネタ振ってくれるなーw
でもちょっとユンユンし過ぎじゃね
彼にカリーさんは辛口過ぎるし
242:デフォルトの名無しさん
10/04/25 20:06:20
新しい言語の前にちゃんとC系をマスターして、
lispとhaskellとsmalltalkあたりを勉強してはどうだろう
243:デフォルトの名無しさん
10/04/25 20:06:47
>>239
カリー化と違うんじゃなくて、カリー化しやすくするってことに
つながる訳ですよ。カリー化しやすくなってると、大域最適化に
強くなると。
244:デフォルトの名無しさん
10/04/25 20:16:06
後悔関数
245:デフォルトの名無しさん
10/04/25 20:48:56
カリー化で大域最適化に強くなるなんてどこの宗教だよ
246:デフォルトの名無しさん
10/04/25 21:00:43
カレー板でやれ
247:デフォルトの名無しさん
10/04/25 21:01:07
>>245
例えば、文字コンバートで言えば、ソースコードの全域にしたがって、
EUC_JP→UTF-8の変換しかやっていなければ、それ以外の文字コード変換を
さっくり削除して、それに必要な変換テーブルもさっくり削除出来てで、
もっと言えば、その他の文字コードで必要な呼び出しとかスタック積み上げ
とかも全面的に削除して、そもそもEUC_JPという引数も、定数に変更して。
と言うことが可能になっていくんだよ。
248:デフォルトの名無しさん
10/04/25 21:04:06
で、カリー化は?
249:デフォルトの名無しさん
10/04/25 21:04:26
>>220
ParameterとSourceの違いは?って聞いてるんだけど。
250:デフォルトの名無しさん
10/04/25 21:08:20
>>249
>>226で自分でちゃんと書いてるので、それに
そういうべたな質問かぶせてくる馬鹿に答えるメリットはないんだよね。
251:デフォルトの名無しさん
10/04/25 21:16:20
>>250
いや、引数をParameterとSourceで分けて主張した意味が全く理解不能だったので、
何か深い哲学的な意味があるのかと思って気になったから聞いたんだけど。
252:デフォルトの名無しさん
10/04/25 21:18:27
>>250
バカアホ言う前に、自分がちゃんとした文章書いているのかを一度見直したほうがいいよ
253:デフォルトの名無しさん
10/04/25 21:19:41
>>252
馬鹿に伝わらないように書いてるので。
まぁ馬鹿がタカルんだけど(w
254:デフォルトの名無しさん
10/04/25 21:26:53
×伝わらない
○伝えられない
255:デフォルトの名無しさん
10/04/25 22:46:04
すげーなこのすれw
256:デフォルトの名無しさん
10/04/25 23:04:48
Cの不満点を解消しただけのalternative Cで十分なんじゃないの?
レガシーフリーのごとく過去のしがらみを捨てられればそれでいいよ。
257:デフォルトの名無しさん
10/04/25 23:10:50
こういう言語どう?
男=1 女=0 という変換するだけでコンパイルが完了する言語
258:デフォルトの名無しさん
10/04/25 23:12:13
>>257
女が0?
とんでもない性差別ですね
259:デフォルトの名無しさん
10/04/25 23:13:20
>>258
性器の形を模しているので差別ではありません
260:デフォルトの名無しさん
10/04/26 00:08:20
>>251
CPU固有言語だぞ。哲学とか。。
主張?につっこみどころ多すぎて
観戦させてもらうわ
261:デフォルトの名無しさん
10/04/26 00:09:16
>>260
関数が、固有命令?w
262:デフォルトの名無しさん
10/04/26 00:17:25
>>261
読めるなら前スレ読みな
263:デフォルトの名無しさん
10/04/26 00:27:23
>>262
1から全部読んでるけど何の関連性も見つかりません
264:デフォルトの名無しさん
10/04/26 00:45:31
自分の特殊な表現が他人に常に理解されるとは思わない方がいいよ。
人と話をするなら出来るだけ一般的な表現をした方が誤解を招かずにスムーズなコミュニケーションが出来て自分も気分がイイはず。
265:デフォルトの名無しさん
10/04/26 01:05:52
id欲しいな
266:デフォルトの名無しさん
10/04/26 01:18:38
>>264
ダネ
彼はたぶん自分が言っていることすら
どういう意味があるのか理解していないんだと思う。
脳内に言いたいことがはっきり論理的に出来上がっているなら、
それを書くのに何の抵抗も無いはずなんだけどな。
267:デフォルトの名無しさん
10/04/26 05:13:42
開発したいであって、開発するじゃないのはなぜ?
268:デフォルトの名無しさん
10/04/26 06:06:45
開発しないから
269:デフォルトの名無しさん
10/04/26 10:50:48
ではやはりあげておくべきですね。
270:デフォルトの名無しさん
10/04/26 19:37:16
id?
Objective Cのか?
271:デフォルトの名無しさん
10/04/26 20:52:54
さすがにそのクソ言語に学ぶ所は無い
272:デフォルトの名無しさん
10/04/26 21:09:18
こういう糞言語を作ってはいかん、という点が学べるのでは
273:デフォルトの名無しさん
10/04/26 21:22:16
たしかに。
既にCがあるんだからそれをベースにちょっといじってオブジェクト指向を載せてみようなんて事をすると、こういう糞になるという見本だな。
やはり新言語は1からしっかりと考えるべきだな。
274:デフォルトの名無しさん
10/04/26 22:23:42
じゃあまずObjective Cの悪かった点を纏めて行こうか
275:デフォルトの名無しさん
10/04/26 22:33:37
文法がキモい
276:デフォルトの名無しさん
10/04/26 22:43:21
C++とObjective Cは、同時期に世間で認知されだしたが、後者はジョブズしか使わなかった。
277:デフォルトの名無しさん
10/04/26 23:28:47
でもObjective Cのシェアがここに来て急上昇
結局モバイルで使える言語が今後の覇権を握る
その点についても考慮しなければならんぞ
278:デフォルトの名無しさん
10/04/26 23:38:32
>>277
C#だな。ジョブズはFlashよりも.NETが怖かったんだとおもう。
279:sage
10/04/27 00:13:40
Objective C の悪い点は[]で メッセージ という拡張が中途半端すぎるという点。
その点を改善してるのがたとえば Vala なんじゃないか。
go もそんなかんじだけどGCが必須なんだっけ?
Objective C のよい点はGCを使わなくてもよいところにある。
280:デフォルトの名無しさん
10/04/27 00:14:57
まちがった
281:デフォルトの名無しさん
10/04/27 00:17:49
heap管理の遅さとそれを管理しきれなかったから、GCが出来たんじゃ
282:デフォルトの名無しさん
10/04/27 00:25:46
// 式
function Exp(l,op,r){this.l=l;this.op=op;this.r=r}
Exp.prototype.toString = function() {
return "["+this.l+",\""+this.op+"\","+this.r+"]"
}
var powers = {}// 戦闘力表
// 読み込み処理
function read(str) {
var arr = str.split(/\s+/) // 文字列を配列にする
// 戦闘処理
function battle(power) {
var result = arr.shift()// とりあえずの結果を取得
while (powers[arr[0]] > power) {// きごうの力が強ければ勝ち抜く
var name = arr.shift()// 名前取出し
var nextpower = powers[name] // 次の戦いで使う力取得
var nextresult = battle(nextpower) // 次の戦いを行う
result = new Exp(result, name, nextresult)// 式作成
}
return result
}
return battle(0)// 力0で戦闘開始
}
// 戦闘力登録
powers["+"] = 10
powers["*"] = 20
alert(read("1 + 2 * 3 + 2 * 3"))
283:デフォルトの名無しさん
10/04/27 00:27:37
簡単な下降型の演算子順位法のパーサを書いたので参考にしてください。
これをいろいろ拡張してCっぽくすればマクロも作れるようにできるよっと。
284:デフォルトの名無しさん
10/04/27 04:03:14
>>279
2.0からGC使えるようになったね
ObjCはCと思うからいかんのよね
アレはSmalltalkにCのふりかけかけたもんだし
goはどっちかいうと(C+python)/2風味でGC有り。gccgoはまだ未実装
まあObjCに限らず今後はUIを含むような
Webやデスクトップのアプリ作る言語はGC有りでいいんじゃね
組み込みや制御系やOSなんかはCみたいな住み分けで。
285:デフォルトの名無しさん
10/04/27 16:28:57
このスレはCみたいなのを目指してんだろ
286:デフォルトの名無しさん
10/04/27 19:07:54
C言語の問題点。
1、コンパイラを軽く書きたいので色々端折ってる
2、軽く書きたいと良いながら、先読みが必要だったりする
3、軽く書けるので膨大な方言が発生し、それの取りまとめで仕様がボロボロ
4、機能の追加が必要最小限に留められているので、色々中途半端
C++の問題点
1、C言語との互換性を重視したので、記号が珍妙
2、追加、追加が多すぎて、なにがなんだか状態
3、オブジェクト指向の学識が高まるのと歩調を合わせた結果仕様が複雑
4、C言語の欠点を引き継いでしまってる
さて、以上の欠点は総て、言語が生まれた当時はまだ分かっていないことや、
当時では無理だったことが、後年解決された事など、色々に理由があって、
単に順調に成長した言語だから発生したとも言える。
そこで、プログラミング言語40年の歴史から学べる知見を総動員して、
C言語的なプログラミング言語を過去の遺産にとらわれず、今、開発
するとすればどんな仕様になるのだろうか?という事。
287:デフォルトの名無しさん
10/04/27 19:14:20
でもお前らプログラミング言語40年の歴史から学べる知見なんて持ってねぇだろ?どうすんの?
288:デフォルトの名無しさん
10/04/27 19:32:24
せきねさんに頼もう
289:デフォルトの名無しさん
10/04/27 19:52:15
そうやって作ってるのがDじゃないのか
290:デフォルトの名無しさん
10/04/27 20:00:12
if(A){B}
のAの部分に副作用を伴う式が書けてしまうのは混乱の原因にならないカナ
291:デフォルトの名無しさん
10/04/27 20:06:22
別にならない
292:デフォルトの名無しさん
10/04/27 20:06:44
>>289
DはC言語の部分は守るって言ってるから、系統としてC++を再デザイン。
293:デフォルトの名無しさん
10/04/27 20:09:43
いや、全然守ってないし
294:デフォルトの名無しさん
10/04/27 22:15:03
よく低水準言語の話で、自分でメモリ管理もできないヤツがどうのこうの、って言うけどさ
必ずメモリ管理するなら最初からあったほうがいいんじゃないの?
メモリ管理しないほうがいいケースって具体的にどんなの?
295:デフォルトの名無しさん
10/04/27 22:20:44
何が、あった方が良いって?
296:デフォルトの名無しさん
10/04/27 22:21:00
メモリマネージャだのガーベージコレクタを「作る側」なのが低水準言語だから
297:デフォルトの名無しさん
10/04/27 22:26:37
過去のメモリマネージャの欠点にとらわれず、知見を総動員してメモリ管理する。
298:デフォルトの名無しさん
10/04/27 22:34:43
バッファオーバーフローを考慮しない標準ライブラリの話な
299:デフォルトの名無しさん
10/04/27 22:35:36
>>294
メモリー管理機能は当然あったほうがいいよ。
もちろんメモリマネージャだのガーベージコレクタを作るときには、その機能を使わずに作るだろうけど
低水準言語では常にどんな場合でもフル機能が使えるわけじゃないからね。
作ってしまえば、それ以外の機能を作るときに十分役に立つ。
300:デフォルトの名無しさん
10/04/27 22:40:49
>>286
Cの仕様のどこがはしょられていて、どこがぼろぼろなのかね。
かなり昔は方言もいろいろあったけど、今では ANSI C の部分は共通だし、独自仕様を使っているところはもともと独自でないといけないところ。
C++の記号が珍妙ってなんだろな。
ライブラリが肥大化しすぎているだけで、言語仕様自体はそんなに複雑ではない。(パースはしにくい)
301:デフォルトの名無しさん
10/04/27 22:46:40
C/C++ は enum とか完全に終わってるだろww
過去のしがらみで修正不能だしwwwwww
302:デフォルトの名無しさん
10/04/27 22:52:58
自動化すると修正不能だが手動でやれば融通がきく点が低級言語のメリットだな
303:デフォルトの名無しさん
10/04/27 22:54:16
Cのenum便利じゃん
304:デフォルトの名無しさん
10/04/27 22:57:23
歴史のしがらみ==自動化のしがらみ
305:デフォルトの名無しさん
10/04/27 22:59:06
「自動化」って何だ?
306:デフォルトの名無しさん
10/04/27 23:01:16
enumは0xで型付きにできる
307:デフォルトの名無しさん
10/04/27 23:05:31
enum は便利な #define としてあとからわざわざ導入したもの。
308:デフォルトの名無しさん
10/04/27 23:05:35
>>305
configure; makeとかuse strict;を使うこと
309:デフォルトの名無しさん
10/04/27 23:07:53
?
310:デフォルトの名無しさん
10/04/27 23:33:57
型付って何?
いまでもワーニングでてた気がするが
311:デフォルトの名無しさん
10/04/27 23:38:52
enum定数に型をつけられる
charとかshortとか
312:デフォルトの名無しさん
10/04/27 23:40:57
あまりいらないな。
intだけでもいい。あっても邪魔じゃないが。
313:デフォルトの名無しさん
10/04/27 23:44:07
バイナリで保存したい時にサイズが分からないってんじゃ困るっしょ
314:デフォルトの名無しさん
10/04/27 23:44:52
何の話?
315:デフォルトの名無しさん
10/04/27 23:45:02
sizeof
316:デフォルトの名無しさん
10/04/27 23:46:39
>>315は>>313へのレス?>>314へのレス?
317:デフォルトの名無しさん
10/04/27 23:46:54
まるでcharやshortがヘッダやsizeofなしにサイズが分かるような口ぶりだな
318:デフォルトの名無しさん
10/04/27 23:48:30
そのためのstdint.hだろ
319:デフォルトの名無しさん
10/04/27 23:51:44
んなわけない
320:デフォルトの名無しさん
10/04/28 00:01:51
D言語はC言語のプリプロセッサは無くしてC++のようなテンプレートを導入し、
mixinでソース文字列をコンパイル時に生成したり、
さらに構文木までいじれるようにするとか何とか言ってたりしてます。
ただ、構文解析を楽にするための文法の変更とかはしてないJava,C#と同系統な発展になってますね。
javascript,ActionScript,haXe,Scala等は構文解析が楽なデザインになっているのではないかと。
それをもっと分かりやすくってことを考えると式を演算子で結ぶ式言語ですべて表せるものがいいのではないか?
という主張をオレはしてるのですけど、手法がよく知られていないのか、まだないのか分からないですが、
分からないので手探りな状態で開発したいけどすぐには出来ないでいます。
B言語は動的な性質を持ってたように思うので、C言語を作る前にB言語を作る手法を考えるのがよいのかなと。
でB言語をjavascriptにするのか、javascriptをマクロを扱えるように式ベースにした言語を使うのか、
式ベースなpythonにするのかで、出来上がる言語の性質が違ってきますよ。
一度変えたら次のチャンスはまた40年後ですよってなると俺は生きてないかもしれない。
LispのマクロはCのプリプロセッサより強力でDSLはソースを短く分かりやすくする。
ということは知見の1つでしょう。
優先順位付きの演算子がないと一般には受け入れられないのも間違いなさそうですし。
ifの条件はbool以外はワーニングがいいでしょうね。
321:デフォルトの名無しさん
10/04/28 00:05:20
最後の行でいきなり細かい話でワラタ
322:デフォルトの名無しさん
10/04/28 00:20:47
式言語はろくなもんじゃない
myはきたない文でletはきれいな式だとか馬鹿馬鹿しい
323:デフォルトの名無しさん
10/04/28 00:25:47
式言語って何?
324:デフォルトの名無しさん
10/04/28 00:45:24
式言語の人々
○lambdaさん
○CPSさん
○IOモナドさん
○letさん
325:デフォルトの名無しさん
10/04/28 00:46:55
letはlambdaの構文糖じゃなかったか
326:デフォルトの名無しさん
10/04/28 00:48:23
式言語の定義は?
327:デフォルトの名無しさん
10/04/28 00:50:50
関数型言語と何が違うんだろう
328:デフォルトの名無しさん
10/04/28 00:54:31
メリットが良く解らんね
329:デフォルトの名無しさん
10/04/28 01:02:04
>>326
ちょっと「式言語」って言ってみたかっただけ。ゴメンナサイ
330:デフォルトの名無しさん
10/04/28 01:10:35
ぐぐるとJSPのELばっか出てくるのな
331:デフォルトの名無しさん
10/04/28 01:12:28
式神の城
332:デフォルトの名無しさん
10/04/28 01:14:16
式言語→四季言語→季語
ということでよろしいか
333:デフォルトの名無しさん
10/04/28 01:52:54
Dは問題外
EかFしか興奮しねえな
334:デフォルトの名無しさん
10/04/28 05:13:05
>>322
たしかに、式言語といえば、JSPですね。
ここで言った式言語ってるのは言語を作るための言語のこと。
XML関連の研究とかだと正規生垣言語というものなのかな?
理論的に正規生垣言語となるかはわからないのですけど。
HTMLに対するSGML、
LISPに対するS式、
Dylanに対するD式で
新しいC言語を作るための言語です。
オレはこの言語にC式って名前をつけたんだけど、
それが本当にふさわしいのかわからないので、式言語とだけ書きました。
新しいC言語は正規木文法で定義されたらいいのではと思うのだけど、
それだと、ユーザー定義の演算子を定義できるかどうかもわからないところです。
メリットとデメリットはHTMLとXHTMLの違いを考えれば分かりやすくて、
HTMLはxmlに囚われることなく定義できるけど、その分パーサは作りにくいのが、
XHTMLはXMLのパーサを使えばいいので楽。XMLのパーサ自体もHTMLのパーサを作るより楽だ。
そして、XHTMLはXMLValidなので美しいと感じるかどうかは人によるけど、一定の基準になります。
ただ、文書を書くにはXMLのほうが、長くなる。エラー復帰はすばらしいHTMLのパーサに劣る。
といったことになるかもしれないと。
335:デフォルトの名無しさん
10/04/28 05:15:51
関数型言語との違いは、まず目指す見た目です。
関数型言語は基本的に論文とかで使う数学の形式的な言語に近いと思います。
ここで考えているのは見た目がC言語に近いものです。
あと、関数型言語は処理系も含みますが、
C言語風の式言語の定義には処理系は含みません。
式をベースとしているからといって、関数指向のプログラミングを行う目的だけに
特化しようとも考えていません。今は高級アセンブラ用として考えているのですよね。
ScalaはC言語風の関数型言語ですが、式をベースとしていません。
DylanやNemerleも関数型言語で式をベースとしていますが、優先順位についてよくわかりませんし、
LISPのリーダマクロ的な手法のようなので自分が作ってみたかんじでは難しと感じます。
CyanはC言語風の式言語も採用しているプロトタイプベースのオブジェクト指向言語で理想に限りなく近いものです。
ただ、オフサイドルールはいらないだろ?っていうのが持論です。
なぜなら、S式にオフサイドルールは余計だから。
最小のルールでC言語風の表現ができればいいのです。
オフサイドルールは過剰なスペックだと思うのです。
336:デフォルトの名無しさん
10/04/28 07:09:01
文脈自由文法が自由すぎて生きるのが辛い?
337:デフォルトの名無しさん
10/04/28 07:10:04
CPU固有言語君か?
コンパイラの本とか読んだことある?
中田さんとかWirthとかAhoとか。
338:デフォルトの名無しさん
10/04/28 07:20:25
Cの系譜は何をするにも新しい文法を用意してるから
一般化は無理なんじゃないか
339:デフォルトの名無しさん
10/04/28 07:23:22
文法的にいうとC/C++はあんまシンプルじゃないよな
340:デフォルトの名無しさん
10/04/28 09:10:49
で、お前ら的にF#はどうよ?
341:デフォルトの名無しさん
10/04/28 09:17:53
Cの文法のどこが複雑なのだろう。C++もたいしたことないけどな。
342:デフォルトの名無しさん
10/04/28 09:30:25
世界初の実用に耐える関数型言語
F#
343:デフォルトの名無しさん
10/04/28 09:57:26
.NETベース大勝利
式ベースとは一体なんだったのか
344:デフォルトの名無しさん
10/04/28 13:06:46
おまえらが欲しがっているものがすべて D にあってわろたwww
345:デフォルトの名無しさん
10/04/28 13:09:00
>>344
無いよ
346:デフォルトの名無しさん
10/04/28 14:14:03
ツンデレすぎてわろたwww
347:デフォルトの名無しさん
10/04/28 14:18:47
>>344
んじゃ、俺らが欲しい機能とDの具体的な機能名を対照表で書いてください
348:デフォルトの名無しさん
10/04/28 16:45:16
>>341
recursiveループがあるような言語をみてみたいよ
349:デフォルトの名無しさん
10/04/28 19:13:54
>>347
まずお前らが欲しい機能って何?簡潔に纏めろ
350:デフォルトの名無しさん
10/04/28 19:39:55
>>349
え?そっちはとっくに把握してるのだと思っていました。
だって俺らが欲しがってる機能が全部Dにあると>>344で書いてあったから・・・
351:デフォルトの名無しさん
10/04/28 19:55:31
機能はあるんだよ
機能は
あとは仕様とコンパイラが安定してくれれば・・・
352:デフォルトの名無しさん
10/04/29 00:31:57
オレは自称CPU固有言語クンではないぞ。
ま、固有がいやだっていうならば、CPU定義さえあれば、うまくいくぜ。
GCCだぜ、COINSだぜ、LLVMだぜーって感じになるでしょうね。
でも、出来るならLLVMとかと同じことをやりたい人もいるのかなと、
思うので、x86で構造作ってしまえたらいいな思ってるんです。
LLVMがいいんなら、そうするけど、それだと、
最適化とか作る楽しみがなくなったりしないのかな?と
わからんけど。
353:デフォルトの名無しさん
10/04/29 00:34:01
中田先生の最適化の本とか読んでます。
そこにも下降型の演算子順位法が結構古くから使われているってなことが書いてあったと思うし、
論文も読んでないけど出してたように思います。
ドラゴンブックも目は通したよ。
ボトムアップ型のパーサのLRLAとかなると正直分からない。
最適化はこういうものがあるんだ。ふーんってレベルならわかってるつもりだけど、
実装してみたりはしてないので怪しいもんです。
URLリンク(www.hpcs.cs.tsukuba.ac.jp)
このページ見てコンパイラも作ってみました。わかりやすかった。
美しい日本のコンパイラのソースは綺麗だし、インライン展開やら、SSA的なこともやってて面白いし
関数型言語系統のα変換とかβ変換とかいう用語が出て来てためになります。
型推論も結局Unifyするってことなんだなぁと。
CoinsのCPU固有の定義のところだけ取り出したいんだけどうまくいってません。
WirthとかAhoは知りません。
ググレばわかるんだろうけど。
Ahoがドラゴンブックの人で、Wirthはパスカルの人か。ふむふむ。
PaskalはLL(1)という点ですばらしいですよね。
でも、Paskalは構造化されたマクロはつかえないでしょ。
ドラゴンブックにLispのコンパイルの話はないだろうし。
基本がBNFになってるから、Lispのマクロは無理。AlgolにLispのマクロは無理。
っていうことになってしまう。
354:デフォルトの名無しさん
10/04/29 00:35:14
実際はそんなことなくて、正規木文法は文脈自由文法のサブセットなので、正規木文法で表される
文法は文脈自由文法として扱うことが可能ですから、普通に文脈自由文法として扱えば
いいのは分かってますよ。
ただ、そうじゃないもっと綺麗にできないかなぁってなるとドラゴンブックレベルじゃ無理。
Cは文法の拡張しまくってるってほどでもないのでは?
RubyとかPerlに比べたらそれほど機能ないでしょ。
class、アクセス、ネームスペース、try & catchとsynchronized,テンプレート、pragmaくらいじゃないの?
foreachとか、javascriptだとwithとか、正規表現リテラルとかか。
その辺の拡張する文だって大体似たような形をしてるのでそのへんを表すことが可能な演算子を用意すればいいだけです。
それがいいか悪いかは2通りの見方があるので、好きなほうを選択すればいいのではないかと思います。
Cのどこがっていうのは、HTMLの文法のどこが複雑なんだろうっていうのと同じだってば。
Cと、C++のパーサを空で2日くらいで書けるか?と。オレは無理。
でも、演算子順位法使って、特殊な演算子を定義すれば、
演算子順位の調整を除けば書ける。
.NETベース大勝利とかわけわからん。戦っている層が違うだろ。
.netベースでどうやって高級アセンブラを作るんだ?
Nemerleとか知らんで書いてるだろ。
F#はML系だから、C系統の言語から移行するのはいろんな意味で辛いぞ。
だったら、Scalaのほうがずっといいと思う。
MLの仕事がいかんというわけではなくて、F#を周りのプログラマが理解して
お客がそれを納得してくれるならいいけど、それは現状は難しいかなぁっと。
長文すんませーん。(w
355:デフォルトの名無しさん
10/04/29 01:45:13
・論点を絞る
・論旨を明確にする
・適度に箇条書きを利用する
・一般的ではない用語を使用するときは予め説明する
・論旨に影響の少ない固有名詞を無意味に使わない
・接続詞を使う
356:デフォルトの名無しさん
10/04/29 02:02:03
長文すぎてウザがられてることに気付かないんだろうな
プログラム言語の前に日本語勉強しろっていう
357:デフォルトの名無しさん
10/04/29 02:04:45
説得力無いって自分でも分かってるから長文になるんでしょ。読まないよそんなの
358:デフォルトの名無しさん
10/04/29 03:18:09
まあツッコミ所は多々あるけど
意気込みはわかった
Cのパーザは手書きすると意外にめんどいよな
取り合えず言語仕様考えてbisonとか
javaccみたいなんで遊んでみたら?
俺言語をcにトランスレートでもいいかも
359:デフォルトの名無しさん
10/04/29 05:34:32
>>355
ありがとうございます。なるほど。参考になります。
>>356
うざかったですか。すいません。国語苦手なんですよね。
>>357
説得力ないですか。
まずは355の実践からなのでしょうけど。
>>358
ではCへのトランスレータを書いてみます。
いろいろとご意見、ありがとうございます。
360:デフォルトの名無しさん
10/04/29 14:19:45
function CExp(l,op,r){this.l=l;this.op=op;this.r=r}
CExp.prototype.toString = function() {return "["+this.l+",\""+this.op+"\","+this.r+"]"}
// 戦闘力表
CExp.lpowers={".":200,"->":200,"*":190,"/":190,"%":190,
"+":180,"-":180,"<<":170,">>":170,"<":160,"<=":160,">":160,">=":160,
"==":150,"!=":150,"&":140,"^":130,"|":120,"&&":110,"||":100,",":80}
// 読み込み処理
CExp.read = function(str) {
var arr = str.split(/[\b\s]+/) // 文字列を配列にする
function battle(power) {
var result = arr.shift()
while (CExp.lpowers[arr[0]] > power) {// 演算子の力が強ければ結合
var operator = arr.shift() // 名前取出し
var nextresult = battle(CExp.lpowers[operator]) // 次の戦いを行う
result = new CExp(result, operator, nextresult) // 式作成
}
return result
}
return battle(0)// 力0で戦闘開始
}
alert(CExp.to_c(CExp.read("a == b | c >> 2 > 5 , b , c >> 2")))// 読み込み
</script>
結果<br/><textarea>
((((a==b)|((c>>2)>5)),b),(c>>2))
</textarea>
361:デフォルトの名無しさん
10/04/29 14:22:06
とりあえず、中置演算子のトランスレータを作りました。
ここでバリデータを作ってみます。
362:デフォルトの名無しさん
10/04/29 14:27:25
コードもいいけど、先ずはその部分のBNFが欲しいな。
363:デフォルトの名無しさん
10/04/29 14:36:24
自分で作れよ
364:デフォルトの名無しさん
10/04/29 14:47:54
>>363
だから、>>360のコードで行う処理のBNFを>>360自身に作ってほしいと言ってるんだろ。
365:デフォルトの名無しさん
10/04/29 14:52:52
なんだよコードで行う処理のBNFってw
366:デフォルトの名無しさん
10/04/29 14:54:29
「中置演算子のトランスレータ」として、どういう入力を受理するかを定義するBNF
367:デフォルトの名無しさん
10/04/29 15:03:59
言いたかっただけちゃうんかとw
368:デフォルトの名無しさん
10/04/29 15:09:10
普通、BNFは最初に書くんじゃないの
369:デフォルトの名無しさん
10/04/29 15:09:13
まあ、そうかもしれないけど、せっかくコード貼るなら、貼った意図を皆で理解できた方がいろいろ議論しやすいでしょ。
コードだけよりBNFがあった方がその意図を理解しやすいから。
370:デフォルトの名無しさん
10/04/29 15:11:39
>>368
何も考えず適当にコーディングしちゃったんだろうな
371:デフォルトの名無しさん
10/04/29 15:14:44
このスレ的には、文法よりコードが先行しても構わないよ。面白いアイデアなら
372:デフォルトの名無しさん
10/04/29 15:17:17
こういうコーディングができればいいなぁ、というアイデアを仮想の言語で書いてみるって言うのもありだけどね。
ブレインストーミングの時には。
373:デフォルトの名無しさん
10/04/29 15:18:46
>>371
面白いかどうかを判断するためにも、コードだけではなく、何をするのか説明されていた方がいい。
その説明する手段の一つがBNF。
コードだけでは分かりにくい。(バグっているかもしれないし。)
374:デフォルトの名無しさん
10/04/29 15:20:31
>>372
そうそう。
実現したいコードの例を書くのはいいけど、
それを実現するための既存言語(あるいは疑似言語)によるパーサーのコードを書いても意味無いだろってことだよな。
375:デフォルトの名無しさん
10/04/29 15:22:27
既存言語のBNFと変わらないように見えるのに要求する意味がワカンネ
376:デフォルトの名無しさん
10/04/29 15:27:04
既存言語もたくさんあるし、>>360の意図が実際にそうであるのかを確認するためにもBNFは有った方が分かりやすいよ。
単にコードを貼りたいだけで、それ以上議論したくないなら、BNFも説明もなくてもいいけど。
377:デフォルトの名無しさん
10/04/29 15:30:28
確認とか分かり易いとか、なんなんだよ。コードを見て おっ? と思うならBNFを見たくもなるけど
明らかにC系だしBNFに拘っても仕方ないだろ。>>360は単にコードを貼りたいだけだろ
お前はどこに説明を欲しいわけ?
378:デフォルトの名無しさん
10/04/29 15:31:09
単なるオナニーコーディングだし。出して気持ち良ければそれで満足。それ以上何かしたいわけじゃないんだろ。
379:デフォルトの名無しさん
10/04/29 15:31:54
>>360に何か可能性でも見出したのかなw
380:デフォルトの名無しさん
10/04/29 15:32:26
じゃあいいや。
>>360は見る価値の無いどうでもいいコードってことだな。
381:デフォルトの名無しさん
10/04/29 15:33:38
>>380
なにヤケになってんだよw
お前が食いついてただけだろ。むしろ食い付いた理由を知りたいわ
382:デフォルトの名無しさん
10/04/29 15:35:20
>「中置演算子のトランスレータ」として、どういう入力を受理するかを定義するBNF
結局、コレ言いたいだけちゃうんかと!最近BNF勉強しただけちゃうんかと!
383:デフォルトの名無しさん
10/04/29 15:40:33
「だけちゃうんかと」と言いたいだけだということはわかった。
384:デフォルトの名無しさん
10/04/29 15:41:34
>>381
「コード貼るなら、説明しろ」というのが真意
385:デフォルトの名無しさん
10/04/29 15:51:45
>>382
誰もそんなこと言ってないのにそう思うってことは、あなたに当てはまることだから?
386:デフォルトの名無しさん
10/04/29 15:53:07
BNFに固執してるから
387:デフォルトの名無しさん
10/04/29 15:55:16
BNFを書かないとyaccれないじゃん
388:デフォルトの名無しさん
10/04/29 15:56:32
いつその段階まで話が進んだんだよ。このスレにはまだ具体性の一つもねえよ
389:デフォルトの名無しさん
10/04/29 16:59:10
if then else節をどうにかしてほしいね
シーケンス上で分岐条件が整ったら即分岐を推奨
template機能でも駆使して成否混在したコードを一括記述できるとか
390:デフォルトの名無しさん
10/04/29 17:34:01
always @(posedge event)
begin
some_action();
end
391:デフォルトの名無しさん
10/04/29 17:39:45
>>386
BNFは説明の手段の一つ。
BNFに固執しているというよりは、BNFでも何でもいいから説明があった方がいいと言っている。
せっかくコードを書いたなら、その意図を読み手に誤解なく受け取ってもらった方が、書いた方も読む方も幸せでしょ?
コードを貼りたいだけなら別にそれ以上何も望まないけど。
392:デフォルトの名無しさん
10/04/29 17:47:10
だからコードを貼りたいだけってことだよ言わせんな恥ずかしい
説明が欲しいなら該当箇所を質問しろよ
393:デフォルトの名無しさん
10/04/29 17:50:56
>>392
だから、「CExpのパラメータの意味を教えてください」って質問だろ。
で、結局、その回答はBNFで書くのが一番楽だろう。
394:デフォルトの名無しさん
10/04/29 17:53:42
>>392
コードを貼りたいだけなら別に質問はないわ。コード自体に興味はないし。
395:デフォルトの名無しさん
10/04/29 17:55:06
BNFには興味があるのかw
396:デフォルトの名無しさん
10/04/29 17:57:19
>>395
コードが実現する機能には興味があった。
機能を説明することもできない貼りたいだけの捨てコードなら別にもうどうでもいいけど。
397:デフォルトの名無しさん
10/04/29 18:00:44
矛盾してるよ
398:デフォルトの名無しさん
10/04/29 18:03:21
>>390
こういう非同期をキャッチする仕組みいいね。
399:デフォルトの名無しさん
10/04/29 18:10:46
verilogもC以上に糞構文だけどな。
並列の記述には優れているよね。
400:デフォルトの名無しさん
10/04/29 18:20:53
つか、ハードウエアは基本並列だからなw
401:デフォルトの名無しさん
10/04/29 18:22:44
論理合成のためだけではなく、ソフトウェアの並列記述にも役に立つってこと。
402:デフォルトの名無しさん
10/04/29 18:24:49
CPUは原理的にはシリアルだよ?
403:デフォルトの名無しさん
10/04/29 18:30:33
だから機械語直接記述は最小限にしたい
404:デフォルトの名無しさん
10/04/29 20:04:07
>>402
直列に連なったステージが並列に動作するのがパイプライン
405:デフォルトの名無しさん
10/04/29 20:13:00
並列というならパイプラインよりスーパースケーラだな
>>402
当たり前だがチューリングマシンは基本直列だからねえ
つか、並列動作はやっぱ人間にとってわかりにくいから難しい
406:デフォルトの名無しさん
10/04/29 20:29:38
アセンブラ使わなくてパイプライン充填率高められる言語作ってくれよ
そしたら使ってやるよ
407:デフォルトの名無しさん
10/04/29 20:52:15
>>406
それは言語仕様じゃなくてコンパイラの範疇では
408:デフォルトの名無しさん
10/04/29 20:55:28
コンパイラじゃ限界あるだろ
409:デフォルトの名無しさん
10/04/29 21:39:56
それならそれが限界ということ。
CPUアーキテクチャを有効に活かすのはコンパイラの仕事。それを最もうまく行うのがコンパイラ。
410:デフォルトの名無しさん
10/04/29 21:48:34
それならアーキテクチャを変更すれば良いということ。
411:デフォルトの名無しさん
10/04/29 21:51:18
つまり、パンがないならお菓子を食べればいいじゃない。ということだな。
412:デフォルトの名無しさん
10/04/29 22:02:56
>>406
初代Pentiumのころはコンパイラがそれをやってたけど、今はCPUがそれやってくれるんだよね。
413:デフォルトの名無しさん
10/04/29 22:04:34
つまりマリー・アントワネット的転回ということだな
414:デフォルトの名無しさん
10/04/29 22:46:54
あとキャッシュ効率を自動で高められる言語がいいな
ブロッキングとかメンドイのなくしたい
415:デフォルトの名無しさん
10/04/29 22:48:45
>>414
JAVAのGCがそれをやってくれるってふれこみだったけど・・・・
416:デフォルトの名無しさん
10/04/29 22:55:05
Dにはあるが、ただのaliasではないtrue typedefが欲しい
Cだとdata abstructionの目的でopaque pointerを用いることは
よくあるが、true typedefがあれば、それを型安全に出来る
417:デフォルトの名無しさん
10/04/29 22:59:59
DからGCを省いたD♭を作って欲しいな。
418:デフォルトの名無しさん
10/04/29 23:02:47
data abstractionだな
Cなんて使ってると、どうもstructと書いてしまう
419:デフォルトの名無しさん
10/04/29 23:10:38
>>412
cpuはそんなことしてくんねーだろ
420:デフォルトの名無しさん
10/04/29 23:11:53
true typedefって何?
421:デフォルトの名無しさん
10/04/29 23:12:51
投機実行はやるけどちょっと違うな
422:デフォルトの名無しさん
10/04/29 23:13:45
>>419
最近のインテルプロセッサならx86をデコードしてuopsを実行するときにやってくれるよ。
423:デフォルトの名無しさん
10/04/29 23:15:13
パイプラインがわかってないんだろ
simdとかやってりゃ分かってくると思うんだが
いかにRSとかROBに処理をためないで計算実行するかをね
424:デフォルトの名無しさん
10/04/29 23:16:08
>>422
それじゃ依存チェンの解決されんだろが
425:デフォルトの名無しさん
10/04/29 23:16:55
>>423
何の話?
426:デフォルトの名無しさん
10/04/29 23:17:20
>>422
インテルのCPUは下品だからな
今でもパイプライン埋めるなんて静的な最適化は事前にやるのが効率いい
427:デフォルトの名無しさん
10/04/29 23:18:23
>>424
依存チェンって何?
428:デフォルトの名無しさん
10/04/29 23:19:29
>>427
ちょっと打鍵ミスったけど知らないなら教えてあげない
団子にでも聞け
429:デフォルトの名無しさん
10/04/29 23:20:56
>>428
じゃあ別にいいわ。
>>424はバグ入りの無意味な文章ってことね。
430:デフォルトの名無しさん
10/04/29 23:21:28
いやパイプライン充填率を高める超重要なこと
431:デフォルトの名無しさん
10/04/29 23:22:19
424を理解できないと高速プログラミングは実質不可だよ
432:デフォルトの名無しさん
10/04/29 23:23:31
誤字なら訂正すればいいのに。何意地になってるんだろうね。
433:デフォルトの名無しさん
10/04/29 23:23:39
ま、超高速をうたったスレなんで書いたけど
超高速が不要なら無視してもいいよ
434:デフォルトの名無しさん
10/04/29 23:24:21
煽るだけで中身がないのが2ちゃん
435:デフォルトの名無しさん
10/04/29 23:27:20
これ隅々まで読めばわかるよ
URLリンク(download.intel.com)
436:デフォルトの名無しさん
10/04/29 23:27:33
それでもたまに煽りの中に発見があったりするからね。それを拾っていこう。
437:デフォルトの名無しさん
10/04/29 23:33:03
ひまなんだなw
438:デフォルトの名無しさん
10/04/29 23:34:55
フルの仕様ではGC(かそれに相当する機能)が有りだけど、GCを使わないようにも出来て
GCを使わない場合でもGCがある場合とそれほど違和感ないようにできないだろうか。
439:デフォルトの名無しさん
10/04/29 23:39:10
C++でnewオーバーロードでGCライブラリ呼び出しにすればいいだけじゃないか?
deleteのあつかいは難しいが単純にメモリ解放だけしないということで
440:デフォルトの名無しさん
10/04/29 23:42:07
普段はGCを使っているプログラマが、GCなし環境で開発をしなければならなくなったときに、勘違いして致命的なバグを作りこまないようにしたい。
バグがあってもそれをコンパイラで検出できればいい。
newでGCするようにしてそれを達成できるかな。
441:デフォルトの名無しさん
10/04/29 23:46:03
いろいろやりようはあるよ。
でも実行時検知だけじゃなくコンパイラでって話ならかなり厳しい。
かなり文法や構文にルール導入すればできるだろうけど
442:デフォルトの名無しさん
10/04/30 00:20:36
C++/CLIのgcnewは、>>438で有用だから採用したい。
443:デフォルトの名無しさん
10/04/30 00:23:57
gcnewとnewを使い分けるのが美しくないよね。でも仕方無いか。
444:デフォルトの名無しさん
10/04/30 00:42:23
>>443
newとgcnewのポインタ間に代入互換性が無いんだぜ。仕方ないで済ませられないほど困る。
445:デフォルトの名無しさん
10/04/30 02:06:38
GCとか普通にいらんだろ
446:デフォルトの名無しさん
10/04/30 02:10:26
このスレで話題にしたいような低レベル言語にはいらんな
中~高レベルには必須だな
447:デフォルトの名無しさん
10/04/30 05:59:45
そろそろ己の馬鹿自慢合戦は止めようぜ
折角GWに入ったんだから有意義に行こう
448:デフォルトの名無しさん
10/04/30 07:46:41
Garbage Week
449:デフォルトの名無しさん
10/04/30 12:42:21
GC が要らないレベルなら C/C++ で十分だな。
450:デフォルトの名無しさん
10/04/30 16:32:34
GC有り言語とGC無し言語ではメモリに関する考え方がまるで違うから、
学習者からすれば一つの言語に混在するのは良くないんじゃないかな。
低レベルならC/C++でいいけど、
何でも有りすぎて「やっちゃいけない」ことが多すぎるから、
できることを減らしていいからミスが少なくなるようなコンパクトな文法がいいな。
標準ライブラリの整理(scanfなんかいらない)や充実も必要に思う。
良い言語の条件は、
・読みやすい・メンテしやすいこと(他人の書いたperlコードなんて読みたくない)
・ライブラリが充実してること(画像読み取りぐらいは標準ライブラリに欲しい)
・熟練者じゃなくてもミスのないプログラムが書けること
なんじゃないかなと思う。
451:デフォルトの名無しさん
10/04/30 16:36:26
見た目は何もかわらないんだけど、
宣言の時に処理を埋め込むことができるような指示子を持つ言語にすればGC言語にも変身できるんじゃないの?
452:デフォルトの名無しさん
10/04/30 16:45:00
>>451
Managed C++ とか?
453:デフォルトの名無しさん
10/04/30 17:15:12
このスレ、全般的に超高速にあまり触れていないのは何故?
分かる人いないの?
454:デフォルトの名無しさん
10/04/30 17:34:59
高速を要求される言語にGCは向かないとは思うよ。
あと、変数には型がある方がいいな。z=x+yと書かれても、
実行時までx,yがintかdoubleか文字列かわからない言語は高速にはならんだろ。
455:デフォルトの名無しさん
10/04/30 18:27:23
Part1の>>1の書き込みからするに、C並みに速い程度で十分だと思われ。
スレタイに囚われて、Cより速い言語とか考えるから、CPU固有言語君とか出てくる。
456:デフォルトの名無しさん
10/04/30 20:46:54
◆新言語の位置づけ◆
Ruby, Python, Haskell, OCaml, Scala, Clojure, Erlang, …
烏合のごとく言語が生まれてきているのにどれも似たようなLLばかりで、ハードウェア制御のような低レベル処理を行える言語が無い。
一方、Cは40年使われ続けてきているわけで、そろそろ置き換えられる言語が出てきてもいいだろう。
そこで、C程度の性能が出せて、Cが使われている分野を全てカバーでき、
過去の互換性に囚われて構文を妥協せず、今時の機能を使えてCよりもプログラミングしやすい新言語を作りたい。
457:デフォルトの名無しさん
10/04/30 20:53:09
>>456
Cのどこが悪いかを述べよ
458:デフォルトの名無しさん
10/04/30 20:55:13
>>457
デストラクタが無い。
459:デフォルトの名無しさん
10/04/30 21:41:09
>>458
クラスとヒープがないと意味ないだろ。
460:デフォルトの名無しさん
10/04/30 22:09:21
>>459
じゃあ、それも
461:デフォルトの名無しさん
10/04/30 22:12:56
>>460
初期のC++じゃない
462:デフォルトの名無しさん
10/04/30 22:18:11
>>459
そんなことはない。
自動変数の寿命が尽きる時に呼び出されるだけでも意味がある。
463:デフォルトの名無しさん
10/04/30 22:21:57
>>462
ヒープに確保した場合は呼ばれないのか。
それに意味があるとは思えないな。
464:デフォルトの名無しさん
10/04/30 22:34:34
Cの場合、
ヒープならmalloc-freeの組が必ずあるからfreeをフックすれば、後始末ができるが
スタックはそれができない。
スタックの後始末をするためにデストラクタに相当する機能が欲しい。
465:デフォルトの名無しさん
10/04/30 22:36:12
ヒープ使うのに抵抗ないならスタック使わなければ問題ない
466:デフォルトの名無しさん
10/04/30 22:38:04
Java系はそもそもスタックにインスタンスを生成できないな
467:デフォルトの名無しさん
10/04/30 22:38:07
ヒープ使うのに抵抗がある。
468:デフォルトの名無しさん
10/04/30 22:39:10
スタックサイズも意識してね
469:デフォルトの名無しさん
10/04/30 22:39:53
そうだね。
ということで、デストラクタは必要。
470:デフォルトの名無しさん
10/04/30 22:41:23
いらねーよ。スタックでしか自動化のメリットない。
ヒープは自前で呼び出す必要性がある。対象性なさ杉。
471:デフォルトの名無しさん
10/04/30 22:42:16
>>464
ヒープとスタックで別の動作をするものが役に立つとは思えないし、分かりにくくなるだけだと思うが、実装は簡単だな。
472:デフォルトの名無しさん
10/04/30 22:54:32
>>456
D
473:デフォルトの名無しさん
10/04/30 22:55:59
>>471
同じ動作でいいじゃん
474:デフォルトの名無しさん
10/04/30 22:57:55
こいつ自分の言ってる事がわかってない
475:デフォルトの名無しさん
10/04/30 22:59:38
オブジェクトの破壊ではなくスコープの変化をフックすると考えればいい
無限エクステントを実装するのに使えそうだし
476:デフォルトの名無しさん
10/04/30 23:02:24
C++と同じように、寿命が尽きた時に呼び出される関数が欲しいって言ってるだけでしょ
ヒープとスタックで別の動作とか、そんな話どこから出てきたんだか
477:デフォルトの名無しさん
10/04/30 23:04:58
こいつ自分の言ってる事がわかってない
478:デフォルトの名無しさん
10/04/30 23:11:55
Javaには君が望むようなデストラクタはないな
479:デフォルトの名無しさん
10/04/30 23:14:04
Javaは目指さなくていい
480:デフォルトの名無しさん
10/04/30 23:14:34
ようは理解できないと
481:デフォルトの名無しさん
10/04/30 23:15:24
C#のusingは有用だから採用したい。
482:デフォルトの名無しさん
10/04/30 23:16:25
Cにお前らの望むもの追加したら、C++になったでござる
483:デフォルトの名無しさん
10/04/30 23:17:09
C++の機能を今風の構文で実現できるならそれでもいいけどな
484:デフォルトの名無しさん
10/04/30 23:18:10
>>481
それを実現したいなら、先に例外だな。
485:デフォルトの名無しさん
10/04/30 23:19:21
例外はもう少しエレガントにならんのかな
try-catchはカッコ悪い
486:デフォルトの名無しさん
10/04/30 23:21:57
次ぎに何時規制になるか、分からないので書きたいことを書いておく。
1、言語の設計とコンパイラの設計は違うぞ。
2、BNF出して議論するのは良いと思うけど、もう少し煮詰まってからだと思う。
3、デストラクタの議論は何かよく分からん。後、スタックというのは、C言語で
採用されたメモリーの使用方法で、コボルにはスタックという概念が無かったし。
非スタックというアプローチが有効だとは思わないが、それも一考の価値は
有ると思う
4、C言語の悪いところは、プリプロセッサとか色々。
487:デフォルトの名無しさん
10/04/30 23:23:21
以下、構文の美しさの議論から始まって、Lisp厨やらJava厨やらLL厨やら割り込んで
最後にはCPU固有言語君が湧いてくるいつもの無限ループが始まります。
↓
488:デフォルトの名無しさん
10/04/30 23:28:43
Cがスタックを採用したのは確かにその通りだが、Cが存在する以前からスタックはあったし
PUSH,POPはCPUの基本的な命令だから、スタックはサポートしたいだろう。
489:デフォルトの名無しさん
10/04/30 23:30:01
>>484
例外って、sjljの敷居を下げてモラルハザードを起こすだけの存在だよね
490:デフォルトの名無しさん
10/04/30 23:30:47
sjljって何?
491:デフォルトの名無しさん
10/04/30 23:34:45
>>482
まぁ、結局のところそうなんだけど、C++は少し読みにくいので、
機能的にはC++から多重継承やフレンドを取り除いて、C++で出来る事は
全部出来るけど、読みやすく、書きやすく、
その上システムレベルのプログラミングもやりやすい、
ってのがお年頃だと思う。
そうそうそう言えば、
二進数 0b00001111
八進数 Oc0017
10進数 0d15
16進数 0xF
または
二進数 Bi00000001111
八進数 Oc017
10進数 De015
16進数 Hx0F
492:デフォルトの名無しさん
10/04/30 23:41:28
任意のN進数の整数リテラルがあってもいいかな。
493:デフォルトの名無しさん
10/04/30 23:47:06
>>486
> 1、言語の設計とコンパイラの設計は違うぞ。
確かに。
このスレッドは前者、「言語の設計」をするスレッドである、ということを明確にしておきたいね。