【超高速】C/C++に代わる低級言語を開発したい 5
■ このスレッドは過去ログ倉庫に格納されています
0001デフォルトの名無しさん
2010/05/07(金) 11:36:35しかし、2010年の今、もしもCが発明されていなかったとして、低レベルなシステム開発のためのプログラミング言語を
新たに作るとしたら、Cとは違う言語になるだろう。少なくとも、全く同じにはならないはずだ。
そこで、このスレッドでは、
低レベルなシステム開発のためのプログラミング言語
を一から考えたい。
既存の言語を使って何かをすることが目的ではなく、新たなプログラミング言語を考えることが目的であるから、
「既存のXX言語を使えばいい。」という類の発言は無意味である。
「既存のYY言語のZZ機能は、WWと言う点で有用だから採用したい。」という発言は歓迎だ。
現代の一流のプログラミング言語研究者が、最先端の研究成果を盛り込んで、
一から低レベルなシステム開発のためのプログラミング言語を作るとしたら、どのような言語になるだろうか、
という観点で考えたい。
◆前スレ
【超高速】C/C++に代わる低級言語を開発したい 4
http://pc12.2ch.net/test/read.cgi/tech/1271980246/
0232デフォルトの名無しさん
2010/05/08(土) 18:39:48デザインパターンは普段当たり前のように使っているものでブームではないはずなんだが。
デザインパターンとクラウドは直交する概念
0233デフォルトの名無しさん
2010/05/08(土) 18:40:17scheme
0234デフォルトの名無しさん
2010/05/08(土) 18:42:53賢い発言してくれよ
0235デフォルトの名無しさん
2010/05/08(土) 18:43:37どこがクリティカルでどこがキチガイなんだ。
JavaやC#では「デザインパターンありき」で開発するからどこでメモリ解放するかを
きっちり意識する必要はないんだが。staticイニシャライザやProxyパターンを使わないでループ内でしつこく無駄にnewしてるわけでもなかろうし。
むしろぞんなメモリのことでキチガイのように無駄に悩む必要がないからデザインパターンを使えるわけだが。
0236デフォルトの名無しさん
2010/05/08(土) 18:51:39DivideByZeroExceptionを実装する代わりに
MATLABのように
0/1
と入力すると
Inf (無限大)と出力でもする仕様にするのか?
pow(-1,1/2) (-1の平方根)と入力するとNaNと出力せずに
i (虚数)
と出力する複素数型仕様にでもするのか?
0237デフォルトの名無しさん
2010/05/08(土) 18:52:22C#、PHPで導入されているが何か
0238デフォルトの名無しさん
2010/05/08(土) 18:53:49スレタイにC++が入ってるのがそもそも良くないんだが
0239デフォルトの名無しさん
2010/05/08(土) 18:58:40新C言語を作ろう
http://pc12.2ch.net/test/read.cgi/tech/1185010023/
おまえがこっちでやればいいだろ
0240デフォルトの名無しさん
2010/05/08(土) 19:05:23Lisp族でマクロで実現されているものはライブラリというより文法の一部だろ。
0241デフォルトの名無しさん
2010/05/08(土) 19:06:40まずは既存の言語で優れたライブラリを作ってみたらどうだ?
0242デフォルトの名無しさん
2010/05/08(土) 19:13:27低級言語でも例外処理とオブジェクト指向を適用しよう
というのは無理か
0243デフォルトの名無しさん
2010/05/08(土) 19:16:150244デフォルトの名無しさん
2010/05/08(土) 19:21:27C++の機能をほとんど使わずにな
0245デフォルトの名無しさん
2010/05/08(土) 19:24:12ファームウェア〜コンソールアプリもしくはサーバーサイドアプリくらいでいいよな?
0246デフォルトの名無しさん
2010/05/08(土) 19:25:21ジョークのストラウストラップインタビューにあるように、Xウィンドウシステムのフレームワークが
そうだし、解説した本も数冊ぐらいある。
FORTHでOOをやったという話もあるぞ。
0247デフォルトの名無しさん
2010/05/08(土) 19:28:040248デフォルトの名無しさん
2010/05/08(土) 19:29:470249デフォルトの名無しさん
2010/05/08(土) 19:30:03Cでもオブジェクト指向は可能だろうよ。
めんどくさくてやってられないだけで
0250デフォルトの名無しさん
2010/05/08(土) 19:33:25言語仕様を変えずに実現できれば、ライブラリで可能ということになるでしょう。
文法が変えられるならそれだけ言語のライブラリで出来ることが増えるだけなのに
反則と思ってもらってもなぁ。
>>242
C++で出来てるから無理ではないけど、C言語レベルの話が
固まっていないうちからオブジェクト指向を持ち出すべきじゃないでしょう。
0251デフォルトの名無しさん
2010/05/08(土) 19:39:24ゼロオーバーヘッドにできるの?
0252デフォルトの名無しさん
2010/05/08(土) 19:43:550253デフォルトの名無しさん
2010/05/08(土) 19:44:540254デフォルトの名無しさん
2010/05/08(土) 20:02:34賢いなら
例外がどういう実装になるか
エラー処理として使う是非
普通にエラー返すのに比べての利点も教えてくれよ
0255デフォルトの名無しさん
2010/05/08(土) 20:04:52ifがいるだろ。
0256デフォルトの名無しさん
2010/05/08(土) 20:06:040257デフォルトの名無しさん
2010/05/08(土) 20:18:15C++使ったことない奴レベルが低すぎる
0258デフォルトの名無しさん
2010/05/08(土) 20:22:01setjmpとマクロで似たことできるし
at exitみたいなんでランタイムでひっかけてもいいかな
>>255みたいにエラー処理サボって大域脱出のためならむしろ有害w
ま、完全に無くすのは無理だとは思ってるが
カジュアルに使うならあかんよw
0259デフォルトの名無しさん
2010/05/08(土) 20:25:560260デフォルトの名無しさん
2010/05/08(土) 20:29:370261デフォルトの名無しさん
2010/05/08(土) 20:30:14また、アンチgoto論者にも好まれる。
0262デフォルトの名無しさん
2010/05/08(土) 20:32:20解放忘れは、例外がない場合の方が冒しやすい。
0263デフォルトの名無しさん
2010/05/08(土) 20:33:04いいから作ってこいよ
0264デフォルトの名無しさん
2010/05/08(土) 20:33:47RAIIって全然普及してないんだな。
0265デフォルトの名無しさん
2010/05/08(土) 20:36:070266デフォルトの名無しさん
2010/05/08(土) 20:52:09いいなぁ、みたいな話だったんだろうな。
0267デフォルトの名無しさん
2010/05/08(土) 20:52:30>261
契約による設計かね?それもけっこう重たいよ。
まあ、(assertみたいに)コンパイルオプションで無効にできるようにするとか、関数の戻り値の契約と合致する場合は
動的チェックを省略するとか色々と改善の余地はあるけど。
0268デフォルトの名無しさん
2010/05/08(土) 20:58:23スマートポインタどうしようもなくなってしまうよ問題
0269デフォルトの名無しさん
2010/05/08(土) 21:05:25スコープ抜けるときに後始末をするようにするとか
0270デフォルトの名無しさん
2010/05/08(土) 21:11:44例外とかGCとかどんだけアフォな話してるのが理解できるから
0271デフォルトの名無しさん
2010/05/08(土) 21:16:35フリースタンディングな環境ではわざわざ例外とかGCとか
作ってられないと?
0272デフォルトの名無しさん
2010/05/08(土) 21:25:04OS作れるような言語と言っているのに、OSに依存するような機能を入れようとしている。
0273デフォルトの名無しさん
2010/05/08(土) 21:30:30GCはライブラリに依存とはいえCPUごとに異なるので作るの大変。
それはOSの仕事に近い部分と。それは分かります。
0274デフォルトの名無しさん
2010/05/08(土) 21:41:37例外とGCはシングルタスクの殻に閉じこもってる
0275デフォルトの名無しさん
2010/05/08(土) 21:53:230276デフォルトの名無しさん
2010/05/08(土) 21:55:22必須だよ。
0277デフォルトの名無しさん
2010/05/08(土) 22:13:48なぜGCにOSが必須なんですか?
0278デフォルトの名無しさん
2010/05/08(土) 22:19:19掴んでたメモリを開放する処理は必要
一種のGCみたいなものになる。
0279デフォルトの名無しさん
2010/05/08(土) 22:26:42だいたいOSの存在しない世界って、基本的にゼロ番地から全部自分のモンだろ
行儀の悪いアプリとか何だそりゃって話だ
モダンなGCは専用のタスクやスレッド裏で走らせるのが普通だと思うが
N88BASICとかにもガーベージコレクションはあっただろ
0280デフォルトの名無しさん
2010/05/08(土) 22:51:44GCどころかヒープでさえOS必須だ。ヒープなしでGCあっても意味ないだろ。
0281デフォルトの名無しさん
2010/05/08(土) 22:59:58釣り?
OSのある世界しか知らない?
言語作ろうなんて1億年早い?
0282デフォルトの名無しさん
2010/05/08(土) 23:04:16普通のOSならプロセスのリソースは管理されてるからな
またちょっと別だよ
RTOSは別だがありゃマルチスレッドだからな
0283デフォルトの名無しさん
2010/05/08(土) 23:09:01把握してないと開放できないとかあるとか?
0284デフォルトの名無しさん
2010/05/08(土) 23:20:48を越えれるのかな
0285デフォルトの名無しさん
2010/05/08(土) 23:24:38ヒープが何かを知ってからそういうことを言え。
0286デフォルトの名無しさん
2010/05/08(土) 23:29:17OSがある世界ならヒープの元を仮想アドレスで割り付ける。
物理メモリの管理は必要だけど
アプリのヒープ自体はOSからは大して意味ないからね
ま、あんまネタまきすぎるのもアレだが
あんま低レベルでもないがValaとGenieはどうよ
0287デフォルトの名無しさん
2010/05/08(土) 23:30:27「OSは必要だよ」厨はスルーでよい
0288デフォルトの名無しさん
2010/05/08(土) 23:32:530289デフォルトの名無しさん
2010/05/08(土) 23:33:15なんでOSがC++で書かれていないのかも分かっていないな。
0290デフォルトの名無しさん
2010/05/08(土) 23:34:28常識的な知識位しかないね
組み込み屋だからOSなしの環境に
libcサブセットのmallocとかprintf位は作ったことあるがねw
当然だがリセットから初期化してヒープの準備とかもなw
0291デフォルトの名無しさん
2010/05/08(土) 23:35:01そういうのはヒープ=スタックを除く物理メモリのこと。
GCを単体のタスクに対して行うか、全体に対して行うか。
前者ならOSは不要、後者ならOS上に乗っかってる。
0292デフォルトの名無しさん
2010/05/08(土) 23:36:39C++で書かれてますって自慢してたOS、昔あったような
世間知らずさん
0293デフォルトの名無しさん
2010/05/08(土) 23:39:32それはOSのメモリ管理のところを作っているじゃないか。
0294デフォルトの名無しさん
2010/05/08(土) 23:40:09GCにOSは不要ですよー
0295デフォルトの名無しさん
2010/05/08(土) 23:41:35別に困らないよ。
単に鶏が先か卵が先かという話と同じで、どちらかの完全な実装が先に存在しなくても全く問題ない。
少しずつ交互に積み上げていけばおk。
0296デフォルトの名無しさん
2010/05/08(土) 23:42:57そもそもGCはスレ違いなんだよ
0297デフォルトの名無しさん
2010/05/08(土) 23:45:28そういうで意味ならWindowsだってC++で書かれているし、NeXTはObjective-Cで書かれている。
その下により低水準のOSがいる。
0298デフォルトの名無しさん
2010/05/08(土) 23:49:45確かに1970年代の低級言語にGCはなかったが
2010年だからということで揉めてる
0299デフォルトの名無しさん
2010/05/08(土) 23:53:240300デフォルトの名無しさん
2010/05/08(土) 23:53:53>「既存のXX言語を使えばいい。」という類の発言は無意味である。
0301デフォルトの名無しさん
2010/05/08(土) 23:55:590302デフォルトの名無しさん
2010/05/08(土) 23:56:260303デフォルトの名無しさん
2010/05/08(土) 23:57:07GC無しで使いたいことは多いはずなので
言語仕様のレベルでGCを前提にするのはやりすぎだろ
GC前提にすることで色々楽チンになって
クロージャのようなオサレ機能が使えるとしても我慢汁
で、言語仕様のレベルでGCを前提にしないならライブラリで、ということになるが
それだけならCでも出来る
malloc()ではなくてGC_malloc()みたいなのを呼べばいいだけだ
つまりここで話すような事柄じゃない
0304デフォルトの名無しさん
2010/05/08(土) 23:57:29C++/CLI
0305デフォルトの名無しさん
2010/05/08(土) 23:59:25単に鶏が先か卵が先かという話と同じで、どちらかの完全な実装が先に存在しなくても全く問題ない。
少しずつ交互に積み上げていけばおk。
0306デフォルトの名無しさん
2010/05/09(日) 00:02:52new が使えないC++は、もはやC++とは呼べない。
0307デフォルトの名無しさん
2010/05/09(日) 00:02:55低水準言語という観点から言えば、2010年だろうが何だろうが
除算無しで使いたいことは多いはずなので
言語仕様のレベルで除算を前提にするのはやりすぎだろ
低水準言語という観点から言えば、2010年だろうが何だろうが
goto無しで使いたいことは多いはずなので
言語仕様のレベルでgotoを前提にするのはやりすぎだろ
低水準言語という観点から言えば、2010年だろうが何だろうが
例外無しで使いたいことは多いはずなので
言語仕様のレベルで例外を前提にするのはやりすぎだろ
0308デフォルトの名無しさん
2010/05/09(日) 00:06:18別に呼びたくなければ呼ばなくてもいい。
C++を作る過程で「new が使えないC++」を使って何の問題があるんだ?
すべてが常に完全である必要はない。
言語は単なる手段だ。使いやすいように使えればそれでいい。
0309デフォルトの名無しさん
2010/05/09(日) 00:07:11馬鹿はコピペぐらいしか脳が無いのか
言語仕様のレベルでGC前提なら、GCを動かすまではその言語は使えないということ
だろが
それだとCより用途が確実に狭まる、言い換えれば上の層の言語になっちまうだろ
メモリマネージャみたいなのに頼れない場所でも貧者のmalloc()を自分で書いて
使えるのがCだ
0310デフォルトの名無しさん
2010/05/09(日) 00:07:28だがちょっと待ってほしい
既存の言語の上に何かを積み上げるのは無意味ではないのか
0311デフォルトの名無しさん
2010/05/09(日) 00:08:51operator newは自分で実装できるし
placement newもあるだろ
デフォルトのアロケータに頼り切ったような「普通の」C++コードを
そのまま使えないだけだ
0312デフォルトの名無しさん
2010/05/09(日) 00:10:18newのお勉強スレ行ってこい
0313デフォルトの名無しさん
2010/05/09(日) 00:10:34>言語仕様のレベルでGC前提なら、GCを動かすまではその言語は使えないということ
それはない。
言語仕様をすべて実装しなければ動かないのであれば、動くC++処理系はこの世に存在しない。
言語仕様のフル機能を備えたC++は存在しないからな。
0314デフォルトの名無しさん
2010/05/09(日) 00:10:47それじゃ、C++使っている意味ないだろ。
0315デフォルトの名無しさん
2010/05/09(日) 00:11:31そう。
だから新言語の上に新言語を積み上げる。
0316デフォルトの名無しさん
2010/05/09(日) 00:13:570317デフォルトの名無しさん
2010/05/09(日) 00:14:43せめてD&Eくらいは読んでいて欲しい
0318デフォルトの名無しさん
2010/05/09(日) 00:16:29は?何で無いんだよ
テンプレートだのクラスだのといった便利な抽象化機能が普通に使えるぞ
C++の規格に盛り込まれているfreestandingの意味も知らない
ド厨房はすっこんでろよ
0319デフォルトの名無しさん
2010/05/09(日) 00:19:34そんな無駄レス書き込んでる暇があったら、D&Eを読んだ成果を披露しろ
0320デフォルトの名無しさん
2010/05/09(日) 00:22:040321デフォルトの名無しさん
2010/05/09(日) 00:34:130322デフォルトの名無しさん
2010/05/09(日) 00:35:440323デフォルトの名無しさん
2010/05/09(日) 00:40:280324デフォルトの名無しさん
2010/05/09(日) 00:43:250325デフォルトの名無しさん
2010/05/09(日) 00:43:590326デフォルトの名無しさん
2010/05/09(日) 00:45:240327デフォルトの名無しさん
2010/05/09(日) 00:57:44OSを作るような場合、コンパイラも自前である程度作る。
もちろん、全てを一から作るわけではなく、既存のコンパイラをポーティングしたりするが、その作業は自前で行う。
そのとき、フル機能のコンパイラを作ってから、OSを作りじめるなんてことはしない。
コンパイラを一部作り、OSを一部作り、コンパイラを一部作り、OSを一部作り、を繰り返して完成させる。
【第Nフェーズ】
コンパイラ係:とりあえず、制御系はforだけ作りました。ローカル変数はまだダメです。グローバル変数でやってください。
OS係:ローカル変数まだとかマジかよ。。まあいいや。次回までにお願い。
コンパイラ係:了解しました。ところで、GC作りたいんですけど、ヒープ周りの実装できてます?
OS係:ごめん、ヒープはもう少しかかる。先に例外やっといて。
コンパイラ係:はい。それじゃあ、ローカル変数と一緒に例外やっときます。
【第N+1フェーズ】
コンパイラ係:ローカル変数と例外対応しましたよ。
OS係:サンキュ。ところで、変数名は8文字以上だとエラー出るんだけど。
コンパイラ係:ああ、それ現在の仕様です。次までに言語仕様通り最低256文字まで使えるようにしておきます。
OS係:頼むわ。ああ、ヒープ使えるようにしたから、GC作っちゃって。
コンパイラ係:はい。やっておきます。
0328デフォルトの名無しさん
2010/05/09(日) 00:58:410329デフォルトの名無しさん
2010/05/09(日) 01:03:21Cなら既存のコンパイラが普通に使えるっつーの
0330デフォルトの名無しさん
2010/05/09(日) 01:04:040331デフォルトの名無しさん
2010/05/09(日) 01:13:59> CPUは既にあるものを使うし
言語仕様に「既存のCPUを使うこと」って文言を入れるの?
なんたるCPU依存言語ww
■ このスレッドは過去ログ倉庫に格納されています