【超高速】C/C++に代わる低級言語を開発したい 3
1 :
デフォルトの名無しさん :
2010/04/13(火) 00:40:41 70年代、Cは生まれ、それから30余年、現代においてもなお、低レベルなシステム開発に広く使われている。
しかし、2010年の今、もしもCが発明されていなかったとして、低レベルなシステム開発のためのプログラミング言語を
新たに作るとしたら、Cとは違う言語になるだろう。少なくとも、全く同じにはならないはずだ。
そこで、このスレッドでは、
低レベルなシステム開発のためのプログラミング言語
を一から考えたい。
既存の言語を使って何かをすることが目的ではなく、新たなプログラミング言語を考えることが目的であるから、
「既存のXX言語を使えばいい。」という類の発言は無意味である。
「既存のYY言語のZZ機能は、WWと言う点で有用だから採用したい。」という発言は歓迎だ。
現代の一流のプログラミング言語研究者が、最先端の研究成果を盛り込んで、
一から低レベルなシステム開発のためのプログラミング言語を作るとしたら、どのような言語になるだろうか、
という観点で考えたい。
◆前スレ
【超高速】C/C++に代わる低級言語を開発したい 2
http://pc12.2ch.net/test/read.cgi/tech/1270254244/
2 :
デフォルトの名無しさん :2010/04/13(火) 00:44:05
422* 名前:デフォルトの名無しさん [sage] 投稿日:2010/03/22(月) 20:49:29 それならCにできないけど低級言語に欲しい機能を挙げてみようぜ。 ・Lispなみに弄くれるマクロ - テンプレート - 正規化された構文(S式とか) ・Forthなみに弄くれる駆動レコード - コルーチン - 強制インライン展開(レコードを新しく作らないルーチン) - 駆動レコードへのアクセス ・実行制御 - 高度な並列処理(トランザクションとか) - アトミック操作 - リアルタイム操作 こんなもんかね? 他にどんなの欲しい?
3 :
デフォルトの名無しさん :2010/04/13(火) 00:58:14
376* 名前:デフォルトの名無しさん [sage] 投稿日:2010/04/08(木) 04:45:08 自分は構文上の話が詳しいのでそちらだけ書き込ませてもらいます。 以下の議論をしてみてほしいです。 ・新しい言語は式ベースで作るべきかどうか? コンパイラの研究に使われている関数型言語の構成が式ベースになっているので それに習う? いろんな機能てんこ盛りがよい? ・式言語をベースにする場合どういったものにするのがよいか? 演算子の優先順位は必要? endで終わるほうがいい? オフサイドルールって必要? {}がいい? ・HaskellやPrologのようにユーザーが優先順位付きの演算子を登録できる機能が必要か? ないほうが実装が楽になりますが自由度は減ります。 ・EcmaScriptやScala、ActionScriptではXMLを直接かけるが必要かどうか?
4 :
デフォルトの名無しさん :2010/04/13(火) 00:59:19
379 名前:デフォルトの名無しさん [sage] 投稿日:2010/04/08(木) 05:20:33
>>376 このスレはCに代わる低級言語ってことで
基本的にCPUアーキテクチャに沿った
手続き系で余分なことをしない静的な型の言語以外あり得ないんじゃないかな
個人的には(構文だけではないけど)
- ブロックを明示しやすくて文でクロージャ作れるし{}がいいと思う
- オフサイドルールはコードはすっきりするけど賢いエディタ前提で深さがわかりにくい
- Cよりシンプルな構文が望ましいが別にC系でいいんでは
- 演算子の再定義はスパゲッティ化しやすいから不要
- マクロもインラインとか定数型などの別な方法で実現可能なので不要
- XMLなんかは外でやればいいんでは
- 勝手にデータを付加しないASN.1とかCの構造体的なメモリイメージと直結したデータ構造
- 動的型付け、GCや動的メモリ管理は明示的に利用を限定出来るならいいかも
- その他のシンタックスシュガーは適度にアリ
みたいな感じ
不勉強だからブートストラップみたいなベタなとこを関数型言語で書けるのかな?
って思うんですけど
5 :
デフォルトの名無しさん :2010/04/13(火) 01:01:56
540 名前:デフォルトの名無しさん [sage] 投稿日:2010/04/10(土) 08:44:46 基本データ型 整数、実数 []整数 byte : 1 [octet]のみ、文字だって数値だし、文字型いらね integer : CPUが自然に扱える範囲で []実数 floating : 浮動小数点数、IEEEのでもなんでもかまわん fixed : 固定小数点数、誰得 複合データ型 配列、多次元配列、構造体(のようなもの)、列挙、参照、メモリ参照(つまりポインタ) []配列 type[n] array []多次元配列 type[n,m,...] array []構造体、列挙 Cのがいいよ []参照 関数の引数にのみ使える、いわゆる本当のcall by referenceを実現するため また、メモリ参照を増やさないため alias unsigned integer uint_t; ret-type func(ref type[,] array, uint_t row, uint_t column);または ret-type func(type[,] &array, uint_t row, uint_t column); []メモリ参照 type@ memref integer@ memref = new integer[n]; integer int, @ memref_int = ∫ @memref_int = 128; integer[n] array, [n,m] marray memcpy(&marray[x,0], array, n); &marray[x,0] != @(marray+x)+0, &array[0] == array メモリをうまく抽象化できればいいんだけど
6 :
デフォルトの名無しさん :2010/04/13(火) 01:03:11
主な要望 ・デバドラ屋だって、オサレ言語で開発したい! ・プログラマーの言語仕様の学習不足によるヒューマンエラーを最小限にするために、できるだけ小さな言語仕様にしたい。 ・組込み屋だけど、関数型とダックタイピングしたい。 ・shared_ptrの構文糖が欲しいな
volatileに相当する修飾のサポートは必須と思うな
どの言語のvolatileだ?一応
メモリマップドレジスタの宣言 #define XXXX_REG (*(volatile int *)(0xC0000004)) のような記述がださいので これをサポートする記述構文と namespace が欲しいな オフセットずらしもできるようにして (Cの構造体でごまかすこともできるんだが)
別に僕は今のC言語で問題ないんだけど 新しいのを作るとしたらポインタ、特に関数へのポインタを引数に取り、関数へのポインタを引数に取る関数へのポインタを返す関数へのポインタとかを美しく記述できる文法を切口にポインタに変わるアドレッシング方法を考えればいいとおもう int<- p; int ()(void)<- fp; int ()(int ()(void)<-)<- ()(int<- ()(void)<-)<- fpp; ダメだ、読みにくい int (*(*fpp)(int (*)(void)))(int (*)(void)); そもそも関数ポインタに代わるなにか、高階関数とかあればよいのだろうか
>>11 普通に関数ポインタをtypedefすれば良いんじゃない?
14 :
12 :2010/04/13(火) 02:27:09
まぁ、関数ポインタを見やすくすること自体は良いと思うけど…
ちょっとした思い付きなんだけどスコープ内にある関数なら、 第一引数と一致する型の変数から暗黙的に関数を呼べると以外と便利かも… ※javascriptのthisポイントみたいな感じで char *copy( char *src, *dst ); char *trim( char *src ); char *toupper( char *src ); *p->copy(*dst)->trim()->toupper();
16 :
15 :2010/04/13(火) 02:45:59
アホだ俺、もう寝よう…orz *p->copy(*dst)->trim()->toupper(); × p->copy(dst)->trim()->toupper(); ○
>>5 結局型のサイズって重要だから
stdint風でいんじゃない?
19 :
15 :2010/04/13(火) 02:50:26
>>17 そう、文字の操作とか、延々と同じ型の計算を繰り返す処理の場合、
見通しが良くなるかなと思って…
文字列型は動的メモリ管理と直結だから Cには入ってないんよね 実行系が必須だと困る用途もあるし
intやlongは非互換の巣窟だからbyte以外無くそう
関数ポインタならDのfunctionやScalaの関数宣言が参考になると int function(int) fp; // fp は関数へのポインタ int delegate(int) dg; // dg は関数へのデリゲート val f:(a:Int,b:Int)=>Int = {(a:Int,b:Int)=>a+b} がデリゲード val f:(a:Int,b:Int)->Int が関数ポインタとか
>>21 だよなw
いまさらlongが64bitとかいわれてもw
整数型はこれな int8 int16 int32 int64 int128 uint8 uint16 uint32 uint64 uint128
>>20 そう。結局、型としてはプリミティブ型だけしか言語には組み込めない。
前スレで並列機能の話がでてたが occamの並列構文とかおもしろいがな 実装的にはjmpbuf内蔵するくらいのレベルで実現出来そうだし 低級言語で1st classとして扱えると面白そう
27 :
デフォルトの名無しさん :2010/04/13(火) 07:41:22
>>15 C#の拡張メソッドね。
乱用すんなとは言われてるけど、なかなか便利。
スレタイに妄想って入れとけよ
>>25 アロケーターを外へ出して、アロケーターが定義されたときだけ
使えるようになるのはだめ?
>>31 Cの美点は最低限のランタイムに
四則演算位しかいらないことだね
33 :
デフォルトの名無しさん :2010/04/13(火) 14:27:24
いままでのは論理ベースの手続き言語。 では非論理ベースの非手続き言語はあるだろうか?
Cはビット操作系の命令とSIMDへの対応がなっていない オマイラ演算子とデータ型を追加してみてくれ
36 :
デフォルトの名無しさん :2010/04/13(火) 17:09:26
>>35 論理なしにどうやって意思を伝えるのだろう。
情だろ、普通 恋愛したことないの?
ラブプラスでもやってろ豚
理論無しの言葉の実例w
40 :
デフォルトの名無しさん :2010/04/13(火) 19:04:54
結局
>>1 のやってる事って
【超高速】お前らC/C++に代わる低級言語を開発して俺に譲ってくれ
だよな
次スレの名前案 【超高速】C/C++に代わる低級言語が欲しい【妄想全開】
>>42 はぁ?
俺は一度も案に上がってない名前を勝手に付けて空Wiki立ち上げて影響力残そうとかしてねぇし
「名付け親、Wiki管理者の二つの名声は欲しいが、作業には関わらんし責任も取らん」とあそこまでハッキリ言いやがったんだぞ?
「譲ってくれ」のニュアンスも分からん文盲は黙ってろ
d言語でいいじゃん
何をムキになっとるかわからんが こんなスレで作られるわけないし作られても譲るわけないだろ 馬鹿か
文盲:ぶんもう 文がもうもうの意
もう とは 萌え の方言である
このスレッドは天才チンパンジー「アイちゃん」が 言語訓練のために立てたものです。 アイと研究員とのやり取りに利用するスレッドなので、 関係者以外は書きこまないで下さい。 京都大学霊長類研究所
52 :
デフォルトの名無しさん :2010/04/13(火) 22:22:28
Schemeのように最小仕様で拡張性最大にできないかな?
おれはゲーム開発用Javaを作成中
おれも
どんな仕様?
classなしvmなしポインタとプリプロセッサ付けたjavaだよ
そりゃだめだw
関数型はメモリ管理複雑だろ
Lispは基本部分だけならそれほどでも無いような ただ、Lispでメモリ管理のコード自体を書くとなるとキツいと思う
LispがマイナーなのはS式の表現力不足が問題です。 S式でC言語を書いたからといって、Lispのように実行する必要はなくて コンパイルすればいいですよね。トランスレータでもいいし。 1.GC付き言語でS式ならぬC言語風の式言語を作る。 2.GC付き言語でC言語風式言語でLispっぽいマクロ言語を作る。 2.GC付き言語でそのC式を使ってアセンブラを作る。 これで、Lisp級マクロ付きのマクロアセンブラが出来上がる。 3.マクロアセンブラのマクロを拡張してC言語風言語を作る 4.その言語でC式で動くLisp風言語を作る。ここでメモリ管理の問題が出てくる。 5.最適化フェーズを追加する。 という感じでやればいい言語が出来上がると思います。
オレは1じゃないけど、作るのに協力できるなら協力します。 著作権については修正free bsdライセンスのような、商用にも使える自由なやつがいいなぁ 新しい低レベル言語は言語仕様が小さい言語と大きい言語の2つを作るといいと思う。 自分はScheme的小さい言語仕様の言語を目指して作ってるけど、 最適化フェーズまでは頭が回らない。。。 とりあえず、式言語ベースでアセンブラを作らないとなぁってところです。 c++のjit用のアセンブラXbyakとかscheme製アセンブラとか、as3のアセンブラとか、llvmとかいろいろある のを参考にそのうち作ります。 美しく作りたいので速くて2、3年かかると思います。 大きい仕様の言語はD言語からGCとかclassをはずした言語がいいんだろうなと。 大きい仕様の言語でも式言語としてパースできたらいいけど、それは無理なのかな?
それは作りたいから作るの? 実用したいから作るの?
>>41 色々誤解させてすまない。Wiki管理者と全スレの
>>1 は別人です。色々他のことやっているからあまり関われないのは事実です。権限とか名声とか興味ないです。
名前をプリン並みの強度で決定したのとWiki空っぽにしたのは翌朝以降に整備予定であったのと、何も決まっていないということの現状認識。
名声とかより仕様がまとまらず無駄に時間が流れていくのもどうかなと思ったから立てた。
>>44 悔しいのか怒りなのか思い込み激しすぎて理解できませんがEDではないでしょう?嫌でしたらご自分で勃起しては?
今回は罵倒するのは不当で正当な別途Wiki立てるのが拒否手段ですよ。用意されたツールを使うかどうかは周囲が選ぶべきです。
C/C++に代わる低級ガラパゴス言語 Jap-C を作ろう。
低脳の間違いだろ
>>64 考え方が全然なってないわ
今すぐ身を引いたほうが良いぞ
68 :
デフォルトの名無しさん :2010/04/14(水) 19:38:20
>>62 3段構成
(1)Core Spec.
(2)Sweeter Spec.
(3)Standard Lib.
69 :
デフォルトの名無しさん :2010/04/14(水) 21:06:59
IDEによる支援がし易い文法にしたいね。
Cの中であまり使われない機能に順位を付けて 上から順に削除していってスリムなCを見てみたい ビットフィールドとか使わないよね?
機能を削るだけなら使わなきゃいいんじゃないの? あまり意味がない気がするんだけど
72 :
デフォルトの名無しさん :2010/04/14(水) 21:31:01
EmbededCwwwwwwww テラパゴスwwwwwww
そうやってぶくぶく太っていくんだと思うんだな言語は 仕様書とかすっきりするじゃん コンパイラも小さくなるし
コンパイラが小さいwwwww
Cのどこが太ってるんだ 256kバイトの8086でもコンパイル出来たんだぞ
よく読んでよ 太っていくって言ったのに ここは低級言語を開発するスレじゃないの? あれもこれもやってたらC++みたいになるのがオチなのに何故それが分からないのか?
機能を追加するのなんでいつでもいくらでも出来る よく使われる機能を選別して残すのが進化なんだ
あれもこれもなんて誰も言ってねーよ ビットフィールドを削るのは見当違いだって言ってんだ
80 :
デフォルトの名無しさん :2010/04/14(水) 21:45:12
◆新言語の要件◆ (1)ハードウェアを直接操作する低レベルの記述が可能 (2)プログラマーが勘違いしてプログラマーの意図と違う動作をしないように言語仕様が直感的 (3)学習が容易なように程々の大きさの言語仕様 (4)最新のオサレ機能が使えてワクワクしながらプログラミング可能
81 :
デフォルトの名無しさん :2010/04/14(水) 21:45:31
Objective-ASM
そうかすまんね だからその辺の統計をとって使われてない方から削除したのを見たいっていってるんだよ もしビットフィールドを使ってる人が本当に少数派なら仕方がないということで
見たいのは別にいいけど、スレ違い。
統計をとるってのは多数決ってことだろ、ご冗談をw 多数決なんかとって歯抜けになったcなんぞ誰が使うんだよw
86 :
デフォルトの名無しさん :2010/04/14(水) 21:54:54
87 :
デフォルトの名無しさん :2010/04/14(水) 21:56:29
>>80 めちゃくちゃだな。
(1)の時点で技術に比較的明るい人が使うんだろう。
(3)の必要性が不明。てかC知ってる人が新言語覚える時点で負担だろ。
(4)を導入すると(2)や(3)に反する。
何がしたいのか全然分からんね。
草生やしてる人がうざい
>>86 (3)学習が容易
(4)最新のオサレ機能
この辺じゃないの
要するに「Cよくわかりません。難しいです。でも速い言語使いたいです。」っていう ガキにありがちなわがまま要求だろ。
>>87 > (1)の時点で技術に比較的明るい人が使うんだろう。
そうでもないよ。
組み込み屋なんてピンきりだよ。とんでもないのがいる。
その「とんでもないの」を場当たり的な新言語で どうこうしようたってねえ…
92 :
デフォルトの名無しさん :2010/04/14(水) 22:06:43
◆新言語の要件 v0.1◆ (1)ハードウェアを直接操作する低レベルの記述が可能 (2)プログラマーが勘違いしてプログラマーの意図と違う動作をしないように言語仕様が直感的で学習が容易 (3)最新のオサレ機能が使えてワクワクしながらプログラミング可能
とんでもないのなんてどこにでもいるしな そんな例外持ち出されても
asとldは使われていないから削除ですね 統計的にわかります
>>92 ハードウェアを操作するっていうのはメモリマップされたI/Oをじかに叩くとかだろ。
それって生ポインタだろ。
生ポインタは「学習が容易」ではないし「最新のオサレ機能」でもない。
96 :
デフォルトの名無しさん :2010/04/14(水) 22:09:50
>>90 そんな「とんでもないやつ」にハード相手にプログラミングさせる必要ないだろ。
97 :
デフォルトの名無しさん :2010/04/14(水) 22:10:56
>(3)最新のオサレ機能が使えてワクワクしながらプログラミング可能 具体的に何よ?
ラムダ、モナド、タプル、クロージャー、マクロ
Cの配列にはオーバーヘッドはないし structも詰め物以外のオーバーヘッドはない そういうベタ構造も、勿論必要だろうが、 超高級unionとしての代数的データ型とか そういうのもあると、便利なような気がする 勿論オーバーヘッドの量(ワード一個とか)やメモリレイアウトが 分かりやすく、把握可能であるという前提で google goのinterfaceはダックタイピング/structural subtyping風味で 好みなのだが、あれのオーバーヘッドはどれぐらいなのだろう
100 :
デフォルトの名無しさん :2010/04/14(水) 22:15:19
ダックタイピングいいな
101 :
デフォルトの名無しさん :2010/04/14(水) 22:18:37
動的結合なしでダックタイピングって意味ある? 意味あれば欲しいかも。
そういうの高速化からどんどん遠ざかってるから
>>80 低レベルって何処までなんだろうと考えていて
思わずrfc1149を思い浮かべてしまった…orz
でも、普通、低レベルって言ったら、それこそ機種依存になるけど、
ここで言われている低レベルって、何を指して低レベルって言ってるの?
104 :
デフォルトの名無しさん :2010/04/14(水) 22:22:27
低レベル=ハードウェアを直接操作する記述ができる
>>102 抽象化したいときには抽象化できて
ベタで書けば高速にもできるってことならいいと思うんだが
goのinterfaceってのはクラス指向OOへのアンチテーゼだが
別にC++同様OOなんて使う必要ないし
VM系の、管理されたサンドボックスで走らせるために毎度毎度
境界チェックとかやるような仕様でなければ、特に問題ないんじゃないの
ハードウエアを直接操作というと、IOや割り込みの管理などをイメージする。そんなことはCにもできない。
>>104 ハードウェアを直接操作って言っても千差万別だけど、何処までなの?
>>95 が言ってるように、メモリマップ程度に抑えるとか、
機種毎に拡張しやすいように、何でもできるインターフェイスを備えるとか…
Cで直接操作できるのはメモリだけだよな レジスタだのスタックフレームだのを弄ったりCPUを直接叩きたければ アセンブリしかない
インラインアセンブラがあるだろ
インラインASMとかあるでしょ
112 :
デフォルトの名無しさん :2010/04/14(水) 22:31:13
>>105 >抽象化したいときには抽象化できて
>ベタで書けば高速にもできるってことならいいと思うんだが
そういう何でもアリな言語がいいのか、
スリムな言語いいのかどっち?
>>109-110 インラインなんて使ったら、それこそ、アセンブラを使えば良いので、
単純にアセンブラとリンクできる仕様を決めておけば良いだけのような…
スレタイがCとC++を同列に扱っているところに、話がまとまらない原因がある。
>>111 一応規格にもasmという予約語はあるし(意味は処理系定義だが)
そもそもインラインアセンブラが書ける言語なんてどんだけあるんだよ
既にCの特徴と言ってもいいわ
無名関数
Cのpragmaで処理されているところは、C#の属性のような構文の方がスッキリする。
implementation-defined 言語仕様を小さくする魔法の言葉
関数リテラル、関数内関数ぐらいは問題なさげ クロージャは、無限エクステントなしでよければ問題なさげ それでもforeachみたいなのに渡す分には困らない 値として返せないけど
>>112 Cの何に不満を持ってるかによるんじゃないの
C++に不満を持ってる人ならいっぱいいるだろうけどなw
121 :
デフォルトの名無しさん :2010/04/14(水) 22:45:45
>>107 > ハードウェアを直接操作って言っても千差万別だけど、何処までなの?
他言語を例に上げたくはないけどあえて言うなら、
新言語は、
「汎用的に使える言語であって、特に『現在Cが利用されていて、Javaが使用されていない分野』に利用出来ること特徴とする言語」
かな。
>
>>95 が言ってるように、メモリマップ程度に抑えるとか、
> 機種毎に拡張しやすいように、何でもできるインターフェイスを備えるとか…
メモリマップ程度に抑えても、上記特徴を達成出来るならそれでもいいけど、たぶんダメだよね。
Cが低級ってのが、なんで、って感じ
スレ読め
Cでなければならないのは、OSと要件が厳しい組み込みぐらいではないか?
低級なら、アセンブラでしょ
アセンブラ以上、C未満って、そんな難しいことを思いつく人がいるんかね
128 :
デフォルトの名無しさん :2010/04/14(水) 23:00:11
C未満ってどこから出てきた条件?
インラインアセンブラを使いたいだけなら、 特別なポインタを用意してやって、そこにマシン語を書き込んで、 コール出来るようにしてやれば良いと思う。 って言うか違うな… アセンブラ関数が作れれば良いんじゃないか…? で、引数と戻り値のルールや、変数等のポインタを共通化してやれば使いやすくなる?
低級だからじゃね
javaみたいに、仮想CPUとかの設計からやった方がいいんじゃないの
>>121 あえて言うなら、現在のCは汎用的に使えないことが問題だと言いたいのか。
Cは、アセンブラでしかできないことは素直にアセンブラで書け、
より高級な言語が必要ならそれを使えという方針だな。
あえて言うなら、そういう所が気に入らないのか?
133 :
デフォルトの名無しさん :2010/04/14(水) 23:09:55
>>132 > あえて言うなら、現在のCは汎用的に使えないことが問題だと言いたいのか。
そんなことは全く言っていないよ。
Cは汎用的に使える。
言いたいのは、新言語は低レベル記述を出来ようにしたいけど、
低レベルにだけ使えればいいわけではなく、汎用的にも使えるようにしたいと言うこと。
汎用的なもんって、難しいよ。専用なら雛形作るのは早いかもしれないけど
Cの問題点のひとつとしてマクロ。解読困難なものや、型チェックが働かないものがあったりする。 それなら、Cでよく使われているマクロを研究したら、より安全なCができるんじゃないか?
低級用途には全く関心がないのに、新しい言語を作りたいだけの人間が紛れ込んでるな
Cをよく理解していないのに新言語を作ろうとしてる奴も混ざってるしな
結論はDが完成すればもういいや、か 完成しそうにない点が問題だが
「奴」とか「人間」とかばっかり言ってるの連中よりはいいけどな
>>139 GCありの言語は用途が違いすぎじゃないの
標準ライブラリに参照カウンタでのメモリ管理入れておいて
goto廃止
低レベルって言っても、高速化を目的とした低レベル(レジスタやメモリを触りたい)と 汎用性を主眼においた低レベル(特殊な入出力等)って、方向性が違うから難しいよな…
145 :
144 :2010/04/14(水) 23:32:23
何か、最終的に求めるものが違うから、Cより高レベルなものを求めたり Cより低レベルなものを求めたりの意見の相違があるような気がする…
Cより高レベルかつ低レベル。目指してるのはそこにある インラインアセンブラを使うこともなければ、機能の少なさを嘆くこともない
誰かが言った ポリシーが違うならメカニズムを提供すればいいじゃない
高速化を目的としなくても、単にレジスタやメモリを触りたいだけでも「低レベル」が必要になる
Z80に対応出来るようにしてください
Cで充分だと何度言えば
151 :
デフォルトの名無しさん :2010/04/14(水) 23:45:36
>>145 Cのレベルと言っても、何か唯一のレベルがあるわけではなく、比較的高レベルから低レベルまで広がりを持っている。
Cに代わる言語だから、少なくとも現在Cがカバーしている分野はカバーするよ。
Cよりは便利にしたいから、高レベルの方はCよりも高レベルになるだろうね。
低レベルの方はCと同じ程度でいいんじゃないかな。
low levelということは具体的だという事。抽象化の時代の流れを逆行している
>>148 単にレジスタやメモリを触りたいだけって、
高速化や特殊処理以外で、レジスタやメモリを直接触ることって何がある?
CPU自体のデバッグとか、趣味で触ってみたいだけ位しか思いつかないが…
馬鹿が言語を作ろうとすると Embedded C++みたいなのが出来る
Cは十分抽象的でしょ。 欠点を上げて修正するくらいでいいと思う。
Embedded C++のどこが問題かはかなり難しい問題。 正直Embedded C++のほうが安全にプロジェクト進められることも多い。
>>157 どうぞ好きに修正してください。さようなら。
レベルひくっ
それがいい。
>>154 あんまり新しい言語の必要性が見えない
本当に高速化が必要な高速デバイスは、インラインアセンブラや
アセンブラで書くことになるし、低速デバイスであれは、
必要な部分だけ、C、C++で作って、残りは、デバイスにあった処理系を使うな…
>>162 >既存の言語を使って何かをすることが目的ではなく、新たなプログラミング言語を考えることが目的であるから、
>「既存のXX言語を使えばいい。」という類の発言は無意味である。
Cの利点問題点も共有できないのかよw
>>153 あんたの言う「特殊処理」って奴が、まさに
>>148 の言う「高速化目的」以外の
ケースに該当すると思うんだが
誰でも思いつくような低水準な例以外のことで言うと、
例えばCのサブルーチン形式以外のもの(コルーチンや継続など)が欲しければ、
スタックや何かを操作する必要があるだろう
そしてそうしたことは、C言語仕様の範囲ではサポートされていない
>>162 必要に迫られて言語を選ぶのでは遅い
何が必要か判明するより前に予め将来に備えてお勉強するのが現代人のライフスタイル
でもライブラリで提供すればいい話じゃないか?
>>167 だから、高速化と、それ以外の特殊しょりで、このスレで議論している
新しい言語の仕様が全然変わるんじゃねーのって話
ただ単にインラインアセンブラを呼ぶだけでも、
高速化が目的であれば、必要なレジスタの退避とかは、
全てアセンブラ側で持ちたいと思うし、呼び出し側の新しい言語も、
あんまり凝った、仕様はいらないって話になる
反対に、それ以外の目的では、オーバーヘッドはあまり気にしないから、
インラインアセンブラで記述するコードが極力減るように、
呼び出し側の言語で、ある程度制御して欲しいと思うし、
呼び出し側の言語の仕様も、C++よりも凝ったものになるんじゃないかってこと
Cは実行時のコード生成/自己書き換えなんかも出来ない アセンブリに比べて(少なくとも純粋な)Cの仕様では出来ないことってのは 結構多い
それこそいらね
>>170 アセンブラ呼ぶようなクリティカルで低水準な部分でオーバーヘッドを
許容してもいい派はあんまりいないんじゃないか、さすがに
パフォーマンスにおいてクリティカルでない部分で抽象度の高いコードを
書きたい、かどうかは意見の分かれるところだろう
有名な例だけど、ATLではウィンドウインスタンスとC++のクラスインスタンスを 紐付けるサンクのコードにアセンブラを使っている これの目的はまあ広い意味では高速化、狭い意味では、C++では実行時に サンクコードを生成できないから
175 :
デフォルトの名無しさん :2010/04/15(木) 00:24:21
まあ、Cに代わる言語が作れるなら、既にできてるけどね。存在しないのは不要だからだよ。 「こういう理由で不要だから作りません」なんて論文や製品にならないから出てこないけど なぜ不要かという答えに議論を通じてたどり着ければ得るものはあるんじゃないかな。
>>173 >>148 の 単にレジスタやメモリを触りたいだけ
って話に対して、オーバーヘッドを気にするのかって話
おい、1スレ目から何も話題が変わってないじゃないか どういうことだ?
おまえ2ちゃんになに期待してるんだw
俺がベースを作ったら、後はお前らでなんとか出来るか?
言語仕様のベース? なんとか出来るかは、内容による。
どこに作るの?名護?徳之島?
仕様はお前らが考えて、 俺が動くものを作ってやるから、 後は好きに最適化すればいいよ。
日本人はものづくりがほんとにヘタだな
ここは開発するスレじゃなくて 開発したいスレだからな
>>185 これだけ理系が冷遇されていれば仕方がない。
こんなだから金出せないんだろw
そうだね。
Galapagosly-C
誰か仕様まとめてくれ
continuationとかaspectとかDbC/PbC希望!
ちょい長文だが、 組み込みにインラインアセンブラや特殊機能は結構必要 OSや言語のラインタイム作る時にも結構便利 その他のgcc拡張なんかも有用 俺はインラインアセンブラは高速化も含むのだが ほんの数行ですむがアセンブラ必須の特殊命令のために使うことが多い 例えば割禁なんかのようなCPU固有の特殊レジスタアクセスとか キャッシュやバッファをスルーしてくれる入出命令とか アトミックなメモリ操作とかだね メモリマップドI/OったってCPUによってはvolatileつけたくらいじゃ 書き込み保証できないし もちろんアセンブラで書いてもいいんだが gccのようにレジスタを変数に割り付けてインラインで書けたりすると コードも短いしオーバヘッドもなくなる 場合によっちゃスタックチェックなんかも書ける 同じくgcc固有だがattributeで高速SRAMとSDRAMを使い分けたり セクションを分けたり、通信用にpackした構造体を用意したりな linuxでもマクロで隠してあるが、 ドライバやモジュールの初期化処理を別セクションに分けてたりする もちろん言語仕様的には超'例外’的な機能だが組み込み屋的には あるとないとでは大違いな機能だったりする つわけで、どこでどんな風に低レベル機能が必要とされてるかも考えてみてほしいね OSの上で動くアプリとホントの低レベルでは要求がだいぶ違うんよ
Cは長い間使われて鍛えられてるからなぁ。 でもC++はちょっと違うんだよな。なんでだろ。
C++はランタイムが少し大きいのと 予期せぬところで見えない初期化や後処理が走るからだろうね メモリ管理も抜け穴が出来やすいし ベタなコード書きたいところではイマイチな感じ もちろんそういうとこ抜けた後のアプリ部分では ちゃんと使えば問題ないと思うけど
無駄なところで嫌がらせのような多重継承したり 不要なところでテンプレート乱用したり
Cの鬼マクロも昔はアレだったけど C++はさらに輪をかけてるからな 書いた奴のレベルを自動判定して機能制限してくれるC++がほしいな
そんな謎機能はいらないからw 詳細に機能をオフに出来るコンパイルオプションが欲しい
>>198 インテリジェントじゃねえか
動的に文法をリミットだw
あんたはVBくらいねとかphp程度ねwとか
お前らが語ってることって40年前の黎明期より劣ってるんだけど自覚ある?
最終的にどんなバイナリを吐くか?はコンパイラの仕事である。 言語仕様と実働環境の違いは完全に分離して考えなければならない。 例えば、言語としてはマルチコアをネイティブサポートしておいて、コンパイラが各ターゲット環境に合わせればよい。 ソースがマルチコアを使うように書かれていても、ターゲットがシングルコアならそれ用のバイナリを吐くだけ。 ペアになっているのはコンパイラと実働環境であり、言語仕様は切り離されているべきである。 いや、どうも言語仕様と実装を分けて考えられない御仁が多いみたいなんでね。
すべからく設計にはトップダウン、ボトムアップ両方の側面がある ボトムアップが100%いいとは言わないが、 特にCの領域をカバーしたいような低レベルな言語設計をするのに 実装を十分考慮せずに言語を設計しても実用性は?だと思うがね。
>>202 実装に寄った言語をアセンブリ言語というんだよ。可搬性、抽象化なくして何のための言語か?
基本的な考えとして、Cと比較してそれを載せると無条件で1以下になるようなものは却下だろ GCだったり動的な型付けだったり、実行時に常に影響があるようなものはNGだ コンパイル後は可能な限りstaticに固定的にコンパクトに、という方向は見失わないようにしないとな シンタックスシュガーや環境依存が存在しないくらいにしっかりと記号や文字を使い分ける 一方で「用意するけど使わなくてもいい」に当てはまるものは問題ないだろう 文字列型や可変長型は今や必須と言っていいし、特定分野で使われるような高度な算術ライブラリとかも てな感じで、1以下にならないものを選別していけばいいんじゃないだろうか?
>>141 使わなければいい
そもそも OS 作成用途では malloc すら自作しないと使えないんじゃ
>>205 mallocは言語関係ない。それを言うなら、new だ。
それがGCだろ・・・?
C++は、ほかの言語への置き換えがかなり進んできているけど、Cはそれに対抗するものはまだない。
必要あくまで排除するのかということ
>>203 0 or 1ですね。わかります
極端すぎるんだよ
環境依存したべたべたに書かれたハードウェア制御部分だって
Cとアセンブラでは開発効率が天と地ほど違うし
ちゃんと書けば性能も保ったまま可搬性をある程度は持たすことが出来る
まあ性能を求めれば求めるほど失われるがね
低レベルってのはそういう分野も含んだもんだと思ってるんだがな
そもそも抽象度は上げれば上げるほど動的な機能とメモリ管理が不可欠になる
>>204 みたいにGCなしといいつつ文字列型が欲しいとか相反する部分がどうしても出てくるし。
高速演算ライブラリなんてCとかアセンブラで用意して呼べばいいだけだし
普通にアプリを作りたいだけなら低級言語はいらんのじゃないか
おまいらなんで、言語の実装とランタイムライブラリを一緒くたにしてんの?
>>210 まず今のCの仕様で、特定の環境でしか動かないような仕様が存在するか?一つも無いだろ。
今のCですら、アセンブリ言語と比較して抽象化は高いレベルで実現されている。
実働環境と言語仕様は切り離されてなければ意味が無いんだよ。
でなきゃアセンブリ使えで済む話なんだから。共通ルールを作るとはそういうことだ。
もう一度言うが、環境に依存する機械語への翻訳はコンパイラの仕事。
つーか、実装を考慮した言語設計って具体的にどんなの?って話だよ。 ある特定の機械に向けた実装をするなら、それは汎用言語ではなくなってしまうよ? リソースのプアな機械があるからといって言語仕様に可変長型を入れてはいけない、ということにはならない。 取捨選択できる機能であり、かつ、使用する場合にメリットがデメリットを大きく上回るなら採用すべきだ。
とりあえずOOP、GC、動的型付けは却下だな コードサイズもメモリサイズもオーバーヘッドも常に肥大化するし
>>164 それ、最初のスレで一人だけが執拗に繰り返してて、たぶん2スレ目はそいつが勝手に建てただけ。
他には誰もそんなこと言ってないっての。
並列処理も却下
SJISは良くない、って言って、SJISに似て非なるEUCを作った話から少しは学べよ。 UTF-8みたいにきちんと作らないと邪魔になるだけだって。
プリプロセスは綺麗に出来るように。 それからコンパイラやリンカオプションはソースコード上でスイッチできるように。
また長文だがw
>>212 Cの言語仕様の改訂はたいてい
低オーバヘッドで実現できて組み込みやらの移植性を上げるような方向だからな
でも既存言語という縛りがあるから、どうしても踏み込めてない部分も結構ある
volatileが導入される前は特定のソースだけオプティマイズ外したり
仕方なくアセンブラなんて普通にあったし
マシンコードだけが依存性の源でもないし
普通に書いても問題が出るような部分とか
生成されるコードを意識しないと書けない範疇
どうしても書く内容で移植性を下げるもの
エンディアンなんてつまらんものもそうだし
ま、そういう用途でも
新しいCに代わる低級言語ならアセンブラや環境依存の書き方以外の方法で
記述出来る能力か抜け道がないのか、より抽象度を上げた方法がないかどうか?
実際に使われる環境や対象を考えてない実用言語なんてほとんどないし
たいてい何らかの目的とユースケースを見据えて作られてる
もちろん汎用性があるから普及すればいろんな用途で使われるし
使われ出して長くなると立ち位置も変わるが
なかなかCを食う言語は出てこない
俺は趣味的な思考実験ちっくにこのスレ読んでるが
ちょっとそういう部分もあるんだなって考えてみてくれる人や
言語や見識がある人がいないかと思って書き込んだ
美しく抽象度の高い言語なら既にいっぱいあるっしょ
>プリプロセスは綺麗に出来るように うわ言はチラシの裏にお願いします
Cに対して明らかな優位性があって、 .o にバイナリコンパチブルがあるなら置き換わる可能性はある。
そりゃ当たり前だ
圧倒的な普及率を覆すほどの優位性なんて、そう出てくるもんじゃないけどな 現状の大抵のOSではシステムコールやAPIがCヘッダで提供されてるから それがそのままincludeできないなら、それもCに対して(現状では) 利便性において劣る部分となる 一方、includeできるなら、プリプロセッサという化石とCの汚い言語仕様 をそのまま受け入れるということで、C++みたいな糞の山が出来上がるのがオチだ
includeつーよりラッパーのライブラリとABIな ヘッダだけなら機械的に他の言語に変換できるし。 C++は汚いが、Cはそこまで汚いとは思わん
>>223 あんたもわかってるのかどうか怪しいなw
システムコールが仮にC形式で呼ばれるようになってたとしても、
Cヘッダ使わなくても呼び出しできるぞ。
C形式ってのは要するに、呼び出しアドレスがわかっていて、引数の形と数がわかっていて、
引数をスタック渡しで呼び出すシステムがあればそれでいい。
別にプリプロセッサとかヘッダとかをCと同じにする必要なんてない。
>>225 んなことは分かっとるわ、アホか
LispやLLみたいな言語ですらffi経由でCのコードを呼べる
宣言を取り込み、呼べるようにするための手間が、
#include ほげ
と書くだけより「手間」なんだよ
それが「利便性において劣る」ってこと
>>225 そもそも最近はレジスタ渡し+スタックだな
さ、ちょいだけ仮眠して仕事するべさ
>>226 いちいち罵倒しないと会話もできないのかよ。。。
そういや昔は引数もPascal方式とかC方式とかあったな
最近のシステムコールには呼び出しアドレスがあるのか
>>229 Dなんてlisp以上に純マイナーだからじゃないかw
GoogleかAppleかMicrosoftが採用したら一気に有名になるぞw
>>231 >システムコールが仮にC形式で呼ばれるようになってたとしても〜
>プリプロセッサとかヘッダとかをCと同じにする必要なんてない
という「概念」の話を、「実装」の話にすり替えないように。
昔はシステムコールにアドレスがなかったのか? アドレスがないとしたらメモリ空間には存在してなかったのか?
>>229 GCありだからそもそもレイヤがちょと違うけど
・マイナー
・安定の二文字とは無縁な言語仕様(ビジネスでの利用は問題外、趣味でも
昔のコードがすぐ動かなくなるのでついてくのがつらい)
・ヘッダをいちいち変換するのめんどい
など、流行らない理由はいくらでもあるだろうな
会話が斜め上225℃を逝ってるな
Cで記述された現存するOSの母国語、systems programming languageがCになるのは 当たり前 というわけで組み込みや新たなOS記述言語の地位狙いということになるのかな
>>235 システムコールとライブラリコールの違い分かる?
もしかしてCのコードから直接trapを発行してると思ってる?
CP/M は call 0003 ってアドレス使ってなかったか
>>229 Dが流行らなかった原因はCやC++やC#との差別化ができなかった所。
>>242 直接アドレス呼び出すなよ。
何のためのOSだよ
いやCP/Mってリングプロテクションとか特権/保護とかやってる モダンなOSじゃないから
>>245 そういう OS だったんだから仕方ない
ああ、本当のシステムコールじゃなくてシステムライブラリを 呼ぶという話しか。
システムライブラリとはなんじゃらほい
APIのことだろう
ゲートのこっち側の、Cでリンクして呼べるようになってる 関数インタフェースのことじゃないか
>>248 crtじゃなくてシステムコールを直接呼んでる言語があるなら挙げてみやがれ
>>248 ではないが
crtってCランタイム、libcのことならまた全然別の話だろう
なんかどんどん斜め上に話が進んでるな
Unixならman 2で出てくるのがシステムコール(のAPI) man 3で出てくるのがlibc 直呼びってMS-DOSのINT21Hとかだろ
そうだな。CPUの割り込み使って呼び出すヤツ
システムコールはOSのカーネルが提供するサービスだよ。 低級言語ってのは、そのカーネル自体を作れるレベルの低水準言語。
言い換えれば「ハード以外何もいらない」ってこと。
>>258 JavaでもLispでもGoでも、そしてこのスレの誰かさんが大好きなDでもOSを作るぐらいできるよw
次の名称を述べよ 1.各々のチップなどHWを制御する為のポートで提供される操作 2.BIOSの提供する制御操作 3.CPUの割り込みを利用して提供される制御操作 4.OSのカーネルが提供する制御操作 5.SDKが提供する制御操作
javaでどうやってos作るの?
>>261 1 IO
2 BIOSコール
3 割り込み
4 システムコール
5 SDKが曖昧
>>263 アセンブラ入ってんじゃん
そんなのjava製とはいえん
>>265 アセンブラなしででは、Cでもできない。
>>236 なんだDってクソ言語じゃねーか。全く駄目だな
でもDしかないし
>>67 結局、罵倒したいだけですか。やれやれ。
ではバックアップ掲載しておきます。あとはご自分でどうぞ。
*低級言語 [#q34e2cc7]
-プリプロセス
--字句解析
--構文解析
--マクロ展開
-コンパイラ
--字句解析
--構文解析
--最適化
--コード生成
--アセンブル
-リンカ
--リンク
271 :
270 :2010/04/15(木) 17:09:42
**プリプロセッサ、マクロ [#dd2a2569] **型 [#pcaa63a2] 型は大文字?小文字? |1byte|Byte| |1byte|Ubyte| |2byte|Short| |2byte|Ushort| |4byte|Int| |4byte|Uint| |8byte|Long| |8byte|Ulong| |4byte|Float| |8byte|Double| ||ポインタ| Double* a; var a: *Double;
272 :
270 :2010/04/15(木) 17:10:25
*型宣言 [#n0629b9d] 伝統的な形 前置 byte name = 3;// mutable static byte name = 3;// static const byte name = 3;// imutable 構文解析を簡単にするなら後置 (参考 ActionScript, Scala, haXe等) var name:byte = 3; // mutable val name:byte = 3; // imutable def name:byte = 3; // static def f:(a:Int,b:Int)=>Int = {a+b} // static function val f:(a:Int,b:Int)=>Int = {a+b} // imutable function var f:(a:Int,b:Int)=>Int = {a+b} // mutable function (function pointer)
273 :
270 :2010/04/15(木) 17:12:53
**複合型 [#od53d6ce] def A:struct { var a:Int; var b:Int; } enum union bitfield variant const **構文 [#fd5994bf] 変数 関数 配列 if else goto while do while for break continue typedef
274 :
270 :2010/04/15(木) 17:14:47
**演算子 [#m86a3779] = 代入演算子 a = b はプリプロセッサによりassign(a,b)に変換される。 + 加算演算子 a + b -> add(a,b) とか --- 以上です。
275 :
デフォルトの名無しさん :2010/04/16(金) 00:01:00
新言語では、宣言文の中で、型を後ろに表記したい。 Cで書くと、変数とポインタは問題ないが、関数や配列は名前の前後に記述が来てわかりにくい。 int i; // i は int型 int *p; // *p は int型 int f(int n); // f(0) は int型 int a[100]; // a[0] は int型 後ろに型をかけば、変数もポインタも関数も配列も、すべてスッキリする。 i int; // i は int型 p* int; // p* は int型 f(int n) int; // f(0) は int型 a[100] int; // a[0] は int型 複雑な型であっても、スッキリする。表記も短くなる。 int (*fa[])(int (*fb)()); // [Cの場合] int型を返すint型を返す関数へのポインタ(fb)を引数にとる関数へのポインタの配列fa fa[]*(fb*() int) int; // [提案方式の場合] int型を返すint型を返す関数へのポインタ(fb)を引数にとる関数へのポインタの配列fa 乗算(*)とポインタ参照(@)は違う演算子にした方がいいかもしれない。 i int; // i は int型 p@ int; // p@ は int型 f(int n) int; // f(0) は int型 a[100] int; // a[0] は int型 fa[]@(fb@() int) int; // [提案方式の場合] int型を返すint型を返す関数へのポインタ(fb)を引数にとる関数へのポインタの配列fa ( fa[0]@(fb@() int) は int型 かつ、fb@() は int型 )
wiki消えとるワロス
別に消さなくてもいいのにね。 ちょっと煽られてヽ(`Д´)ノモウコネエヨ!!とか、近年稀に見る耐性が低さだわ。
お前らなんて煽るだけで何もできないのにな
そうだね。
280 :
デフォルトの名無しさん :2010/04/16(金) 00:21:23
char[] array_char(100); // array_char is of char[] type int* px, py; // both px and py are pointers of int* type 配列とポインタの宣言はこれでいいんだよ。ごちゃごちゃ抜かすな。 @マークとかアホらしいから、C++でおなじみの->を流用しようぜ。 int z = px->; // int z = *px;
281 :
デフォルトの名無しさん :2010/04/16(金) 00:34:12
>char[] array_char(100); // array_char is of char[] type array_char(100) が char[] 型になるのか? [] array_char(100) が char 型になるのか? ならないなら、美しくない。 >a[100] int; // a[0] は int型 a[0] は int型 a は [100] int型 宣言と利用が同じ形をしている。だから、美しい。
282 :
デフォルトの名無しさん :2010/04/16(金) 00:48:19
>>280 ->とかキモいから全部@にしちゃえよ。
283 :
デフォルトの名無しさん :2010/04/16(金) 00:48:41
>>281 どこに a[0] とか出てくるんだ?全然美しくないだろ。
[100]int型とかアホか。Cの基礎から勉強してこい。
Cの配列と異なるというなら、そんな配列は醜すぎる。
すごくどうでもいい
285 :
デフォルトの名無しさん :2010/04/16(金) 00:56:44
>>283 > [100]int型とかアホか。Cの基礎から勉強してこい。
Cの話はしていない。
286 :
デフォルトの名無しさん :2010/04/16(金) 00:57:34
Cの場合、 char str[100]; は、char[] 型の配列変数 str を宣言し、 100要素分の連続したメモリ領域を確保して、 str がその先頭要素のアドレスを指すということだろ。 また、配列 str は char* 型 でもある。 型の char[] とか char* はキャストでは明確に出てくるが、 変数宣言時には出てこないので、初心者の意識には昇りにくい。 こういったCの特性を踏まえれば、 char[] str(100); のように宣言するのはCを踏襲しているわけだが、 配列が宣言時のサイズによって型が違うようにするとか、Cの改悪で醜いもいいところ。
スタックに構造体や配列をおける言語ってC以外にある?
288 :
デフォルトの名無しさん :2010/04/16(金) 01:05:09
str [100] char; // char型の要素100個の配列 a char; // char型の変数a a = str[0]; // char型のコピー b [] char; // char型の要素数未定の配列b b = str; // char型の配列のコピー
なんだ。goの話してんのかと思たわ あれの配列は var a [10]int まあsliceが強力だから配列よりそっちの方使うと思うがね unsafeでmmapをsliceに直貼り出来たのにはわろたが
290 :
デフォルトの名無しさん :2010/04/16(金) 01:11:04
goがそうなってるなら、goに習えばいいね。
->記号がマジイミフ 可読性低いし打ち辛いしばかかと
配列がコピーされてそんなにうれしいか foo(n int) [] char { bar [n] char; return bar; } bar [] char = foo(128); こういうキモいこと(配列を返す関数)もできるわけか
293 :
デフォルトの名無しさん :2010/04/16(金) 01:18:40
>>292 goの例でいうと戻り値が配列の場合
書き方にもよるがコピーじゃなく
戻り側の変数に直で書かれたりする
->が可読性低いってほうがイミフ
>>275 関数ポインタ要らない
関数をオブジェクトとして使うときはポインタに決まってるんだから
同じ理由で、メンバアクセス演算子は.だけでいい
わざわざ左オペランドの型で.と->を使い分ける必要が無い
関数の型は->とか=>で書きたい
int->int : intを受け取りintを返す関数
Cのうんざりするようなsignal関数の型は
(int, int->void) -> (int->void)
となる
関数宣言はこんな感じで
def signal(signum int, handler int->void) int->void {}
Cのものよりずっとシンプルで読み書きしやすい
実体とポインタ両方ないなんてありえん
あと、 >p* int; // p* は int型 これ意味不明 pはint*型、じゃないの? *intと書かせるのはキモいので、 &intと俺は書きたい。
298 :
297 :2010/04/16(金) 01:27:42
ありゃ、最後の行失敗 p &int のつもり
299 :
デフォルトの名無しさん :2010/04/16(金) 01:27:56
>>297 p は *int 型
p* は int 型
つーかメモリモデルすらわかってない奴多くね?
「奴」とかの話はいらないから。
302 :
297 :2010/04/16(金) 01:29:24
>>299 ああ、意図は理解した
型宣言の話をしているのかと思ったが、*演算子を後置にするという話が
混じっていたの?
その必要が無いように思えるけど
メモリへのアドレスによる直接アクセスと、IOへの入出力と、 リアルタイムタイマの操作と、各種割り込みのトラップが出来れば あとはなんでもいいや > 低レベル言語
アドレス以外ライブラリでいいな
305 :
デフォルトの名無しさん :2010/04/16(金) 01:44:47
>>304 安全な言語目指すなら
アドレスもライブラリでいい
効率はオプティマイズで稼げる
>295 数学の関係とか写像のイメージと同じでこれはいいと思ったが、 int (*(*f)(int (*)(int, int), int))(int (*)(int), int); var f ((int, int)->int, int)->((int->int, int)->int)
>>304 memory mapped I/O ならともかく、ポートが叩けないってことはライブラリはアセンブラで書くのか?
まあCのio.h みたいに、マクロでインラインアセンブラが書いてあるのもありかもしれないが、
個人的にはポート型があって、コンパイラが解決してくれるほうがありがたいな。
I/Oポートが独立してるCPUはもう86位じゃないかな RISC CPUや組み込み向けCPUではmemory mappedが主流だね Cとの相性がいいし、ハードもみため統一的になる まあ言語に組み込むならI/Oポートはさほど速度もいらんし せいぜい組み込み関数とかで解決でいい気がする 直アドレスも範囲限定出来たりすると安全かな 具体的にはsliceみたいなのをレジスタ範囲のアドレスに張り付けって感じ 同じ記述でI/Oポートも叩けたら、配列風な記述でI/O出来るな go風に書くと var xx_reg = iomap(0x1000, 0, 16) var mm_reg = mmmap(0xff000000, 0, 16) xx_reg[0] = 0x100 てな感じ
マクロでfor文とsprintfが欲しいな
C++をdefineで好みに再定義すりゃいいやん
>>308 その86が今もって強いから問題かと。
言語的には特殊なメモリとして扱えれば十分だが。
ポインタのデリファレンスは後置単項演算子のほうがエレガントなんだっけ?
いろんな表現を発明して、それがCより優れてるとしても、Cの表現をマスターした人間にしてみれば そんなのを再勉強するのは負担なので受け入れられないだろう。 int (*fnc)(int(*)(void)); がわからない?ハァ?勉強汁!でおわり。 逆に、勉強汁!って怒られた奴が恨みに思ってこんなスレ延ばしてるんじゃねえのかw
ガベコレさえあればC/C++でいいよ
どっちだよ
>>313 今ここで勉強しているのだから大いに結構
>int (*fnc)(int(*)(void));
* -> (* -> (void) -> int) -> int
後置が良いってのは要するに、前置*と後置[]()が入り乱れるより
後置に統一する方が結合の順番がわかりやすい
つまり構文木の深いところから浅いところに向けて順番に並ぶのが良いということだな
慣れの問題
ポインタ宣言のツリー構造は、K&Rにふつうに書いてあるな 問題は、膨大な情弱用コンテンツに埋もれてK&Rに辿り着けない奴が多いこと。
typedefがあるのだから、どうでもいい問題。
>>318 慣れの問題なら、C表記に慣れてる人々を切り捨てて
誰もが慣れていない新表記を押し付けるのはコスト的に不都合
>>320 それはまさに「名詞の王国」の発想
或いは、defがあるからlambdaを制限する・classがあるからスコープを制限する
のような思想
Python対Ruby、Java対C#は偶然ではないね、偶然が二度続けばなんとかって言うし
Cは一つの記号に複数の意味を持たせたものがいっぱいあるんだよな。 構文をシンプルにするためには、一つの記号に複数の意味を持たせないことだな。 ASCII文字の内、Cで使われていない@と`も含めフル活用して一意の意味付けをする。 あと、一見して意味が通じそうな<-や->みたいに、誰が見ても想像できそうな使い方は良いと思うよ。 一部分でしか使ってない<>とか#とかは文字列に置き換えて、他の部分に使ったほうがいいよ。
>>324 >@と`も含めフル活用して一意の意味付けをする
makeの失敗の歴史も知らずに何を偉そうに語ってるんだか
アスタリスクが、ポインタが示す値の参照と掛け算の二つの意味があることで、読みにくくなることあるかな?
<が比較演算子かtemplateの引数のカッコかわからない
std::vector<std::vector<int> > hoge; この「> >」のスペースがとっても嫌。 std::vector<std::vector<int>> hoge; と書きたい。
>>329 どこのコンパイラで書けるのか実例を挙げてくれ
デタラメを書く→追求される→スレ違いと言って逃げる だから便所のラクガキなんだよ
>>328 C++0xまでマテ
gcc なら -std=c++0x とか -std=gnu++0x でOK.
VS2010で普通に書けるが?
どっちが無知やら
>>335 そんな方言持ち出していまどき扱いされてもなあ
>>338 そんな方言持ち出していまどき扱いされてもなあ
おまえが使っているコンパイラどれだよ?
C++0xこそ方言じゃねぇか gcc以外の何が対応してんだよ
みなさん恐れ入りますがスレ違いです
そういやテンプレ引数で比較演算子使うと上手くいかない場合があるんだよな。 こういうの template_type< const_arg1 >= const_arg2 >
いまどきのコンパイラはだいたいC++0xに部分的に対応している std::vector<std::vector<int>> hoge; と書けないコンパイラの方が珍しい
C#のパーサーはテンプレートのところでパースに失敗すると、かっこの意味を変えてパースしなおす。VS2010もそうしているんだろう。
括弧の種類を増やそうぜ 《》「」≪≫『』【】
使える記号の少なさが 言語の進化を妨げているな
そこで APL の出番だな
複数意味がある記号がたくさんあると その組み合わせ分だけパースしなおすのか
全部()でいいよ。文法は単純な方がいい。
VBやDでは()使ってるね
{}の方がエレガントだよ!
()の前に!つかるとかださいよね
シフトキーを押さなくてもいい記号だけにしろよ
-^\@[];:,./
101か106でも違うし…
そこでドラムセット型キーボードの出番ですよ。
F1 3C C9
俺的にC/C++のメリットはメモリ管理が確実に読めるコードが書けることにあると思う。 GC使いたいならJavaやC#のほうがよくね?
そうだね。
C9がretなのは覚えてる
お前らが語ってることって40年前の黎明期より劣ってるんだけど自覚ある?
365 :
デフォルトの名無しさん :2010/04/17(土) 01:33:53
開発不要という結論に達するまで、あと何スレかかるかな。
ってかむしろ開発不能というのが近い気が…
開発できるような奴もいないだろ
ちんけな最適化でよければ、Cコンパイラぐらいは書ける。
template「class T」 void f() { vector「T」 v; }
Cのマクロを廃止して、今、マクロで行われていることの多くができる構文を導入したもの。 今のCでは、マクロが原因でIDEの支援がどうしても限定的で不正確になってしまっている。
トランスレーター作ったことあるけどパーサーも抽象構文木の解釈処理も結構手間だ
確かに、難しくはないが、面倒くさいな。
template <typename T> T add(T& a, T& b){ return a+b; } は add<T typename> (a &T, b &T ){ return a+b; } T; でいい。 templateとかイチイチ書くのアホ臭い。
374 :
デフォルトの名無しさん :2010/04/17(土) 02:12:01
Common Lispのマクロってどんな感じなの?
なんでもできる。
何でもできるってOS書けるの?
"OS"
>>370 糞重いIDEなんて使う気にならないからどうでもいい
シンプルな低級言語を設計する話が、なんで複雑な最新技法の導入の話になってんの? boostっぽいのとか全部すれ違いな気が…
構文に美しさを求める人たちと、とにかく速くしたいと思う人たち
そのやり取りを上から眺めてニヤニヤしている、初代スレの
>>1
構文どうこう言ってる奴らは消え失せろ スレ違いだ
>>379 お前みたいなレガシーは、絶対少数派だから発言しなくていい。
>>383 多数派に属さないと怖くて意見も言えないんですね(プ
統計学的にも達人より初級者の方が多数派なのは明らかだしなあ
統計出すまでもなく論理的にそうだろう
新言語を設計するなら、IDEのことを考慮するのは当然。
考慮は当然だがテキストエディタだけでも書きやすいほうがいいね。
IDEごときに脳まで侵されてるんだな、可哀想に。 こんな人が他所の環境に異動にならないことを祈るばかりだ。
390 :
デフォルトの名無しさん :2010/04/17(土) 11:23:36
>>379 Intel Core i7あたりのPC買って、何かIDE試してみなよ。便利だぞ。
便利だがキャリアの長いプログラマは慣れたエディタでのノウハウも捨てがたいからな。 ほとんどIDE上のエディタ機能いらないことも多い。併用するだろ。
IDEが言語に合わせろよ
Eclipse +プラグイン
統合開発したいと言われても胸が熱くならないな ピンポイントで具体的なモチベーションがないと
IDE使っていないやつは、IDEによって省力化できるところに、労力を費やしている。
396 :
デフォルトの名無しさん :2010/04/17(土) 12:52:28
使い慣れた道具ってものがあるからIDE使うのは強制しないけど、 IDEを馬鹿にするのはおかしい。
俺様はデバッガーの使い方分かんないけどな
デバッガなんて作るもんで使うもんじゃねえな エディタはemacsとviあればいいっしょ
楽できるのなら楽をする 自分でやるな機械やらせろ 人間が機械にあわせてやる必要はない、機械が人間にあわせればいいんだ なぜかデジャブが
IDEは結局ターゲット変えたらやり直しだから経験不足のやつほどメリット強調しやすい
マクロやPerlのような言語による省力化もあるんだが、GUIと相性悪くて お互いに相手が原因だと言って譲らない状態
自分が新言語に求めるものって 再利用性(抽象性) > 構文の美しさ(読みやすさ) > 速さ かな
再利用性(抽象性) > 構文の美しさ(読みやすさ) > 速さ > IDE
404 :
デフォルトの名無しさん :2010/04/17(土) 14:44:21
正解は 低レベル記述性(絶対条件) > 構文の美しさ(読みやすさ、学習の容易さ) > 再利用性(抽象性)
「C/C++に代わる」の意味考えてないだろ
え?
>既存の言語を使って何かをすることが目的ではなく、新たなプログラミング言語を考えることが目的であるから、 >「既存のXX言語を使えばいい。」という類の発言は無意味である。
他言語に置き換えられてない部分といったら OS/デバドラ/組み込み/ネイティブアプリ/過去のコード資産 あたり?
>>410 新言語はまだ他言語に置き換えられるほど普及していないよ。
>>409 ごめん
じゃあ言い換える
>>404 の主張は新たな言語の目的としてはおかしい(C/C++があるから)
>今、もしもCが発明されていなかったとして、低レベルなシステム開発のためのプログラミング言語を 新たに作るとしたら、 >現代の一流のプログラミング言語研究者が、最先端の研究成果を盛り込んで、 >一から低レベルなシステム開発のためのプログラミング言語を作るとしたら、どのような言語になるだろうか、
コードを書くたびにプログラム観が変わるんだが プログラム言語の研究者って実際の実用コードどのくらい書いてるんだ?
お前の業務経歴なんか、しるか。
今の時点でリテラルに機能を乗っけようとしているやつは気にしているやつは何を考えているね? まずは>2-4(のさらに低水準寄り)の議論しろよ。
>>416 お前がしたい話があるなら、他の話を遮るのではなく、お前が主導してお前の話したい話を話せ。
素で書いても書きやすく、IDEの支援があればなお書きやすくなるような言語仕様がいいな。
419 :
デフォルトの名無しさん :2010/04/17(土) 16:52:42
プ板でやれ
>413 Cはすでに実在する >もしもCが発明されていなかったとして は無意味 >現代の一流のプログラミング言語研究者が、最先端の研究成果を盛り込んで >一から低レベルなシステム開発のためのプログラミング言語を作るとしたら 最先端の研究成果はCが発明されていたから得られた
思考実験を無意味となw
無意味な思考実験
歴史のifみたいなもんで そういう妄想を楽しめる人には無意味ではないんじゃないの ま、そういう妄想を理解する必要は無いし、つまらなかったら見なければ良い
思考実験でCがなかったとするなら CじゃないXがあったと仮定してもいいけど Xで最先端の研究成果を導き出すのが筋
オレの思考実験では今頃人間以上のAIを持つメイドロボが身のまわりの世話をしてくれてるはずなんだが
>>413 過去に超一流の研究者が出した成果がCだからな
当時からコンピュータアーキテクチャの
基本が変わってない以上
低レベルな言語はCを超えれない
>>426 でもCは当時のコンピューターを想定して作ってるから
現代においては色々と時代錯誤な部分が確実にあるよ
世の中の流れはセキュリティ最優先なのにオーバーフローを考慮しない標準ライブラリとか
精度も生成結果も笑えるレベルの擬似乱数とか
Cには代わらないなあ
究極の言語だからな。
>>427 セキュリティよりも速度を追求する場合があるから
標準ライブラリならあれでいい
>>430 速度の問題ではないと思うんだが
get()は論外
strlcpy()やsnprintf()などは標準で用意されているべき
なんでも用意されてる言語があるだろw
scanfは最初から糞だったと思うぞ
標準っていうかCの実証実験で適当に作ったサンプルがそのまま(ry
オーバーフロー前提の演算ができなくなったら ゲロ遅になって困るだろ
436 :
431 :2010/04/17(土) 19:35:55
- get() + gets() だ、すまん
まさか自分でバッファサイズのチェックも出来ないゆとりグラマが 幅をきかせるとは、当時の誰にも予測不可能だったからな。
>>435 多分「バッファオーバーフロー」のことを言っているのだと思うよ
>>437 gets()でセキュアなコードを書けると思うのなら
ぜひ書いてみてくれ
可変長構造体とか確保するときに struct hoge { int length; char buf[0]; }; struct hoge *p = (struct hoge *)malloc(sizeof(struct hoge) + 123); とか出来て便利なんだよ
>>440 今はセキュアでない「ライブラリ」の話だから
ランタイムで配列の境界チェックをしろとは誰も言ってないと思うよ
>>438 バッファオーバー風呂じゃなくて
バッファオーバーランでは?
>440 それができるのはC99からだから
>>441 ん?
そのポインタをセキュアなライブラリに渡したらどうなるか?って話でしょ
>>442 質問する前に目の前の箱を使ってぐぐればいいのに
>>444 いや今の議論の流れで分かるでしょ
gets()はプログラマサイドでバッファオーバーフローを回避する手段が
一切存在しないから、設計として非セキュア
そういうレベルの話だと思うが
>>446 >strlcpy()やsnprintf()などは標準で用意されているべき
これ書いたのは?
Cの作者の最大の誤算はここまで広く使われるとは思っていなかったことだろうな
標準ライブラリやセキュリティのはなしはもう他の言語が改善してるじゃん
451 :
デフォルトの名無しさん :2010/04/17(土) 20:14:58
C99 の次はまだ出ないのかなあ。
言語とライブラリの話をごっちゃ混ぜにするやつらがいる
>>426 言語やアーキテクチャとは関係ない話
セキュリティなんてライブラリの話
C自体はポインタやランタイムの範囲チェックはないが
それ故に組込からスパコンまで使えるスケーラビリティになってる
Cは神の様な一流が実験より実用を目指して作って成功した言語だよ
簡単に超えれないのは当然
バッファオーバーは言語仕様の問題といっていいでしょう。 でもCはそれがコンセプトだからね。どういうコンセプトにしたいかが問題。
>>451 gcc にgnu99+ms-extensionで使いたい俺
次の標準には無名のメンバに
他で定義したのを使えるようにして欲しい
>>453 あ、日本語おかしいかった
ポインタや配列のランタイムの範囲チェックな
Cに何を乗せるか話し出すといる要らないで話が進まなくなるから 要らないものや使いにくい部分を外す方からはなさないか?
このスレまだ続いてたんだ
思考実験のネタスレで本当に言語作ろうとしてたのかw
460 :
デフォルトの名無しさん :2010/04/17(土) 21:53:56
いろんな言語の原理主義者達がお互いを罵り合ってるだけで思考実験すら成立していない
ここでいい案が出たって誰も何も作らないんだから、本気で考えるわけがないし。
おれは案持ってるから自作中。 あと2年生きてられたら読み出せるから期待してくれ。
俺もForth系を自作中。 俺言語設計するのは楽しいよな。
つーかいい加減飽きろよ
「どうせできない」と言ってるバカには一生できない
じゃあお前は出来るのかと言われるだけ
Cに代わる物なら、実装はそんなに難しくないだろうし、そうでなければならない。
>>454 その「Cのコンセプト」って後付けの理由としか思えないんだよね
gets()なんかは立案当時のコンピュータのメモリがプアすぎてオーバーフローが起きるような使い方自体が難しかった
それにセキュアな設計といってもfgets()のようにほんの少しの工夫で解消されるもんだよ
セキュア=劇的に重くなるってのは単なる先入観だね
469 :
デフォルトの名無しさん :2010/04/17(土) 23:14:53
ライブラリの不出来は作り直せばいいだけだから
言語と関係ないライブラリの話を出すな
ForthだとかLispだとか、永遠に普及しないからやるだけ無駄
>>457 auto、externは要らない
関数と関数ポインタは同一視していい
メンバアクセス演算子は.だけでいい
配列とポインタの関係はもっと綺麗にできないものだろうか
組み込み型としての配列は廃止して、ポインタによるアドレス演算のシンタックスシュガーにすればいい
475 :
デフォルトの名無しさん :2010/04/17(土) 23:27:19
スタックに配列つくれないなんて許せん
>>475 それはalloca()でいいんだろうけど
構造体のメンバや、static記憶クラスの配列はどうするんだろう
>>470 標準ライブラリの実装は実装者に依存するが
どういう機能をもった関数を揃えるか?は言語設計の範囲だよ
スタティックに配列作れなきゃmallocをライブラリやアセンブラなしにかけないな
気に入らなきゃライブラリを作り直せばいい
構造体の中のみ、配列を許すようにしたらいい。
後置がよい理由は:演算子を使って型を指定する場合に aaa:int; int:aaa; のどちらがよいか?と考えたときにアセンブラなどのラベルは name: のように名前を先に書くことから 名前:型と書くほうがいいのです。 goが面白いところは var a int; と書いてvarを後置2項演算子(式を2つ取るってこと)と考えれば 名前は基本的にごにょごにょ書く必要ないのに対して型は いろいごにょごにょ書くことに対して分かりやすいだろうというのがあります。 ただ、goの2項演算子方式だと、型推論を行いたいと思った場合に出来なくなることです。 新しい低レベル言語に型推論の機能が必要か、不必要かは議論が分かれるところだと思います。 ただ、似たような表記のより高レベルな言語を作成した場合はそのことが問題となるでしょう。 新しい低レベル言語は現在のC言語とそれに似た言語となる高級言語の元となるような形であるべきです。 となると、型指定演算子あるいは命名演算子があるとよいと考えます。 そして、その演算子として最有力候補が:です。
記憶クラスの解釈をインテリジェントにしてはどうか? 内部的な処理の違いは隠蔽するようにして
>>468 getsはメモリがプアなマシン用にはあったほうがよいけど
メモリが沢山ある場合はよくないので、今の時代に合わせて
fgetsを推奨、getsは非推奨ってことで。非推奨だけどプアなマシン用に必要になったら入れていいと。
>>484 それって「標準ライブラリ」の範囲で言及する必要があるの?
潜在的な脆弱性を取り除けないものは入れるべきではないと思うんだが gets()を利用した方がいいケースなんて本当にあるのか?
487 :
デフォルトの名無しさん :2010/04/18(日) 00:01:15
すれ違い
関数の引数が2ワード増えただけで困る環境って、ちょっと想像がつかない その環境ってC言語が本当に使えるの?
489 :
デフォルトの名無しさん :2010/04/18(日) 00:09:10
困る困らないじゃなくて、 データ列が欲しいだけなのに、最大サイズとか指定するのがウザ過ぎるって話だろ。
んなもん #define gets(s) fgets(s, INT_MAX, stdin) とでも定義すれば?
491 :
490 :2010/04/18(日) 00:15:47
もちろん「自分で」ね 標準ライブラリにこんなもん入れろとか馬鹿げてる
釣り…だろうな
マクロとか要らない マクロ使いたい奴はC使えばいい
Lisp並に強力なマクロが欲しい C程度のマクロ入らない
なんかCの偉大さを痛感するスレだなw
>>494 「Lispマシンが流行っていたら」という仮定の思考実験を行えば
Lisp一つで低級から高級までカバーできるね
関数型をネイティブに処理できる計算機開発してから言ってくれ
498 :
[―{}@{}@{}-] デフォルトの名無しさん :2010/04/18(日) 01:10:39
お前らの100倍頭のいいやつが作って、 お前らの1000倍頭のいいやつらが何十年もかかって、 誰も完全に代替できなかったのがCな。 コピペにもあるけど、これまで誰もしてこなかったことってのは、 「思いつかなかったこと」じゃなくて、 「思いついて試したけど失敗したり、そもそも最初から意味のなさを悟ったから、 誰も成果をあげてないだけのこと」なんだよね。
だからその頭のイイ奴らが、今、1から低級言語を開発したらどうなるかを考えるのがこのスレの趣旨だろ。 30年前はCになったが、今ならCと完全に同じものには絶対にならない。
500 :
[―{}@{}@{}-] デフォルトの名無しさん :2010/04/18(日) 01:23:07
頭のいい奴らが考えることを、頭が悪いやつらが想像することほど馬鹿らしいことはないよ。
>496 LispマクロとLispマシンはあんまり関係がない。 Lispマクロと引数を評価しない関数、スタックを作らない関数(強制inline)は欲しいなぁ。
今なら C より良いものができるに違いない。
型安全なマクロが欲しい。
コボラーがJavaやるみたいなもんか
どういう意味?
言い換えれば、コボラーがJavaやるみたいなもんだってことになるだろ
なんだ、そういう意味か。
JavaってC/C++の反省を元に云々っていう開発の触れ込みがあったけど 現状はコボラーの置き換えにしか使われていないという罠
すべてをリプレイスするわけじゃないけど領域を奪ってはいるな。
>>503 インライン関数で出来なくてマクロが必要ってどういう用途?
#define call(n) func_ ## n() void func_1(); void func_999(); int main(){ call(1); call(999); return 0; }
512 :
デフォルトの名無しさん :2010/04/18(日) 02:48:34
日本語で書ける言語作れよ
すれ違いもはなはだしい
514 :
デフォルトの名無しさん :2010/04/18(日) 03:19:29
基本的なデータ構造(アレイ、リスト、スタック、キュー等)は標準で扱えるようにしてくれ。
ライブラリの話はあまり意味ない
まあね
>>481 ありゃ宣言文でしょ。式じゃないし
型推論も右辺値で決まるし同じやり方
記憶クラスの推論が難しそうだがやってるね
スコープから出そうならヒープ
出なさそうならスタックとか
Cより上のC++,java狙いかな
kenさんは神々の一人だから勉強になる
>>514 同意。Cの標準ライブラリは抜けが多すぎる。
>>490 意味不明過ぎるだろ
getsなんて遥か以前から問題になってるから
今時使うヤツはほとんどおらん
C言語の記号を多用した仕様はパーサの負荷を軽減するためのものだが 結果としてプログラマのタイプ量を減らす効果もあった。 C言語が無ければ同じ時間でプログラミングできる量は減っている。 つまり今日のコンピューティングの進歩も無かったことになる。
昔のパソコンの低スペック差をなめんな
今のプログラマは昔よりずっと、タイピング技術が上がっている。
日常的な会話を文字列でしてるのだから。
LISPのマクロはプリプロセッサの形で導入すればよい。
マクロがいらない人は使わなければいい。
でもマクロが欲しい人のために式ベースで言語を設計するといい。
マクロが不要な人には理解できないかもしれないけど。
HaskellにマクロはないけどテンプレートHaskell
OcamlにはCamlP4とかあるし、C++にはテンプレートがある。
マクロを使いたくない人は使わなきゃよくて、基本は使わなくてすむように設計するとよい。
式ベースにする利点はマクロだけではなくて、プログラムの自動生成にも役立てることが出来るし
プログラムの構文解析も簡単になる。完全な文法を把握しなくてもいい場合ってあるでしょ。
変数の宣言を取り出したいだけとか、関数だけ取り出したいとか。
式ベースになっていても、十分な表現が可能か、否か?
という点が重要で可能であるはず。
>>517 ScalaやActionScript、haXe等が宣言文であることは知ってますよ。
でもこれらは式ベースな言語ではないのではないでしょうか?
式ベースで言語を考えれば481のような考えになるという話です。
型を:で指定できるのはHaskell,Ocaml,Cleanもそうです。
Cleanはマクロを標準で持っている。
だから新しい言語は式ベースで作ったらいいのでは?と。
BNFベースで考えれば、いつまでも、Algolと同じだって言われることになる。
長文って内容0が多いよなwww
何時になったら「作ろうとしても無理」て結論に落ち着くのw
実装は難しくないから、無理という結論にはならないな。無駄ならわかる。
>>525 どうやって実現(実装)するか?は、言語仕様に含まれない
例えばスタックを使わずに関数の制御が実現できるなら、別にスタック自体使わなくてもいい
int func(int hoge, int fuga)という乗算関数を標準で用意する(=言語仕様)が、
正しい結果が得られる限り、hogeとfugaをどのように計算しても(=実装)いい
言語仕様と実装の区別とはそういうこと
>>524 ローカルのデータをコールスタックと別のスタックにとれば解決すること。
既存のライブラリとの互換取れなくてもいいなら、難しくもない。
何やってるんだ。
>>530 ポインターは言語仕様としてはどれほどはっきり定義されてるんだっけ?
一応指した物は勝手に動き回らないというのは約束事にはないのかな?
物理メモリはどこ指してるか判らんときもあるぞ
>>532 勝手に動き回るの意味がよくわからんが
指しているものが意図しないものだったら誤動作するかもね、ってだけでしょ
ちゃんと整合性を取りつつ参照先を変えるのは何ら問題ない
つーかそれがポインタのアイデンティティだし
物理メモリ上でいくら動いても 「アドレス」さえ変わらなければ問題ないと思う 実際、仮想メモリ使ってるとそうなってるし
>>534 > 勝手に動き回るの意味がよくわからんが
>>524 の記事によると、
領域のあふれを検知したら,VITCではメモリー空間上の別の場所に,
十分なサイズのバッファを確保する。そして,ここにデータを格納する。
プログラム中で元のバッファのアドレスを参照する個所は,別の場所に確保
したバッファを参照するようにポインタを書き換える。
だから、指してる先が移動して、参照も書き換えますよって言っているけど、
アドレス計算とかしてさらにそれをどっかにコピーしたのとか追従できるのかな?
537 :
デフォルトの名無しさん :2010/04/18(日) 11:36:09
これだけ伸びてるのに仕様書一つもうpするやつがいないとかレベル低すぎ
>>520 だから、
#define call(int n) func_ ## n()
こんなふうにしたいってことじゃないの。
>>536 それは勝手に動き回ってるんじゃなくて、ちゃんと整合性を保ってるじゃん
>>536 それは、プラットフォームの仮想化レイヤーが備える機能であって、言語が備える機能ではないんじゃないの。
>537 俺言語開発で忙しいから任せた。
>>537 仕様書一つくらいお前がうpすればいいだろ馬鹿
>>538 #define call(n) (1 ## n), func_ ## n()
整数値のみを要求するなら
これで大体いける
あ、全体を括弧で囲み忘れた
>>543 で、そんな奇っ怪な表現ではなく、「nは整数ですよ」と明に素直に書けるようにしたいよね。
#define IS_DIGIT(n) (1 ## n) #define call(n) (IS_DIGIT(n), func_ ## n())
そういうテクニックを使ったときの問題点は コンパイルエラーが起きたときに、その原因が分からないこと
548 :
デフォルトの名無しさん :2010/04/18(日) 13:26:58
そこでconceptですよ。
増築を繰り返して糞化したC++みたくならないようにしないとな。
スレの流れからしてCからC++のような物を作ろうとしているようにしか見えないがな まさに車輪の再開発
70年代の車輪はまだ使えるけど、擦り切れてスリップもするし燃費も悪い。 だから、2010年の今、優秀な技術者が新しい車輪を作ったらどうなるだろうかを考えてみるってことだろ。
552 :
デフォルトの名無しさん :2010/04/18(日) 13:47:58
エンジンがパワーアップして、ボディーもいろいろカッコいいのが出てきてるからな。 道も良くなったし。 そろそろ、車輪も新しくしたいよね。
#define IS_DIGIT(n) (1 ## n ## 0) じゃないと n が suffix として有効な時にダメだったわ
そんな機能いらん
車輪を新しくってCのリサイクルじゃんw
>>551 >燃費も悪い
燃費は最高にいいだろ何言ってんだぼけ
2010年の今なら車輪のない乗り物で良くね?
大昔の未来想像図みたいな絵本思い出した
Cがなかったとして。という思考実験であっても、いまの流行技術でつくったとして 今のC/C++のどこが問題だったものが、どう改善されるかの検討なければ意味ない。 かつその問題意識はCの方向性としての「低級言語」という視点からのものでなければならない。
そこまでは素人の考え、それが前提。
Cがなかったとして、って、事実でない仮定からスタートしてるが、数学の重要な定理を知らんのか? 「正しくない仮定からはどんな結論でも導き出せる」 だからこんなスレいくら続けたってムダ。
>>540 ランタイムと混同してるな
言語でやるなら二重間接にしないと
仮想アドレスはそんなに粒度高くできないし
>>561 ここって遊び/暇つぶし/ネタじゃないの?
マジでやってるんなら厨二入ってるなと思うけど
遊びならマジで突っ込むのは無粋だな
遊びとしてルールが破綻していると言われてるんだろ
>>564 もっと楽しいルールにしろということか
言いたいことは分かるが、つまらんのなら見なければいいんじゃないの
>>561 最初のスレからわかってる奴はわかってたんだが、アホの
>>1 がしつこく繰り返したあげく、
次スレ立てやがったからな。
誰も同意してないてのに。
>>565 俺が言ってんじゃねーよ
そもそもこのパートスレの1スレ目の最初の
>>1 は、お前が言うところの厨二で
最初はノリノリであれこれ言ってたが、それは無理だと突っ込まれて消えたし
>>567 なんだ、
>>1 って消えたのw
ま、レスついてるってことは需要あるんじゃないの
需要なくなったらスレなんて自然消滅する
2chってそういうとこだと思うけど
君はなんでこんなところ見てるの?
「最新のプログラミングパラダイム」とかいいながら、そもそもプログラムがどう動作しているかも知らなそうだったしなぁ。 ちっとは低水準を議論できるレベルになっていれば良かったのにな。
ifの世界でのプログラミング言語を語る馬鹿スレ
思考実験って知らない奴が数学語ってるのか
いるよね屁理屈だけで何も生み出さない奴。
>>577 お前が生み出した物を紹介して欲しいんだけどw
いるよね「悔しがりすぎw」とレスするだけで何も生み出さない奴。
思考実験(笑)
思考実験www事実と反する仮定をもとに思考実験とかwwww
いるよね「悔しがりすぎw」とレスするだけで何も生み出さない奴。
>>582 君は剛体という存在を仮定することすら愚かというんだろうな。
教養のなさが染み出てるw
いるよね「いるよね「悔しがりすぎw」とレスするだけで何も生み出さない奴。」とレスするだけで何も生み出さない奴。
while(1){ puts("悔しがりすぎ"); puts("何も生み出さない奴"); }
いるよね「いるよね「いるよね「悔しがりすぎw」とレスするだけで何も生み出さない奴。」とレスするだけで何も生み出さない奴。」とレスするだけで何も生み出さない奴。
結局
>>574 が自分を棚に上げただけって話だったな。つまんね
同属嫌悪って奴だろ 素直にネタも楽しめないつまんない奴なんだからそっとしておいてやれ
他人を罵倒することでしか自己確認できない人が多いのが2ch
メタなレスでスレを消費してもね
抽象化したがるのがプログラマの性ですよ
もう無責任にスレ立てを行った
>>1 が出てきて皆に謝罪しろよ
そうしてスレを落とせば、もう無駄な言い争いはしなくて済む
有用なレスすれば言いだけ
ネタすら投下できない無能は黙って去るべし
しぃ言語って昔あったよな。
ところで基本的質問で悪いんだが Cってなに? AとかBてのがあったの?
ウィキペディアの「C言語」ぐらい読め
601 :
デフォルトの名無しさん :2010/04/18(日) 18:13:55
602 :
デフォルトの名無しさん :2010/04/18(日) 18:33:45
STL相当のライブラリーは欲しいな。
既にあるものが欲しいって、じゃあそれを使ってろよw
1から作るのが難しかったら、 C + STL + 最新のオサレ機能 をベースにして、 新言語の言語仕様と標準ライブラリに整理し直したらいいかも。
雑談スレだしw でもここ見てると冷やかしと 低レベルが知らないヤツが多いのはわかるな 俺は低レベルはCで上はgc有りで 住み分けでいいと思うがね 消えるとするとやはりc++
606 :
デフォルトの名無しさん :2010/04/18(日) 18:58:40
perfect forwardingって、名前がオサレだな。 C++以外でも意味ある? C++の言語仕様が糞だから必要なのか、それ自体が他の言語でも有用な機能なのか。
607 :
デフォルトの名無しさん :2010/04/18(日) 19:38:55
>>605 同感。でもCもちょっと古すぎる。
1、charはbyteにして8bitアクセス
2、intはint8,int16,int32,int64
3、数値計算用にdouble と decimal(realとdecimalか?)
4、stringを文字列として導入
5、floatの廃止
6、#includeの廃止→代替案が必要
7、#ifdefの廃止→代替案が必要
8、互換性のためのラッピング関数に対して、コンパイラがラッピングをはずす
機能の提供。
後は、今ある言語をしっかり検討して、再設計するべきだと思おう
C++0xの説明少し読んだけど、悪夢?
とか思うほどに、なんか記号に満たされた感じだった。
ありゃもう駄目だと思う。読んでると、あぁこれは便利そうだとは
確かに思うのだけれども、もうね、記号がぐちゃぐちゃで文字化けかよ
って感じるほど酷いことになってる感じ。
floatの廃止とか正気か? グラフィック関連でどれだけ使われまくってると思ってんだ
1-5までは別に言語とかコンパイラとか関係なく対応出来る というかもうしてるのもあるよな。
stringがライブラリである意味がわかってない奴が語るなよ
>>607 C++0xは、個々の機能をみると、今までより簡単になったり分かりやすくなったりしたと思えるけど、
全体としてみれば、「ただでさえ複雑な言語がますますややこしくなった」という風に見える。
ところでfloat廃止はいただけないなあ。
今時みんなIEEE 754なんだから、単精度・倍精度に対応する型は必要。
もちろん、float/doubleという名前はぜったいだめだけど。
> もちろん、float/doubleという名前はぜったいだめだけど。 なんで? ダサくていまどきモテないから?
>>608 単精度はサウンド関係でも使われまくってるよね
float廃止って、素人だろ 遅いとか思ってるんだろうな
>>614 その名前でfloat:主 double:従のような印象を受ける。
くだらないと思ったらすまない。
代替としては、例えばdouble→real、float→short realなど。
607のintXXに従うならfloat32/float64もありかな。
618 :
デフォルトの名無しさん :2010/04/18(日) 20:22:30
>>617 それを言いたかったんだけど、そうだよね、
ダブル残すのはセンス無さ過ぎた(wwwww
なんのダブルなんだよって事だよな
その命名理由はもっともだが、そんなもんどうでもいいだろうとw
>>607 stringはライブラリちうか動的メモリ管理必須だってばさ
gc無しの前提だからな
でなきゃおまいの書いたのは
go始め実現してる言語は多いぞ
D言語に対するツンデレスレなんだよな
>>617 fixedなんてのもあるぞ_Fixedだっけ
整数は長さ指定なのにrealはないだろ
実際にfloat-ing pointなんだし。
realならimaginaryと対じゃね
long floatとかdouble floatなんてのはありだが
complexは必要だがimaginaryはいらん 掛け算するとrealになってしまう
floatは一切なしという仕様もありえる。
float32 と fixed32, fixed16 あたりは必要だろう float32 は GPUとかSSE SIMDで使われているし fixed はfloating 演算できない組み込みプロセッサ用に重要だ
C#のDecimalってfixed128みたいな感じだっけか
>>624 そんな機能があること知らん奴のほうが多いだろ
多分日本語にしてもわんない奴多そう
可変長でなければ文字列型に動的メモリ管理なぞいらんよ つーか文字型を廃止して、全ての文字は「0文字以上の文字列型」とする で、文字列型はネイティブで扱える文字コードをasciiとunicodeにするだけでいい あとはCのchar配列のような扱いで十分
complexいるかあ? 業務で複素数の演算が必要になったことなんてほとんどないぞ。 言語仕様でサポートするほどの需要があるとはとても思えない。
>>630 例えば4次方程式を解くとかだな
科学技術系計算が必要だと便利だぞ
アルゴリズムとして実装可能などうでもいい機能は放っておけ
>>632 4次方程式なんて解く案件いくつあんだよ
>>632 Fortran99とかMatlabとかでなく
Cで科学技術計算やりたいケースって結構あるの?
Cで科学技術計算はかなりされているし、メモリ管理も関係ない。実装も簡単。 complex型はありだ。ただし、ライブラリはCと互換性なくなる。
また一人が必死に繰り返してるパターンか
確かにcomplexはいらないと思う imaginaryが欲しいというのにネタレスしただけです
>>634 俺はプログラマじゃないからな
この手の計算は年がら年中あるよ
maximaとかmathematica使わんの?
自分の知っている範囲を世界の全てと思い込むのは愚かなことだ
>>640 遅いから駄目
大量データモンテカルロを高速にやるとかの用途に不向き
C99にはcomplexもimaginaryもあるよ
C99に代わる言語ってSFでもむずかしいよ
complex型いらないけど、文字列型は必要なんていっているのは、まったくわかっていない。
C99は普及率がイマイチ、やっぱ普及率って大切だな 新言語ってどんだけ優れてれば良いんだろう。文字列型は便利
C/C++で実数のデフォルトはdoubleってことを分かってないのが多いな。
>>647 分かってるとなんかいいことあるのか?
いいこと書いてみな
>>647 デフォルトの意味がよくわからないが、doubleに変換して計算という仕様は変わった。
charのデフォはunsignedにすべき そもそもcharって名前が悪いからuint8_tでもbyteでもいいけど
>>650 昔はその処理系も多かった。signedは、その名残。
Javaは、byteもsigned。
虚数が中学か。すげえ天才じゃね
>>651 ctypesのマクロに渡すときとか
符号拡張避けたい時にいちいちunsigned charにキャストしないといけなくて
ムカムカするんだよね
signed charでいいと思えることなんて一つも無い
全くASCIIのことしか考えてない馬鹿共は
>>473 auto,externはいらないに賛成。
static関数はprivateにしたい。
メンバアクセスは.だけいけるところまで行けばよいと。
->は別機能用に使うとよいかと。
整数とかfixedでもサチるやつと 回っちまうやつがあってもいいな
octet型も欲しい所だ
ビット演算周りの演算子優先順位は見直して欲しい
>>657 それは初期から指摘されているが、この間違った優先順位を変えるのはもう遅い。
やるなら記号も変える。
bit string (短い範囲で)と連結演算子ぐらいは欲しい
なんかワーニングオプションの要望ばっかだな
言語の規定に warning はウォーニングと読むと明記して欲しい。
/awrg?n/
今の段階で型云々言うなよ。演算子も早過ぎるだろ。 そもそも型システムと型関係の機能はどうすんだよ。 関数・演算子呼び出し一つとっても、型による多態/パターンマッチング/動的・静的とか 考えることたくさんあるのに。
>>661 あっそれ欲しいw
ワーニングとかバカかよと思う。
くだらね
ウォーニン
全部英語表記にしろ
ウォーニング の検索結果 約 122,000 件中 1 - 10 件目 (0.12 秒) ワーニング の検索結果 約 147,000 件中 1 - 10 件目 (0.20 秒) star wars スターウォーズ warp ワープ ぶっちゃけどっちでもよくね
アルトラマン
スクールワーズ
SFで普及してしまった「ワープ」が諸悪の根源。 あれが「ウォープ」でありさえすれば...
>>669 野村克也「人間の最大の罪は鈍感であることだ」
674 :
デフォルトの名無しさん :2010/04/19(月) 08:43:39
言語的に無理
>>664 これ見たけど型の種類多すぎじゃね?
octetは数値を扱うためじゃなくてビット操作用なんだから8bit1つのみで十分。当然符号もいらん。
その代わりビットオーダー、配列にしたときのバイトオーダーを厳格にすればいい。
整数型はsintとuintがいいんじゃないか?符号を明示しない場合、潜在的な環境依存を含むことになる。
極少数の実装者が困るより、多数のプログラマが困るほうがより邪悪だ。
あとbooleanがないな。
>>673 アップル→アポー
ゼロ→ズィーロウ
エッチ→エイチ
ガラス→グラス
ヒレ肉→フィレ肉
とかそんな感じで以後よろしく
ウォーニングを正しい発音だと思ってる俺カコイイとか
どこの中二病だよ
>>685 octetという要望が出てくるのは、歴史的には
8bit=1byte=charな計算機ばかりじゃなかったからじゃないのかな
多分
というか、Wikiにまとめられてるのを見ると
カオスっぷりというかネタっぷりというか
ただの雑談をまとめるとこうなる、というレベルの低さが際立つなーと
俺は改めて思った
>>676 ワーニングを気持ち悪いと思わないほどの鈍感な奴には何を言ってもムダだな
あと、「グ」を気持ち悪く思わない時点でもう土着日本人だから
言語の話しろよw ウォーニング単体の話に他の話を混ぜてどうにかしたい人がいるということぐらいしかわからん。
なんでそんな必死にワーニングを擁護するんだろう
その人のアイデンティティーか何かなんだろう。 三つ子のワーニング、百まで。
>>683 べっべつに必死でワーニングの擁護なんてしてないんだからね!
マジレスすると、ぐぐってワーニングのほうが多いほど定着してて
意味が通じないわけでもない用語に今更ケチつける意味が理解できない
しかも「2chで」だ
んなもんどっちでもいいだろ
つーかこの手の議論はfjのvoidでさんざん見飽きたわ
>>685 だからそういう、みんなが言ってるんだからいいじゃん、ていう考え方を鈍感って言ってんだろうが
>>686 いやだから、お前は自分の信念に基づいてウォープとかアルトラマンとか
言ってれば?
俺は止めないから
なんでワーニングの話なのに別の単語を必死で持ち出すんだろう
>>688 馬鹿にも分かるように言うと
war
warp
warning
全部warの部分の発音が一緒だから
ワープは良くてワーニングがダメなおまえさんの理由を言ってみな?
話を摩り替えてることに自分で気づいてないらしい
Honesty is such a lonely word アーネスティ サッチャ ロウンリ ワード
そのうち全ての英単語はカタカナで表記できないと言い出す方に1000カノッサ
誰か > ワープは良くてワーニングがダメなおまえさんの理由を言ってみな? これに答えられないの?
誰ひとりそんなことを言ってない件
んじゃあ、なんで「ワーニング」をキモいと思うべきで そう思わないのは鈍感で 「ワープ」との違いは何なの?
どんどん違う単語を出せば永遠に逃げられますよね
要するに、合理的な理由を一人も説明できないけど 中二病だからケチだけはつけたいってことでおk? ・発音が同じ ・表記の仕方も同じ ・定着してるからみんな使ってるということも同じ だから「ワープ」の例を上げてるんだけど そんなことも分からないほど馬鹿なの?
ワーニング娘。はワーワーワーワー
定着度合いが圧倒的に違う例を出してバカが必死、としか見えない。
charをチャーと呼ぶかキャラと呼ぶかみたいなもんだろ
チャラ
あとチャーもあるな
>>702 カーだとLispのcarと紛らわしいな
>>697 アルトラマンは無かったことになったんですかw
>>669 「定着」って数の論理は認めるんだろ
なら今更ダダこねてももう無駄だから諦めろ
ずっと前から「ワーニング」は使われてしまっていて、グーグルでも
「ワーニング」のほうが多い
幸い「ウォーニング」も多いから、「ウォーニング」を使いたい奴は
こっちを使えるが
日本語としては本来「警告」で済む話だ
なんでそんな必死なの
俺がド厨房な上に、虫の居所が悪いからさ
おまいらアホやな 発音記号で出力したら無問題
ウァーニングでいいじゃん
ウボァー
>>709 Unicode使うにしても
タイプすんのめんどい
デフォの文字列リテラルをUCにするオプションは欲しいな。
wɔːɼniň ŋ
wɔːɼniŋ
octetに加えるならbigendianとlittleendian装飾もほしいな 普通に bigendian uint16_t netdata; uint16_t data; if (data > netdata) ... ローレベル言語チックじゃねえか
ロベール?
関数を装飾化する定義構文があれば全部解決するんだろうか?
口ゥレヴル
>>717 ちょっと面白いけど
byteswap系の関数やhtonl()の類を標準ライブラリで提供してくれれば
十分な気がする
>>721 半分はネタのつもりだが
hton系は型セーフじゃないし、両方同じの使っちゃう奴もいたりするし
I/OなんかでもBig系Little系があったりするし面白いかなと
ロゥレヴォゥ
一気に糞スレになったな
一瞬でも糞スレじゃなかった瞬間があったかよ
726 :
デフォルトの名無しさん :2010/04/19(月) 21:31:13
俺思うんだけど、CPUの実装の違いを隠蔽するような、 低水準高級言語というアプローチが、Cの最大の欠点だと 思うんだよね。も乳論、誤変換だけど面白いからそのままで、 もとい、もちろん、当時の技術水準とかコンパイラの大きさ という問題が有ったのは確かなんだけどさ。 インテルの浮動小数点は、80bitなんだし、余所のCPUは 64ビットだったりするわけじゃん、これはこのままで良いと思う。 大切なのは、コードを移植するときに安全確実にその問題を把握 出来るか?ところで、ライトワンスは求めちゃいけないと思う、 というかそう言うのは、他の人たちがやってるから、もの凄い 便利な機械語、アセンブラ、というアプローチで行くべきだと思うんだ。 もろちん意図的に打ち間違ったけどそのまままで、 まとい、また意図的に打ち間違ったけどこのままで、 もちろん、文字列とかいちいちアセンブラレベルで作るのは面倒なので、 標準関数で処理するべきだと思うんだけど、そういうアプローチで行くべき だと思うんだ。 SIMDとか、各社各様に出てるのを上手いこと使いやすくするって言う アプローチで言語設計した方が良いと思う。
アセンブラ使ってろよ 86が一番多いと思ってんの?
インテルはfpuやめてsse2に移りつつあるよ
面白いと思ってんの?
だいたい当時の技術水準とかあまく見過ぎ
Aという機械に合わせてバイナリを吐くのはA用コンパイラの仕事だと何度言えば
732 :
デフォルトの名無しさん :2010/04/19(月) 21:50:06
具体的に言うと、8bitCPUでも16bitCPUでも intはintだったのが、C言語の混乱で、int8だったら 良かったんだよね、でもこれじゃあ、16bitへ移植するときに int8をint16へエディターで変更しなきゃならない。 一括置換でいけるとは言えるんだけど、それで良いのかって 言えばそうでもなかったりするとは思うんだ。 そこで、提案なんだけど、COBOLからEnviroment Divisionを 持ってきて、そこに様々な環境固有情報を記述して、コンパイラに 状況を設定させると言うアプローチはどうだろうか? ENVIRONMENT DIVISION. ORIGNAL SOURCE SECTION. charctor set EUC_JP. double intel_80bit. END-DIVISION. こう書いてあれば、"初めまして"という二重引用符の間は EUC_JPで記述されているって言う事ね。 で例えば、UTF−8の環境でコンパイルしたいなって時は、 ワーニングモードを設定して、オリジナルソースをそのまま コンパイラに喰わしてやると、 string buf1[8]; char buf2[17]; buf="12345678"; ←これはOKだけど strcpy(buf2,"12345678");これはコンパイルエラーになる。 memcpy(buf2,"12345678",17);これはOKだけど警告が出る っていうことが出来る言語設計があれば良いと思うんだよね。
733 :
デフォルトの名無しさん :2010/04/19(月) 21:54:39
>>731 だからそう言うアプローチで言語を最大公約数的に言語を設計するのは
もうね、限界だし、他の人がやってるし。
面白くないじゃん。せっかく色んなCPUが有るんだし。
>>727 だから、アセンブラ使っちゃえで終わるかどうかってところなんだよね。
やっぱりプログラミング規模が大きくなると見通し悪いしさ。
低水準高級言語というアプローチは大切にしたいじゃない。
このアプローチが大正解だったので、未だにC言語は廃れないし。
いやいや最新の技術を使って xmlで定義だろ
735 :
デフォルトの名無しさん :2010/04/19(月) 21:58:11
で、言語というアプローチも大切なんだけど、コンパイラーという 部分の役割も大きくなって来るというか、コンパイラーを意識した (コンパイル出来るとかだけなじゃなくてもっと具体的に意識した) 言語設計というアプローチになると思うんだよね。 ンで、具体的に言うとllvmがこれを意識してる訳じゃないけれども、 この辺の課題を解決するために、この辺の課題を意識した設計になってる でしょ、だからこういうアプローチを言語設計に持ってくる言語設計も 可能な時代なんじゃないのかなって思うのですよ。
>>733 最後の一行だけで話終わったな
論理が支離滅裂だし知識も無茶苦茶だし
ネタならもうチョイ練ってくれ
737 :
デフォルトの名無しさん :2010/04/19(月) 22:05:40
馬鹿すぎ。コンパイラを意識していないコンパイル型言語なんて無い。 一件不合理に思える言語仕様も、コンパイルの速度や最適化の効率などを考えて作られてる。 きちんと最適化までする実用に耐えるコンパイラを作ったことがなきゃ、言語なんてできっこない。 結果として言語仕様は実装に縛られないものができたとしても、 実装を意識せずに作られた言語は無い。
738 :
デフォルトの名無しさん :2010/04/19(月) 22:08:49
>>737 文盲がそう言うレスを付けるだろうなって思ってた。
いつもの文盲さんこんにちは。なんで2chには
どのスレ行っても、君のような文盲がいてるんだろ?
739 :
デフォルトの名無しさん :2010/04/19(月) 22:11:08
>>734 結果XMLという話は出てくると思うけど、
まぁそう言うことなんだよね。最小公倍数というか
公倍数的なアプローチを行うよ、という言語設計。
でも、いきなりにXMLとか言い出すと、XMLみたいに
なんか定義定義ばかりで話が進まないとは思う。
2chでは思考や思想が並列化されてるからな
スタンドアローンコンプレックス現象ってやつだわさ
>>738 みたいなレスも何度か見たことあるし、あるいは俺も書きこんだことがあるかも
昔設計された言語は、コンパイラのことあまり考えられていないね。 COBOLとかPL/I
>>739 公倍数て…あんたそりゃ高級言語の思想だよ
基準を最上位に持っていこうとするのが公倍数、つまり高級言語
基準を最低位に持っていこうとするのが公約数、つまり低級言語
根本から目指してるものがずれてる
>>737 Cは最適化からかけ離れた言語だけどね。
>>743 ポインタは鬼門だあな
でも手動で最適化するなら最高だが
明示されない限りポインタはデフォルトでrestrictにしてほしいな
そういや99にはrestrictがあるな
>>743 代わりに、コンパイラが最適化しなくても人力で最適化出来るようになっているね。
おかげで、手っ取り早くコンパイラの実装が出来る。
>>746 難しいだろな
restrict自体危ないと思うんだよな
いわば最適化が目的の小細工に過ぎないからな
751 :
デフォルトの名無しさん :2010/04/19(月) 22:41:31
>>744 皮肉で俺の言ってる真意を理解していないことは知ってるけど、
でも、まぁ、文盲よりは理解してると思ったので。
つまりそう言うことなんだよね、XMLで抽象化するアプローチと
原理的、思想的に、似てる部分は有るんだよ。
そう言うことを言ってるので、君は皮肉として書いたとしても、
皮肉にならないんだよね、そこまで理解した上で書かないと皮肉に
ならないと言うこと。知性の圧倒的な量の違いで君のちっぽけな
脳みそと感情から皮肉だとしても、そして俺はそれを理解したけども、
君がどうなろうと俺の人生にはまったく関わらないので、
>>739 を
書いた。とこれだけかみ砕いても君には理解できない世界の話。
じゃあ知性が足らないから訊くが あんたのイメージに今一番近い言語はなんた? バックエンドの仕事を設計に持ち込んだ言語なんて不要だし llvmってなにかしってる? わり。ネタにならないネタに反応しちまったよ
>>751 をもう放っておいてやれよ!
可哀相だろ!先生に言いつけるよ!!
754 :
デフォルトの名無しさん :2010/04/19(月) 23:07:36
>>752 今、イメージに一番近いのは、llvmの中間表現。
これをもう少し人間が使いやすい形に出来ないのかな?
という発想と、それをするとソースのポータビリティが
無くなってしまうけども、それはそれで良いのではないか、
そもそもソースにポータビリティなど求めるのは違うのではないか?
と言う疑問点から落としどころ模索するべき、じゃないかという話。
組み込みやってたらいつも思うんだけどさ、2進数の数も扱えるようにして欲しいんだよね。 あとビット演算ももっと強化できるはず。
1bitの型があればいいんだけどな。 最適化でいくつかのbit型をまとめてbyteで処理したりできそう。
>>756 遅くなる、ビットフィールドがある、バイナリ互換性で問題が出る。
>>753 わかったよw
>>756 つvhdlw
bitはビットフィールドでいいが
数値の2進表記はほしいね
0b01010101みたいな
ライブラリの話になっちゃうけど stdioでfunopen()/fmemopen()の類は標準にしてほしい そのうえで、stdioをbitstreamとしても使えるといい getbits() putbits() みたいな感じで
>>757 型安全であればコンパイラがビットをどのように扱おうと気にする必要はないのでは。
気になる人は最初からバイトで扱えばいいだけだし。
>>755 仕様書見てそのままビットパターンを書き込めたら楽だよねえ。
>>758 そういう表記方法を定義する一般的な方法を定義するにはどうすればいいだろう?
>>762 pragmaで制御できるコンパイラもあるんじゃないか
>>748 手動最適化は今や最適化の邪魔にしかならないけどな。
C言語に足りないのは型安全性なんだよな。 型理論でカチカチに作り直したい。
>>763 決めちまえばしまい
会議のルールを決める会議はいらない
再帰するだけ
>>766 具体的に、どういうものが安全ではないのですか?
>>767 それだったら言語が普及してからこんな記法があったら良かったのにね、
ってことになって不満要素になるだろ。
それだったら、後で仕様変更が簡単になるようにメタ記法を考えた方が後の人のためになるでしょ。
>>765 手動でオプティマイザを導いてやるなんて普通だろ
試して遅いなら戻すだけ
ダメダメなコードは頑張ってもやっぱしダメダメだし
>>770 んで書く人毎に違う何かが出来るわけだ
言語設計で決めちまえばしまいじゃん
>>772 おう。知らんかった!
このスレで始めて有益な情報がw
>>773 デフォルトを言語仕様で決め、後で違う記法も追加できる、という仕様が望ましいな。
言語仕様は決め事だからね 追加はまた後で!でいいんちゃう メタな機能は黒魔術に陥る危険が危ないよ
マクロなlispマジック大好きなんだけどな。
魔法のコードは 書いたヤツよりレベルが低いヤツには理解不能で 上のヤツには鼻で笑われるのが落ち
779 :
デフォルトの名無しさん :2010/04/20(火) 00:20:08
新言語では少し練習すれば誰にでも最上級の魔法を使えるようにしたい
目的が違うだろそれは
>>769 例えばchar型に関していえば、
それが単なるバイトとして扱われているために、
数値も文字もゴッチャに扱われる。
782 :
デフォルトの名無しさん :2010/04/20(火) 00:37:14
魔法は目的ではなく手段だ。
mahaですね。わかります
>>778 そんなことありません。鼻で笑う人は心が病んでいるのです。
>>776 Haskellなんか昔と今では仕様がガラッと変わったけど、
コアの仕様は何も変わってないよ。
なぜなら、仕様のほとんどがメタ機能で出来ているから。
ちなみに、厳密に言えば関数もメタなんだよ。
785 :
デフォルトの名無しさん :2010/04/20(火) 00:40:29
reg [7:0] uint8; reg [15:0] uint16; reg [31:0] uint32;
メタ機能は死んでくださーい
強い静的型付けこそ正義だよな あとLispみたいな〜って議論が結構あるが、 ラムダ関数を演算子化すればおkじゃね?
>>787 無名で関数定義するだけなら害はないよな
でもクロージャとか欲しくなると
ローレベルでは難しくなる
790 :
デフォルトの名無しさん :2010/04/20(火) 01:24:35
791 :
デフォルトの名無しさん :2010/04/20(火) 01:37:50
スタックマシーンでクロージャーって実現できないの?
wikipediaの"クロージャ"の"実装"を見たらなんとなくわかるよ
793 :
デフォルトの名無しさん :2010/04/20(火) 01:49:23
いや、今ある一実装を知りたいわけじゃないんだけど。
>>787 強い静的型付けでないと、バグ追跡が難しくなるんだよね。
charに整数も文字も入れて使う場合でも、
整数型と文字型を分けて相互に型変換して使う場合でも、
どっちにしても結局は簡単な最適化で同じ結果になるんだから、
非効率ということはないだろうしね。
>>794 その辺りが時代錯誤ということなんだよね
文字も内部では数値だから数値扱いのほうが(機械にとって)効率的→うん確かにその通り
でも使うのが人間である以上やはり文字列型は文字のみを扱えるべきなんだよ
796 :
デフォルトの名無しさん :2010/04/20(火) 07:58:36
型宣言だけ強制と言うのも変な話だよね。 他のassertと同様任意でいいんじゃないかな。
低レベルな用途には文字列なんてオマケ gc前提なら他言語で普通にある メモリ管理なしな文字列型で 結合すら出来ないならいらん てこと。
799 :
デフォルトの名無しさん :2010/04/20(火) 08:09:14
>>795 と、言うか、文字列とバイト列は違うもんだし、
文字列やバイト列にサインは必要ないんだよね。
これを数値と同等に扱うのは本当に無意味な言語仕様
だと思う。
>>797 GCが無くても文字列は扱えるんだよ。
GCが有っても1024桁の数値は扱いにくいのと同様。
色々勘違いしてるので面白いと思う。
別の言い方をすれば「数値であることが隠蔽されている」のが望ましい そうでなくても文字コードは1byteのASCIIだけじゃないんだから数値演算で文字を扱えるのはおかしい
>>799 勘違いね
多分お互い低レベルの意味が違うんだろ
メモリ管理なしの文字列なら
今のCのchar配列以上にはならんよ
例が無意味過ぎ
>>802 固定長ならchar []と変わらんだろw
文字コードとか持ち込むとややこしくなるし
ま、文字列とバイト列が違うといいたいのはわかるが gc無しでは型を分けるメリットが薄いでしょ
>>803 もともと型安全の話をしてるんだが?
符号ありの1byte幅の数値ハイブリッドchar型で文字列を扱うのがおかしいって話
そこが解消されればchar[]のような使い方で何の問題もない
806 :
デフォルトの名無しさん :2010/04/20(火) 08:55:33
>>804 CPU依存型(言語仕様)
整数、実数、バイト、番地
CPU非依存(ビルトイン)
ポインター、バイト列、配列
CPU非依存(ライブラリ)
文字列型。
>>801 おまえ、本当にアセンブラ組んだこと有るのか?
それから、CとC++とCOBOLとフォートランとJAVA組んで
納品したこと有るのか?
組んでって・・・
808 :
デフォルトの名無しさん :2010/04/20(火) 11:21:43
rorだっけか。 ビット回転とか、上下4ビット交換とか Cではインラインアセンブラになる命令の演算子が欲しいな。 対応できないアーキテクチャの時は エラーを吐けば良いと思う。
>>806 ねえ、オープンソース勢より品質の低いコード書いてる人って
何でそんなに業務アプリを作ったら偉いみたいな言い方をするのかな?
俺は業務アプリは書かない系の業界人だけど、
正直言ってソース公開できる奴はコードに相当自信がある奴だと思う。
自分のソースを晒すのってケツの穴を晒すようなもんだからね。
この業界で仕事でプログラミングしてる奴の95%は糞コードしか書けないと自信をもって言える。
>>809 横から済まんがおまえの言ってることは支離滅裂だぞ
業務で作ったソースは当然公開出来る場合と出来ない場合がある ソースが公開出来ないのはまだマシで完成品を公開出来ないこともある もっと言えば何を作ったか話すことすら禁じられている場合もある
812 :
デフォルトの名無しさん :2010/04/20(火) 12:45:21
>>811 なにがなんでも書き込まなきゃ気が済まない人かよ。
議論がとっちらかるから、自重してよね。
ニフティじゃないんだから、そう言う話題なら腐るほど
別にスレがあるじゃない。
>>808 SIMD系の命令って言語仕様に組み込もうにも、ほとんどアセンブラに
なっちゃうから、アセンブラのまんまなんだよね。
でも、そろそろ、言語に組み込んでいった方が良いとは思う
>対応できないアーキテクチャの時は
>エラーを吐けば良いと思う。
その場合はソフトエミュレーションすれば良いと思うんだ。
CPUの性能を出し切れるけども、出せない場合はソフトえみゅ
この辺を見通しよく出来る言語が良いと思う。
ライトワンスは最初から諦めて、でも移植しやすい言語仕様。
そういう方向性が必要だと思う。
そういう細かい機能は、Cなどの既存言語を拡張したらすむ話問題。
814 :
デフォルトの名無しさん :2010/04/20(火) 13:03:03
>>813 >>1 の主旨に沿う気が無いのなら、書き込まなきゃ良いのに。
拡張ではなく、そう言った問題を解決するために、ゼロベースで
考えようというのが
>>1 の主旨でしょ。
まあ
>>1 の主旨ってのもデタラメだけどな。
現実にCがあるのに、Cが無かったとしてなんて考える意味ないし。
>>814 ゼロベースだろうが既存の拡張だろうが、そんな細かいことは、ものができてからやればいいこと。
817 :
デフォルトの名無しさん :2010/04/20(火) 13:44:25
>>815-816 そう考える人は別のスレに行けば良いだけ。
わざわざそんなこと無駄とか言う必要ないじゃん(w
お前の仕事になるわけでも無いし。
よっぽど人生が貧しいんだと思うのだけれども、
なんでまたわざわざ、自分が何一つ協力する気がない
構想に口出しするんだ?
>>817 おまえ協力してんのかよw
グダグダ勝手なこと書いてるだけじゃん。
819 :
デフォルトの名無しさん :2010/04/20(火) 13:53:54
まだ、ブレスト段階でしょ。 社会人やったこと無いのかよ・・・
社会人どうこういう奴は社会人にコンプレックスを持っている人間ですw
つまり、
>>819 はニートですね?ww
ブレスト??? こんなgdgdなやりとりがブレスト??? 何一つ現実的な目標もないし、何一つ効果が得られそうにない話がブレスト??? 冗談だろ。どんなぬるい環境にいるんだよ。
822 :
819 :2010/04/20(火) 14:08:20
すいませんブレストって言ってみたかっただけでした
普通、自分が社会人だと認識しているなら、 他の誰が社会人なのかなんて気にならないよな。 それに、ちゃんとした技術者なら自分が技術的に学生より優れている点なんて ほとんど無いことぐらい承知しているはずなのにね。
>>823 おまえさっきから言ってる意味ぜんぜんわかんない
"普通の"人ってこんなふうに考えるよね って事を言ってるだけ。 別に複雑な事や論理的な事をいってるわけじゃないよw
いっそのことCPU限定で言語を作ってしまったらどうだろう。 すべてのCPU毎に言語をカスタマイズするわけさ。
今日は支離滅裂なキチガイが棲みついてるわけか
非ポータブルという時点でC/C++の代替にはならないので スレ的にはスレ違いだと思うけど
831 :
デフォルトの名無しさん :2010/04/20(火) 14:38:25
>>827 俺が言ってるのはそれに近いンだよ。
ENVIRONMET DIVISION.
を有効活用して、可搬性を持たせたいなと。
ただし、オリジナルのソースは絶対に他のCPUじゃうごかねぇと
動かすためにどこが不味いのか、これを徹底的に報告出来るような
コンパイルシステムがあれば、CPUの発展にも良いと思うんだよね。
可搬性を意識しないでプログラムが組めるし、CPUも開発できる。
違うCPUで動かしたいのなら、何とどこが不味いのか、それを
チェックして報告してくれる、そんなシステム。
827は「それってアセンブラだろ!」っていう突っ込みを期待してるボケだと思うのだが
言語がCPU特化のほうが潔いと思うね。
CPU毎に用意されたバージョンのコンパイラを使ってコンパイルし、
それぞれをリンクして、CPUを判定して利用する部分を切り替える。
>>832 アセンブラを抽象化しつつ、CPU独自の機能を使えるようにする。
高度な設計手法を使うことを意識した構造的なプログラミング言語を目指す。
仕事一服
>>806 FortranとCobolはねえなw
VBは若い頃一回だけあるがw
tcl/tkやperlやらjavaやらphpはあるな。
組み込みメインだからアセンブラなんて当然
デバドラやらRTOSとかtcp/ipやら
usbスタックも作ったし
Cコンパイラ移植もやったなw
ま、普通だよ
今は若いもんにかなりやらせてるがな
>>832 マクロアセンブラだわなw
ソースなんて90-95%も可搬ならいんだよ
コード内にCPUの情報入れるとか正気じゃないなw
ああ、いい過ぎ 今はtypedefやらdefineでヘッダで吸収してるわな ま情報入れるなら型決めちまった方が楽だな occamみたいな並列実行ヒントやら サチる整数はあってもいいかな dsp系の命令かけるな
>>833 Cをそれにコンパイルしたらどうだろう!
ソレ、単なるアーキテクチャ依存の最適化じゃねーか
840 :
デフォルトの名無しさん :2010/04/20(火) 19:18:44
>>839 それを簡単にこなす言語処理系が無いんだよ。
アセンブラ使うか、C言語コンパイラの挙動を予測しながらの
コード記述。
で、この20年間の歴史はCPUアーキテクチャーの整理に有ったけども
逆に、よりとんがった実装をしても相手にしてくれないという閉塞状況にも
追い込まれた訳よ。CPU設計者はもっと自由に設計すれば良いと思う。
それを受け止める、言語が今必要とされているんじゃないかと思うわけだ。
ここに述べたことを考えるに変えると、ちょっとしたレポートになるぞ(w
そうだよな! 今必要なのはリスト操作とスタック重視アーキテクチャしかねえじゃん! 文字列操作もメモリ確保もCPU内蔵だぜベイベー
CPUは必要最低限の命令だけを搭載させるべきだろ。 その方法で富士通のVENUSは世界最速じゃん。
必要最小限って言っちゃうと、チューリングコンプリートであればいいのか? って 言われちゃうぞw
RISCの失敗
RISC は何も失敗してないだろ。 Intel を駆逐するという予想が間違ってただけで。
>>844 設計思想が失敗だったんじゃなくて、もっと泥臭い商売的な意味で失敗しただけ。
Intelの猛烈な商売根性に圧倒されただけだね。
>>844 デスクトップではね。
組み込みはほぼRISCが制覇
>>842 なにいってんの!gcもいっそ内蔵しちまえば最強だぜ
現にSPARCベースのVENUSはMIPS/Wも世界最高。 でも量産効果でIntel製の方が安いから普及しないw 可能性としてはSPARCの方が効率的らしいけどね。 iPhoneやiPadが普及することで非IntelアーキテクチャのCPUが 使われることが当たり前になったら、RISCも復権するかもしれないね。
あのーふつーの携帯電話はRISCですが。
低級なのは言語じゃなくて書き込んでる奴らだったようだな
x86からはなれても、RISCにはならないだろう。
ここにいる奴らは全員他力本願な何もできないクズ ソースは俺
はい
>>851 つか、86以外はほとんどRISCw
86も内部はRISC
TIのDSPはVLIW
ま4bitとか8bitは除くがな
うんこ
DSPとか優秀だよな 速度の割に熱くならねえ
とりあえず頭良い人がcコンパイラ作ってよ。
858 :
デフォルトの名無しさん :2010/04/20(火) 23:01:20
859 :
デフォルトの名無しさん :2010/04/20(火) 23:04:05
今のIntel Core内部はRISCというよりはVLIWだろ。
860 :
デフォルトの名無しさん :2010/04/20(火) 23:08:22
新言語にはデストラクタに相当する機能が是非欲しい。
今のRISCは、単純な命令ばかりでとは言えない。
それは昔から。
優れたCPUが存在しても相変わらずIntelべったりにならざるを得ないのはWindowsが原因なんだろうな。 許せないMS
RISCの命令の種類が少なかったのなんて、ほんの初期だけだからな
>>863 クラスは知らんが、オブジェクトはあるだろうな。
867 :
デフォルトの名無しさん :2010/04/20(火) 23:24:08
>>864 Intel以外のCPUは優れていないから淘汰されたんだよ^^
868 :
デフォルトの名無しさん :2010/04/20(火) 23:31:41
C#のイベント機能をそのまんま割り込みに使えるようにしようぜ
>>868 割り込みっていろいろ条件があるし、優先度もあるし、内部機能の数によっても決まるし・・・
870 :
デフォルトの名無しさん :2010/04/20(火) 23:40:49
そういうのを包括できるような新言語を作ろうって話だろ 割り込みなんて大抵のCPUは、許可、不許可、優先度、ハンドラ関数くらいしか 設定することないんじゃないの?
>>864 かつて、Power, Alpha, MIPS用のWindowsもあったし、Windows CEだったらx86はアプリ開発用しかない。
割り込みはCPU毎に違いが大きいからなー ハンドラくらいしか一般化出来ねえな Signalで補足出来たら面白いがな
違い?具体的にどう違う?
>>872 ん? Windows CE、x86で走ってるぞ。
>>875 おはよ。
一つはハード面、も一つはOSなんかのからみな
まずハード面では設定項目は似てるがハード構成が結構違う。
RISCなんかはコアの割り込みは一本で
信号線はコントローラ任せで
ステータス見て自分でテーブルとかで分岐だけど
コントローラ内蔵なCPUはベクター割り込みは自動だしね。
他にもコントローラには割り込みトリガー設定とかも必要かもしれんし
コントローラが外部デバイスだったりするかもだし
CPUはレジスタセットが切り替わるかもだし
スタックも切り替わるかもだし
MMUも切り替わるかもだし
OSに関しては
割り込みからユーザの関数コールまでの間の
アセンブラルーチンにコンテキスト保存を仕込んだりするわけだし
多重割り込みの処理もしないとだし
場合によってはコンテキストスイッチするかもしれん
言語でやるには要求が多いし違いが大きいと思うがね
ちゅーより下回りの共通ライブラリってのならありと思うけど。
例外やらSignalで処理出来たら面白いとは思うが
いろいろ考えると出来るとしてもせいぜいレジスタ保存とかが
出来るようなハンドラ記述レベルじゃね
んなもんインラインアセンブラor外部モジュール結合でいいだろ 抽象化不可能とわかってる部分まで抽象化しようとすんな
抽象化可能だが、具体的に扱うのが低級言語だろ。
悪化は良貨を滅ぼす x86、ARM、SPARC、PPC RISCでもCISCでもアーキテクチャーの汚いものだけが残って 美しいものは消えていく運命にある。 今はMIPSが最後の砦だ。
iPhoneにはARMが入っているわけだが
CPUを売る能力がある企業は天才よりも組織に順応しやすい人間を選ぶからじゃないかな。 綺麗なアーキテクチャを考える天才は技術はあっても商才がないので売れないと。
obj.x;でobj.x();が、obj.x = 1;でobj.x(10);が呼ばれる、みたいなプロパティっぽいシンタックスシュガー機能搭載してください
>>878 868,870へのレスだよ
割り込みの抽象化は意外に難しいぜといいたかっただけ
ライブラリで済ませれるなら出来ない話じゃないがね
本質を抽象する言語を開発したい
>885 数学で十分だと思っている僕は負け組ですか
yes
もしも抽象データ型が発明されていなかったとして、新たに作るとしたら 本質データ型という名前にしたい
本質データ型はビット列を直接記述できます
bit列でしか記述できないほうが美しい
892 :
デフォルトの名無しさん :2010/04/21(水) 23:17:30
>>877 それを抽象化するのがプログラミング言語の仕事だろう。
割り込みの抽象化が難しいというのであれば、「変数」や「関数」や「オブジェクト」の抽象化だって難しい。
割り込みの抽象化が他の機能の抽象化に比べて特別に難しいことはない。
>>892 Cレベルの言語にとって
変数や関数の抽象化レベルはひくいぞ
一緒にしない方がいい
無知と浅薄がバレる
例外なんていわない方がいい
全く具体的な内容の無い反論。
もう全部877で書いたからな 一言でいうと言語でやるにはレイヤ違い
>>893 は「変数」や「関数」や「オブジェクト」の一般的な実装方法すら分かっていない。
既にあるから簡単だと思ってしまっているだけ。
「変数」や「関数」や「オブジェクト」と、「割り込み」に”レイヤー”の違いなんてないし
”レイヤー”に違いがあるとしても言語で合わせればいいだけの話。
割り込みの抽象化はOSの仕事だろ。抽象化の仕方もいろいろある。
>>896 話噛み合わないなw
変数、関数とオブジェクトを一緒にしてる時点でまず話がすれ違う訳だよ
俺は無理そうな理由は書いたから
どう言語に入れるか具体的に書いてみなよ
割り込みはOSが提供してるんだよ? そのOSを作れるレベルの言語の話をしてるのに…レイヤー違いにも程がある
>>899 割り込み自体はCPUの機能だよ
OSが提供してるのはそれをラップしたもの
番号振って統一的手段で使えるようにした割り込みサービスな
901 :
デフォルトの名無しさん :2010/04/22(木) 13:21:52
割り込み処理に関しては
>>897 >>900 で良いかな。
んで、話変えさせて貰いたいんだけど、例外処理って
便利だけど使いにくくない?アサートと例外処理が
分かれてるのは分かるんだけど、なんとかまとめられない物か、
もしくはもっと明確に分けられない物か。
アサートはどっちかというと、開発時点のバグ検出に使って、
例外処理は実行時のエラー処理だよね。これを了解してない
開発組織が有って、アサートを使いましょう。
例外は全部受け取ること、なんて言う鼻血レベルのCMM組織を
おいらは実際に見たことが有るんだ。
何言ってるのかよく分からない、説明を求めると、
オタク、オタク、とか言われてプロジェクト燃え上がらせる
組織にほんの少し、参加したことがある。
おいらの理解もちょっと怪しいんだけど、例外処理は仕様書レベルで
規定されてる、実行時例外に近いレイヤー処理に向いていて、何を
トライすべきか、何をキャッチするべきは、プログラミングレベル
じゃなくて、仕様レベルで規定していく物だと思うのですよ。
例外処理の説明にプログラムが想定していない例外が発生したときに云々
という記述があるのが不味くて、例外処理は、プログラムが想定していた
例外に対処する処理を便利に記述する仕組みだと思うんです。
902 :
デフォルトの名無しさん :2010/04/22(木) 13:33:34
>>901 以上が前置きで、アサートと例外処理、これは独自に発展してきた
物なので、別物になってるんだけど、そして別でも、まぁ良いんだけど、
この辺をもう少しすっきりまとめ直せないかとか思うんだ。
後、例外処理の投げる方の記述は読みやすく、理解しやすくで問題ないんだけど、
トライとキャッチの方は、どうも、直感的じゃないと思う。
try{
一つ目
二つ目
}
catch{
}
とか、インデントが下がるのも嫌だし
(逆に例外を受け取る意志が読めるんだけどなんか好きになれない)
catchを見れば何を心配してるかは、読めるんだけど、
どうもトライとキャッチの間が離れすぎてるような気がするし。
単に例外に馴れてないから、良い例外処理を使い切ったプロジェクトに
参加したことがないから、ただそれだけなのかも知れないんだけど、
例外処理って、とってつけたようなプログラムが多いような気がするんだ。
んで、その辺の事情って、構文に問題があるような気がするんだけど
どうだろうか?
普通にエラーコード決めて戻り値でいんじゃない
ひとことで言えばassertはデバッグ支援で強制abortする 例外処理は例外(エラー)という名の正常処理をするための構文
905 :
デフォルトの名無しさん :2010/04/22(木) 13:55:57
>>904 それは分かってるんだって、(分かってない人が多すぎるけど)
以下自己引用。
>例外処理の説明にプログラムが想定していない例外が発生したときに云々
>という記述があるのが不味くて、例外処理は、プログラムが想定していた
>例外に対処する処理を便利に記述する仕組みだと思うんです。
で、そうだとしても、
try{
}
catch{
}
が好きになれないんだよね。この辺の構文をもっと直感的に
出来ないのか、switch文みたいに
try(ファイルオープン)
catch 存在しない
catch 使用中
catch 権限不正
end-try
の方が見やすく、そして直感的じゃないか?とかなんだけど
だけどこうしちゃうと、
try{
一つ目
二つ目
三つ目
}
catch{
}
の形が難しくなるし、オブジェクト指向的に問題が出てきそうな
気もするし。
OS書くような低水準言語にtry-catchとかイラネ。終わり。
907 :
デフォルトの名無しさん :2010/04/22(木) 14:08:13
>>906 それはそれで一つの見解だと思うのだけれども、
>>1 はC++に変わるような、
と書いているので、try-catchに関しても考えてみたいと思うのです。
この構文は後から追加されたので、構文的にベストなのかどうか、
私は疑問で、ライブラリからのエラー通知に必要だから、最小限の機構として
追加された構文、と了解していて。
で、そもそも構文自体がとってつけた物なので、どうも使い勝手悪いんじゃ
無いのかな?という問題意識なんですよ。
setjmpとsignalに砂糖まぶしたもんだしな 元々汚いんよ ファイル開けたら失敗返してもらうもんさ
Cのレベルの言語なら例外はいらんだろう 高級言語における「例外」そのものの有用性については、今更疑う必要があるとは 思えん、モダンな高級言語には大抵例外がある C++の場合に限って言えば、C++特有の理由によって例外が使えないシロモノに なっている
goには無いな 理由はエラー処理をサボるからだそうな GCと相性はいいがね
goには無いな 理由はエラー処理をサボるからだそうな GCと相性はいいがね 大域脱出を多用したらわかりにくいのは当然だが。
同じことなので2回言いました^^
携帯からなんで切れたと思ったら書けてた すまんw
914 :
デフォルトの名無しさん :2010/04/22(木) 14:59:03
>>911 >大域脱出を多用したらわかりにくいのは当然だが。
これだーーーーーーーーー!!
そうなんだよね、当たり前なんだよね。言葉が見つからなかった。
例外処理の説明してる人間が、馬鹿に過ぎるんだよ、
if文の条件処理程度の意味合いで、説明しすぎてると思う。
大域で扱われる構文という、ところをもっとちゃんと説明しないから、
>>901 で書いたような組織が生まれる。というかストラップ先生は
悪くなく、あの人は言語設計者としての記述なのに、それを読めずに
ストラップ先生が、例外を積極的に使って欲しいと書いてるから、
プログラマーは全部キャッチしろ、とか言うプロジェクト標準を書く
プログラムが組めないPMを据えるCMM3組織にCMM3を与える
CMM認定機関が白痴なんだと思う、経済学部出身者がCMMの
公認トレーナーになっていて、経済学部出身の公認トレナーに発注してる、
棒巨大企業がおかしいんだと思うんだ。
と、まぁ愚痴はこの位で、でもそれでも、例外の構文はどうなんだろ?
そっちはどう? 大域なので、
try{
一つ目
二つ目
三つ目
}
catch{
}
そう考えると、この構文は必要ないと思うんだ。
たまたま、一つめと二つめで似たような例外をスルーする可能性が有っても、
それはたまたまで、キャッチ節をまとめるメリットは、タイプ量が少し減る
だけで、可読性、見通しに関しては逆効果だと思う。
構文に関してはあんなモンじゃないの? 他にあんまいいのも思いつかないけど
後携帯じゃないんだからw ストラウストラップなw
>>901 > 割り込み処理に関しては
>>897 >>900 で良いかな。
別にそれで良いけど、言語機能に割り込みを入れることには何も影響はないね。
新言語では割り込みを第一級オブジェクトとして扱えるようにしよう。
918 :
デフォルトの名無しさん :2010/04/22(木) 16:00:06
>>917 実はそれは有りだと思うんだよね。
例えばsignal構文みたいなのを作って、
OSでのsignal処理と、CPUの割り込み処理では、
書けること書き方書くべきことが変わるだけ、
という抽象化はあり得ると思う。
その辺詳しくないので、構文の提案をして欲しい。
インテルチップと他のチップ、UNIX系のOS、と言う具合に
提案してくれれば良いんじゃない?
POSIXだと標準のsignal()じゃなくてsigaction()使うし Windowsのsignal()は、言語標準だから仕方なくエミュレートして入れてるだけ 言語どころか標準ライブラリにも要らないと思う
920 :
デフォルトの名無しさん :2010/04/22(木) 16:07:14
try-catch-finalの構文上の欠点は、ブロックを伴うために通常の処理であってもインデントをしたくなってしまう点。 こんな感じの方が、場合によってはよいこともある。 try my_area (キャッチする例外) { キャッチ時の処理 }; 処理; 処理; 処理; delete my_area;
目標立てないとモチベーション上がらないだろ。 低級言語を作って、それを使ってMINIXを書き直す っていう目標はどうよ?
922 :
デフォルトの名無しさん :2010/04/22(木) 16:11:29
>>918 > インテルチップと他のチップ、UNIX系のOS、と言う具合に
> 提案してくれれば良いんじゃない?
「という具合に」といっても、汎用言語でアーキテクチャ毎に構文を変えるようなアホなことはしないだろ?
イベントとイベントリスナーの構文を定義するんだろうな。
923 :
デフォルトの名無しさん :2010/04/22(木) 16:23:25
>>922 俺は、Environment division提案した人で、
アーキテクチャーごとに可用範囲が変わるのは別に構わないと思ってる。
構文も出来るだけ統一した方が良いけども、違うCPUや同じCPUでも
違うOSに載ってるのなら、違っても良いと思う。
同じことは同じように、違うことは違うように書ければ良いと思うんだ。
なんども書くけど、ライトワンスは幻想、ライトワンスを目指したが為に
どれだけの非互換と、ポーティング時の悪夢に見舞われたか、同じように
書けば、どんなCPUでも同じように動くが、違う場所ではそもそも
書けない(コンパイルエラー)というのが、新しい低水準高級言語に
求められる性格だと思うんだ。
元々signal自体が割り込みの抽象化だしな チョイ斜めにずれた延長上にtry-catchがあるわけだ。 グローバルにtry-catchみたいな構文にするのがいいだろう 割り込み用にcontinuationみたいなことが出来ても面白い ま思考実験としてはいいが、ハード依存しすぎるw sigactionとかマスク関係を言語に取り込むのはアホすぎる むしろ実行中断して戻れるような制御構文を一つだけ考えて ランタイムから起動するような方が建設的じゃないか 単なる例外と違って外部ハードが絡んで条件が多いし 言語専用OSで下位をラッピングしたら出来ると思うがそれじゃ意味ないな OSのローレベル部分やベタな処理を書いたことがないやつが 書いてみたいってだけの流れに見える
try catchはscalaがc++やjavaとちょっと違いますね。 try {} catch { case AException => case BException => } と書きます。 visual basicのon error gotoならネストを深くしなくてすむのでうれしいですが、 gotoなのがいまいちです。 こんな感じでtry&catchがかければいいのかもしれませんね。 {try=> catch AException=> catch BException=> }
>>923 日本語でおk
つーかC/C++がライトワンスを目指した言語だなんて初めて聞いたわw
Javaと勘違いしてんじゃないの?
927 :
デフォルトの名無しさん :2010/04/22(木) 17:10:49
>>924 正直、Abs()と何が違うんだと言われるレベルだと思うんだけど、
それでもコンパイラーが知っているというのは、後々に違ってくる
と思うんだ。
「使えないシステムや処理系はエラーにする」んだと、標準に入ったところで 別に今となんもかわらん気がするけど…… 「使えない/意味を持たない環境では無視」でいい物なら、 #ifdefが減らせて多少楽になるかも 例えば near とか declspec(dllexport) とか Javaのsynchronizedみたいな例は、ちょっとこのスレ的には高級すぎるが、 あれもスレッドが利用できない環境では無視、の方法でいいんだろうな
あ、一行目は 使えないシステムや処理系「では」エラーにする の間違い
930 :
デフォルトの名無しさん :2010/04/22(木) 18:00:15
>>928 具体的にと問われると、妄想レベルになるんだけど、現状
intの隠蔽一つ見ても、uint16,int16や、u_int_16,s_int_16や、
uInt16,sInt16とかでしょ、なんかねもうね、うんざりなんですよ。
でこう言うのは、コンパイラが知らないからだと思うんですよね。
コンパイラが知ってるとなると、コンパイラの供給側で今回はこうするね
CPU作った人がこうしたいって言ってるから、とかね、いけると思うんですよ。
なんちゅうか、何となく。
931 :
デフォルトの名無しさん :2010/04/22(木) 18:02:27
>>930 あー例え悪いな、馬鹿に変なつっこみされそう。
でも、まぁ、コンパイラが知らないからぐちゃぐちゃしていくという
例としてあげた悪いこと。
でコンパイラが知ってればどう解決するんだってことはまだ模索中
だけども、知ってると言うことがまず必要だと思うって事。
>>930 intに関してはC99ではstdint.hが標準になったし
特に反対する人はいないだろう
>>923 > アーキテクチャーごとに可用範囲が変わるのは別に構わないと思ってる。
> 構文も出来るだけ統一した方が良いけども、違うCPUや同じCPUでも
> 違うOSに載ってるのなら、違っても良いと思う。
勝手に思ってろ。
アーキテクチャごとの仕様なんて、各アーキテクチャのコミュニティーで勝手に決めろ。
そのための自由記述できる領域指定の仕様を新言語に含めればいい。
__ASM{
<<ここに好きに書いてろ>>
}
ここでまず考えるのは汎用言語としてのアーキテクチャに依存しない機能だ。
アーキテクチャに依存しない割り込みハンドリング機能だ。
アーキテクチャ依存の機能は他所でやれ。
935 :
デフォルトの名無しさん :2010/04/22(木) 19:19:08
この素人が怖がってるのは例外じゃなくて割り込みだよ
割込み機能が単独で存在するのではなく、 割込み、例外、非同期IOとかを統一してイベント機能にするんだろうな。
イベントドリブンだと困るようなリアルタイム処理オンリーの組み込みはどうすんねん
例外を一緒くたに扱うのはものすごく違和感があるんだが…… 別物だろ?
例外と割り込みは全く違うだろ。 同じなのは、どちらもハンドラが起動されることぐらい。
イベントドリブンなプログラムで汎用的に役に立つのがコルーチン コルーチン欲しいな
例外=割り込みっていうCPUもある罠
ど素人がデタラメ言ってかき混ぜてるの図
未熟さを新言語で補えると思ってるとか?
>>937 どうするってどういう事?
別にリアルタイム処理すればいいじゃん。
>>941 その「例外」って何?
CPUの機能として「例外」があるの?ソフトウェア割込みのこと?
ゼロ除算とかページフォルトとかのことじゃないの
>>934 素人だが、例外も割り込みも普通にアセンブラとCで書いてるよ
怖いからな
スレの英才たちによって いよいよCPU固有言語にRTOSを組み込む日が来そうだなw
マジレスですまんが、CPU固有言語はイラネーは。
まずは汎用言語だろうな
CPU固有なら、構造化アセンブラでいいだろ。それなら、 asmをサポートしたC、あるいは、もうちょっと踏み込んで Turbo Cみたいにしてもいい。
952 :
デフォルトの名無しさん :2010/04/22(木) 23:49:09
CPU固有なんて好きにやってろ。 言語仕様にはout of scopeだ。
おまえらが週末までにどんなモノを出してくるか楽しみですわ。
やはりみんな直接は触れたくないようだな なんか出てるしな
ぶっちゃけ今のgcc以上に組み込みにも使える低レベルな高級言語はないんだし 超える仕様をお願いね♪
斜め上を通過するだろうな
え、CPU固有言語にRTOSを組み込んでくれんじゃないの? 割り込み周りはvxWorksが良かったな
正直、C以上に低レベルな言語は考えにくい。 だとしたら別の部分にこだわってみたらどうかな。 例えばライブラリが使い易い言語がいいな。 ライブラリを一つのファイルにまとめる方法を提供し、その一つのファイルを適当な場所にコピペしたら リンクとかライブラリパスとかインクルードパスとかそんなの設定しなくても呼び出したら勝手にやってくれるのがいい。 中二言語とかいうなよ。使い易いんだからいいじゃん。
C≒アセンブラだからな
どういう人を対象にするかも決めといた方がいいな。 俺は中高生対象の低級言語を目指したい。
中高生対象の勉強用低級言語な。
だとしたら打倒Cより打倒VBの方が近い
>>960 まぁ、実際にできたとしてもエンタープライズでは使ってもらえないだろうな。
こんなところで考えた怪しげな言語なんてw
大学で作れば附属の学校に使わせることが出来るんだよな 作ったソフトを、何の成果もないのに(まあ成果を得るためにやるんだが)、小中学生に使わせてて驚いた
それ低レベルつってもレベル違いじゃないのw むしろSmalltalkやLegoなんかが目指した世界じゃ
>>965 smalltalkではCPUの仕組みを意識したプログラミングなんてできないでしょ。
CPUの仕組みを学習するための言語なの? なんかそういう趣旨の本があった気がするな
ふむ。でも中高生なら やはりちゃんとした言語がいいと思うな 敷居は少し低めでもいいけど、ちゃんと実務に耐えるレベルの奴
久々に来たらまだスレ続いててワロタ ム板のVIP風スレは元気だな てか、とりあえずたたき台でも作ろうぜ まずは簡易なマクロアセンブラとヒープ管理と 一連のマクロをtypedefしてコンパイル時に型として解決される機能と 静的配列の機構と typedef機能の範疇で構造を静的に定義できる機能用意した言語作って 拡充して改変して最終的にC言語って名前にしようぜ
SimulaとBooを参考にした言語を作って Dorifって名前にしようぜ
中高生なんて吸収はやいんだからアセンブラとCをしっかりやらせた方が将来どれだけ役に立つか
大学では、Cと関数型言語からやるんだろ。Lispはもう消えていい。
973 :
967 :2010/04/23(金) 12:29:49
今日図書館で確認したら 「動かしながら理解するCPUの仕組み(ブルーバックス)」 言語はアセンブラだった
ブルーバックスレベルなら俺でも書けそうだ
素人に説明しようとして全然伝わらないでブチ切れるような奴には無理だぞ
叩く目安になりそうなのでコテハンは嫌なのだが
>>960 おいらの一連の提案はCPUメーカーが新命令セット出すときに
おまけで付けられるような言語、というイーメージ。
言語の環境差異部分を読めば、新しいCPU(新たな開発でもOK)が
理解できて、そのまま組み始めれるような感じ。
次スレ要るのか? 厨房隔離スレとしての役割は果たしてるかな?
>974 ブルーバックスナメんな。「集合とはなにか」レベルかけたら100冊買ってやる
ブルーバックスは玉石
おまえらはオール石だけどな
東鳩オールストーン
思いついた。 もしも何かこのスレで新言語作るってんなら、名前は是非 Koolong(クーロン:"空論"のもじり)にしてくれ ‥皮肉っぽくていいだろ?w
ume 言語名はkuma-だっつってんだろ
新言語は新言語で書かれるのだろうか?
誰かBNFを・・・
>>982 ハァ?空論もじってるとして、Koolong自体は何を現してるわけ?
空論をちょっと厨二臭く言ってみただけのカスッカスの能無し命名だろ?
何が「思いついた。」だよ
Dat落ちの頃合を狙って張ったんだろ?
万一ボロカスに否定されてもすぐ落ちるから、精神的ダメージは最小限に抑えられるってか?w
え、ネタスレじゃないの
嘘から出た真…じゃなくて身から出た錆、か
このスレッドは天才チンパンジー「アイちゃん」が 言語訓練のために立てたものでした。 アイと研究員とのやり取りに利用するスレッドに書き込まれた、 関係者各位の皆様、ご協力ありがとうございました。 京都大学霊長類研究所
991 :
デフォルトの名無しさん :2010/04/24(土) 00:33:31
ウキーッ、ウキッウキキ
ちゃんと妄想って入れとけよ
>>982 ‥皮肉っぽくていいだろ?w
wwwwwwwwwwww
>>970 pythonに対抗する国産言語に付けてやってくれ。
RubyをDorifに改名しようか。
995 :
デフォルトの名無しさん :2010/04/24(土) 03:18:55
●フルマシンコード番号で書けば難解かつ超低レベル
997 :
デフォルトの名無しさん :2010/04/24(土) 06:21:57
>>996 もっと素晴らしいコードがあった。
そうだ、超低級言語を極めたら
0と1の2進数で記述すべきだ。
じゃ、x86でhello worldのmain()な。 文字列自体はどっか別にあるとかは気にしないでくれ。 11000111000001001110110010000011 10000100100000000010010000000100 11110011111010000000100000000100 10000011111111111111111111111110 01011101010110010000010011000100 11000011111111000110000110001101 10010000100100001001000010010000
>>986 そんなに長くて激しいレスもらえるとは思わなかった
しかもずいぶん内容が斜め上。ここが真正低脳隔離スレだと忘れてた
VIPに帰るわ
>>999 低脳はお前だろ
俺たちはお前の考えなんてお見通しなんだよ
第一空論じゃない。俺が実際に作っているし、公開の準備もしてる
お前はそれすら知らないだろ。無知乙
そうやって何も知らない癖に人を低脳よばわりすることは自らの低脳さをさらけ出してるって気付!!!!!!
俺が世界の中心なんだよ!!!
1001 :
1001 :
Over 1000 Thread このスレッドは1000を超えました。 もう書けないので、新しいスレッドを立ててくださいです。。。