トップページ⇒tech
983コメント296KB

【超高速】C/C++に代わる低級言語を開発したい 5

■ このスレッドは過去ログ倉庫に格納されています
0001デフォルトの名無しさん2010/05/07(金) 11:36:35
70年代、Cは生まれ、それから30余年、現代においてもなお、低レベルなシステム開発に広く使われている。

しかし、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
>>202
デザインパターンは普段当たり前のように使っているものでブームではないはずなんだが。
デザインパターンとクラウドは直交する概念
0233デフォルトの名無しさん2010/05/08(土) 18:40:17
>224
scheme
0234デフォルトの名無しさん2010/05/08(土) 18:42:53
>>231
賢い発言してくれよ
0235デフォルトの名無しさん2010/05/08(土) 18:43:37
>>205
どこがクリティカルでどこがキチガイなんだ。
JavaやC#では「デザインパターンありき」で開発するからどこでメモリ解放するかを
きっちり意識する必要はないんだが。staticイニシャライザやProxyパターンを使わないでループ内でしつこく無駄にnewしてるわけでもなかろうし。
むしろぞんなメモリのことでキチガイのように無駄に悩む必要がないからデザインパターンを使えるわけだが。
0236デフォルトの名無しさん2010/05/08(土) 18:51:39
>>217
DivideByZeroExceptionを実装する代わりに
MATLABのように 
0/1
と入力すると
Inf (無限大)と出力でもする仕様にするのか?
pow(-1,1/2) (-1の平方根)と入力するとNaNと出力せずに
i (虚数)
と出力する複素数型仕様にでもするのか?
0237デフォルトの名無しさん2010/05/08(土) 18:52:22
>>222
C#、PHPで導入されているが何か
0238デフォルトの名無しさん2010/05/08(土) 18:53:49
話が発散するから「低級言語」として適当でない話題は他所でやれよ
スレタイにC++が入ってるのがそもそも良くないんだが
0239デフォルトの名無しさん2010/05/08(土) 18:58:40
>>238
新C言語を作ろう
http://pc12.2ch.net/test/read.cgi/tech/1185010023/

おまえがこっちでやればいいだろ
0240デフォルトの名無しさん2010/05/08(土) 19:05:23
>>233
Lisp族でマクロで実現されているものはライブラリというより文法の一部だろ。
0241デフォルトの名無しさん2010/05/08(土) 19:06:40
ライブラリで出来るなら
まずは既存の言語で優れたライブラリを作ってみたらどうだ?
0242デフォルトの名無しさん2010/05/08(土) 19:13:27
>>238
低級言語でも例外処理とオブジェクト指向を適用しよう
というのは無理か
0243デフォルトの名無しさん2010/05/08(土) 19:16:15
いまどきは組み込みですらC++使っているから
0244デフォルトの名無しさん2010/05/08(土) 19:21:27
>>243
C++の機能をほとんど使わずにな
0245デフォルトの名無しさん2010/05/08(土) 19:24:12
とりあえずここらでターゲットを明確にしておいたほうがいい。

ファームウェア〜コンソールアプリもしくはサーバーサイドアプリくらいでいいよな?
0246デフォルトの名無しさん2010/05/08(土) 19:25:21
C言語でもオブジェクト指向プログラミングは可能だし。
ジョークのストラウストラップインタビューにあるように、Xウィンドウシステムのフレームワークが
そうだし、解説した本も数冊ぐらいある。

FORTHでOOをやったという話もあるぞ。
0247デフォルトの名無しさん2010/05/08(土) 19:28:04
デバドラなんて昔からOOチックだしな
0248デフォルトの名無しさん2010/05/08(土) 19:29:47
組み込みの幅は広いからな
0249デフォルトの名無しさん2010/05/08(土) 19:30:03
そりゃ自動でやってくれることを手動でやれば
Cでもオブジェクト指向は可能だろうよ。
めんどくさくてやってられないだけで
0250デフォルトの名無しさん2010/05/08(土) 19:33:25
>>240
言語仕様を変えずに実現できれば、ライブラリで可能ということになるでしょう。
文法が変えられるならそれだけ言語のライブラリで出来ることが増えるだけなのに
反則と思ってもらってもなぁ。

>>242
C++で出来てるから無理ではないけど、C言語レベルの話が
固まっていないうちからオブジェクト指向を持ち出すべきじゃないでしょう。

0251デフォルトの名無しさん2010/05/08(土) 19:39:24
例外ライブラリでやってなんかメリットあるのか?
ゼロオーバーヘッドにできるの?
0252デフォルトの名無しさん2010/05/08(土) 19:43:55
あほが多用しなくなる
0253デフォルトの名無しさん2010/05/08(土) 19:44:54
おまえがあほだろw
0254デフォルトの名無しさん2010/05/08(土) 20:02:34
>>253
賢いなら
例外がどういう実装になるか
エラー処理として使う是非
普通にエラー返すのに比べての利点も教えてくれよ
0255デフォルトの名無しさん2010/05/08(土) 20:04:52
普通にエラー返すんだったら、全部返り値チェックして、そのあとの処理をスキップする
ifがいるだろ。
0256デフォルトの名無しさん2010/05/08(土) 20:06:04
ライブラリで例外作ってから来てくれよ
0257デフォルトの名無しさん2010/05/08(土) 20:18:15
タイトルにCって入れたの間違いだったな
C++使ったことない奴レベルが低すぎる
0258デフォルトの名無しさん2010/05/08(土) 20:22:01
>>256
setjmpとマクロで似たことできるし
at exitみたいなんでランタイムでひっかけてもいいかな

>>255みたいにエラー処理サボって大域脱出のためならむしろ有害w

ま、完全に無くすのは無理だとは思ってるが
カジュアルに使うならあかんよw
0259デフォルトの名無しさん2010/05/08(土) 20:25:56
例外で処理をすっ飛ばすのを「エラー処理をさぼって」とかwwwwww
0260デフォルトの名無しさん2010/05/08(土) 20:29:37
で、すっ飛ばしてリソース漏れを起こすんですね。わかります。
0261デフォルトの名無しさん2010/05/08(土) 20:30:14
関数(メソッド)の引数が異常な場合は例外を投げるという仕様で、いろいろなものがすっきりする。
また、アンチgoto論者にも好まれる。
0262デフォルトの名無しさん2010/05/08(土) 20:32:20
>>260
解放忘れは、例外がない場合の方が冒しやすい。
0263デフォルトの名無しさん2010/05/08(土) 20:33:04
>>258
いいから作ってこいよ
0264デフォルトの名無しさん2010/05/08(土) 20:33:47
ところがどっこい、例外で飛ばさずに全部いちいち処理せよと仰る御仁が現れたわけだ。
RAIIって全然普及してないんだな。
0265デフォルトの名無しさん2010/05/08(土) 20:36:07
そりゃRAIIなんて使ってるメジャーな言語はC++ぐらいだからな
0266デフォルトの名無しさん2010/05/08(土) 20:52:09
カリー化した関数にjavaのアノテーションをつけられたら、
いいなぁ、みたいな話だったんだろうな。
0267デフォルトの名無しさん2010/05/08(土) 20:52:30
RAIIと言わずに「オブジェクトの所有権をハッキリさせる」とすれば良いよ。

>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
>>270
フリースタンディングな環境ではわざわざ例外とかGCとか
作ってられないと?

0272デフォルトの名無しさん2010/05/08(土) 21:25:04
>>271
OS作れるような言語と言っているのに、OSに依存するような機能を入れようとしている。
0273デフォルトの名無しさん2010/05/08(土) 21:30:30
例外はCPUに依存するのではないでしょうか?
GCはライブラリに依存とはいえCPUごとに異なるので作るの大変。
それはOSの仕事に近い部分と。それは分かります。
0274デフォルトの名無しさん2010/05/08(土) 21:41:37
むしろマルチタスクとかページングとか作るのが簡単だったりして
例外とGCはシングルタスクの殻に閉じこもってる
0275デフォルトの名無しさん2010/05/08(土) 21:53:23
GCはOS必須ではないがな
0276デフォルトの名無しさん2010/05/08(土) 21:55:22
>>275
必須だよ。
0277デフォルトの名無しさん2010/05/08(土) 22:13:48
>>276
なぜGCにOSが必須なんですか?
0278デフォルトの名無しさん2010/05/08(土) 22:19:19
行儀の悪いアプリが終了したとき&強制終了したとき
掴んでたメモリを開放する処理は必要
一種のGCみたいなものになる。
0279デフォルトの名無しさん2010/05/08(土) 22:26:42
それGCと関係なくね
だいたいOSの存在しない世界って、基本的にゼロ番地から全部自分のモンだろ
行儀の悪いアプリとか何だそりゃって話だ

モダンなGCは専用のタスクやスレッド裏で走らせるのが普通だと思うが
N88BASICとかにもガーベージコレクションはあっただろ
0280デフォルトの名無しさん2010/05/08(土) 22:51:44
>>277
GCどころかヒープでさえOS必須だ。ヒープなしでGCあっても意味ないだろ。
0281デフォルトの名無しさん2010/05/08(土) 22:59:58
>>280
釣り?
OSのある世界しか知らない?
言語作ろうなんて1億年早い?
0282デフォルトの名無しさん2010/05/08(土) 23:04:16
>>278
普通のOSならプロセスのリソースは管理されてるからな
またちょっと別だよ
RTOSは別だがありゃマルチスレッドだからな
0283デフォルトの名無しさん2010/05/08(土) 23:09:01
ヒープから取得したメモリアドレスがどのプロセスに属してるかを
把握してないと開放できないとかあるとか?
0284デフォルトの名無しさん2010/05/08(土) 23:20:48
MLton

を越えれるのかな
0285デフォルトの名無しさん2010/05/08(土) 23:24:38
>>281
ヒープが何かを知ってからそういうことを言え。
0286デフォルトの名無しさん2010/05/08(土) 23:29:17
>>283
OSがある世界ならヒープの元を仮想アドレスで割り付ける。
物理メモリの管理は必要だけど
アプリのヒープ自体はOSからは大して意味ないからね

ま、あんまネタまきすぎるのもアレだが
あんま低レベルでもないがValaとGenieはどうよ
0287デフォルトの名無しさん2010/05/08(土) 23:30:27
OSやタスクやプロセスの線引きをどこで行うかの話でしかない
「OSは必要だよ」厨はスルーでよい
0288デフォルトの名無しさん2010/05/08(土) 23:32:53
OS作るなら言語がヒープの管理してちゃ困るだろ
0289デフォルトの名無しさん2010/05/08(土) 23:33:15
>>287
なんでOSがC++で書かれていないのかも分かっていないな。
0290デフォルトの名無しさん2010/05/08(土) 23:34:28
>>285
常識的な知識位しかないね
組み込み屋だからOSなしの環境に
libcサブセットのmallocとかprintf位は作ったことあるがねw
当然だがリセットから初期化してヒープの準備とかもなw
0291デフォルトの名無しさん2010/05/08(土) 23:35:01
タスクスイッチするだけのチープなOSもあるよ。
そういうのはヒープ=スタックを除く物理メモリのこと。
GCを単体のタスクに対して行うか、全体に対して行うか。
前者ならOSは不要、後者ならOS上に乗っかってる。
0292デフォルトの名無しさん2010/05/08(土) 23:36:39
>>289
C++で書かれてますって自慢してたOS、昔あったような
世間知らずさん
0293デフォルトの名無しさん2010/05/08(土) 23:39:32
>>290
それはOSのメモリ管理のところを作っているじゃないか。
0294デフォルトの名無しさん2010/05/08(土) 23:40:09
メモリ管理=OSだと思ってるのかな
GCにOSは不要ですよー
0295デフォルトの名無しさん2010/05/08(土) 23:41:35
>>288
別に困らないよ。
単に鶏が先か卵が先かという話と同じで、どちらかの完全な実装が先に存在しなくても全く問題ない。
少しずつ交互に積み上げていけばおk。
0296デフォルトの名無しさん2010/05/08(土) 23:42:57
まだくだらないことで揉めてんのかw
そもそもGCはスレ違いなんだよ
0297デフォルトの名無しさん2010/05/08(土) 23:45:28
>>292
そういうで意味ならWindowsだってC++で書かれているし、NeXTはObjective-Cで書かれている。
その下により低水準のOSがいる。
0298デフォルトの名無しさん2010/05/08(土) 23:49:45
>>296
確かに1970年代の低級言語にGCはなかったが
2010年だからということで揉めてる
0299デフォルトの名無しさん2010/05/08(土) 23:53:24
GC付きでいいならD言語使えばいいのに
0300デフォルトの名無しさん2010/05/08(土) 23:53:53
>既存の言語を使って何かをすることが目的ではなく、新たなプログラミング言語を考えることが目的であるから、
>「既存のXX言語を使えばいい。」という類の発言は無意味である。
0301デフォルトの名無しさん2010/05/08(土) 23:55:59
GC有り無し両方に対応したプログラムを単一のコード(あるいは最小限の修正)で記述出来ればいいね。
0302デフォルトの名無しさん2010/05/08(土) 23:56:26
メモリ管理を書くのにメモリ管理がすでにあることを想定している言語を使う。
0303デフォルトの名無しさん2010/05/08(土) 23:57:07
低水準言語という観点から言えば、2010年だろうが何だろうが
GC無しで使いたいことは多いはずなので
言語仕様のレベルでGCを前提にするのはやりすぎだろ
GC前提にすることで色々楽チンになって
クロージャのようなオサレ機能が使えるとしても我慢汁

で、言語仕様のレベルでGCを前提にしないならライブラリで、ということになるが
それだけならCでも出来る
malloc()ではなくてGC_malloc()みたいなのを呼べばいいだけだ
つまりここで話すような事柄じゃない
0304デフォルトの名無しさん2010/05/08(土) 23:57:29
>>301
C++/CLI
0305デフォルトの名無しさん2010/05/08(土) 23:59:25
>>302
単に鶏が先か卵が先かという話と同じで、どちらかの完全な実装が先に存在しなくても全く問題ない。
少しずつ交互に積み上げていけばおk。
0306デフォルトの名無しさん2010/05/09(日) 00:02:52
>>305
new が使えないC++は、もはやC++とは呼べない。
0307デフォルトの名無しさん2010/05/09(日) 00:02:55
>>303
低水準言語という観点から言えば、2010年だろうが何だろうが
除算無しで使いたいことは多いはずなので
言語仕様のレベルで除算を前提にするのはやりすぎだろ

低水準言語という観点から言えば、2010年だろうが何だろうが
goto無しで使いたいことは多いはずなので
言語仕様のレベルでgotoを前提にするのはやりすぎだろ

低水準言語という観点から言えば、2010年だろうが何だろうが
例外無しで使いたいことは多いはずなので
言語仕様のレベルで例外を前提にするのはやりすぎだろ
0308デフォルトの名無しさん2010/05/09(日) 00:06:18
>>306
別に呼びたくなければ呼ばなくてもいい。
C++を作る過程で「new が使えないC++」を使って何の問題があるんだ?
すべてが常に完全である必要はない。
言語は単なる手段だ。使いやすいように使えればそれでいい。
0309デフォルトの名無しさん2010/05/09(日) 00:07:11
>>307
馬鹿はコピペぐらいしか脳が無いのか

言語仕様のレベルでGC前提なら、GCを動かすまではその言語は使えないということ
だろが
それだとCより用途が確実に狭まる、言い換えれば上の層の言語になっちまうだろ
メモリマネージャみたいなのに頼れない場所でも貧者のmalloc()を自分で書いて
使えるのがCだ
0310デフォルトの名無しさん2010/05/09(日) 00:07:28
>>305
だがちょっと待ってほしい
既存の言語の上に何かを積み上げるのは無意味ではないのか
0311デフォルトの名無しさん2010/05/09(日) 00:08:51
>>306
operator newは自分で実装できるし
placement newもあるだろ

デフォルトのアロケータに頼り切ったような「普通の」C++コードを
そのまま使えないだけだ
0312デフォルトの名無しさん2010/05/09(日) 00:10:18
>>306
newのお勉強スレ行ってこい
0313デフォルトの名無しさん2010/05/09(日) 00:10:34
>>309
>言語仕様のレベルでGC前提なら、GCを動かすまではその言語は使えないということ

それはない。
言語仕様をすべて実装しなければ動かないのであれば、動くC++処理系はこの世に存在しない。
言語仕様のフル機能を備えたC++は存在しないからな。
0314デフォルトの名無しさん2010/05/09(日) 00:10:47
>>311
それじゃ、C++使っている意味ないだろ。
0315デフォルトの名無しさん2010/05/09(日) 00:11:31
>>310
そう。
だから新言語の上に新言語を積み上げる。
0316デフォルトの名無しさん2010/05/09(日) 00:13:57
ここは困ったちゃんを相手にするスレ
0317デフォルトの名無しさん2010/05/09(日) 00:14:43
アホ避けが欲しいな
せめてD&Eくらいは読んでいて欲しい
0318デフォルトの名無しさん2010/05/09(日) 00:16:29
>>314
は?何で無いんだよ
テンプレートだのクラスだのといった便利な抽象化機能が普通に使えるぞ

C++の規格に盛り込まれているfreestandingの意味も知らない
ド厨房はすっこんでろよ
0319デフォルトの名無しさん2010/05/09(日) 00:19:34
>>317
そんな無駄レス書き込んでる暇があったら、D&Eを読んだ成果を披露しろ
0320デフォルトの名無しさん2010/05/09(日) 00:22:04
馬鹿の相手をするのも疲れるんだよ
0321デフォルトの名無しさん2010/05/09(日) 00:34:13
気力を一方的に奪われるだけで得るものが何もないスレ
0322デフォルトの名無しさん2010/05/09(日) 00:35:44
D、C++/CLI、Objective-C にある機能しか出てこないな。
0323デフォルトの名無しさん2010/05/09(日) 00:40:28
Cで誰も本気で困っていないから。
0324デフォルトの名無しさん2010/05/09(日) 00:43:25
C以上に低級だとアセンブラだし高級だとC++になっちまうしな
0325デフォルトの名無しさん2010/05/09(日) 00:43:59
流石にnewが使えないとかいう妄言はないわ
0326デフォルトの名無しさん2010/05/09(日) 00:45:24
GCにOSが必要とかなw
0327デフォルトの名無しさん2010/05/09(日) 00:57:44
OSが無いとGC前提の言語は作れないとか言ってる人間は、天から与えられたOS、コンパイラしか使ったことがないんだろうな。

OSを作るような場合、コンパイラも自前である程度作る。
もちろん、全てを一から作るわけではなく、既存のコンパイラをポーティングしたりするが、その作業は自前で行う。

そのとき、フル機能のコンパイラを作ってから、OSを作りじめるなんてことはしない。
コンパイラを一部作り、OSを一部作り、コンパイラを一部作り、OSを一部作り、を繰り返して完成させる。

【第Nフェーズ】
コンパイラ係:とりあえず、制御系はforだけ作りました。ローカル変数はまだダメです。グローバル変数でやってください。
OS係:ローカル変数まだとかマジかよ。。まあいいや。次回までにお願い。
コンパイラ係:了解しました。ところで、GC作りたいんですけど、ヒープ周りの実装できてます?
OS係:ごめん、ヒープはもう少しかかる。先に例外やっといて。
コンパイラ係:はい。それじゃあ、ローカル変数と一緒に例外やっときます。

【第N+1フェーズ】
コンパイラ係:ローカル変数と例外対応しましたよ。
OS係:サンキュ。ところで、変数名は8文字以上だとエラー出るんだけど。
コンパイラ係:ああ、それ現在の仕様です。次までに言語仕様通り最低256文字まで使えるようにしておきます。
OS係:頼むわ。ああ、ヒープ使えるようにしたから、GC作っちゃって。
コンパイラ係:はい。やっておきます。
0328デフォルトの名無しさん2010/05/09(日) 00:58:41
お前頭悪いだろw
0329デフォルトの名無しさん2010/05/09(日) 01:03:21
CPUは既にあるものを使うし
Cなら既存のコンパイラが普通に使えるっつーの
0330デフォルトの名無しさん2010/05/09(日) 01:04:04
リンカは別だけどな
0331デフォルトの名無しさん2010/05/09(日) 01:13:59
>>329
> CPUは既にあるものを使うし

言語仕様に「既存のCPUを使うこと」って文言を入れるの?
なんたるCPU依存言語ww
■ このスレッドは過去ログ倉庫に格納されています