[表示 : 全て 最新50 1-99 101- 201- 301- 401- 501- 601- 701- 801- 901- 1001- 2chのread.cgiへ]
Update time : 02/13 17:41 / Filesize : 228 KB / Number-of Response : 1002
[このスレッドの書き込みを削除する]
[+板 最近立ったスレ&熱いスレ一覧 : +板 最近立ったスレ/記者別一覧] [類似スレッド一覧]


↑キャッシュ検索、類似スレ動作を修正しました、ご迷惑をお掛けしました

「コンパイラ・スクリプトエンジン」相談室4



1 名前:デフォルトの名無しさん mailto:sage [04/11/10 23:30:50]
言語仕様や処理系の話題に関するスレッドです。

字句解析・構文解析から,データフロー解析,ループ並列化,タスク並列化,SSA変換,CPS変換,
レジスタ割付,命令スケジューリング,ソフトウェアパイプライン等各種最適化,それに
VM,GC,JIT,リンク時最適化,動的バイナリ変換などなど。

前スレ
1 pc.2ch.net/tech/kako/981/981672957.html
2 pc2.2ch.net/test/read.cgi/tech/1021136715/ (dat落ち)
3 pc5.2ch.net/test/read.cgi/tech/1070089173/ (前スレ)

関連リンクは多分 >>2-10 あたり

36 名前:デフォルトの名無しさん mailto:sage [04/11/12 00:46:03]
>>32
lisp ていうか scheme のコンパイラネタはここから辿ってみるのはどうでしょ。
知ってたらごめんね。
ttp://library.readscheme.org/page8.html

37 名前:デフォルトの名無しさん mailto:sage [04/11/12 00:48:57]
連投すまないけどコードが間違ってたので

int * code_ptr

Func_CPU{
swithc(*code_ptr){
// add byte
case 0x0000:
*code_ptr+1 += *code_ptr +2;
code_ptr+=2;
break;
// sub byte
case 0x0001
*code_ptr+1 -= *code_ptr +2;
code_ptr+=2;
break;
 ・・・


です。
こうやって命令とデータを配置してCPUの演算のような
関数を作って、そこで計算さえる方法だと実際に
他の関数内で演算をさせるより実装が遅くなりそうなんですが
もっと速い実装方法がありますか?


38 名前:M.B. [04/11/12 00:49:42]
>>34
Java の「中間コード+仮想マシン」方式が、
なんだかんだいっても一番実際的。
USCD の p-System とか、BCPL の IntCode とか。
とりあえずこの方式で動かしてみて、
「遅い」と思ったら javaCC なり BISON なりに
乗り換えるのが実際的。
何より移植が楽だしな。

39 名前:デフォルトの名無しさん mailto:sage [04/11/12 00:53:00]
byte * code_ptr

Func_CPU(){
swithc(*code_ptr){
// add byte
case 0x0000:
*code_ptr+1 += *code_ptr +2;
code_ptr+=3;  // 3byteだけポインターを動かす
break;
// sub byte
case 0x0001
*code_ptr+1 -= *code_ptr +2;
code_ptr+=3;
break;
 ・・・


>>USCD の p-System とか、BCPL の IntCode とか。
これは知らないので調べてみます

JAVAの実装方法が載ってる本でもあるのでしょうか?
自分もそういった本が欲しかったので探したのですが
見つからなかったので・・・

40 名前:デフォルトの名無しさん mailto:sage [04/11/12 00:53:25]
LISPのlambda知っとくだけでかなり変わるよなあ
Cでコールバック関数別途用意するとかがアホらしくなる
JavaScriptはその辺のLISPの良い所をうまく抽出した言語

41 名前:デフォルトの名無しさん mailto:sage [04/11/12 00:59:56]
忘れてるよ

以下未整理とネタ

shuJIT (JITについて)
www.shudo.net/jit/index-j.html

ギコBASIC
C言語版
page.freett.com/gikob/gikobw00047.zip
C++版
page.freett.com/gikob/gbtl-beta3.zip

計算機能論ホームページ
(消えているので、どうしても見たければarchive.org等を利用する事)
buri.sfc.keio.ac.jp/~yosuke/keisan-kino-ron/index.html

YACC link
www2.dewa.or.jp/rock/camp/yacc/whatyacc.htm

42 名前:デフォルトの名無しさん mailto:sage [04/11/12 01:00:51]
>>39
switch使うと1命令毎のジャンプが2回発生するし、
関数テーブルにすると関数呼び出しで時間が掛かる。
C言語で書こうとすると効率はあまり良くならない。

こういった技術にdirect threaded codeというのがあって、
gnu forthの実装などで使われているらしい。
gccにはこのために用意したとしか思えないラベルを変数に格納できる
という拡張機能があって、うまく使うとswitchや関数より効率が良いVMが作れる。

VM() {
static void *op[] = {&&op1, &&op2, &&op3} ;
goto *op[pc++];
op1:
//・・・
goto *op[pc++];
op2:
//・・・
goto *op[pc++];
op3:
//・・・
goto *op[pc++];
}

これでswitchの倍程度は速くなる。

43 名前:デフォルトの名無しさん mailto:sage [04/11/12 01:04:23]
あ、上はindirectだった
directの場合は↓

VM() {
static void *op[] = {&&op1, &&op2, &&op3} ;
void *pc = op;
goto *pc++;
op1:
//・・・
goto *pc++;
op2:
//・・・
goto *pc++;
op3:
//・・・
goto *pc++;
}

これでindirectよりも数割ぐらい効率がよくなる。
実際使う時はopの中身を実行する順に並べればいい。


44 名前:デフォルトの名無しさん mailto:sage [04/11/12 01:08:41]
>>42
なるほど、VM(CPU部分)を呼び出さずに、
命令コード毎、関数内でGotoを使って飛ばしていけばいいのですね

確かにこっちの方が速いですね。



45 名前:デフォルトの名無しさん mailto:sage [04/11/12 01:08:52]
>>36
   彡´⌒ヽミ
   (´・ω・`)   知らなかったでし。
    (つ甘と)    親切にどうも。
    `u―u´

46 名前:デフォルトの名無しさん mailto:sage [04/11/12 01:13:17]
>>41
ギゴBASICみる限り、自分が考えた設計と同じですね

来週から1週間掛けて、スクリプトを作るつもりです。


47 名前:デフォルトの名無しさん mailto:sage [04/11/12 01:16:16]
>>42
これ他の言語にも欲しいよね、インタプリタ作るにはもってこいの機能で、
アセンブラで書けば一発なのに、高級言語では全く書けない。

48 名前:デフォルトの名無しさん mailto:sage [04/11/12 03:58:44]
>>42
gccにテーブルジャンプ書く機能あるなんてしらんかった。
自分のVMを書き換えてみるよ、ありがとん。


49 名前:M.B. [04/11/12 08:40:20]
>>39
×USCD
○UCSD (カリフォルニア州立大学サンディエゴ校)

BCPL については
リチャーズ&スティーヴンズ
『BCPL 言語とそのコンパイラ』共立出版

50 名前:デフォルトの名無しさん mailto:sage [04/11/12 21:50:40]
>>42のようなのはVCではできんのかぇ?

51 名前:M.B. [04/11/12 22:25:59]
>>50
VCでできるかどうかはワカランけど、
BASIC では定跡とのこと。

52 名前:デフォルトの名無しさん mailto:sage [04/11/12 22:52:52]
はぁ?

53 名前:デフォルトの名無しさん [04/11/12 23:06:16]
26歳、VMを覚えるまでは金無し君だったけど(ry


54 名前:デフォルトの名無しさん mailto:sage [04/11/12 23:36:08]
マジお勧め。



55 名前:デフォルトの名無しさん mailto:sage [04/11/12 23:42:35]
bignumのライブラリでよさげなのないですか?
ライセンスとか面倒なのは避けたいので
DLL形式で使えるとうれしい。

56 名前:デフォルトの名無しさん [04/11/13 00:23:10]
アフォ?
ライブラリでもライセンスは関係する罠w


57 名前:デフォルトの名無しさん mailto:sage [04/11/13 00:35:36]
M.B. age sugi

58 名前:M.B. mailto:sage [04/11/13 00:39:06]
>>57
sage ?

59 名前:M.B. mailto:sage [04/11/13 09:37:42]
いま Java で Lisp を書こうとして、禿死苦悩んでいる。
atom や car や cdr は List クラスのメソッドにするとして、
read/write や eval って何のメソッドにするんだ?
入出力ストリームを extend して List を扱えるようにするのか?
ListProcceser とかいうクラスを定義して eval メソッドを実装するのか?
なんやらオブジェクト同士のつかみ合いみたいになって、
設計が綺麗くなんないんだが。

60 名前:デフォルトの名無しさん mailto:sage [04/11/13 10:28:53]
つまんないことで悩んでるな。
Lispとしての関数と、それを実装するJavaでの話は全く関係ないよ。

簡単なLisp処理系のソースを読んでみることを勧める。
そうすればシンボルテーブルの概念も掴めるだろう。


61 名前:60 mailto:sage [04/11/13 10:47:54]
殴り書き。

class LispObject { ...}
class LispCons extends LispObject {...}
class LispSymbol extends LispObject {...}
class LispNumber extends LispObject {...}
class LispString extends LispObject {...}
class LispFunction extends LispObject {...}

class LispInterpreter {
Hashtable obarray;

public LispObject eval(LispObject form) throws LispError {
if (form.isAtom()) {
return (form.isSymbol() ? ((Symbol)form).getValue() : form);
} else if (isList(form)) {
func = ((LispCons)form).getCar();
if (func.isSymbol()) {
func = func.getFunction();
if (function == null || !function.isFunction()) {
throw LispError(略);
}
} else {
func = createLambdaFunction(func);
}
return callFunction((LispFunction)func, form.getCdr());
} else {
throw LispError("form is not a list.", form);
}
}


62 名前:60 mailto:sage [04/11/13 10:50:11]
殴り書きその2。

LispObject callFunction(LispFunction func, LispObject args) throws LispError {
int len = getListLength(args);
if (len < func.getMinArgs() || (func.getMaxArgs() != null && len > func.getMaxArgs())) {
throw LispError(略);
}
argsarray = new LispObject[len];
// コード略。引数をargsarrayにコピー。maxargsに足りなきゃnullで埋める。
func.call(argsarray);
}

void initialize () {
defineFunction("car", new LispFunction_car());
defineFunction("eval", new LispFunction(1,1) {
LispObject call(args) { return eval(args[0]); }
});
// ...
}
void defineFunction(String name, LispFunction func) {
LispSymbol sym = intern(name);
sym.setFunction(func);
}


63 名前:60 mailto:sage [04/11/13 10:51:23]
その2訂正: s/nullで埋める/nilで埋める/
その3。

LispSymbol intern(String name) {
Obj s = obarray.get(name);
if (s == null) {
LispSymbol sym = new LispSymbol(name); obarray.put(name, sym); return sym;
} else {
return (LispSymbol)sym;
}
}

class LispFunction_car extends LispFunction {
LispFunction_car() { super(1,1); } // minargs, maxargs
LispObject call(LispObject[] args) throws LispError {
if (args[0].isCons()) { return ((LispCons)args[0]).getCar(); }
else { throw LispError(略); }
}
}


64 名前:60 mailto:sage [04/11/13 10:55:09]
しまった、関数かマクロかで判別して、関数のときは先に引数を評価するんだった。
直すのマンドクセ。




65 名前:デフォルトの名無しさん mailto:sage [04/11/13 12:08:03]
ここはお前の日記帳じゃねえんだ(ry

66 名前:60 mailto:sage [04/11/13 14:32:11]
いやなに、59の参考にでもなればと思って。


67 名前:デフォルトの名無しさん mailto:sage [04/11/13 19:14:06]
SICPの「メタサーキュラ・インタプリタ」の章を嫁.
あそこのコードは素のSchemeでなくOOPLだったらもっと簡潔に書ける.

68 名前:デフォルトの名無しさん mailto:sage [04/11/13 19:44:06]
> メタサーキュラ・インタプリタ
関係ないが、この言葉を見るとprologスレの論争を思い出す。
結局誰が正しかったのかな。

69 名前:デフォルトの名無しさん mailto:sage [04/11/13 19:56:15]
>>68
論争って何?

70 名前:デフォルトの名無しさん mailto:sage [04/11/13 20:54:20]
記録自体はもぅ何年も前のものなのに
そのまま生々しく残ってて痛々しいよね。

71 名前:デフォルトの名無しさん [04/11/13 21:07:36]
まぁ、プロログ、リスプと言ってる時点で
実用的なプログラムを書いていない証拠だなw


72 名前:デフォルトの名無しさん mailto:sage [04/11/13 21:11:15]
>>71
煽りならよそへ池

73 名前:M.B. mailto:sage [04/11/13 21:32:01]
設計で悩んでたら、eval 以外の関数だけで半日潰れちまった

甘かった _| ̄|○

74 名前:デフォルトの名無しさん mailto:sage [04/11/13 21:44:00]
今週は>>21
www.laplata.ne.jp/javalisp/
でも読んで、雰囲気つかんだ後、
来週の週末あたりに携帯Lispでも開発したら・・?



75 名前:M.B. mailto:sage [04/11/13 22:21:45]
あれは邪道。LinkedList なんぞ使っちゃイカン。
結局 eq と equal の区別ができなくなって詰まってる。
現在、
中西正和『Lisp入門 システムとプログラミング』近代科学社
黒川利明『LISP入門』培風館
竹内郁雄『初めての人のためのLISP』サイエンス社
を読みながら悪戦苦闘中。

76 名前:M.B. mailto:sage [04/11/13 22:28:36]
>>71
> まぁ、プロログ、リスプと言ってる時点で
> 実用的なプログラムを書いていない証拠だなw
まぁ、tsv や XML で間に合う仕事をしてる香具師には
無縁な話なのだがね。それが悪い訳ではまったくないが。

77 名前:デフォルトの名無しさん mailto:sage [04/11/13 22:29:07]
なんかキチッとしたもの作り込んでるみたいなんで
完成したらサイトも作ってアップして下さい。

78 名前:デフォルトの名無しさん mailto:sage [04/11/13 22:30:53]
>>75
まあ本人の自由だろうけど、そういうレベルの人が言語処理系について
知ったような口をきくのはどうかと思う(>>35とかね)。

79 名前:デフォルトの名無しさん mailto:sage [04/11/13 22:37:23]
>>78
象牙の塔の中で言語論争してるわけじゃないからイイでし。
ここは78さんのために用意された花園でも、まして法廷でもないし。

そういうことをPrologスレを眺めてオモタ。

80 名前:デフォルトの名無しさん mailto:sage [04/11/13 22:38:32]
>>78
お前何様だよ(^^;

81 名前:M.B. mailto:sage [04/11/13 22:53:41]
>>78
前回 Lisp を書いたときは、
言語が FORTRAN (「大文字のフォートラン」、つまり60)で、
しかも再帰呼び出しが使えないので
(なにせ関数呼び出し用のスタックがなく、レジスタに直接
割り当てていたので、7層までしか使えない)、
プリプロセッサの皮を被せて「再帰呼び出し可能なFORTRAN」を
実現し(RATFOR みたいなもんだ)、その上で LISP を書いて、
その上に機械翻訳システムを実現したもんだ。

とはいえ N88 BASIC 上に LISP も PROLOG も実装したことがあるのだが
内部構成が全然思い出せない _| ̄|○

82 名前:M.B. [04/11/13 23:00:18]
なんか思い出してきたぞ。
あのころはメモリが少なくて実用的なプログラムが書けるような環境が
立てられなかったのと、LISP はあくまで数式処理なんかに使う
ツールでしかなかったので、動いたところで「こんなん使えねーや」
っつーんで捨てちゃったんだ。
今なら Java で Lisp インタプリタ書いて、その上で Prolog の処理系
(Lisp で六百行くらい)を動かしても十分実用になる。
いい時代になったもんだ。

83 名前:デフォルトの名無しさん mailto:sage [04/11/13 23:11:49]
だからさあ
ここはお前の日記帳じゃねえんだ>MB
つーかRATFOR出てくるなんていつの時代の人間だよ
>>75の文献も古すぎだぞ
古い本見ながら中途半端なLISP作るより
R5RSでも読んでScheme覚えたほうがいい

84 名前:デフォルトの名無しさん mailto:sage [04/11/13 23:22:57]
>>83
別にいいじゃん、興味ないから読んでないけど(汗
まあ内容はここに一応ふさわしい。
極めてスレ違いな言語論争で埋め尽くされるよりマシ。




85 名前:デフォルトの名無しさん [04/11/13 23:24:27]
スモールコムパイラを作ろうのねーちゃんは何歳だ?

86 名前:デフォルトの名無しさん mailto:sage [04/11/13 23:26:11]
10さい

87 名前:M.B. [04/11/13 23:27:01]
>>83
> つーかRATFOR出てくるなんていつの時代の人間だよ
知ってんじゃねーか。

88 名前:デフォルトの名無しさん mailto:sage [04/11/13 23:33:31]
>>57 プンスカプー。

89 名前:デフォルトの名無しさん [04/11/13 23:35:10]
コンパイラ

コンバイナ

コンバンワ
の区別が出来ない人がいるのですが、どうしたらいいですか。

90 名前:デフォルトの名無しさん mailto:sage [04/11/13 23:35:25]
そういえば某スレにこんなのがあったなぁ
#include <stdio.h>
#include <stdlib.h>
int b[2<<16],f,g,i,n;char*p,l[103][80],c[80],*q,*r,x;S(){for(;*p==32;++p);}T(){
for(r="GET \0OTO \0PUT \0RUN\0 QUIT\0IF"+5*n++;*r&&*r==*p;++r)++p;return!*r&&(S
()|1);}I(){g=atoi(p);return*p-48?g?g:b[*(short*)p]:g;}main(){for(;;){gets(p=l[i
=100]);while(i<101){n=0;S();g=atoi(p);if(*(q=p)==48||g)for(p=l[g],q+=3;*p++=*q
++;)i=101;else p=!*q?l[++i]:T()?printf("?"),gets(c),b[*(short*)p]=atoi(c),l[++i
]:T()?l[i=I()]:T()?printf("%d\n",I()),l[++i]:T()?l[i=l[100][0]=0]:T()?exit(0),0
:T()?I()?p+3:l[++i]:(61-q[2]?puts("ERR"):(p=q+3,f=I(),x=p[2]-43,p+=3,g=I(),b[*(
short*)q]=x?x-2?x+1?x-4?x-17?x-19?x+10?x-18?x+6?f:f%g:f==g:f!=g:f>g:f<g:f/g:f*g
:f-g:f+g),l[++i]);}puts("OK");}}

91 名前:デフォルトの名無しさん mailto:sage [04/11/13 23:36:51]
ネタはマ板でやると喜ばれます

92 名前:デフォルトの名無しさん [04/11/13 23:49:01]
まぁ、LISPなんぞ哲学みたいなものだ。

つまり、概念なりを学には大変よい言語だが、
実用的な価値は、ほぼゼロに近いw


93 名前:デフォルトの名無しさん mailto:sage [04/11/13 23:52:10]
>>92
言語論争は死滅スレでやると喜ばれます、死ね


94 名前:デフォルトの名無しさん mailto:sage [04/11/13 23:52:49]
hai hai



95 名前:M.B. mailto:sage [04/11/14 00:21:32]
>>88
正直スマンカッタ orz

96 名前:デフォルトの名無しさん mailto:sage [04/11/14 00:33:20]
>>94 > >>92 でしョ。

>>95
あんた熱くなると八兵衛(ry

MBのFortran話で
www.google.co.jp/search?sourceid=navclient&hl=ja&ie=UTF-8&q=%E4%BC%8A%E7%90%86%E6%AD%A3%E5%A4%AB%E3%80%80%E9%AB%98%E9%80%9F%E8%87%AA%E5%8B%95%E5%BE%AE%E5%88%86%E6%B3%95
を思い出した。 哲学とも高尚な抽象概念とも関係ない使い道の例だお。







97 名前:M.B. mailto:sage [04/11/14 00:46:20]
>>96
「親分! てぇへんだ!」
「おいおい、どうしたんだ八」
「まぁまぁ八兵衛さん、朝御飯はお済みになったの?」
「すんませんお内儀さん、ってそれどころじゃ無ぇんで。
大川にお六字が……」

98 名前:M.B. mailto:sage [04/11/14 00:48:35]
>>97
……ってこんだけネタ振っといて八兵衛じゃなくて八五郎だ

またやっちまった _| ̄|○

99 名前:デフォルトの名無しさん mailto:sage [04/11/14 01:11:08]
コテハンってどうしてこんな(ry

100 名前:デフォルトの名無しさん mailto:sage [04/11/14 01:12:52]
100get!!!!!

101 名前:デフォルトの名無しさん mailto:sage [04/11/14 11:45:12]
煽り以外で >>92 に反論できる LISPer は居ない?


102 名前:デフォルトの名無しさん mailto:sage [04/11/14 11:52:29]
誰かあの文章を紹介してやれよ。「普通のやつらを作り出せ」とかいうやつ。

103 名前:デフォルトの名無しさん mailto:sage [04/11/14 12:02:47]
と、LISPのことが気になって仕方の無い>>101が語られました。

104 名前:M.B. mailto:sage [04/11/14 12:06:43]
>>101
数式処理は Lisp 以外の言語で書く気がせん。
これで十分。
……つーか Mule があるじゃん。あれって Lisp だろがよ。



105 名前:デフォルトの名無しさん mailto:sage [04/11/14 12:12:10]
竹内郁雄さんが
新しいマシンを開発するときは
その上に Lisp を実装すると非常に楽だと
bit の連載(TAO かなんかの開発の話)に書いてたな。

106 名前:デフォルトの名無しさん mailto:sage [04/11/14 12:26:25]
その辺にしておくべし。 LISPのことばっか喋ると
怠け者の>>101がまた荒らしで知識を得ようと熱くなる。

結局スレに迷惑かかる。多様な話題のほうが楽しいし。

107 名前:デフォルトの名無しさん mailto:sage [04/11/14 12:38:50]
>101
これ以上LISPerを呼ぶなよ

108 名前:デフォルトの名無しさん mailto:sage [04/11/14 13:59:01]
LISPer は独自スレを立てれ。

109 名前:デフォルトの名無しさん mailto:sage [04/11/14 14:01:04]
つーかLISPスレ立ってるだろ

110 名前:デフォルトの名無しさん mailto:sage [04/11/14 14:04:02]
処理系依存でない LISP スレが・・・ナイ!

111 名前:デフォルトの名無しさん mailto:sage [04/11/14 14:06:15]
LISPerは自体は構わんよ、下らん言語論争やフレームの元になるような事を書く奴さえこなければ。
このスレは実装技術のスレだ、個々の言語の良し悪しや独善的思想はフレームの元、

>>104
そういう奴にレスを付けると百害あって一利ないから一切書くな。
どうしてもレスを付けたければ死滅スレを立ててそこでやれ

112 名前:デフォルトの名無しさん mailto:sage [04/11/14 14:16:05]
連想配列って意外に不便。
キーワードのスペル間違えてデバッグに半日。
型なし言語も意外に不便。
評価しそこなってデバッグに半日。
PerlとPHPのソースコードレベルの検証ツールをキボンヌ

113 名前:デフォルトの名無しさん mailto:sage [04/11/14 14:22:25]
LISPのエンジン設計の話しはスレ的に歓迎なんだが・・・

LISPが気になるくせに「コンパイラ・スクリプトエンジン」の相談ができないのが頑張ると
言語論争の話題しか提供できなくてフレームの種を蒔くことになる。

114 名前:デフォルトの名無しさん mailto:sage [04/11/14 14:25:46]
>相談ができないのが頑張ると

個人のレベルにイチャモンつけるようなのは良くないよ
最初はみんな初心者



115 名前:デフォルトの名無しさん mailto:sage [04/11/14 14:35:06]
>>101 >>92
↑わざわざこのスレにきて学ぶ姿を見せつける美しい初心者の例

116 名前:デフォルトの名無しさん mailto:sage [04/11/14 14:39:18]
友達いないだろう?
死ねば〜

117 名前:デフォルトの名無しさん mailto:sage [04/11/14 14:44:17]
LISPは変換が面白いと思うよ
(define (f proc) (proc #t))
(f (lambda(x)(if x 0 1)))

((lambda(proc)(proc #t))(lambda(x)(if x 0 1)))

((lambda(x)(if x 0 1)) #t)

(if #t 0 1)

0

コンパイラに渡すまでもなくこれぐらいの変換はユーザー関数レベルで可能なとことか
まあコンパイラ自体もユーザー関数レベルで書けるけど

118 名前:デフォルトの名無しさん mailto:sage [04/11/14 14:47:02]
>>112
インタープリタ系言語はインタラクティブな環境があると開発しやすい。
自分で作った言語処理系もってるけど、そういう環境ができるまでは至極面倒だった(某ゲームの移植性をあげるために中間コード使っただけなのであんまり良いものじゃないけど)
perlはデバッグモードがあるが、phpはお手軽な環境が無いから面倒になったんだろう。
だいたい連想配列のキー間違いなんざインスペクタ使えば一発で解りそうなもんだよ。


119 名前:デフォルトの名無しさん mailto:sage [04/11/14 15:04:04]
>>118
いや、漏れはPerlからJavaに乗り換えたのでモウマンタイなのだが、
「CGIはPerlかPHP」って頭っから信じてる香具師がいて
そいつが管理してるプロジェクトからブツが上がってこないんで
迷惑してるんだが、下っ端のプログラマーに聞いてみると、
どうやらソースが荒れてて手がつけらんなくなってるらしいのだ。
かといって開発ツールを導入するのにも消極的なのだ。
だから、なんかしらソースコードレベルで適用できるツールはないもんかと。

120 名前:デフォルトの名無しさん mailto:sage [04/11/14 15:14:36]
PerlUnit

121 名前:デフォルトの名無しさん mailto:sage [04/11/14 15:19:17]
ここで聞く内容じゃないね

122 名前:デフォルトの名無しさん mailto:sage [04/11/14 16:37:38]
Ruby以外の言語は糞・

123 名前:デフォルトの名無しさん mailto:sage [04/11/14 16:53:22]
eval.c を読んでから言え。

124 名前:デフォルトの名無しさん [04/11/14 20:25:46]
LISPer ですが、何か?




125 名前:デフォルトの名無しさん mailto:sage [04/11/14 20:30:01]
RubyはRecursive Decentでつか?

126 名前:デフォルトの名無しさん mailto:sage [04/11/14 20:32:33]
Ruby >>>>><<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<>>>>>>>>>>>>>>>>>>>>>>>>>>>>> Lisp

127 名前:デフォルトの名無しさん mailto:sage [04/11/14 20:32:51]
>>125
ソース読んでないけどLALR(1)じゃなかったっけ?

128 名前:デフォルトの名無しさん [04/11/14 22:05:42]
emacs の弱点の1つがlispだったり擦るわけだがw


129 名前:デフォルトの名無しさん mailto:sage [04/11/14 22:16:27]
>>128
pc5.2ch.net/test/read.cgi/unix/1091212668/
        (戻ってこない方向で)

130 名前:デフォルトの名無しさん mailto:sage [04/11/14 23:44:57]
Emacsは元々LISP用のエディタだったんだろ?
逆にLISPだからこそここまで生き残ったとも言える。

S式嫌いならフロントエンド作ればいいだけの話な気がするけど、
>>129のスレはそういうことじゃないみたいだな。
emacsとviがUNIXのイメージを悪くしたのは確かな様だ。

131 名前:M.B. mailto:sage [04/11/14 23:53:31]
>>130
> emacsとviがUNIXのイメージを悪くしたのは確かな様だ。
現在でも UNIX 上で動くエディタの標準は emacs 互換の Mule。
「テトリス」と並ぶ有名なゲーム「rogue」の操作は vi 互換。
それを言うなら「emacs派とvi派の対立が」だろうと思うが、
実際には棲み分けができていたように思われ。

132 名前:デフォルトの名無しさん mailto:sage [04/11/15 00:33:50]
>>8
>●スモールコンパイラの制作で学ぶプログラムのしくみ
>www.cbook24.com/bm_detail.asp?sku=4774121770

目次とサンプルコード来てた。

www.gihyo.co.jp/books/syoseki.php/4-7741-2177-0

tiny scheme 読もうと思ってから早1年、何にもてに付けてねーや・・・。

133 名前:デフォルトの名無しさん mailto:sage [04/11/15 00:45:58]
いろいろ勉強してたけど、そろそろネイティブバイナリも吐ける
コンパイラを作ろうかなって気になったよ。
なんつーか、コンパイラ作成って楽しいな。

134 名前:デフォルトの名無しさん mailto:sage [04/11/15 01:03:12]
石田綾ってなにもの?
過去の実績を知りたい。



135 名前:M.B. [04/11/15 01:03:51]
>>133
つーか言語処理系の開発って、
(゚∀゚)イイ!

136 名前:デフォルトの名無しさん mailto:sage [04/11/15 02:11:54]
>>134
ttp://www.pureadult.co.jp/whtml/ishidaaya.html







[ 続きを読む ] / [ 携帯版 ]

前100 次100 最新50 [ このスレをブックマーク! 携帯に送る ] 2chのread.cgiへ
[+板 最近立ったスレ&熱いスレ一覧 : +板 最近立ったスレ/記者別一覧]( ´∀`)<228KB

read.cgi ver5.27 [feat.BBS2 +1.6] / e.0.2 (02/09/03) / eucaly.net products.
担当:undef