X



【超高速】C/C++に代わる低級言語を開発したい 8
0001デフォルトの名無しさん
垢版 |
2012/08/23(木) 23:03:00.69
70年代、Cは生まれ、それから30余年、現代においてもなお、低レベルなシステム開発に広く使われている。

しかし、2010年の今、もしもCが発明されていなかったとして、低レベルなシステム開発のためのプログラミング言語を
新たに作るとしたら、Cとは違う言語になるだろう。少なくとも、全く同じにはならないはずだ。

そこで、このスレッドでは、
低レベルなシステム開発のためのプログラミング言語
を一から考えたい。

既存の言語を使って何かをすることが目的ではなく、新たなプログラミング言語を考えることが目的であるから、
「既存のXX言語を使えばいい。」という類の発言は無意味である。

「既存のYY言語のZZ機能は、WWと言う点で有用だから採用したい。」という発言は歓迎だ。
現代の一流のプログラミング言語研究者が、最先端の研究成果を盛り込んで、
一から低レベルなシステム開発のためのプログラミング言語を作るとしたら、どのような言語になるだろうか、
という観点で考えたい。

◆前スレ
【超高速】C/C++に代わる低級言語を開発したい 7
http://toro.2ch.net/test/read.cgi/tech/1275235018/l50
0173デフォルトの名無しさん
垢版 |
2014/09/25(木) 12:58:54.18ID:aCIY3SmK
高級言語だから定休知能では扱えないということはなく
むしろ反比例の関係にある
0177デフォルトの名無しさん
垢版 |
2014/09/25(木) 20:29:44.52ID:q7N5Q3ZR
>>2->>3を読む限り>1の望みを満たして居るのはかつてとは段違いに美しく高水準に整えられた今時のアセンブラと思われる
0179デフォルトの名無しさん
垢版 |
2014/10/17(金) 03:52:20.34ID:DGojcH6F
配列を表現する場合無限にメモリーなりCPUなりが利用できる場合リストになるよね
数値の表現も
色々な型がサポートされている時点で低級言語じゃないか
細かいリストや配列の加工操作がしたいんじゃなくて
もっと抽象的に状態に対する結果が欲しい
高級言語と呼ばれるものも抽象化で捉えると低級言語?
0182デフォルトの名無しさん
垢版 |
2014/10/18(土) 20:13:08.37ID:ugB2Qpg9
何の話?
0183デフォルトの名無しさん
垢版 |
2014/10/19(日) 13:43:57.95ID:2X3kG3QA
PCは15年ぐらい前から、スマホは5年ぐらい前から、ギガヘルツ超えのCPUが載ってるけど
電子レンジもWi-FiもBluetoothも2〜5ギガヘルツの電波出してるけど
正気か? とおもうか?
0185デフォルトの名無しさん
垢版 |
2014/10/19(日) 14:13:12.90ID:Y2JhTmAB
ムーアの法則で想定内。
0186デフォルトの名無しさん
垢版 |
2014/10/20(月) 02:31:53.48ID:QkxWZYWv
低級言語って
言語の基本機能だけじゃまともなアプリ作るの苦労するって言語ってこと?
0187デフォルトの名無しさん
垢版 |
2014/10/20(月) 04:08:06.24ID:WXuTs7FD
低いレイヤにアクセスすることが前提の言語な
プログラミングにおける低級高級は優劣の話ではなくレイヤの話だから
0188デフォルトの名無しさん
垢版 |
2014/10/20(月) 04:37:34.43ID:QkxWZYWv
低レイヤってOSやハードウェアと直接やり取りするって感じ?
0189デフォルトの名無しさん
垢版 |
2014/10/20(月) 08:37:55.31ID:4bxYYw/L
このスレとは違うが
一般に、低級言語はアセンブリ、C言語以上の言語は高級言語。
0190デフォルトの名無しさん
垢版 |
2014/10/20(月) 11:11:46.78ID:ysyLgJvq
超高級言語クレとは言わないけど
高高級言語くらい欲しいって思ってたら有ったっぽい
通常パターンマッチてif文の羅列やネストで重複した論理演算を省略して速度他を稼ぐんだけど
パターンマッチ指向はその常識がないw
なんて恐ろしい子
その代わりマッチする条件をダラダラ例記すればよいから
直感的にこの組み合わせおかしいとか修正が楽
なんか条件の検出に正規表現?使っている様な雰囲気ワロタw

最適化なしの高級っぽい言語ってマクロの親玉みたいな感じだから
実装は楽じゃないの
デバッグ環境もセットで用意しろと言われるといきなり敷居があがるけど
0191デフォルトの名無しさん
垢版 |
2014/10/20(月) 11:53:18.42ID:VnfuINao
>>190
おまえ、ここで何言ってんの?
0193デフォルトの名無しさん
垢版 |
2014/10/20(月) 12:28:54.91ID:LQcjTm7E
僕が考えた最強の言語Swift
各言語の構文てんこ盛りで、LLVM介してコンパイルで、>>1が望むものじゃねーか?
0194デフォルトの名無しさん
垢版 |
2014/10/20(月) 14:44:33.49ID:QkxWZYWv
どっかのC/C++コンパイラは一度アセンブリのソースに変換してからオブジェクトコードにするって聞いたな
0196デフォルトの名無しさん
垢版 |
2014/10/22(水) 02:10:55.06ID:J+sywfss
>>193
Swiftってデバドラを実用的に書けたりするの?
0198デフォルトの名無しさん
垢版 |
2014/10/26(日) 15:52:31.81ID:NBo7Xiri
それはすごいね。
0199デフォルトの名無しさん
垢版 |
2014/10/26(日) 17:44:29.89ID:16PtYm9d
C言語用のVMを作ればいいじゃん
GCCがVMの役割を持てばいい
0201デフォルトの名無しさん
垢版 |
2014/10/26(日) 21:59:29.74ID:NBo7Xiri
なんでVMの話が出てくるんだよ。
0204デフォルトの名無しさん
垢版 |
2014/11/01(土) 02:55:02.59ID:nLN9HWuZ
LLVMは大体分かった。GCや例外が大変。
テンプレートを型推論したくてHaskellの型推論読んでみたりしたけど難しい。
Yacc慣れするために、OCamlYaccでトランスレータ書いたりしてて、
今は文法を洗練させようとしてOCamlの別シンタックスを考えてる。
マクロはPHP的な物も検討中だな。
Swiftは悪くないけど、仕様を自分で弄れないからなぁ。
0205デフォルトの名無しさん
垢版 |
2014/11/01(土) 13:24:54.74ID:KRbHmgXS
組み込みの構文と違和感なく構文を拡張できればいいね。
0206デフォルトの名無しさん
垢版 |
2014/11/01(土) 15:22:57.68ID:8KfJEHPC
大事なのはエラーメッセージが適切な内容になる構造を持たせることと
実用的なデバッガサポートがあること

作るのを優先するとその辺が落とし穴になる
0207デフォルトの名無しさん
垢版 |
2014/11/01(土) 16:12:09.26ID:5yNYNAVX
DylanとNemerleや、天才高校生プログラマの言語とか参考になると言えばなるんだけど
結構難しそうなので、Lisp的な式レベルでどうにか簡単な仕組みが作れれば良いなと思ってます。

エラーメッセージやデバッガは、言語機能がしっかり出来上がってからですね。
位置情報埋め込むと構文木が煩雑になるし、デバッガの為の位置情報の埋め込みも同じ。
その辺頑張ると、それだけで大変なので結局今の言語と同じ物しか作れなくなってしまう。
納得いかない文法で、エラーメッセージとか詰めても結局捨てる事になってしまうし。
エラーメッセージも出来れば、グローバライゼーションして、日本語と英語くらいは用意してあると良いけど。
それも含めて、構文拡張が出来て、うまくデバックできてっていうのは難しい。
0208デフォルトの名無しさん
垢版 |
2014/11/01(土) 16:31:00.21ID:5yNYNAVX
エラーメッセージは特に、エラー発生箇所と、エラー内容が作っている箇所からは
特定出来ない事が多いので、エラーが発生するようなテストケース作って
エラー内容のテストをしていけば、良くなるんだろうけど、1つ1つ作り込む感じにしないと
出来なさそうなので大変だけど、ちゃんと作ると、それなりに成果があっていいんでしょうねぇ
Rubyが成功している理由ってそういう所もあったのかなぁ?
0209デフォルトの名無しさん
垢版 |
2014/11/01(土) 21:11:55.78ID:KRbHmgXS
>>206
それを実現するのに有効な言語的な特性は?

具体的に提案があるとわかりやすい。
0210デフォルトの名無しさん
垢版 |
2015/01/15(木) 15:09:15.49ID:Tduq/91S
おうお前らがモタモタしてるうちにRustが1.0になったぞ
ランタイム&GC不要のメモリ管理、メタプログラミングのための各種機能をゼロ・オーバーヘッドで用意、パターンマッチもついて中々のイケメンに仕上がってるぞ

>>209メジャーな言語と似たものなら大体はいいぞ。関数型はエラーメッセージが分かりにくくて有名だからそれは避けてね
0211デフォルトの名無しさん
垢版 |
2015/01/30(金) 15:25:40.49ID:FZMZtl7q
フルスクラッチでcを実装するブログ読んで思わず自分もって感じで始めた
まずは、物凄くシンプルなc言語っぽい仕様書をシコシコ書いてる
実装するまでは中二病に浸れて気持ちいいなこれww
あと、ここの
http://homepage1.nifty.com/herumi/prog/x64.html
c言語でのレジスタの扱いとか読むと
行儀の良さげなレジスタの扱い方とか参考になる
だけど、一番目の整数引数rcxの下り
一番目が実数だった場合はxm0と言う排他的にrcxもしくはxm0で受け渡すって言う意味なのは
サンプルコードを見るまで理解できなかったww
vs2013も入れたけどコンパイルしたあとのアセンブラのコード何処で見るのか不明w
0212デフォルトの名無しさん
垢版 |
2015/01/30(金) 19:27:40.42ID:6KJpuSJC
>>1
低級なのはお前の頭だろ。
0213デフォルトの名無しさん
垢版 |
2015/01/30(金) 22:38:21.69ID:lIZvN3Ub
.NETでどうでもよくなったよなー
ていれべるなことなんてほんとしなくなったわ
0214デフォルトの名無しさん
垢版 |
2015/01/31(土) 13:48:59.11ID:8ogYhJDT
このスレは言語について議論するスレである。

「.NETでていれべるなことしなくなった」というのはこのスレでは的外れな発言である。
0218デフォルトの名無しさん
垢版 |
2015/02/01(日) 01:59:02.72ID:mW2nLdSc
求めたのは低級言語
出来上がったのは低脳言語
無能が開発すると(以下略

vc++とかgccの吐き出すコードってそんなに酷いかな?
吐き出されたコードがアセンブラレベルで手を加えやすいと助かる
そんな感覚はあるけど、小さい規模なら問題ないけど
規模が膨らむと放棄するしかないような
0219デフォルトの名無しさん
垢版 |
2015/02/02(月) 01:52:40.02ID:Ond45CKH
このスレは言語仕様を議論するスレであって、処理系が吐き出すコード(バイナリ?)に関しての議論はスレ違い。
0220デフォルトの名無しさん
垢版 |
2015/02/02(月) 06:05:55.27ID:j5MISSAc
低級言語ってアセンブラレベルでお手入れができたり
アセンブラに近い処理ができたりCに近い感覚じゃダメなのかね
言語仕様のなかにこれはアセンブラに近い記述でありコードもそれに近いコード
この部分の記述はガベージコレクタを含む重い処理を暗黙で行っていますって感じで
ソースを一見するだけで明確なのが良いのいでは?
変数の宣言でint型をINTと大文字で書いて[0...100]とか範囲指定がある場合とか
var I:INT[0..100]
I=I+101
//一見したときの明確さは変数は大文字、型指定も大文字
//ああ、厳格な範囲検査してるから遅くなるってわかるみたいな
0221デフォルトの名無しさん
垢版 |
2015/02/07(土) 00:44:43.69ID:4cqwcWM8
>>220
Objective-C がそんな感じで c / c++ の文法に加えて
コスト大なメッセージパッシングの仕組みを混在させてる
0222デフォルトの名無しさん
垢版 |
2015/02/07(土) 08:58:43.40ID:vv4w4L4p
Objective-Cは文法のセンスが致命的に悪い。
0223デフォルトの名無しさん
垢版 |
2015/02/07(土) 13:22:00.52ID:opuN7f//
>>220
>低級言語ってアセンブラレベルでお手入れができたり
>アセンブラに近い処理ができたりCに近い感覚じゃダメなのかね

それでいいよ。

で、その時に、それをどのような文法で実現するのか、がこのスレの主題。

いま、Cと同じことができる言語を1から考えたら、Cと全く同じ文法にはならないだろう。
それを考えるのがこのスレの趣旨。
0224デフォルトの名無しさん
垢版 |
2015/02/07(土) 14:23:19.42ID:1yVP4+Fh
Luaはどうよ?
0226デフォルトの名無しさん
垢版 |
2015/02/07(土) 15:57:46.61ID:IoYj+0nc
>>224
Luaいいね
色々考えるとLuaの再定義っぽい感じかな
Luaってスクリプト言語に分類されるアセンブラみたい

低級言語だから高級っぽい文法でプログラムを書き下して
コンパイルして一旦アセンブラのソースの形で出力
必要ならここで編集
最後にアセンブラさんにお任せみたいな

アセンブラって基本ラベルとメモリー空間があって
そこにどんな形式のどんなデータが格納されているのかは自己責任って世界だから
ここら辺を援護してくれるマクロアセンブラっぽい物が良いのかな
0229デフォルトの名無しさん
垢版 |
2015/03/05(木) 23:01:28.56ID:4N6WK8Zh
最近の名前だけ高級言語スクリプトを見てると仕様も技術者もアホの極地にしか見えん。
その技術者の得意言語でもやっちゃいけないって事を平気でやる
0231デフォルトの名無しさん
垢版 |
2015/03/06(金) 18:39:28.57ID:CTj2h1Ar
逆に超高級言語を作りたいな(´・ω・`)

今一番超高級な言語って何がありますか?
0234デフォルトの名無しさん
垢版 |
2015/03/07(土) 10:12:36.84ID:pum8dd/R
ここは勉強になるスレだぬ
>>233聞いたこと無いので検索してみるw
>>232キチぴーご用達なww
0236デフォルトの名無しさん
垢版 |
2015/03/08(日) 23:03:34.99ID:52zFOAkV
マイナーな言語は習得が大変なことと、わからないことがあったとき情報やノウハウがないので
全部自分で何とかしないといけない。普及している言語の中から好きなのを選んで使いこなすのが一番いいよ。
0238デフォルトの名無しさん
垢版 |
2015/03/19(木) 21:48:47.69ID:QTBsG6tP
高級言語を使いこなすってC++を使いこなすより大変じゃないのか?
で結局パワーではC++に敵わない
0242デフォルトの名無しさん
垢版 |
2015/03/21(土) 00:46:15.62ID:m0LUk3nX
c++のunsigned long 型の変数を >=0で評価するとーの値が存在しないので必ずTureになって
forループが無限ループになるバグの説明が面白かった
アセンブラならループのインデックスを引いたあとキャリーフラグ調べて分岐じゃないか
ループ離脱の条件が単純比較じゃなくて条件式を容認してるからだろうけど
0243デフォルトの名無しさん
垢版 |
2015/03/21(土) 02:54:48.44ID:x0x7jBK5
Cの骨にテンプレートの肉を詰め、OOの毛皮を被った化物だよ
骨だけ使った料理もできるし肉を焼いてもいいし、毛皮からコートを作ったっていいが、
他人が作ったものはまだ蠢いているかもしれないから怖い。
0244デフォルトの名無しさん
垢版 |
2015/03/21(土) 07:42:06.13ID:zBl3Ii3W
>>242
そもそもループカウンタにunsignedを使うこと自体、バグと言うべき話なのでわないかと・・・
0245デフォルトの名無しさん
垢版 |
2015/03/21(土) 10:14:12.91ID:9V6972Qg
必ずTureになるのが1番の問題
0247デフォルトの名無しさん
垢版 |
2015/03/21(土) 12:01:32.67ID:/IY/BI0W
while(true)で評価するとーの値が変化しないので必ずTureになって
whileループが無限ループになるバグの説明が面白かった
ループ離脱の条件が条件式だけじゃなくてbreakやreturnを容認してるからだろうけど
0248デフォルトの名無しさん
垢版 |
2015/03/21(土) 14:50:37.16ID:TeX2vL/Q
高級な変態というと・・・女体盛りで大トロとかヒラメの縁側を使う感じか。
0249デフォルトの名無しさん
垢版 |
2015/03/21(土) 15:50:58.96ID:xKri6eTm
>>244
増えていくカウンタなら問題はない
減っていくカウンタでも 0 でループアウトするように組むのなら問題ない、a >= 0 とするから問題になる
0250デフォルトの名無しさん
垢版 |
2015/03/21(土) 20:43:28.09ID:zBl3Ii3W
>>249
それはそうなんだが、勘違いしやすかったり、注意しないとバグの温床になりやすいことはしないのが基本だと思うんだが。
ループカウンタとして使うなら普通に int 使えよと。
0254デフォルトの名無しさん
垢版 |
2015/06/10(水) 23:35:06.95ID:bjmIAJs7
好き / “アセンブリ言語のみで言語処理系を作った話 // Speaker Deck”
ttps://speakerdeck.com/nineties/bootstrap

これ見て元気だせ
自分でも出来そうな気がするだろ
実際、大学あたりではcコンパイラの実装までやらせてるんじゃないの?
0255デフォルトの名無しさん
垢版 |
2015/06/11(木) 02:58:17.97ID:wwX+zBdZ
>>254
簡単そうに書いてるけど、これ相当わかってる人でレベルが高い。
俺には1段階理解するだけで大変。自分で実装できる気がしない。
0257デフォルトの名無しさん
垢版 |
2015/06/13(土) 22:22:22.81ID:ueb0hiNe
 あー、ドアドアの人? と思ったら違ったヽ(´ー`)ノ

 むかーし(20年ちょっと)、アセンブラに構造化マクロを追加して『生産性が超上がる!』って
謳ったPDS(今で言うフリーソフト)があったけれど、当時意味分からなかったなあ。
 と言うかGCCの吐くアセンブラコードを読んで、自分で書くより綺麗でスッパリ諦めた(^^;
0258デフォルトの名無しさん
垢版 |
2015/06/14(日) 01:34:40.73ID:et+uySKI
少し前、x265のエンコードダーをアセンブラで記述してる人達の話題で
プログラムを組む上で何が問題なのかって話題があって
OSのシステムコールを行うとレジスターが壊れるのが気に入らないって事だった
オレは重要なアルゴリズムに係わる高度なコーディング作業をしているのだから
システムコール如きへの配慮で煩わしい事をさせるなってことかな
システムコール用のレジスタ退避マクロなり
システムコールをラップしてレジスタを退避復旧したり
もう少し便利なアセンブラの処理系を作ってみたりしないのかな〜
既存コードとの互換性問題とかあるのかな
アセンブラ関係のTool類はかなり保守的で目新しい道具類がガンガン使われる様子は少な目??

>>254の記事を読むと、コンパイラ系統ってリストへの変換ー>実行コード(アセンブラ)への還元って事が凄くよく判るんだよね
物凄く大雑把に言うと、LISP処理系への構文糖衣≒コンパイルする対象(プログラム塊) な構図
0260デフォルトの名無しさん
垢版 |
2015/10/31(土) 22:45:31.32ID:z7pRF+TT
>>54
どこがスレ違いなんだ。
それどころか、このスレを建てること自体が間違ってるだろ。
それを指摘するのは正しいことだろ。
0262デフォルトの名無しさん
垢版 |
2015/11/01(日) 07:59:19.09ID:xEvp3/ht
VS2013のC++x64でアセンブラコードみてるんだけど
かなり良さそうなコード吐き出している
問題はC++の仕様が大きいので他人の書いたコードが理解できないこと
C++の仕様の大きさが問題ならC++のコードを吐き出すプリプロセッサ?
みたいなものを企画してあとはC++にお任せが一番楽そうだね
unionを使った偽装もキャストって呼ぶんだな
&を使うリファレンスも別名とか名称変更とか説明があってやっと理解できた
C++もC並みにフリーダムだからお行儀の悪いコードが書けてしまう

提案になってないな
アイデアとしては、cpuやハードを直接叩く記述をする場合明確に宣言させて隔離とか
_low_level_fuc みたいなキーワード導入してその内部のみ色々悪さが出来るとか
これは運用の問題なので今のC++でも可能なんだろうけど
pythonのサブセット、お行儀の悪いpythonとかpychonとかoppayとかwww
C++の複雑さって仕様が大きくなって新たなキーワードを導入して何でもかんでも
詳細にテキストで記述しようとした結果じゃないかな
本来ライブラリなりフレームワークなりにお任せすべき部分までやらかしていると
0263デフォルトの名無しさん
垢版 |
2015/11/01(日) 08:07:06.43ID:xEvp3/ht
Cの複雑さってint,char,とか扱う型の種類とサイズが多い事も理由っぽいので
ここはきっぱりアルゴリズムを記述する為に扱える数値の種類を1,2種類に限定して
そのほかはデーターベースの記録管理みたいに色々なコストをかけて
型変換なりレンジチェックなり圧縮なり手間隙かければ良いのでは?
いっそ64bitサイズの何かで統一してしまう
charもintも実数も全部64bitの何かw
0265デフォルトの名無しさん
垢版 |
2015/11/11(水) 11:53:35.17ID:iOpec/0o
型無しのオブジェクト言語って言えばluajitがかなり高速なんだよな、確か。
あれの仕様を上手く転用できないかな。
0267デフォルトの名無しさん
垢版 |
2015/12/14(月) 21:02:53.45ID:LOQs7wcg
Rustいつのまにかstableリリース出てたのか・・・
Swiftみたいな負の遺産に塗れたクソ言語に比べりゃ大分>>1の理想に近いと思うんだけど
モジラってOSSの見切り早いし将来性が不安だわ
0268デフォルトの名無しさん
垢版 |
2016/04/08(金) 01:45:14.02ID:sej0xQjF
void*最強って話か?w

コンパイラが勝手にトレードオフして機能の一部をFPGAに突っ込んでくれよ
0269デフォルトの名無しさん
垢版 |
2016/05/24(火) 08:42:53.66ID:67ul01kR
高速とは無縁だけど多倍長整数ってあるよね
これをビット単位でやるの、管理も緩く1ビットで1バイト使って管理
速度で無いけど全部の計算表現できるよね
文字列とかは考慮してないけど
色々考えた結果、変数の精度、byte,word,duble word,q...
ここら辺がいかにCPUの効率都合に合わせた制限だってよく判る
制限して精度に条件が付いても効率と速度が欲しいって言う

たった1ビットの多倍長数が扱えるだけで何でも表現できるなと思った。ww
0272デフォルトの名無しさん
垢版 |
2017/03/25(土) 08:50:12.87ID:Wiqnaowk
RustがC++に並ぶぐらい速くなってるみたいだけどRustのサブセットみたいなの作ったら良いのかね
0273デフォルトの名無しさん
垢版 |
2017/04/03(月) 00:12:39.32ID:Eo4f9wsY
修理するより買い換えた方が安いって話は多いが
もはや解読不可能になったコードのメンテナンスに金は出すくせに
新しく作り直すのはNGってのは恐ろしいな
大手では比較的作り直しもするようだが
レスを投稿する


ニューススポーツなんでも実況