低水準言語を開発したい

このエントリーをはてなブックマークに追加
1デフォルトの名無しさん
http://pc12.2ch.net/test/read.cgi/tech/1274015781/l50 の継続スレのかたわれです。
低水準言語に絞ったスレです。言語全般の話題は「新言語を開発したい」のほうへどうぞ。
2デフォルトの名無しさん:2010/05/30(日) 22:04:13
このスレッドは天才チンパンジー「アイちゃん」が
言語訓練のために立てたものです。

アイと研究員とのやり取りに利用するスレッドなので、
関係者以外は書きこまないで下さい。

                  京都大学霊長類研究所
3デフォルトの名無しさん:2010/05/30(日) 22:14:38
あくまで、GCなしで関数型とか難しいことは置いて置いて
高速なプログラミング言語を作りたい人用らしいです
4デフォルトの名無しさん:2010/05/30(日) 22:16:37
FORTHとか?
5デフォルトの名無しさん:2010/05/30(日) 22:24:10
高級アセンブラを目指す言語を考えるということで
6デフォルトの名無しさん:2010/05/30(日) 22:28:24
さ、改めてCの問題点から挙げていこうか

・環境依存だらけ
・型不足
・スパゲティマクロ
7デフォルトの名無しさん:2010/05/30(日) 22:30:40
いきなりでなんだが、
>>6には失望した
8デフォルトの名無しさん:2010/05/30(日) 22:30:52
C++はどっち?
9デフォルトの名無しさん:2010/05/30(日) 22:31:00
理想と言われている構文
・PythonかGo風の文法
10デフォルトの名無しさん:2010/05/30(日) 22:32:25
・パースしずらい構文
・わかりずらい関数ポインタ
・セキュリティホールになる標準関数
11デフォルトの名無しさん:2010/05/30(日) 22:32:47
>>7
では有望な意見をよろしく
12デフォルトの名無しさん:2010/05/30(日) 22:33:42
>>9
字下げげ方式は賛成だけど、キーワード方式は嫌だな
13デフォルトの名無しさん:2010/05/30(日) 22:34:48
Goが理想って言われているというのは初めて聞いたのだけど
どの変がりそうなの?
14デフォルトの名無しさん:2010/05/30(日) 22:35:03
凄いことに気づいた。
C,goだから次はrockだ。
15デフォルトの名無しさん:2010/05/30(日) 22:40:55
See、Go、look
16デフォルトの名無しさん:2010/05/30(日) 22:41:07
>>13
過去ログ嫁
17デフォルトの名無しさん:2010/05/30(日) 22:43:07
C、Go、Rock、Nana、Hatch、Q、Jue
18デフォルトの名無しさん:2010/05/30(日) 22:47:04
日本の時代きたな
19デフォルトの名無しさん:2010/05/30(日) 23:10:20
俺的なまとめ
・C言語のいらない機能は削る。
・GCは無しが基本でオプションで付けられるようにしたらよさそう。
 ・C++/CLI、c++0x等が参考になる。
・部分適用はカリー化した文法がよさそう。
・マクロは基本無しにする。
・Lisp級のマクロも欲しい人はいるので、
 マクロを作りやすいように式ベースにする。
・関数型言語の機能を取り込める部分は取り込む。
・Rubyのようにwithを拡張してみたい。
・関数型言語は並列化に強いらしい。
20デフォルトの名無しさん:2010/05/30(日) 23:18:13
>>19
もう一個の方へ行け。
21デフォルトの名無しさん:2010/05/30(日) 23:21:10
>>20
嫌です。
22デフォルトの名無しさん:2010/05/30(日) 23:33:06
何故嫌なのかといえば、あくまで低レイヤーな言語を作りたいからです。
23デフォルトの名無しさん:2010/05/30(日) 23:37:50
要求内容が全然低レイヤー向けじゃないんだが
24デフォルトの名無しさん:2010/05/30(日) 23:38:20
>>19
スレ違いもここに極まりだな
25デフォルトの名無しさん:2010/05/30(日) 23:38:56
>>19のすばらしいところは全てが間違いであることだ。
ここまで見事なアンチパターンを展開できる>>19の実力には
計り知れないものがあると俺には感じられる。
26デフォルトの名無しさん:2010/05/30(日) 23:40:47
>>19にひとつ以上該当する方はこちらへどうぞ

新言語を開発したい
http://pc12.2ch.net/test/read.cgi/tech/1275223921/
27デフォルトの名無しさん:2010/05/30(日) 23:42:10
>>19
あっちのスレに必要な人材なのにな。
よくあるミスキャストだよな。
28デフォルトの名無しさん:2010/05/30(日) 23:43:07
>>19の人気に嫉妬
29デフォルトの名無しさん:2010/05/30(日) 23:47:46
野心的だが簡単には否定できないだろ。
具体的な問題点が指摘できないなら黙ってた方がいい。
30デフォルトの名無しさん:2010/05/30(日) 23:48:36
>>19
お前と仕事したら毎日がカーニバルだ

無論ほめ言葉だ
31デフォルトの名無しさん:2010/05/30(日) 23:51:50
取りあえずデータ型は
unsigned char (8bit)
unsined long (CPU依存)
bool (carry flag)
だけだ
符号付はclass定義
32デフォルトの名無しさん:2010/05/30(日) 23:53:00
>>19 お前なら、日本国民の腐った依存心を叩きなおすことができる
3319:2010/05/31(月) 00:04:00
注目をいただき、ありがとうありがとう!!
せっかく注目を浴びているので考えていることを書いて置きます。

・優先順位付きのユーザー定義可能な演算子
・数種類の演算子ですべてを表す。
・括弧演算子aaa{}とローカルブロック{}の結合を止めるにはどうしたらよいか?
 ・空行を入れる、local{}等とするか、
  改行を挟んだ括弧の結合は抑止するのはどちらがいいか?
  要するにScalaとC式方式のどっちがいいか?
・圧力は炭素を圧縮し美しいダイヤを作る構想には有難い。

なんてことを考えたり話したいと思ってます。
ということでなにとぞよろしくお願いします。
34デフォルトの名無しさん:2010/05/31(月) 00:05:38
>>33
マークシートで0点取るぐらいの天才だな。
35デフォルトの名無しさん:2010/05/31(月) 00:06:40
抽象化されていないデータ扱っているときにそんなもの出されたら、不愉快になるな。
36デフォルトの名無しさん:2010/05/31(月) 00:10:40
>>33
関数型言語でこれを動かしてみようか
http://akizukidenshi.com/catalog/g/gK-00179/
37デフォルトの名無しさん:2010/05/31(月) 00:16:54
先に意味論を考えた方がいいんじゃないか。

「コンピュータにどういう処理をさせたいのか」をまず考え、
それからその処理を効率よく指示するための構文を考えないと、
結局C言語より使えない物が出来上がるぞ。
低水準言語を開発するのだから、なおさらな。

>>19 とか見てると、まるで RPG を作るのに、
ストーリーやグラフィックから作り込んでくみたいだ。
38デフォルトの名無しさん:2010/05/31(月) 00:18:58
彼は関数型言語を作りたいと言ってるわけではない。
39デフォルトの名無しさん:2010/05/31(月) 00:30:57
>>37
>RPG を作るのに、ストーリーやグラフィックから作り込んでく
RPGツクールならそれでOK
つまり彼はそのレベルなのだよ
40デフォルトの名無しさん:2010/05/31(月) 00:34:16
具体的な指摘もしないユーザーレベル
41デフォルトの名無しさん:2010/05/31(月) 00:53:49
いきなり19降臨か
楽しいスレになりそうだなw

go--みたいな感じでどうよ
gcとインターフェースなし
chanとgoroutineはオプショナル
42デフォルトの名無しさん:2010/05/31(月) 00:59:58
なんだよ関数型もこっちでやるのかよー。アンチ涙目www
43デフォルトの名無しさん:2010/05/31(月) 01:06:09
オーダー固定のビットストリーム型
二進化十進型 (精度固定で符号・循環/無限小数を示すフラグ付き)

とかどうよ?
44デフォルトの名無しさん:2010/05/31(月) 01:17:07
>>43
それさえも記述できる低水準。
組み込み型はint byte boolのみ
45デフォルトの名無しさん:2010/05/31(月) 01:22:57
unsignedなくて低水準?
46デフォルトの名無しさん:2010/05/31(月) 01:27:46
boolがキャリーはやりすぎw
型はstdint系でいんじゃね
47デフォルトの名無しさん:2010/05/31(月) 01:29:23
アセンブラ並みにunsignedのみにしよう。
後の型はクラス定義だ
48デフォルトの名無しさん:2010/05/31(月) 01:32:31
アセンブラがunsignedのみ?
49デフォルトの名無しさん:2010/05/31(月) 01:39:29
加算器には符号はないし。2の補数と見て処理するかどうかはプログラマしだい。
50デフォルトの名無しさん:2010/05/31(月) 01:47:39
お前は加算器に命令だせるのかw
51デフォルトの名無しさん:2010/05/31(月) 02:05:41
たいていのcpuにあるadd命令なんてヤツだろが。。
てか符号有無なしとか不便過ぎだろ
整数は8,16,32,64の符号有無で8種と
機種依存の符号有無の2種でどや
dspとか考えたら符合は必須だが
オーバー、アンダーフローは機種依存かね
52デフォルトの名無しさん:2010/05/31(月) 02:28:34
マクロ大好きなやつはまたforkして
どんな構文でも作れちゃう万能マクロプロセッサスレとか作ったらどう
53デフォルトの名無しさん:2010/05/31(月) 02:33:15
Cのマクロが糞なだけ
54デフォルトの名無しさん:2010/05/31(月) 05:10:27
あれ以上は意図的にやってないだけ
55デフォルトの名無しさん:2010/05/31(月) 12:14:52
>>51
符号付整数型もclass宣言してしまえばいい。
キャリーがあれば、多倍長整数だってclass宣言すればいい。
浮動小数点も、FPU命令をオペレーターオーバーロードで記述できるようにすればいい。
SIMDも好きに定義すればいい。
56デフォルトの名無しさん:2010/05/31(月) 17:35:39
classって意味わかってんのか?
結局全部インライン関数かアセンブラでやる位なら
ただのマクロアセンブラで言語じゃねえし

そもそも演算子オーバーロードなんてマクロと同じ位いらんやろ
57デフォルトの名無しさん:2010/05/31(月) 23:09:50
頭おかしい奴がいる
5819:2010/05/31(月) 23:14:40

         ____
       /   u \
      /  \    /\    紙光臨とか言ってるし2ちゃねらのことだから
    /  し (>)  (<) \  大変なことになってるかも・・・
    | ∪    (__人__)  J |  ________
     \  u   `⌒´   / | |          |
    ノ           \ | |          | 
  /´                | |          |
 |    l             | |          |

         ____
       /   u \
      /  \    ─\    チラッ
    /  し (>)  (●) \
    | ∪    (__人__)  J |  ________
     \  u   `⌒´   / | |          |
    ノ           \ | |          | 
  /´                | |          | 
 |    l             | |          |

           ____
       /::::::::::::::::\
      /::::::─三三─\
    /:::::::: ( ○)三(○)\   レ、レス56!!これだけか!
    |::::::::::::::::::::(__人__)::::  |  ________
     \:::::::::   |r┬-|   ,/ .| |          |
    ノ::::::::::::  `ー'´   \ | |          |  
  /:::::::::::::::::::::             | |          |  
 |::::::::::::::::: l               | |          |
59デフォルトの名無しさん:2010/05/31(月) 23:15:47
スレを三つに分散してんだからこんなもんだろ。ム板では
60デフォルトの名無しさん:2010/05/31(月) 23:31:19
神は元スレの続き立てたみたいやなw
6119:2010/05/31(月) 23:38:13
ま、せっかくなのでゆるーくつかってってみよっと。
6219:2010/05/31(月) 23:56:38
基本となる式言語のBNFはこのようになります。
0 exp
1 = exp infix_l exp
2 | exp infix_r exp
3 | exp '(' exp ')'
3 | exp '[' exp ']'
3 | exp '{' exp '}'
4 | exp postfix
5 | prefix exp
6 | '(' exp ')'
6 | '[' exp ']'
6 | '{' exp '}'
7 | keyword '(' exp ')' exp
7 | keyword '[' exp ']' exp
7 | keyword '{' exp '}' exp
8 atom
9 void
infix_l,infix_r,prefix,postfix,keywordは
優先順位付きの登録可能な演算子である。
voidは式の要素が空であることを示す。
atomは整数、不動小数点数、識別子、文字列、文字等を表す。
このような式でC言語のような言語を構成することで
Lisp級のマクロが実現できます。
例えば、ぶら下がりのif else文も、
7の演算子と'if' '(' exp ')' exp
1の演算子 exp 'else' exp
で表すことができます。
6319:2010/06/01(火) 00:08:34
上でひとつ忘れていたのが、空白による結合です。
10 exp = exp exp
これが8番目の空白演算子でclean bookから取って@で表すことにしています。

下降型の優先順位法を使えば、
この式のパーサの重要な部分は1つの関数で書くことができます。
それゆえにS式のreaderに比べたら複雑ではありますが、
シンプルにパーサを書くことができます。

C言語のシンタックス上の見た目を限りなく削り取るとこのような形になると思います。
これがC言語一族のシンタックス上の本質であると考えています。
6419:2010/06/01(火) 00:13:37
この言語自体は既にほぼ完成しています。
JavaScript,haXe,PHP,Scala,Java,D言語などで実装しています。
ほぼというのには理由があって、バグはつぶしていない事と、
ほとんど自分でしか考えていなくて議論すべき部分が議論されていないからです。
6519:2010/06/01(火) 00:21:34
議論したい話としては
7 keyword '(' exp ')' exp
という演算子が必要であるかどうかです。
この演算子はなくても何とかなり、なければfor文やwhile文等に{}が必然的に
必要になります。
ただし、if else文の扱いがやや不思議な感じになります。
この7の演算子はjavascriptにfunction(a,b)a+bという記述が入ったことと
javascriptやScala、for文やwhile文に必ず{}が必要というわけではない
ことから付け加えました。
6619:2010/06/01(火) 01:03:44
ただ、これはgolangを見て違うんじゃないかと思うようになりました。
golangではvar a int;のように記述したり、while i == 1 {}
のように記述したりします。これらのvarやwhileは前置2項演算子
といえるでしょう。
keyword ( exp ) exp
の名前は文演算子と名づけていました。
C言語系の多くの文はこのような形をしているからです。
しかし式を書くのに文演算子ってなにやら奇妙な名前なのです。
67デフォルトの名無しさん:2010/06/01(火) 01:06:05
とりあえずこっちに居座るつもりと見ていいんだな?
68デフォルトの名無しさん:2010/06/01(火) 01:22:19
ここは19専用スレにして別スレ立てればいいよ
6919:2010/06/01(火) 01:28:02
>>67
とりあえずここにいますよ。
寂しくなったら移動すると思いますけど。w
70デフォルトの名無しさん:2010/06/01(火) 03:34:51
BNFじゃねえし、式でもねえし
それじゃパーザ作れないよ
7119:2010/06/01(火) 07:39:17
>>70
どのようにしたら作れます?
72デフォルトの名無しさん:2010/06/01(火) 10:49:43
>>71
>>62は正しいBNFではないから、どんな構文なのか想像出来ないよ。
73デフォルトの名無しさん:2010/06/01(火) 12:01:34
>>62
elseは単体の式として成立しないのに
なぜ1の演算子で表せると思えるのかな?
exp ::= <if-exp> | <if-else-exp> ...
if-exp ::= 'if' '(' <exp> ')' <exp>
if-else-exp ::= 'if' '(' <exp> ')' 'else' <exp>
74デフォルトの名無しさん:2010/06/01(火) 16:30:42
>>71
BNFは構文要素を分解して
非終端記号として名前つけていくもんと思って書くんよ
それぞれに対応する処理を書ける感じ

後他の人の指摘もだし、スペースで結合とか空とかもどこに書けるのかも問題
上に書いてあるのじゃ一式だけしか書けない上に終わらないんじゃないか

まずはjavaccやbison/yaccに食わせれるものを作ることを考えたらどう
正しいかどうか判断してくれる
7519:2010/06/02(水) 10:51:44
ちゃんとコンパイルできるBNFじゃないと納得できないってことですね。
わかりました。

>>73
infix_l = 'else' とすれば出来る。
>>74
1式終わったあともトークンがあれば、式としてさらに結合するのです。
とおりあえず、bisonに食わせられるものかいてみます。
7619:2010/06/02(水) 11:51:46
便宜上必要なのでbisonを通すことが出来るBNFを書きました。
keyword,infix_l,infix_r,postfix,prefixと括弧は実際には登録可能にします。
%token INT FLOAT DOUBLE ID STR
%%
exp : | exp expn
expn : atom
| expn infix_l expn
| expn infix_r expn
| expn postfix
| prefix expn
| '(' expn ')'
| '[' expn ']'
| '{' expn '}'
| expn '(' expn ')'
| expn '[' expn ']'
| expn '{' expn '}'
| keyword '(' expn ')' expn
atom : INT | FLOAT | DOUBLE | ID | STR
keyword : 'if'
infix_l : '+' | '-' | '*' | '/' | 'else'
infix_r : '='
postfix : '++' | '--'
prefix : '++' | '--'
%%
$ bison cexp.y
cexp.y: conflicts: 41 shift/reduce, 22 reduce/reduce
77デフォルトの名無しさん:2010/06/02(水) 12:19:31
我を張らず一度ちゃんと考え直してみてはどう。
結構無理があるぞ。

73が書いてることはifの後に来るelseしか意味がないんだから
ああいうBNFになるよって話でしょ

コンパイル出来るかどうかは基準を示しただけで
75からすると(1 else 2 - 3) なんて式も許されちゃうし
複数の文をどうやって区切るのか、a b c dなんて式も有効なのか
終わりはどうなってんのとか ,とかどうすんの?とか。
繰り返し構文なんかはどうすんのとか
全部じゃなくてもいいが、上のBNF?からは全く読めない

演算子を自由に定義したいらしいが
コード毎に意味の変わる演算子とかまともにプログラム書けないし

どっちにしろスレタイからはちょい離れて
言語設計とBNFの勉強っぽいが
78デフォルトの名無しさん:2010/06/02(水) 12:27:31
低水準との関連を示して欲しいね。
79デフォルトの名無しさん:2010/06/02(水) 12:41:48
const必須
80デフォルトの名無しさん:2010/06/02(水) 12:57:06
>>76
還元-還元競合が出てるように読めるんだが
8119:2010/06/02(水) 13:26:31
>>77
この言語はLispのS式を置き換えてC言語のような言語を作るための式言語です。
S式のリーダはリストを読み込むだけでLispのプログラムかどうかは
検証できませんし、検証することを意図していません。
同じように、この言語は構文木を読み込むだけです。
だから、ご指摘のように(1 else 2)のような式もかけますし、
そのように意図して作成しています。
プログラムとして動作可能にするには、
構文木を抽象構文木へ変換する段階で検証することになります。
8219:2010/06/02(水) 13:54:19
>>78
低水準との関連は、
S式で低水準な言語を作成すれば構文木を操作することが容易な
言語を作成できます。[1][2]
しかし、一般にS式には可読性が悪いという問題があります。(慣れの問題ではあるのですが)
そこで、S式を改良して可読性を向上させた言語を作成し、
構文木を操作しやすくしたらよいのではという提案をしているわけです。
そのような言語は他にもあります[3][4]が低レベルな記述を目的とはしていないようです。
またC言語に似たシンタックスでもないようなので提案しているわけです。

[1]CiSE http://www.atmarkit.co.jp/news/200909/07/lltv02.html
[2]SC language system http://super.para.media.kyoto-u.ac.jp/~tasuku/sc/index.html
[3]Boo http://boo.codehaus.org/
[4]Cyan http://www.geocities.jp/takt0_h/cyan/index.html
83デフォルトの名無しさん:2010/06/02(水) 19:02:09
こっちでやってね> 19

「コンパイラ・スクリプトエンジン」相談室14
http://pc12.2ch.net/test/read.cgi/tech/1258431145/
84デフォルトの名無しさん:2010/06/02(水) 19:46:00
>>82
このスレの目的は低水準操作が出来る言語だよ。
8519:2010/06/02(水) 23:49:08
>>73 >>62

たとえば、if ( a ) 3 else 4 という式と 3 else 5という式があった場合
提案しているパーサではどちらも読み込まれます。
("if","(","a",")",( 3, "else", 4))と(3, "else", 5)というように。
それをさらにバリデーションにかけます。(Scalaで書きます)
def exp(e:Any):Any = e match {
case ("if", "(", a, ")", b) => return exp(a) && elseExp(b)
case (a,"+",b) => return exp(a) && exp(b)
case _ => return false
}
def elseExp(e:Any):Any = e match {
case (a,"else",b) => return exp(a) && exp(b)
case a => return exp(a)
}
このようにして正しい式かどうかを検証できます。
実際にはvalidationしながら、ASTに変換すれるとよいです。
それ以降のパスは通常の処理が出来ます。
要するに、xmlで言語作るようにすればいいわけです。
86デフォルトの名無しさん:2010/06/03(木) 00:41:50
関数型言語では、このコードはどうなるのかご教授願いたい

*(volatile unsigned char *)0xFF98 |= 0x0001;
87デフォルトの名無しさん:2010/06/03(木) 01:37:51
自慢げにBNFの説明してるけど、特に目新しい部分もないし
オナニーレベルにすら達してない
88デフォルトの名無しさん:2010/06/03(木) 08:27:41
>>86
peek :: Int -> IO Int
poke :: Int -> Int -> IO ()

x <- peek 0xFF98
poke 0xFF98 (x | 0x0001)
8919:2010/06/03(木) 08:29:02
>>86
自分が考えている言語が関数型言語と言えるのかどうかは分かりませんが
考えてみました。

ポインタの型が悩む所です。
volatileと*は前置演算子にしますので、
char*ではなく、*charと書くことにしたいです。型だから後置演算子とは
できないので。

D言語を参考にして値は常に配列としてアクセスすることとすれば
以下ようになるかと。
(cast(volatile *uchar)0xFF98)[0] |= 0x0001;
castがa(b)cというタイプの演算子になるので括弧をつけないといけません。

Scala風に考えれば、配列のアクセスは()で行うように
0xFF98.asInstanceOf[volatile *uchar](0) |= 0x0001;
ただこれは長いのとCから離れすぎているので
(0xFF98.cast(volatile *uchar))[0] |= 0x0001;
と書けるようにしたらよいのではないかと思います。
ポインタの型は結構難しい話です。
演算子は記号の連続とかんがえていたのですが、そうすると
c言語のint*****のような型が難しくなるので登録されている演算子
のみで字句解析を変更する仕様にしたらいいのかなと思います。

どちらにせよ、ある程度現在のC言語より長く記述することになるでしょう。
9019:2010/06/03(木) 08:33:12
>>87
理解したということですね。よかった。
91デフォルトの名無しさん:2010/06/03(木) 13:44:52
どんな言語でもいいがおMemOr(0xff00,1)でよかろう
92デフォルトの名無しさん:2010/06/03(木) 16:17:17
ビルドイン関数ですか?
93デフォルトの名無しさん:2010/06/03(木) 17:57:18
そうそう。
いや組み込み屋なんだが
直アドレス参照はインラインアセンブラとか組込み関数とかの手段さえあれば
言語自体には無いってのもありかなと
94デフォルトの名無しさん:2010/06/03(木) 18:00:54
後さリンク後にも最適化フェーズ置いて
ループをカウンタじゃなく範囲でも回せるようにしたら
範囲チェックを言語に入れても実用度上がらないかな
95デフォルトの名無しさん:2010/06/03(木) 23:02:34
何百の論説よりも、一つの実例
96デフォルトの名無しさん:2010/06/04(金) 00:05:36
前のはlinuxのinx/outxやwiring
後のはgolang
97デフォルトの名無しさん:2010/06/04(金) 00:07:07
あ、goはリンク時に最適化はないが。
9819:2010/06/05(土) 00:26:46
MinCamlをScalaに移植してみてました。
byaccとjflexで構文木読み込みして型推論のところまで。
実例作るだけならできそうだけど、エラー処理が駄目ってなるのは目に見えてるので
地道に着実に実力つけつつ、仕様は仕様で考えてきます。w
9919:2010/06/05(土) 00:35:30
アセンブラを作りたいとして、XByakとかを移植は出来るとは思うのですが、
ちょうどいい教科書的なものってないですかねぇ?
ScalaでいろんなCPUのアセンブラ出来たらいいと思うけど、作るのが難しい。
100デフォルトの名無しさん:2010/06/05(土) 06:23:15
リンク時に最適化って出来るの?
101デフォルトの名無しさん:2010/06/05(土) 11:45:46
できるよ。
102デフォルトの名無しさん:2010/06/05(土) 15:16:50
できないよ。
103デフォルトの名無しさん:2010/06/05(土) 15:40:51
できるよ。
104デフォルトの名無しさん:2010/06/05(土) 16:21:43
Microsoft Cのリンカはすることができたね。
105デフォルトの名無しさん:2010/06/05(土) 17:06:08
far call/jumpをnear call/jumpにとか
near jumpをshort jumpにとか
リンク時にしかできない最適化を普通にやってたな。
MS-Cの時代から。
あと実行時にFPU命令をサポートしないCPUで実行したとき
無効命令をトラップしてFPU命令をライブラリCALL命令に置き換え
以後はライブラリを使うようにするとかも普通に行われてた。
106デフォルトの名無しさん:2010/06/05(土) 22:50:29
Jumpやcallの置き換えは他のcpuでも普通にやるね
でも実行時に命令の書き換えは不都合でるし下品だしセキュアじゃないからな
でいわゆるリンカーじゃないな
107デフォルトの名無しさん:2010/06/05(土) 23:55:57
リンクせんとアドレスが決まらないからでしょ
108デフォルトの名無しさん:2010/06/06(日) 00:08:34
jmp/call 命令はマシン語レベルでは命令が複数あってだな・・・
109デフォルトの名無しさん:2010/06/06(日) 06:17:46
>>107
よく読め
リンク時に相対jump等の短い命令に置き換えるのはgnu ldとかでもやれっし
でも実行時にコードセグメント書き換えるのはお下品だとゆってる
110デフォルトの名無しさん:2010/06/06(日) 07:30:48
どこを?
111デフォルトの名無しさん:2010/06/06(日) 07:33:02
自己書き換えとか普通にやってた
最近はやらんけど
112デフォルトの名無しさん:2010/06/06(日) 09:37:52
最近だと実行可能属性と書換え可能属性は排他設定とかいうOSもでてきているしな
113デフォルトの名無しさん:2010/06/06(日) 09:47:14
実際のアドレスは実行時にしか決まらないんだから
MMUとPC相対アドレシングモードのないCPUのOS
代表的なものはMS-DOSは常識的に実行時に
セグメントアドレスを書き換えてる。
EXEヘッダにはそのための情報が入っている。
114デフォルトの名無しさん:2010/06/06(日) 10:10:19
>>113
??自分で書いてるように、実行環境が仮想アドレスなら
コンパイル時に決められるんでしょ
115デフォルトの名無しさん:2010/06/06(日) 13:38:31
だれか、アセンブラ作って
116デフォルトの名無しさん:2010/06/06(日) 13:45:15
最適化アセンブラが欲しい。
117デフォルトの名無しさん:2010/06/06(日) 13:49:14
OSのプログラムローダが書き換えるのと
プログラム自体が書き換えるのは
話が違うと思うが
118デフォルトの名無しさん:2010/06/06(日) 14:06:02
OPTASM?
119デフォルトの名無しさん:2010/06/06(日) 18:30:23
>>113
>>117
が全部書いてくれたな

実行時に仮想アドレスをシャッフルするのは安全性のためにもアリな話だが
コード部分は書き換え不可にしたりROMだったりするかもだし
コードセグメントを自分で書き換えするのはJITみたいなの以外はナシだろうな

120デフォルトの名無しさん:2010/06/06(日) 18:47:54
実行時ってかロード時な。
121デフォルトの名無しさん:2010/06/06(日) 19:01:36
自己書換えはそんなに特殊なテクニックってわけでもない。
たとえば、初期化とかでよくある一回目だけ特別な処理が必要、とかいう場合に、

static flag = true;

if (flag) {
 flag = false;
 特別な処理
}

とすると、毎回フラグチェックが入って無駄なので、自己書換えを使うとか。
自己書換え使わんでも最近のプロセッサなら分岐予測が当たるように最適化すれば
そんなに高コストでもないとは思うが。
122デフォルトの名無しさん:2010/06/06(日) 19:03:17
最近はセキュリティ上自己書き換えは許さない方がいいもんなあ
123デフォルトの名無しさん:2010/06/06(日) 19:12:45
>>121
もともと自己書き換えは特殊だよ。
昔のプアなCPUだとそういうのもありだったが今時はあまり流行らんわな
デバッガも困るし
124デフォルトの名無しさん:2010/06/06(日) 19:14:16
自己書き換えは性能が下がるしね
書き換える前の命令がi-cacheとかに入ってる可能性があるから
適切にフラッシュしなければならない
125デフォルトの名無しさん:2010/06/06(日) 19:40:42
書き換える際にdcacheにも入るし
パイプラインもだよね
126デフォルトの名無しさん:2010/06/06(日) 20:42:53
初期化時に書き換えて最適化するんだから
性能は上がりこそすれ下がることは無い。
全く論点についてこれないなら素直に認めろよ。
127デフォルトの名無しさん:2010/06/06(日) 23:00:28
論点はだな
コードセグメント書き換え不可
書き換える一般的な方法もない
最適化にも対応出来ない
キャッシュとか意識しないとだめ
メリットは少々の高速化
むしろ関数ポインタか呼ぶ前に判定する方が速い
組み込みならそもそも何度も初期化通るドン臭いコードは書かない
128デフォルトの名無しさん:2010/06/06(日) 23:43:54
一回初期化で通るだけなら一番最後以外は
全部無意味か間違いってことじゃん
129デフォルトの名無しさん:2010/06/07(月) 02:07:34
後付で機能足す時によくやるわな
20年前からやってたが
singletonて名前がついててわろた奴だ
が実はスレッドセーフじゃないからイマイチ
130デフォルトの名無しさん:2010/06/07(月) 02:11:14
>>128
いきなりgetとか書いてそん中で
最初だけ初期化もやっちまうとかやね
131デフォルトの名無しさん:2010/06/07(月) 07:53:20
出た「組み込みなら」w
132デフォルトの名無しさん:2010/06/07(月) 08:59:08
低水準言語つって普通組み込み意識するだろ
golangでさえOS無しで走らせるための
サンプル的なコードが入ってるのに。
13319:2010/06/07(月) 22:29:50
むかーし、msxのころに自己書き換えの記述見て凄いなぁ思ったことありました。
懐かしい。
でも、8086ではセグメント地獄だわ、windowsになったらWinAPI地獄だわ、
C++だわなんだわで、すっかり自己書き換えなんて意識しなくなりました。
エミュレータやらVMの場合にJITとかする場合はゴリゴリとマシン語生成したりしますね。
デバッガもプログラム書き換えますね。
自己書き換え可能な言語のPCASTLは面白いですね。
134デフォルトの名無しさん:2010/06/07(月) 22:59:09
デバッガは自己書き変えじゃないし
jitも自己書き換えとは別だよね

昔は自己書き変えどころか
同じコードをワザとずれたアドレスで実行したり
実行中にRAMのマッピング変えたり
やりたい放題だったよね

高階な言語と違って
最適化されたRISCのマシンコードとか
実質的に書きかえは難しい
135デフォルトの名無しさん:2010/06/07(月) 23:05:55
>>134
> 同じコードをワザとずれたアドレスで実行したり
これは今でもやるだろ。
136デフォルトの名無しさん:2010/06/07(月) 23:16:14
リロケータブルな話ちゃうよ
奇数番地とかから実行して別なことさせたり
137デフォルトの名無しさん:2010/06/07(月) 23:31:16
>>136
jmp命令の代わりに使うのは、よく知られたテクニックでしょ。
138デフォルトの名無しさん:2010/06/08(火) 01:59:27
>>19
MSDOSの頃はオーバーレイとかバンク切り替えとか色々あったやろ
おっさん
139デフォルトの名無しさん:2010/06/08(火) 04:40:26
86は黒い歴史が長かったしな
14019:2010/06/08(火) 09:23:40
>>138
あったあった。秘功をついた。
おっさんで悪かったな
141デフォルトの名無しさん:2010/06/08(火) 13:09:19
プロテクトで実行中コードのあるバンク切り替えて
先のプログラムを走らせたり
14219:2010/06/09(水) 10:35:02
今でも、FARポインタとか使う環境ってあるんでしょうか?
143デフォルトの名無しさん:2010/06/09(水) 15:07:25
16bit CPUなら大体ある
144デフォルトの名無しさん:2010/06/09(水) 21:48:06
セグメントみたいなものは今も健在
マイコンだとセクションごとに使う命令が違ったりする
14519:2010/06/09(水) 23:15:39
ひえー、FARポインタとNEARポインタかぁ。
バンク切り替え機能とかあると嬉しいとかっていつの時代だ?
ってかんじだけど、必要なところでは必要なんですね。
そんな古い環境なら古い言語使ってろってことではなく、
新しい言語使いたい!みたいな感じなんですね。
新しい言語でファミコンのゲーム作るぞーみたいな勢いでw
146デフォルトの名無しさん:2010/06/10(木) 00:22:13
言動が少しおかしいけど
何かの病気なのかな
14719:2010/06/10(木) 00:32:13
ひえー、FARポインタとNEARポインタかぁ。
バンク切り替え機能とかあると嬉しいとかっていつの時代だ?
ってかんじだけど、必要なところでは必要なんですね。
そんな古い環境なら古い言語使ってろってことではなく、
新しい言語使いたい!みたいな感じなんですね。
新しい言語でファミコンのゲーム作るぞーみたいな勢いでw
14819:2010/06/10(木) 00:33:36
まちがえた。
病気といえば、病気ですが、性格と言えば性格ですね
14919:2010/06/10(木) 07:36:07
私が考えている言語のプログラミング言語の核となるパーサの作り方を説明しよう。

パーサは文字列から人の列を作りだし、トーナメント戦を行うようにして構文木を作成する。
通常のトーナメント戦ではトーナメント表が先に出来上がっているが、
戦いが終わって初めてトーナメント表が出来上がるところが通常のトーナメント戦との違いである。

まず式を読み込む大会(meet)を開催する。
大会ではまず糸(string)から人々の列(guys)を作りだす。入場行進のようなものだ。
普通はこの処理を字句解析と呼ぶ。
次に戦うやつらが持っている力の表(powers)を作成する。
次にトーナメント戦を行う。
このトーナメント戦が終われば戦いの結果であるトーナメント表が出来上がるというわけだ。
ここでトーナメントのルールを説明しよう。
トーナメントはチーム戦である。チームは1〜N人で構成される。
特にN人で構成されるチームは愛(Aloha)と友情によって強く結ばれる。
各々のチームは力を持っていて力が強いほうが勝ち抜く。
勝ったチームは負けたチームを自分の配下に置き、こぶしとこぶしをぶつけ合わせた
熱い愛と友情によって新たなチームを結成する。
最初は力0でトーナメントを開始する。

トーナメントを開始したら、やつらの中から1人取り出し1人のチームを作ってもらう。
次に戦うやつの力とその場の力を戦わせる。
やつが負ければバトルは終了しチームは帰ってもらう。
やつが勝てば列から取り出し、やつの力で次のトーナメントを行う。
トーナメントの結果から選ばれたチームをやつのチームに加えて次の戦いを行う。
このような戦いの結果1つの大きなチームが形成される。
これがトーナメント戦の戦いの結果であり思い描いていたツリー状のトーナメント表であり
構文木となる。
15019:2010/06/10(木) 07:37:30
以下が説明したパーサのプログラム例である。
<script>
function Aloha(g, l, r) {
this.g = g;
this.l = l;
this.r = r;
}
Aloha.prototype.toString = function() { return this.g+"["+this.l+","+this.r+"]" }
Aloha.meet = function (str) {
var guys = str.split(/\s+/)
var powers = {"+":10,"-":10,"*":20,"/":20};
function tournament(power) {
var team = guys.shift();
while (powers[guys[0]] > power) {
var champion = guys.shift();
team = new Bond(champion, team, tournament(powers[op]));
}
return team;
}
return tournament(0);
}

alert(C.meet("1 + 2 * 3 * 5"))
</script>
15119:2010/06/10(木) 07:47:51
上の例にはバグが潜んでいる。
結果、+[1,*[*[2,3],5]]となるように修正してみてくれ。
152デフォルトの名無しさん:2010/06/10(木) 08:59:17
86使って低レベルやるなら32bitモードでもfarポインタが必要。
アプリケーションレベルでは意識しなくてもいいようにできるが
それを管理する側ではそうはいかない。
そしてそれを作るための言語なら当然そういう機能が必要。
153デフォルトの名無しさん:2010/06/10(木) 10:12:00
CPU組み込みのセグメントレジスタなんて
マイコンはないのが主流。RISC系にもない
farとか言語が意識するなんて全く必要ねえな
154デフォルトの名無しさん:2010/06/10(木) 11:25:48
78K0RのCSとESを触りまくる俺涙目
155デフォルトの名無しさん:2010/06/10(木) 12:10:45
ご愁傷さま
今時CすらないCPUもあるしつらいわな
156デフォルトの名無しさん:2010/06/10(木) 12:14:15
要するに、ケチケチしてるとろくなことにならないってことだな
157デフォルトの名無しさん:2010/06/10(木) 12:14:56
>>155
CすらないならGCCのバックエンドつくるのが一番手っ取り早いんじゃね
158デフォルトの名無しさん:2010/06/10(木) 13:37:30
R8Cだとセグメントレジスタはないが、ルネのコンパイラだと
ポインタの大きさがfar(4byte)、near(2byte)になってる
空間が20bitしかないのに4byteかよ
159デフォルトの名無しさん:2010/06/10(木) 13:40:50
Cコンパイラは、最適化しなかったら、相当特殊なターゲットでもない限りあっさり作れるだろ。
160デフォルトの名無しさん:2010/06/10(木) 15:58:30
ポインタがintに入れられることを前提としてるプログラムとかたまにあるからな
161デフォルトの名無しさん:2010/06/10(木) 16:08:51
>>160
昔はそれで正しかったからね。
162デフォルトの名無しさん:2010/06/10(木) 16:09:53
>>161
今も昔も正しくないw
163デフォルトの名無しさん:2010/06/10(木) 16:15:10
>>162
K&Rの初版読んでみろ
164デフォルトの名無しさん:2010/06/10(木) 16:17:26
>>163
初版?もってないね。
俺がそれを持っていると想定してしまった理由は?
165デフォルトの名無しさん:2010/06/10(木) 16:53:40
「昔」をC89以後とするか以前とするか、だなw
166デフォルトの名無しさん:2010/06/10(木) 16:58:26
妖しい時はまともなコンパイラなら、警告してくれるでしょ
167デフォルトの名無しさん:2010/06/10(木) 17:32:01
キャストすればうるさい警告は消えてくれる
なかったことにできる!
168デフォルトの名無しさん:2010/06/10(木) 17:38:21
>>159
CすらないへぼくてマイナーなCPUなんぞ
金もらわんとつくらんでしょw
169デフォルトの名無しさん:2010/06/10(木) 17:54:21
PICはアーキひどいけど一応コンパイラあるよね
やっぱシェアの大きさだよね
170デフォルトの名無しさん:2010/06/10(木) 18:40:41
何も考えないでキャストすればハマるでしょ
171デフォルトの名無しさん:2010/06/10(木) 23:39:53
本当に作りたいのか
妄想を語りたいのか
172デフォルトの名無しさん:2010/06/10(木) 23:40:53
思考実験
173デフォルトの名無しさん:2010/06/11(金) 22:12:33
作りたい
でも使いたくはない
17419:2010/06/11(金) 23:39:24
作って使いたいですけど、完成はいつのことになるやら
175デフォルトの名無しさん:2010/06/12(土) 00:48:36
まだいたんだ
17619:2010/06/12(土) 22:20:18
いるよー
177デフォルトの名無しさん:2010/06/12(土) 23:24:09
言語作るとか考えるより、
それで何を作りたいか考えるべきだ
178デフォルトの名無しさん:2010/06/12(土) 23:26:24
言語を作りたい
179デフォルトの名無しさん:2010/06/12(土) 23:31:28
英語、英語を勉強しろ
18019:2010/06/13(日) 00:54:46
smart.fm Lang-8 あたりお勧め。

Let's talk about making of programming language dream using English!!
18119:2010/06/13(日) 02:06:03
http://wonderfl.net/c/cK2B

action scriptで書いてみた
182デフォルトの名無しさん:2010/06/17(木) 14:10:39
リンク時に極限まで最適化したいから、それまでは中間言語
18319:2010/06/19(土) 23:12:34
今はMinCamlをOCamlからScalaに移植してみてます。
とりあえず、動作確認なしでコンパイルはとおってる状態です。
構文木->名前を単一にしたデータ->クロージャ変換されたデータ->仮想アセンブラ->アセンブラ
という変換をしています。
184デフォルトの名無しさん:2010/06/20(日) 01:45:59
つ低水準言語
18519:2010/06/20(日) 03:07:27
もちろん、最終的には低水準に持っていこうと思ってますけど、
関数型言語で作る低水準言語のちょうどいい例を知らないのでw。
最適化フェーズもあるし、色々参考になると思ってます。
186デフォルトの名無しさん:2010/06/20(日) 06:25:14
関数型のように実行順序というか評価順序が掴みにくい言語は低水準に向かなくね?
187デフォルトの名無しさん:2010/06/20(日) 17:03:47
関数型の設計思想そのものが低水準のことを意識していないし。
18819:2010/06/20(日) 21:52:09
関数型言語でゲームを作るというのをやろうとしてみたことがあったので、
確かにcamlで逐次実行するプログラムを書くのは確かに書きずらいと思います。

ただコンパイラを実装する言語としても、実装される言語としてもシンプルでいいと思います。
シンプルな関数型言語の実装で学んだことを、複雑な逐次実行型言語の実装に生かせたらいいなと思っています。
189デフォルトの名無しさん:2010/06/20(日) 22:01:42
何で関数型にこだわるんだろうね。関数型言語スレ立てれば良いのに。
19019:2010/06/20(日) 22:03:19
http://github.com/hsk/mincamlj/tree/master/src/
以下の mincaml を参考にJava&Scalaに移植中の物です。
http://min-caml.sourceforge.net/
OCamlはたまにしか見ないので忘れる、分からなくなる。
OCaml 版の解説見つつ、ソースを読んでみてください。
191デフォルトの名無しさん:2010/06/20(日) 22:09:28
それって低水準って言うからにはハードウェアの制御とか書けるの?
例えば8251の通信ドライバーとか
192デフォルトの名無しさん:2010/06/20(日) 22:12:25
余裕のよっちゃん
193デフォルトの名無しさん:2010/06/20(日) 22:12:39
Cにできることはすべてできる
19419:2010/06/20(日) 22:35:17
書けません。勉強用の資料です。
まずこれで作り方勉強してそれから、低水準言語を実装しようという
気の長ーいことを考えてます。だから、まだ当分、低水準言語を
作りたいけど作れないんですw
19519:2010/06/20(日) 22:39:29
fail-safe cを次に読めばいいのかもしれないですね
19619:2010/06/20(日) 22:40:35
訂正、Fail-Safe Cです。
いい加減ですいません。
197デフォルトの名無しさん:2010/06/21(月) 12:36:59
不勉強で悪いんだが
関数型言語で割り込みとI/Oはどう書くんだろ?
198デフォルトの名無しさん:2010/06/21(月) 12:41:29
peek と poke は getc や putc と基本的には同じだろ
メモリマップド I/O でなければ inp と outp という別の関数になるとか

割り込みは、関数をハンドラにする機能を、言語とランタイムに実装
199デフォルトの名無しさん:2010/06/21(月) 12:51:47
>>197
割り込みにもいろいろあるけどもっと具体的に言ってくれる?
200デフォルトの名無しさん:2010/06/21(月) 19:15:06
>>198
悪い意味じゃないが意外に普通なんだな
86以外じゃI/Oマップドなんて死語になってるよな
関数型言語でVolateなデータはどういう扱いになるのか興味あるな

>>199
割り込みなんてソフトかハードしかねえだろ
どんだけいろいろあんだよ
201デフォルトの名無しさん:2010/06/21(月) 21:56:35
BASICみたいなのがでけたりして
202デフォルトの名無しさん:2010/06/23(水) 00:09:30
ハードウェアも関数型言語に対応した
つくりにしないとだめだよ。

今のハードウェアは手続き型言語用だから。
203デフォルトの名無しさん:2010/06/23(水) 06:28:48
ハードウェアっつーかスタックベースで考えてるからだな
204デフォルトの名無しさん:2010/06/23(水) 15:25:13
スタックベースかどうかは関係ないと思うけど
205デフォルトの名無しさん:2010/06/23(水) 18:09:31
ハードで処理できる命令が自己増殖すればいいのかな?
206デフォルトの名無しさん:2010/06/23(水) 20:45:02
関数型言語向けハードってどんなんだ?
つか関数型的なHDL出来ねえかな
深く考えてないが意外にいけそうな気がする
207デフォルトの名無しさん:2010/06/23(水) 21:27:42
関数型言語のモデルにグラフリダクションがあるけど、それをハードウェアで
やってしまえとかいう研究とか、ないではない。

関数型的というか、VerilogないしVHDLからプロセス的なものを全部とっぱらって、
宣言的な機能だけにしたらすっきりするんじゃないかと漠然と思っている。
思っているだけだが。
208デフォルトの名無しさん:2010/06/24(木) 17:30:33
>>207
206だが、たぶん似た感想もってそうだな
グラフの縮退とかはある程度コンパイル時に済ませて
分解してからHDL的ななにかにMapして、
投機的に同時に動かしたりデータ駆動的に動く感じだとどうだろね
209デフォルトの名無しさん:2010/06/24(木) 17:46:25
ついに新言語のために新ハードを考えるまでになったか
なんという本末転倒っぷりw
210デフォルトの名無しさん:2010/06/24(木) 19:40:31
>>208
ヒープメモリどうすんだよ・・・まさかHWでGCするの?
211デフォルトの名無しさん:2010/06/25(金) 13:19:53
新言語スレ落ちたぞ・・
212デフォルトの名無しさん:2010/06/25(金) 19:57:18
作る気ないからや
213デフォルトの名無しさん:2010/06/25(金) 22:13:37
関数型信者が暴れるから
214デフォルトの名無しさん:2010/06/25(金) 22:20:13
しかし手続き型を研究してる奴なんて、もういまどきいないぞ。
215デフォルトの名無しさん:2010/06/25(金) 23:20:45
今どきの言語研究が低水準を全く意識してないから。
216デフォルトの名無しさん:2010/06/28(月) 22:05:53
低水準はC++で間に合ってるからな
217デフォルトの名無しさん:2010/06/30(水) 02:25:47
Cだろ
218デフォルトの名無しさん:2010/06/30(水) 03:13:11
C++は暗黙のコードを作りすぎ。低水準とは言えない。
219デフォルトの名無しさん:2010/06/30(水) 05:30:33
やはり新言語ではハードをリアルタイムにリコンフィグしながら動くでFA?
220デフォルトの名無しさん:2010/07/01(木) 09:37:09
22119:2010/07/19(月) 00:18:20
まだまだ、低水準な言語が作れる状況ではありませんが、
scalaに移植していたmincamlが動き始めました。
元がspark用の設計のものをx86用に移植中のものの移植なので完全ではないですけど
フロントエンドからバックエンドまで最適化付きで実装されているので
今後の開発の参考になるはずです。
222デフォルトの名無しさん:2010/07/19(月) 12:32:41
たまにはあげてみる
223デフォルトの名無しさん:2010/08/17(火) 10:09:55
記述する言語は unicode のみ許可
unicode から sjis や euc への変換は標準関数でサポート
1行は必ずセミコロンで閉じたいのです
構造体必須だといいな
正規表現あると楽ちん
変数は宣言必須 (初心者のケアレスミスは減らそうぜ!)
型宣言も必須 (文字変数に整数代入は warning じゃなくてエラーに!)
変換関数を通さない型の違う代入はエラー
1つの事をしたいのに、書き方が複数存在することは避ける (悪い例として perl とかね)
環境構築が面倒なのはやだ (たとえば Java とか PHP とか) ← 何気に重要
224デフォルトの名無しさん:2010/08/17(火) 10:51:53
>>223
C#は、ほぼ満たしてる。
225デフォルトの名無しさん:2010/08/17(火) 12:22:26
C#はMS-OSでしか満足に動かないから却下
226デフォルトの名無しさん:2010/08/17(火) 13:41:33
Monoの人が聞いたら怒るぞ
227デフォルトの名無しさん:2010/08/17(火) 13:45:37
Monoは完全に動作するわけではないし、所詮はハックなんだよ。
Monoが動いたとしてもXNAみたいな付属品も満足に動かせないしなぁ。
満足にC#が使えるのはMS-OSだけだよw
228デフォルトの名無しさん:2010/08/17(火) 20:39:00
iso, jis の範囲内なら動作するんじゃないのかな?
229デフォルトの名無しさん:2010/08/17(火) 23:24:04
このスレで、具体的に実装されている処理系の優劣や、言語仕様と関係ないライブラリの話を持ち出して何がしたいんだ。
230デフォルトの名無しさん:2010/08/18(水) 06:22:37
ほぼpasca...いや、なんもない
231デフォルトの名無しさん:2010/09/12(日) 14:36:04
どうやら低水準言語はC/C++で十分なんですね。
232デフォルトの名無しさん:2011/02/15(火) 07:46:52
移植が簡単にできて、他の言語処理系が記述しやすい言語ってないのかな?
233デフォルトの名無しさん:2011/02/15(火) 07:52:29
バイトコードのトランスレータとかってどんな状況なんだろう?
234デフォルトの名無しさん:2011/02/15(火) 08:33:31
とりあえずアセンブラも分からん奴を弾かないと会話が成り立たないスレ
が、書いたことある奴は別に新言語なんか要らずに冷やかしに見に来ているだけなので、結局会話が
成り立たないスレ
235デフォルトの名無しさん:2011/02/15(火) 08:35:30
絶対にまともな物が完成しないと確実に断言できるスレ、だな
236デフォルトの名無しさん:2011/02/15(火) 09:14:27
とりあえずアセンブリ言語の方言をなんとかしようぜ。
237デフォルトの名無しさん:2011/02/15(火) 09:30:22
>>205
NANDしかない言語ってどうだろう?
238デフォルトの名無しさん:2011/02/15(火) 09:50:02
>>232
言語処理系なんて環境依存ほとんどないからC/C++でいい。
239デフォルトの名無しさん:2011/02/15(火) 09:50:15
高位合成はまだまだ研究段階で
汎用言語には適用できないはずだが
240デフォルトの名無しさん:2011/02/15(火) 10:22:52
>>238
むしろC++の処理系が書きやすい言語が欲しい。
241デフォルトの名無しさん:2011/02/19(土) 09:08:25
>>237
データ型がbitしかないんですね。
242デフォルトの名無しさん:2011/02/21(月) 23:51:43.07
>>237
で、記述がテキストでなく LabView みたいに回路図入力。
243デフォルトの名無しさん:2011/02/22(火) 00:49:30.24
それなんてVHDL
244デフォルトの名無しさん:2011/02/23(水) 01:21:09.02
>>206
bluespec
今はVerilogライクなHDLを出してるけど以前はHaskellライクなHDLを出してた。
245デフォルトの名無しさん:2011/03/01(火) 16:04:20.27
スタックマシンとかアセンブラレベルのトランスレータってなんかない?
246デフォルトの名無しさん:2011/03/06(日) 21:58:32.44
C/C++以上の物が作れないといういつもの末路
247デフォルトの名無しさん:2011/03/06(日) 23:16:51.77
Cの括弧の代わりに階層化行番号を導入しよう。
248デフォルトの名無しさん:2011/03/27(日) 22:28:52.20
 低水準言語って、コンパイル→アセンブル→リンクの過程で、
コンパイル過程以降機械語以前で使う言語だよな。アセンブリが含まれるのは当然だけど、
バイトコードも低水準言語に含まれるのか?
249デフォルトの名無しさん:2011/03/28(月) 15:21:58.04
含まれるわけがない
250デフォルトの名無しさん:2011/03/29(火) 03:29:04.06
アセンブリは低水準言語じゃないしな
251デフォルトの名無しさん:2011/03/29(火) 04:29:57.21
>>250
低水準言語だから

厳密に低水準言語と言えるのはマシン語とアセンブラしかない

c言語は高級アセンブラの異名は持ってるけど、高水準言語
252デフォルトの名無しさん:2011/04/01(金) 19:45:21.03
マシンコードは言語なんだろうか
253デフォルトの名無しさん:2011/04/01(金) 21:11:38.66
機械語という立派な言語
へたすりゃ人間だって話せるやつがいるんだぜ
254デフォルトの名無しさん:2011/04/01(金) 21:33:09.57
こんなネタがあったな。
真のウィザードは口で受話器に「ピー、ヒョロヒョロ」と発声すると相手のFAXに絵を送れるってやつ。
255デフォルトの名無しさん:2011/04/01(金) 21:39:09.13
食玩で電話を只がけしたクラッカーは実在する
256デフォルトの名無しさん:2011/04/04(月) 01:48:32.32
昔キャリーラボのBase80とかを
いじった記憶があるな
あれをC風にすりゃ
257デフォルトの名無しさん:2011/04/23(土) 04:42:17.54
昔は普通にメモリダンプ読んで
直接書き換えしたよな
258デフォルトの名無しさん:2011/06/01(水) 00:07:43.38
逆に今最高水準の言語は何だよ(´・ω・`)?
259デフォルトの名無しさん:2011/06/02(木) 08:45:18.72
LISP
260デフォルトの名無しさん:2011/08/04(木) 16:49:57.59
>>19は態度だけ変えたちんこみたいな奴だったな
261デフォルトの名無しさん:2011/08/08(月) 08:15:25.28
>>258
むしろllvm
262デフォルトの名無しさん:2011/08/08(月) 17:26:37.85
LLVMは高水準もカバーするが最高水準はねーわ
高水準の意味ちゃんと分かってるのか知らんけど
263デフォルトの名無しさん:2011/09/25(日) 18:38:58.78
最高水準となるとシェルスクリプトかGUIか

右へ行くほど低水準:
Sh & GUI -> グルー言語 -> コンパイル&インタプリタの非グルー言語 -> 中間言語 -> アセンブリ -> 機械語
264デフォルトの名無しさん:2011/09/27(火) 19:17:43.45
まるで水準の意味が違う
そもそもGUIがプログラミング言語とか
265デフォルトの名無しさん:2011/09/27(火) 19:20:57.55
計算機利用のレイヤのことを語りたかったんじゃないかな
266デフォルトの名無しさん:2011/10/03(月) 02:44:54.90
わかった!LabViewのことか
267デフォルトの名無しさん:2012/01/08(日) 15:11:48.17
カリー化カリー化言ってるうちに10スレぐらい消化していたが
1行もコードを生み出さなかったプログラム板最低最悪の糞スレ
268デフォルトの名無しさん
LLVMアセンブラでいいじゃん