低水準言語を開発したい
■ このスレッドは過去ログ倉庫に格納されています
0001デフォルトの名無しさん
2010/05/30(日) 21:53:19低水準言語に絞ったスレです。言語全般の話題は「新言語を開発したい」のほうへどうぞ。
0002デフォルトの名無しさん
2010/05/30(日) 22:04:13言語訓練のために立てたものです。
アイと研究員とのやり取りに利用するスレッドなので、
関係者以外は書きこまないで下さい。
京都大学霊長類研究所
0003デフォルトの名無しさん
2010/05/30(日) 22:14:38高速なプログラミング言語を作りたい人用らしいです
0004デフォルトの名無しさん
2010/05/30(日) 22:16:370005デフォルトの名無しさん
2010/05/30(日) 22:24:100006デフォルトの名無しさん
2010/05/30(日) 22:28:24・環境依存だらけ
・型不足
・スパゲティマクロ
0007デフォルトの名無しさん
2010/05/30(日) 22:30:40>>6には失望した
0008デフォルトの名無しさん
2010/05/30(日) 22:30:520009デフォルトの名無しさん
2010/05/30(日) 22:31:00・PythonかGo風の文法
0010デフォルトの名無しさん
2010/05/30(日) 22:32:25・わかりずらい関数ポインタ
・セキュリティホールになる標準関数
0011デフォルトの名無しさん
2010/05/30(日) 22:32:47では有望な意見をよろしく
0012デフォルトの名無しさん
2010/05/30(日) 22:33:42字下げげ方式は賛成だけど、キーワード方式は嫌だな
0013デフォルトの名無しさん
2010/05/30(日) 22:34:48どの変がりそうなの?
0014デフォルトの名無しさん
2010/05/30(日) 22:35:03C,goだから次はrockだ。
0015デフォルトの名無しさん
2010/05/30(日) 22:40:550016デフォルトの名無しさん
2010/05/30(日) 22:41:07過去ログ嫁
0017デフォルトの名無しさん
2010/05/30(日) 22:43:070018デフォルトの名無しさん
2010/05/30(日) 22:47:040019デフォルトの名無しさん
2010/05/30(日) 23:10:20・C言語のいらない機能は削る。
・GCは無しが基本でオプションで付けられるようにしたらよさそう。
・C++/CLI、c++0x等が参考になる。
・部分適用はカリー化した文法がよさそう。
・マクロは基本無しにする。
・Lisp級のマクロも欲しい人はいるので、
マクロを作りやすいように式ベースにする。
・関数型言語の機能を取り込める部分は取り込む。
・Rubyのようにwithを拡張してみたい。
・関数型言語は並列化に強いらしい。
0020デフォルトの名無しさん
2010/05/30(日) 23:18:13もう一個の方へ行け。
0021デフォルトの名無しさん
2010/05/30(日) 23:21:10嫌です。
0022デフォルトの名無しさん
2010/05/30(日) 23:33:060023デフォルトの名無しさん
2010/05/30(日) 23:37:500024デフォルトの名無しさん
2010/05/30(日) 23:38:20スレ違いもここに極まりだな
0025デフォルトの名無しさん
2010/05/30(日) 23:38:56ここまで見事なアンチパターンを展開できる>>19の実力には
計り知れないものがあると俺には感じられる。
0026デフォルトの名無しさん
2010/05/30(日) 23:40:47新言語を開発したい
http://pc12.2ch.net/test/read.cgi/tech/1275223921/
0027デフォルトの名無しさん
2010/05/30(日) 23:42:10あっちのスレに必要な人材なのにな。
よくあるミスキャストだよな。
0028デフォルトの名無しさん
2010/05/30(日) 23:43:070029デフォルトの名無しさん
2010/05/30(日) 23:47:46具体的な問題点が指摘できないなら黙ってた方がいい。
0030デフォルトの名無しさん
2010/05/30(日) 23:48:36お前と仕事したら毎日がカーニバルだ
無論ほめ言葉だ
0031デフォルトの名無しさん
2010/05/30(日) 23:51:50unsigned char (8bit)
unsined long (CPU依存)
bool (carry flag)
だけだ
符号付はclass定義
0032デフォルトの名無しさん
2010/05/30(日) 23:53:00003319
2010/05/31(月) 00:04:00せっかく注目を浴びているので考えていることを書いて置きます。
・優先順位付きのユーザー定義可能な演算子
・数種類の演算子ですべてを表す。
・括弧演算子aaa{}とローカルブロック{}の結合を止めるにはどうしたらよいか?
・空行を入れる、local{}等とするか、
改行を挟んだ括弧の結合は抑止するのはどちらがいいか?
要するにScalaとC式方式のどっちがいいか?
・圧力は炭素を圧縮し美しいダイヤを作る構想には有難い。
なんてことを考えたり話したいと思ってます。
ということでなにとぞよろしくお願いします。
0034デフォルトの名無しさん
2010/05/31(月) 00:05:38マークシートで0点取るぐらいの天才だな。
0035デフォルトの名無しさん
2010/05/31(月) 00:06:400036デフォルトの名無しさん
2010/05/31(月) 00:10:40関数型言語でこれを動かしてみようか
http://akizukidenshi.com/catalog/g/gK-00179/
0037デフォルトの名無しさん
2010/05/31(月) 00:16:54「コンピュータにどういう処理をさせたいのか」をまず考え、
それからその処理を効率よく指示するための構文を考えないと、
結局C言語より使えない物が出来上がるぞ。
低水準言語を開発するのだから、なおさらな。
>>19 とか見てると、まるで RPG を作るのに、
ストーリーやグラフィックから作り込んでくみたいだ。
0038デフォルトの名無しさん
2010/05/31(月) 00:18:580039デフォルトの名無しさん
2010/05/31(月) 00:30:57>RPG を作るのに、ストーリーやグラフィックから作り込んでく
RPGツクールならそれでOK
つまり彼はそのレベルなのだよ
0040デフォルトの名無しさん
2010/05/31(月) 00:34:160041デフォルトの名無しさん
2010/05/31(月) 00:53:49楽しいスレになりそうだなw
go--みたいな感じでどうよ
gcとインターフェースなし
chanとgoroutineはオプショナル
0042デフォルトの名無しさん
2010/05/31(月) 00:59:580043デフォルトの名無しさん
2010/05/31(月) 01:06:09二進化十進型 (精度固定で符号・循環/無限小数を示すフラグ付き)
とかどうよ?
0044デフォルトの名無しさん
2010/05/31(月) 01:17:07それさえも記述できる低水準。
組み込み型はint byte boolのみ
0045デフォルトの名無しさん
2010/05/31(月) 01:22:570046デフォルトの名無しさん
2010/05/31(月) 01:27:46型はstdint系でいんじゃね
0047デフォルトの名無しさん
2010/05/31(月) 01:29:23後の型はクラス定義だ
0048デフォルトの名無しさん
2010/05/31(月) 01:32:310049デフォルトの名無しさん
2010/05/31(月) 01:39:290050デフォルトの名無しさん
2010/05/31(月) 01:47:390051デフォルトの名無しさん
2010/05/31(月) 02:05:41てか符号有無なしとか不便過ぎだろ
整数は8,16,32,64の符号有無で8種と
機種依存の符号有無の2種でどや
dspとか考えたら符合は必須だが
オーバー、アンダーフローは機種依存かね
0052デフォルトの名無しさん
2010/05/31(月) 02:28:34どんな構文でも作れちゃう万能マクロプロセッサスレとか作ったらどう
0053デフォルトの名無しさん
2010/05/31(月) 02:33:150054デフォルトの名無しさん
2010/05/31(月) 05:10:270055デフォルトの名無しさん
2010/05/31(月) 12:14:52符号付整数型もclass宣言してしまえばいい。
キャリーがあれば、多倍長整数だってclass宣言すればいい。
浮動小数点も、FPU命令をオペレーターオーバーロードで記述できるようにすればいい。
SIMDも好きに定義すればいい。
0056デフォルトの名無しさん
2010/05/31(月) 17:35:39結局全部インライン関数かアセンブラでやる位なら
ただのマクロアセンブラで言語じゃねえし
そもそも演算子オーバーロードなんてマクロと同じ位いらんやろ
0057デフォルトの名無しさん
2010/05/31(月) 23:09:50005819
2010/05/31(月) 23:14:40____
/ u \
/ \ /\ 紙光臨とか言ってるし2ちゃねらのことだから
/ し (>) (<) \ 大変なことになってるかも・・・
| ∪ (__人__) J | ________
\ u `⌒´ / | | |
ノ \ | | |
/´ | | |
| l | | |
____
/ u \
/ \ ─\ チラッ
/ し (>) (●) \
| ∪ (__人__) J | ________
\ u `⌒´ / | | |
ノ \ | | |
/´ | | |
| l | | |
____
/::::::::::::::::\
/::::::─三三─\
/:::::::: ( ○)三(○)\ レ、レス56!!これだけか!
|::::::::::::::::::::(__人__):::: | ________
\::::::::: |r┬-| ,/ .| | |
ノ:::::::::::: `ー'´ \ | | |
/::::::::::::::::::::: | | |
|::::::::::::::::: l | | |
0059デフォルトの名無しさん
2010/05/31(月) 23:15:470060デフォルトの名無しさん
2010/05/31(月) 23:31:19006119
2010/05/31(月) 23:38:13006219
2010/05/31(月) 23:56:380 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
で表すことができます。
006319
2010/06/01(火) 00:08:3410 exp = exp exp
これが8番目の空白演算子でclean bookから取って@で表すことにしています。
下降型の優先順位法を使えば、
この式のパーサの重要な部分は1つの関数で書くことができます。
それゆえにS式のreaderに比べたら複雑ではありますが、
シンプルにパーサを書くことができます。
C言語のシンタックス上の見た目を限りなく削り取るとこのような形になると思います。
これがC言語一族のシンタックス上の本質であると考えています。
006419
2010/06/01(火) 00:13:37JavaScript,haXe,PHP,Scala,Java,D言語などで実装しています。
ほぼというのには理由があって、バグはつぶしていない事と、
ほとんど自分でしか考えていなくて議論すべき部分が議論されていないからです。
006519
2010/06/01(火) 00:21:347 keyword '(' exp ')' exp
という演算子が必要であるかどうかです。
この演算子はなくても何とかなり、なければfor文やwhile文等に{}が必然的に
必要になります。
ただし、if else文の扱いがやや不思議な感じになります。
この7の演算子はjavascriptにfunction(a,b)a+bという記述が入ったことと
javascriptやScala、for文やwhile文に必ず{}が必要というわけではない
ことから付け加えました。
006619
2010/06/01(火) 01:03:44golangではvar a int;のように記述したり、while i == 1 {}
のように記述したりします。これらのvarやwhileは前置2項演算子
といえるでしょう。
keyword ( exp ) exp
の名前は文演算子と名づけていました。
C言語系の多くの文はこのような形をしているからです。
しかし式を書くのに文演算子ってなにやら奇妙な名前なのです。
0067デフォルトの名無しさん
2010/06/01(火) 01:06:050068デフォルトの名無しさん
2010/06/01(火) 01:22:190070デフォルトの名無しさん
2010/06/01(火) 03:34:51それじゃパーザ作れないよ
0073デフォルトの名無しさん
2010/06/01(火) 12:01:34elseは単体の式として成立しないのに
なぜ1の演算子で表せると思えるのかな?
exp ::= <if-exp> | <if-else-exp> ...
if-exp ::= 'if' '(' <exp> ')' <exp>
if-else-exp ::= 'if' '(' <exp> ')' 'else' <exp>
0074デフォルトの名無しさん
2010/06/01(火) 16:30:42BNFは構文要素を分解して
非終端記号として名前つけていくもんと思って書くんよ
それぞれに対応する処理を書ける感じ
後他の人の指摘もだし、スペースで結合とか空とかもどこに書けるのかも問題
上に書いてあるのじゃ一式だけしか書けない上に終わらないんじゃないか
まずはjavaccやbison/yaccに食わせれるものを作ることを考えたらどう
正しいかどうか判断してくれる
007519
2010/06/02(水) 10:51:44わかりました。
>>73
infix_l = 'else' とすれば出来る。
>>74
1式終わったあともトークンがあれば、式としてさらに結合するのです。
とおりあえず、bisonに食わせられるものかいてみます。
007619
2010/06/02(水) 11:51:46keyword,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
0077デフォルトの名無しさん
2010/06/02(水) 12:19:31結構無理があるぞ。
73が書いてることはifの後に来るelseしか意味がないんだから
ああいうBNFになるよって話でしょ
コンパイル出来るかどうかは基準を示しただけで
75からすると(1 else 2 - 3) なんて式も許されちゃうし
複数の文をどうやって区切るのか、a b c dなんて式も有効なのか
終わりはどうなってんのとか ,とかどうすんの?とか。
繰り返し構文なんかはどうすんのとか
全部じゃなくてもいいが、上のBNF?からは全く読めない
演算子を自由に定義したいらしいが
コード毎に意味の変わる演算子とかまともにプログラム書けないし
どっちにしろスレタイからはちょい離れて
言語設計とBNFの勉強っぽいが
0078デフォルトの名無しさん
2010/06/02(水) 12:27:310079デフォルトの名無しさん
2010/06/02(水) 12:41:480080デフォルトの名無しさん
2010/06/02(水) 12:57:06還元-還元競合が出てるように読めるんだが
008119
2010/06/02(水) 13:26:31この言語はLispのS式を置き換えてC言語のような言語を作るための式言語です。
S式のリーダはリストを読み込むだけでLispのプログラムかどうかは
検証できませんし、検証することを意図していません。
同じように、この言語は構文木を読み込むだけです。
だから、ご指摘のように(1 else 2)のような式もかけますし、
そのように意図して作成しています。
プログラムとして動作可能にするには、
構文木を抽象構文木へ変換する段階で検証することになります。
008219
2010/06/02(水) 13:54:19低水準との関連は、
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
0083デフォルトの名無しさん
2010/06/02(水) 19:02:09「コンパイラ・スクリプトエンジン」相談室14
http://pc12.2ch.net/test/read.cgi/tech/1258431145/
0084デフォルトの名無しさん
2010/06/02(水) 19:46:00このスレの目的は低水準操作が出来る言語だよ。
008519
2010/06/02(水) 23:49:08たとえば、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で言語作るようにすればいいわけです。
0086デフォルトの名無しさん
2010/06/03(木) 00:41:50*(volatile unsigned char *)0xFF98 |= 0x0001;
0087デフォルトの名無しさん
2010/06/03(木) 01:37:51オナニーレベルにすら達してない
0088デフォルトの名無しさん
2010/06/03(木) 08:27:41peek :: Int -> IO Int
poke :: Int -> Int -> IO ()
x <- peek 0xFF98
poke 0xFF98 (x | 0x0001)
008919
2010/06/03(木) 08:29:02自分が考えている言語が関数型言語と言えるのかどうかは分かりませんが
考えてみました。
ポインタの型が悩む所です。
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言語より長く記述することになるでしょう。
0091デフォルトの名無しさん
2010/06/03(木) 13:44:520092デフォルトの名無しさん
2010/06/03(木) 16:17:170093デフォルトの名無しさん
2010/06/03(木) 17:57:18いや組み込み屋なんだが
直アドレス参照はインラインアセンブラとか組込み関数とかの手段さえあれば
言語自体には無いってのもありかなと
0094デフォルトの名無しさん
2010/06/03(木) 18:00:54ループをカウンタじゃなく範囲でも回せるようにしたら
範囲チェックを言語に入れても実用度上がらないかな
0095デフォルトの名無しさん
2010/06/03(木) 23:02:340096デフォルトの名無しさん
2010/06/04(金) 00:05:36後のはgolang
0097デフォルトの名無しさん
2010/06/04(金) 00:07:07009819
2010/06/05(土) 00:26:46byaccとjflexで構文木読み込みして型推論のところまで。
実例作るだけならできそうだけど、エラー処理が駄目ってなるのは目に見えてるので
地道に着実に実力つけつつ、仕様は仕様で考えてきます。w
009919
2010/06/05(土) 00:35:30ちょうどいい教科書的なものってないですかねぇ?
ScalaでいろんなCPUのアセンブラ出来たらいいと思うけど、作るのが難しい。
0100デフォルトの名無しさん
2010/06/05(土) 06:23:150101デフォルトの名無しさん
2010/06/05(土) 11:45:460102デフォルトの名無しさん
2010/06/05(土) 15:16:500103デフォルトの名無しさん
2010/06/05(土) 15:40:510104デフォルトの名無しさん
2010/06/05(土) 16:21:430105デフォルトの名無しさん
2010/06/05(土) 17:06:08near jumpをshort jumpにとか
リンク時にしかできない最適化を普通にやってたな。
MS-Cの時代から。
あと実行時にFPU命令をサポートしないCPUで実行したとき
無効命令をトラップしてFPU命令をライブラリCALL命令に置き換え
以後はライブラリを使うようにするとかも普通に行われてた。
0106デフォルトの名無しさん
2010/06/05(土) 22:50:29でも実行時に命令の書き換えは不都合でるし下品だしセキュアじゃないからな
でいわゆるリンカーじゃないな
0107デフォルトの名無しさん
2010/06/05(土) 23:55:570108デフォルトの名無しさん
2010/06/06(日) 00:08:340109デフォルトの名無しさん
2010/06/06(日) 06:17:46よく読め
リンク時に相対jump等の短い命令に置き換えるのはgnu ldとかでもやれっし
でも実行時にコードセグメント書き換えるのはお下品だとゆってる
0110デフォルトの名無しさん
2010/06/06(日) 07:30:480111デフォルトの名無しさん
2010/06/06(日) 07:33:02最近はやらんけど
0112デフォルトの名無しさん
2010/06/06(日) 09:37:520113デフォルトの名無しさん
2010/06/06(日) 09:47:14MMUとPC相対アドレシングモードのないCPUのOS
代表的なものはMS-DOSは常識的に実行時に
セグメントアドレスを書き換えてる。
EXEヘッダにはそのための情報が入っている。
0114デフォルトの名無しさん
2010/06/06(日) 10:10:19??自分で書いてるように、実行環境が仮想アドレスなら
コンパイル時に決められるんでしょ
0115デフォルトの名無しさん
2010/06/06(日) 13:38:310116デフォルトの名無しさん
2010/06/06(日) 13:45:150117デフォルトの名無しさん
2010/06/06(日) 13:49:14プログラム自体が書き換えるのは
話が違うと思うが
0118デフォルトの名無しさん
2010/06/06(日) 14:06:020119デフォルトの名無しさん
2010/06/06(日) 18:30:23>>117
が全部書いてくれたな
実行時に仮想アドレスをシャッフルするのは安全性のためにもアリな話だが
コード部分は書き換え不可にしたりROMだったりするかもだし
コードセグメントを自分で書き換えするのはJITみたいなの以外はナシだろうな
0120デフォルトの名無しさん
2010/06/06(日) 18:47:540121デフォルトの名無しさん
2010/06/06(日) 19:01:36たとえば、初期化とかでよくある一回目だけ特別な処理が必要、とかいう場合に、
static flag = true;
if (flag) {
flag = false;
特別な処理
}
とすると、毎回フラグチェックが入って無駄なので、自己書換えを使うとか。
自己書換え使わんでも最近のプロセッサなら分岐予測が当たるように最適化すれば
そんなに高コストでもないとは思うが。
0122デフォルトの名無しさん
2010/06/06(日) 19:03:170123デフォルトの名無しさん
2010/06/06(日) 19:12:45もともと自己書き換えは特殊だよ。
昔のプアなCPUだとそういうのもありだったが今時はあまり流行らんわな
デバッガも困るし
0124デフォルトの名無しさん
2010/06/06(日) 19:14:16書き換える前の命令がi-cacheとかに入ってる可能性があるから
適切にフラッシュしなければならない
0125デフォルトの名無しさん
2010/06/06(日) 19:40:42パイプラインもだよね
0126デフォルトの名無しさん
2010/06/06(日) 20:42:53性能は上がりこそすれ下がることは無い。
全く論点についてこれないなら素直に認めろよ。
0127デフォルトの名無しさん
2010/06/06(日) 23:00:28コードセグメント書き換え不可
書き換える一般的な方法もない
最適化にも対応出来ない
キャッシュとか意識しないとだめ
メリットは少々の高速化
むしろ関数ポインタか呼ぶ前に判定する方が速い
組み込みならそもそも何度も初期化通るドン臭いコードは書かない
0128デフォルトの名無しさん
2010/06/06(日) 23:43:54全部無意味か間違いってことじゃん
0129デフォルトの名無しさん
2010/06/07(月) 02:07:3420年前からやってたが
singletonて名前がついててわろた奴だ
が実はスレッドセーフじゃないからイマイチ
0130デフォルトの名無しさん
2010/06/07(月) 02:11:14いきなりgetとか書いてそん中で
最初だけ初期化もやっちまうとかやね
0131デフォルトの名無しさん
2010/06/07(月) 07:53:200132デフォルトの名無しさん
2010/06/07(月) 08:59:08golangでさえOS無しで走らせるための
サンプル的なコードが入ってるのに。
013319
2010/06/07(月) 22:29:50懐かしい。
でも、8086ではセグメント地獄だわ、windowsになったらWinAPI地獄だわ、
C++だわなんだわで、すっかり自己書き換えなんて意識しなくなりました。
エミュレータやらVMの場合にJITとかする場合はゴリゴリとマシン語生成したりしますね。
デバッガもプログラム書き換えますね。
自己書き換え可能な言語のPCASTLは面白いですね。
0134デフォルトの名無しさん
2010/06/07(月) 22:59:09jitも自己書き換えとは別だよね
昔は自己書き変えどころか
同じコードをワザとずれたアドレスで実行したり
実行中にRAMのマッピング変えたり
やりたい放題だったよね
高階な言語と違って
最適化されたRISCのマシンコードとか
実質的に書きかえは難しい
0135デフォルトの名無しさん
2010/06/07(月) 23:05:55> 同じコードをワザとずれたアドレスで実行したり
これは今でもやるだろ。
0136デフォルトの名無しさん
2010/06/07(月) 23:16:14奇数番地とかから実行して別なことさせたり
0137デフォルトの名無しさん
2010/06/07(月) 23:31:16jmp命令の代わりに使うのは、よく知られたテクニックでしょ。
0138デフォルトの名無しさん
2010/06/08(火) 01:59:27MSDOSの頃はオーバーレイとかバンク切り替えとか色々あったやろ
おっさん
0139デフォルトの名無しさん
2010/06/08(火) 04:40:260141デフォルトの名無しさん
2010/06/08(火) 13:09:19先のプログラムを走らせたり
014219
2010/06/09(水) 10:35:020143デフォルトの名無しさん
2010/06/09(水) 15:07:250144デフォルトの名無しさん
2010/06/09(水) 21:48:06マイコンだとセクションごとに使う命令が違ったりする
014519
2010/06/09(水) 23:15:39バンク切り替え機能とかあると嬉しいとかっていつの時代だ?
ってかんじだけど、必要なところでは必要なんですね。
そんな古い環境なら古い言語使ってろってことではなく、
新しい言語使いたい!みたいな感じなんですね。
新しい言語でファミコンのゲーム作るぞーみたいな勢いでw
0146デフォルトの名無しさん
2010/06/10(木) 00:22:13何かの病気なのかな
014719
2010/06/10(木) 00:32:13バンク切り替え機能とかあると嬉しいとかっていつの時代だ?
ってかんじだけど、必要なところでは必要なんですね。
そんな古い環境なら古い言語使ってろってことではなく、
新しい言語使いたい!みたいな感じなんですね。
新しい言語でファミコンのゲーム作るぞーみたいな勢いでw
014819
2010/06/10(木) 00:33:36病気といえば、病気ですが、性格と言えば性格ですね
014919
2010/06/10(木) 07:36:07パーサは文字列から人の列を作りだし、トーナメント戦を行うようにして構文木を作成する。
通常のトーナメント戦ではトーナメント表が先に出来上がっているが、
戦いが終わって初めてトーナメント表が出来上がるところが通常のトーナメント戦との違いである。
まず式を読み込む大会(meet)を開催する。
大会ではまず糸(string)から人々の列(guys)を作りだす。入場行進のようなものだ。
普通はこの処理を字句解析と呼ぶ。
次に戦うやつらが持っている力の表(powers)を作成する。
次にトーナメント戦を行う。
このトーナメント戦が終われば戦いの結果であるトーナメント表が出来上がるというわけだ。
ここでトーナメントのルールを説明しよう。
トーナメントはチーム戦である。チームは1〜N人で構成される。
特にN人で構成されるチームは愛(Aloha)と友情によって強く結ばれる。
各々のチームは力を持っていて力が強いほうが勝ち抜く。
勝ったチームは負けたチームを自分の配下に置き、こぶしとこぶしをぶつけ合わせた
熱い愛と友情によって新たなチームを結成する。
最初は力0でトーナメントを開始する。
トーナメントを開始したら、やつらの中から1人取り出し1人のチームを作ってもらう。
次に戦うやつの力とその場の力を戦わせる。
やつが負ければバトルは終了しチームは帰ってもらう。
やつが勝てば列から取り出し、やつの力で次のトーナメントを行う。
トーナメントの結果から選ばれたチームをやつのチームに加えて次の戦いを行う。
このような戦いの結果1つの大きなチームが形成される。
これがトーナメント戦の戦いの結果であり思い描いていたツリー状のトーナメント表であり
構文木となる。
015019
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>
015119
2010/06/10(木) 07:47:51結果、+[1,*[*[2,3],5]]となるように修正してみてくれ。
0152デフォルトの名無しさん
2010/06/10(木) 08:59:17アプリケーションレベルでは意識しなくてもいいようにできるが
それを管理する側ではそうはいかない。
そしてそれを作るための言語なら当然そういう機能が必要。
0153デフォルトの名無しさん
2010/06/10(木) 10:12:00マイコンはないのが主流。RISC系にもない
farとか言語が意識するなんて全く必要ねえな
0154デフォルトの名無しさん
2010/06/10(木) 11:25:480155デフォルトの名無しさん
2010/06/10(木) 12:10:45今時CすらないCPUもあるしつらいわな
0156デフォルトの名無しさん
2010/06/10(木) 12:14:150157デフォルトの名無しさん
2010/06/10(木) 12:14:56CすらないならGCCのバックエンドつくるのが一番手っ取り早いんじゃね
0158デフォルトの名無しさん
2010/06/10(木) 13:37:30ポインタの大きさがfar(4byte)、near(2byte)になってる
空間が20bitしかないのに4byteかよ
0159デフォルトの名無しさん
2010/06/10(木) 13:40:500160デフォルトの名無しさん
2010/06/10(木) 15:58:300161デフォルトの名無しさん
2010/06/10(木) 16:08:51昔はそれで正しかったからね。
0162デフォルトの名無しさん
2010/06/10(木) 16:09:53今も昔も正しくないw
0163デフォルトの名無しさん
2010/06/10(木) 16:15:10K&Rの初版読んでみろ
0164デフォルトの名無しさん
2010/06/10(木) 16:17:26初版?もってないね。
俺がそれを持っていると想定してしまった理由は?
0165デフォルトの名無しさん
2010/06/10(木) 16:53:400166デフォルトの名無しさん
2010/06/10(木) 16:58:260167デフォルトの名無しさん
2010/06/10(木) 17:32:01なかったことにできる!
0168デフォルトの名無しさん
2010/06/10(木) 17:38:21CすらないへぼくてマイナーなCPUなんぞ
金もらわんとつくらんでしょw
0169デフォルトの名無しさん
2010/06/10(木) 17:54:21やっぱシェアの大きさだよね
0170デフォルトの名無しさん
2010/06/10(木) 18:40:410171デフォルトの名無しさん
2010/06/10(木) 23:39:53妄想を語りたいのか
0172デフォルトの名無しさん
2010/06/10(木) 23:40:530173デフォルトの名無しさん
2010/06/11(金) 22:12:33でも使いたくはない
017419
2010/06/11(金) 23:39:240175デフォルトの名無しさん
2010/06/12(土) 00:48:36017619
2010/06/12(土) 22:20:180177デフォルトの名無しさん
2010/06/12(土) 23:24:09それで何を作りたいか考えるべきだ
0178デフォルトの名無しさん
2010/06/12(土) 23:26:240179デフォルトの名無しさん
2010/06/12(土) 23:31:28018019
2010/06/13(日) 00:54:46Let's talk about making of programming language dream using English!!
018119
2010/06/13(日) 02:06:03action scriptで書いてみた
0182デフォルトの名無しさん
2010/06/17(木) 14:10:39018319
2010/06/19(土) 23:12:34とりあえず、動作確認なしでコンパイルはとおってる状態です。
構文木->名前を単一にしたデータ->クロージャ変換されたデータ->仮想アセンブラ->アセンブラ
という変換をしています。
0184デフォルトの名無しさん
2010/06/20(日) 01:45:59018519
2010/06/20(日) 03:07:27関数型言語で作る低水準言語のちょうどいい例を知らないのでw。
最適化フェーズもあるし、色々参考になると思ってます。
0186デフォルトの名無しさん
2010/06/20(日) 06:25:140187デフォルトの名無しさん
2010/06/20(日) 17:03:47018819
2010/06/20(日) 21:52:09確かにcamlで逐次実行するプログラムを書くのは確かに書きずらいと思います。
ただコンパイラを実装する言語としても、実装される言語としてもシンプルでいいと思います。
シンプルな関数型言語の実装で学んだことを、複雑な逐次実行型言語の実装に生かせたらいいなと思っています。
0189デフォルトの名無しさん
2010/06/20(日) 22:01:42019019
2010/06/20(日) 22:03:19以下の mincaml を参考にJava&Scalaに移植中の物です。
http://min-caml.sourceforge.net/
OCamlはたまにしか見ないので忘れる、分からなくなる。
OCaml 版の解説見つつ、ソースを読んでみてください。
0191デフォルトの名無しさん
2010/06/20(日) 22:09:28例えば8251の通信ドライバーとか
0192デフォルトの名無しさん
2010/06/20(日) 22:12:250193デフォルトの名無しさん
2010/06/20(日) 22:12:39019419
2010/06/20(日) 22:35:17まずこれで作り方勉強してそれから、低水準言語を実装しようという
気の長ーいことを考えてます。だから、まだ当分、低水準言語を
作りたいけど作れないんですw
019519
2010/06/20(日) 22:39:29019619
2010/06/20(日) 22:40:35いい加減ですいません。
0197デフォルトの名無しさん
2010/06/21(月) 12:36:59関数型言語で割り込みとI/Oはどう書くんだろ?
0198デフォルトの名無しさん
2010/06/21(月) 12:41:29メモリマップド I/O でなければ inp と outp という別の関数になるとか
割り込みは、関数をハンドラにする機能を、言語とランタイムに実装
0199デフォルトの名無しさん
2010/06/21(月) 12:51:47割り込みにもいろいろあるけどもっと具体的に言ってくれる?
0200デフォルトの名無しさん
2010/06/21(月) 19:15:06悪い意味じゃないが意外に普通なんだな
86以外じゃI/Oマップドなんて死語になってるよな
関数型言語でVolateなデータはどういう扱いになるのか興味あるな
>>199
割り込みなんてソフトかハードしかねえだろ
どんだけいろいろあんだよ
0201デフォルトの名無しさん
2010/06/21(月) 21:56:350202デフォルトの名無しさん
2010/06/23(水) 00:09:30つくりにしないとだめだよ。
今のハードウェアは手続き型言語用だから。
0203デフォルトの名無しさん
2010/06/23(水) 06:28:480204デフォルトの名無しさん
2010/06/23(水) 15:25:130205デフォルトの名無しさん
2010/06/23(水) 18:09:310206デフォルトの名無しさん
2010/06/23(水) 20:45:02つか関数型的なHDL出来ねえかな
深く考えてないが意外にいけそうな気がする
0207デフォルトの名無しさん
2010/06/23(水) 21:27:42やってしまえとかいう研究とか、ないではない。
関数型的というか、VerilogないしVHDLからプロセス的なものを全部とっぱらって、
宣言的な機能だけにしたらすっきりするんじゃないかと漠然と思っている。
思っているだけだが。
0208デフォルトの名無しさん
2010/06/24(木) 17:30:33206だが、たぶん似た感想もってそうだな
グラフの縮退とかはある程度コンパイル時に済ませて
分解してからHDL的ななにかにMapして、
投機的に同時に動かしたりデータ駆動的に動く感じだとどうだろね
0209デフォルトの名無しさん
2010/06/24(木) 17:46:25なんという本末転倒っぷりw
0210デフォルトの名無しさん
2010/06/24(木) 19:40:31ヒープメモリどうすんだよ・・・まさかHWでGCするの?
0211デフォルトの名無しさん
2010/06/25(金) 13:19:530212デフォルトの名無しさん
2010/06/25(金) 19:57:180213デフォルトの名無しさん
2010/06/25(金) 22:13:370214デフォルトの名無しさん
2010/06/25(金) 22:20:130215デフォルトの名無しさん
2010/06/25(金) 23:20:450216デフォルトの名無しさん
2010/06/28(月) 22:05:530217デフォルトの名無しさん
2010/06/30(水) 02:25:470218デフォルトの名無しさん
2010/06/30(水) 03:13:110219デフォルトの名無しさん
2010/06/30(水) 05:30:330220デフォルトの名無しさん
2010/07/01(木) 09:37:09ttp://blog.llvm.org/2010/06/tce-project-co-design-of-application.html
022119
2010/07/19(月) 00:18:20scalaに移植していたmincamlが動き始めました。
元がspark用の設計のものをx86用に移植中のものの移植なので完全ではないですけど
フロントエンドからバックエンドまで最適化付きで実装されているので
今後の開発の参考になるはずです。
0222デフォルトの名無しさん
2010/07/19(月) 12:32:410223デフォルトの名無しさん
2010/08/17(火) 10:09:55unicode から sjis や euc への変換は標準関数でサポート
1行は必ずセミコロンで閉じたいのです
構造体必須だといいな
正規表現あると楽ちん
変数は宣言必須 (初心者のケアレスミスは減らそうぜ!)
型宣言も必須 (文字変数に整数代入は warning じゃなくてエラーに!)
変換関数を通さない型の違う代入はエラー
1つの事をしたいのに、書き方が複数存在することは避ける (悪い例として perl とかね)
環境構築が面倒なのはやだ (たとえば Java とか PHP とか) ← 何気に重要
0224デフォルトの名無しさん
2010/08/17(火) 10:51:53C#は、ほぼ満たしてる。
0225デフォルトの名無しさん
2010/08/17(火) 12:22:260226デフォルトの名無しさん
2010/08/17(火) 13:41:330227デフォルトの名無しさん
2010/08/17(火) 13:45:37Monoが動いたとしてもXNAみたいな付属品も満足に動かせないしなぁ。
満足にC#が使えるのはMS-OSだけだよw
0228デフォルトの名無しさん
2010/08/17(火) 20:39:000229デフォルトの名無しさん
2010/08/17(火) 23:24:040230デフォルトの名無しさん
2010/08/18(水) 06:22:370231デフォルトの名無しさん
2010/09/12(日) 14:36:040232デフォルトの名無しさん
2011/02/15(火) 07:46:520233デフォルトの名無しさん
2011/02/15(火) 07:52:290234デフォルトの名無しさん
2011/02/15(火) 08:33:31が、書いたことある奴は別に新言語なんか要らずに冷やかしに見に来ているだけなので、結局会話が
成り立たないスレ
0235デフォルトの名無しさん
2011/02/15(火) 08:35:300236デフォルトの名無しさん
2011/02/15(火) 09:14:270237デフォルトの名無しさん
2011/02/15(火) 09:30:22NANDしかない言語ってどうだろう?
0238デフォルトの名無しさん
2011/02/15(火) 09:50:02言語処理系なんて環境依存ほとんどないからC/C++でいい。
0239デフォルトの名無しさん
2011/02/15(火) 09:50:15汎用言語には適用できないはずだが
0240デフォルトの名無しさん
2011/02/15(火) 10:22:52むしろC++の処理系が書きやすい言語が欲しい。
0241デフォルトの名無しさん
2011/02/19(土) 09:08:25データ型がbitしかないんですね。
0242デフォルトの名無しさん
2011/02/21(月) 23:51:43.07で、記述がテキストでなく LabView みたいに回路図入力。
0243デフォルトの名無しさん
2011/02/22(火) 00:49:30.240244デフォルトの名無しさん
2011/02/23(水) 01:21:09.02bluespec
今はVerilogライクなHDLを出してるけど以前はHaskellライクなHDLを出してた。
0245デフォルトの名無しさん
2011/03/01(火) 16:04:20.270246デフォルトの名無しさん
2011/03/06(日) 21:58:32.440247デフォルトの名無しさん
2011/03/06(日) 23:16:51.770248デフォルトの名無しさん
2011/03/27(日) 22:28:52.20コンパイル過程以降機械語以前で使う言語だよな。アセンブリが含まれるのは当然だけど、
バイトコードも低水準言語に含まれるのか?
0249デフォルトの名無しさん
2011/03/28(月) 15:21:58.040250デフォルトの名無しさん
2011/03/29(火) 03:29:04.060251デフォルトの名無しさん
2011/03/29(火) 04:29:57.21低水準言語だから
厳密に低水準言語と言えるのはマシン語とアセンブラしかない
c言語は高級アセンブラの異名は持ってるけど、高水準言語
0252デフォルトの名無しさん
2011/04/01(金) 19:45:21.030253デフォルトの名無しさん
2011/04/01(金) 21:11:38.66へたすりゃ人間だって話せるやつがいるんだぜ
0254デフォルトの名無しさん
2011/04/01(金) 21:33:09.57真のウィザードは口で受話器に「ピー、ヒョロヒョロ」と発声すると相手のFAXに絵を送れるってやつ。
0255デフォルトの名無しさん
2011/04/01(金) 21:39:09.130256デフォルトの名無しさん
2011/04/04(月) 01:48:32.32いじった記憶があるな
あれをC風にすりゃ
0257デフォルトの名無しさん
2011/04/23(土) 04:42:17.54直接書き換えしたよな
0258デフォルトの名無しさん
2011/06/01(水) 00:07:43.380259デフォルトの名無しさん
2011/06/02(木) 08:45:18.720260デフォルトの名無しさん
2011/08/04(木) 16:49:57.590261デフォルトの名無しさん
2011/08/08(月) 08:15:25.28むしろllvm
0262デフォルトの名無しさん
2011/08/08(月) 17:26:37.85高水準の意味ちゃんと分かってるのか知らんけど
0263デフォルトの名無しさん
2011/09/25(日) 18:38:58.78右へ行くほど低水準:
Sh & GUI -> グルー言語 -> コンパイル&インタプリタの非グルー言語 -> 中間言語 -> アセンブリ -> 機械語
0264デフォルトの名無しさん
2011/09/27(火) 19:17:43.45そもそもGUIがプログラミング言語とか
0265デフォルトの名無しさん
2011/09/27(火) 19:20:57.550266デフォルトの名無しさん
2011/10/03(月) 02:44:54.900267デフォルトの名無しさん
2012/01/08(日) 15:11:48.171行もコードを生み出さなかったプログラム板最低最悪の糞スレ
0268デフォルトの名無しさん
2012/01/08(日) 16:33:19.79■ このスレッドは過去ログ倉庫に格納されています