1 :
デフォルトの名無しさん :
2005/12/20(火) 21:43:02
>>6 貼り忘れてないか、はいいけど、リンク先の確認ぐらいしようね、ボク。
スクリプト言語の最小構成(これらの機能を満たす物をスクリプト言語と呼ぶと言う定義というか)について議論するのは このスレでよろしいのでしょうか?
前スレが埋まったので…
>>9 うはwまた荒れそうなネタをww
この議論に参加する者は、
「絶対的な答えはない」ということを肝に銘じておくように。
荒れそう以前に下らなすぎ。意味がない。
>>12 じゃぁ何があればスクリプト言語と呼べると思う?
だからそれが下らないって。日本語を理解できないのか?
>>14 くだらないか?別に結論をださなきゃいけないわけじゃないんだから、
答えの出ない問題をわいわい議論してもいいじゃんか。
なにをもってスクリプト言語というかと聞かれたら、おれなら「処理系(構文解析系)と実行系がひとつになっている言語」と答える。
17 :
デフォルトの名無しさん :2005/12/21(水) 21:48:37
それじゃ、お前らの大好きなLISPを完全にリプレースできるような言語を考えてみないか。 Luaなんか良い線行ってる気がするんだけど、 コードをデータで扱ったり新しい構文は定義できないしなあ。
「エンジン」相談室なんだからスレ違いな気がするが…まあいいか。
Lisp と Smalltalk を置き換える言語と言えば Apple の作った(作らせた) Dylan があるけど 盛り上がってないな。商用の Windows/Linux 処理系がオープン && フリーになったってのに。 純粋 OOPL かつ関数型言語でマクロもあるらしいけど。
>>16 全部リストだとシーケンスを扱う時に効率悪そうだから
いっそのこと全部ベクターや配列で表現してみてはどうか。
{1 2 3}[0]
=>1
{1 2 3}[1..]
=>{2 3}
{define func0
{function {a b c}
{return {infix a + b + c}}}}
{defmacro defun args
`{define ,args[0] {function ,@args[1..] }}}
{defun func1{a b c}
{return {infix a + b + c}}}
func0{1 2 3}
=>6
func1{1 2 3}
=>6
ふむ。
>「処理系(構文解析系)と実行系がひとつになっている言語」 これはインタプリタっていうと思います。 あと普通は、「言語」は「仕様」であって「実装」ではないと思います。 実装が仕様って言ってる某言語を除いて。
24 :
デフォルトの名無しさん :2005/12/21(水) 23:25:16
お前ら馬鹿か?wwww LISPがあるのに これ以上何やろうっての?
インタプリタだけじゃないと思うけど。
インタプリタ系の処理で構文木をツリーのままもって処理するのと、バイトコードに落として処理するのとどっちが都合がいいんだろう?
>21 FunctionalDeveloperがOpenDylanになって、Gwydion Dylanとそのうちマージされるんじゃ? と、期待してはいるけどねぇ。 しばらくは混沌としたままという気はするね。MLも停滞中だしなぁ。
>>26 何の都合?
とりあえず速度ならバイトコード。デバッグしたいならツリーのまま。
何気に Lisp 処理系は開発が盛んなんだよね。SBCL とか。 OpenDylan は何であんなに閑散としてるんだろう。
Lispがあるからだろうな。 正直なところ、これ以外どれも同じ。
同感、他は糞言語
>>23 すくりぷとげんごといんたぷりたとのちがいはなに?
ばいなりにおとすかどうか?
さすがにLISPじゃ釣れなくなってきたなw どんな阿呆でも、多少は学習能力があるということか
ベースはLispでも何でもいいんだけど、ドットで階層表現はほしい。 namespace.object.method つーかluaって結構バランス良さげだね。 何気にproper tail recursionだし。 schemeと同じ様な書き方ができるっぽい。
>>36 >ドットで階層表現
リーダーマクロじゃ無理?
(そのままドットで繋げる形式は無理だと思うけど)
Lispスレでやれ。 どのみちこういう話してる面子は両方見てるんだろ? 俺もだけど。
Lispスレ見てる奴にとってはこのスレレベル低すぎだろ
そうなんだけどさ。
>>36 みたいな話はあっちでもたまに出た記憶が。
>>40 というか過去スレで a[x] みたいな配列アクセスとか . でのオブジェクトへの
アクセスとかは実現されてたと思う。でも荒しが粘着している現状で向こうの
住人がわざわざこっち覗きにきたりはしないと思われ。
42 :
デフォルトの名無しさん :2005/12/23(金) 08:59:00
質問。 oscm の構文定義で以下のようになっていたのだけれども exp : BOOL { Bool $1 } | NUMBER { Number $1 } | CHAR { Char $1 } | STRING { String $1 } | SYMBOL { Symbol $1 } | LPAREN exp_list RPAREN { to_cons $2 Nil } exp_list : {[]} | exp exp_list { $1::$2 } 上の定義の中で、 exp_list : {[]} の部分がどう作用するのかいまいちわかんないんですけど・・・ いつ、どの順序でこの部分がマッチするんですか?
その規則(1)は、何も無い部分(空トークン)からexp_listというnon terminalを 生成できることを意味している。exp_listを生成するもう一つの規則(2) exp exp_listは、 必ずexp_listというnon terminalを必要とするので、規則(1)がないとexp_listという non terminalを生成することができない(帰納法のbase caseに相当する)。 規則(1)が使われる具体的なタイミングは、その構文規則でexpがstart symbolと 仮定すると、次のトークンがRPARENの時だと言える。
44 :
42 :2005/12/23(金) 13:29:00
なるほど 次のトークンでRPARENが出たとき exp exp_list { $1::$2 } において、 $2 が [] になるということですね ありがとうございました。
46 :
デフォルトの名無しさん :2005/12/29(木) 00:25:03
ECMAScript程度の言語の構文解析にboost::spiritを使うのってまずい?
べつにまずくない
48 :
デフォルトの名無しさん :2005/12/29(木) 01:02:38
unko
ECMAScriptの文法は結構手強いよ。
既存のソフトウェア資産が全て0から作られると仮定して OS側に管理が回りそうな機能と 言語側に標準的に割り当てられそうな機能を教えてくれ 例えばガベージコレクションはOSがやることになって マルチスレッドは言語レベルでサポートされるのが良いのじゃないかと
threading が kernel level で support されてなかったらどうなるか考えてみた?
なぜそんな中途半端に英語をしゃべる?
>>50 >既存のソフトウェア資産が全て0から作られると仮定して
あのなー、
その「全て0から作らなくてはならなくなった理由」がない状態で、
どの機能を何処に割り当てるべきか、なんてのが決まる訳が無いだろ?
OSの足りない機能を補うためにソフトウェア資産があるんだよ OSの足りない分はソフトウェアがカバーしてるんだよ
57 :
デフォルトの名無しさん :2005/12/29(木) 20:52:43
マジレスすると、Rubyの多くの機能は本来はOSが提供するものだろうな。
それのどこがどうマジレスなんだ?
>>57 がRuby要らずのOSを公開するそうです。
みなさんお楽しみに!
むしろRubyが必須なOSがあるのか知りたい
Ruby 信者とアンチ Ruby が居なければ、このスレも随分と静かになるんだろうなぁ。
>>62 大差ないと思うよ。
半分くらいは俺が信者になったりアンチになったりしながら煽ってただけだから。
ちなみに俺はRubyもLISPも使ったことはない。
来年もよろしく。
>>63 大差あると思うよ。
もう半分は俺が信者になったりアンチになったりしながらクマしてただけだから。
ちなみに俺はRubyもLispも長年使い込んだ。
今年限りにしておこうか。
>>63 要するにお前の自演がウザいから消えてくれたらな…って話なんだよ。
空気読めねー奴だな…。「ちなみに」とかいわなくても君が Ruby を使えない
低能野郎って事は分ってるから来年こそは氏んでくれ。
でも空気読めないからノコノコでてくるんだろうなぁ
Rubyついでで恐縮だが、あのソースは本当に凄いな。 まったくの別次元だ。 特にスキャナ
パーサのトリックも凄いと思った。
GCもスレッドも凄いと思う。 ...で、それって結局全部、Rubyの欠点になってるよな。
誰かRuby書きなおしてやれよw
スキャナとパーサは疑う余地がないよな。でもGCとスレッドって凄いっけ? GCは、前見たときは、わりと標準的なmark-sweepだと思った。 スレッドは基本的に使ったことしかなくて、 スレッドスケジューラとかを作るやり方の話をよく知らなかったから いまいち判断できなかった。 それでも、現実のOSなんかが搭載してるスケジューラに比べれば、 かなり簡潔(悪く言えばチープ)だろうな、と何となく思った記憶がある。
>>70 >GCは、前見たときは、わりと標準的なmark-sweepだと思った。
うーん、Bohemとかと比べるんなら「標準的」なのかもしれないけど、
BohemはC向けだからああならざるを得ないのであって、インタプリタ言語で
なにもわざわざCスタックをスキャンすることないのではないかと。
あれのおかげでsetjmpでレジスタを対比するようなトリックが必要になっているし
(そのせいでCPUごとの#ifdefやインラインアセンブラも必要になっているし)、
ネイティブスレッドと相性が悪いのもあれのせいでしょ。
>>71 言語上の問題じゃなくてオブジェクトメモリ操作のアトミック性の問題のためにスタックまで見る羽目になってるだけなんだけど
どうしたもんかねぇ。
個人的にGC関係が勉強になったというか良くできてるな〜と関心しきりだったのはioなんだよね。
シンプルなのにジェネレーションベースなんでGCに興味がある人は見ておくべきだと思う。
> わざわざCスタックをスキャン CのプログラムがRubyのオブジェクトを捕まえたときに、 Cのプログラムが明示的にそれを開放しなくても良いという利点がある。 これのおかげでCで拡張ライブラリを作ったり Rubyを他のアプリケーションに組み込んだりしやすくなる。 ・・・という目的があったと思った。 でもvolatileつけないといつの間にかオブジェクトが回収される罠があったり、 これのせいでRubyの高速化がしにくかったり。
なんだかんだ言っても好きだなw お前らw
volatileによるガードを期待するのはやめて、やばげなところでは 明示的にガードできるようにした方がいいんじゃないかねえ。EmacsのGCPROみたく。
EmacsがGCPROとconservative GCを併用できるというわけじゃないんで念のため (できるのはできるが目的が違う)
Rubyの運勢
ここでやるなよ。
アンチRuby房のほとんどが、メジャーになれない 重箱研究者だったりする件についてw
人生相談はこのスレの管轄ではありません
>>80 それは言えてるかも。ある意味素人が世界的に有名になって
(以下略
83 :
デフォルトの名無しさん :2006/01/02(月) 00:22:58
すっぱい葡萄理論w
その点Lispはそのような心配がない罠 人機の秘密は案外こんなところおにあったりする。
やはりLispが原点だね Rubyだのなんだのと遠回りする馬鹿の多いことよ
Lispはある意味Cよりもコンピュータに近い所をプログラマに処理させるわけだから、 そんなに使い易いもんでは無いわな。 Rubyのシンタックスシュガーはやりすぎな感じもするけど…… 誰か表記改良版のLisp作らんかね?
誰か=御自分 いいだしっぺの法則
JavaScript が C の皮を被った Lisp と言われていますよ。
>>88 ネイティブコンパイラとオプショナルな静的型付けと Dylan 風マクロが備わったら認めてやる。
ECMAScript に静的型付けを導入する話はどうなったんだろうか。
>>89 どっかで見た4thエディションでは予約語にはなってたようにおもう。
俺はバリアント型大好きだからいまさら感、感じてるけどね。
ところで、バリアント型大好きなんだけど、実装ってどういう感じになってるのかぜんぜん検討つかないんですよ。 ライターのM氏のページで、Cでの実装だと型そのものはUNIONにまとめてる感じでした。 やっぱり処理系が扱う変数型をまとめてUNIONにしてしまってフラグ変数で型を見分けて扱うというのが一般的なんでしょうか? そのときに、たとえばWinapiに対する拡張とか、製作時点で未知のオブジェクトに対応する場合はどういう方向になるんでしょうか? ヒントでもいいので、お返事お待ちしております。
>>91 大筋その認識で間違いない。
ただし未知のオブジェクトなど存在しないと思って良い。
複雑な構造のオブジェクトがあったとしても、
レコード型などのなんらかの既知の型の組み合わせでしかない。
>>92 お返事ありがとう。大筋でもあっててよかった。
Winapiのハンドル関連も元をたどればvoid*だったりするのかな。
構造体の内部表現とか結構気になるな。
うぅ。夢は尽きません。
ま、それはそれとして、参考になりました。
拡張モジュールを書いてバリアントを増やせる設計って可能だろうか? つまり、型識別フラグのとりうる値がすべてわかっていないと書けない 部分というのが存在するかしないかなんだけど。 ちょっと考えた限りではなさそうに思える(効率は別として)。
最近 scheme の処理系を勉強で書きはじめたのですが call/cc の実装で、継続を作成するという処理は トップレベルに戻るコードと そのときの環境オブジェクトというか全フレームを 対にしてまとめたものを保存しておけばよいのかなあと思ったのですが gauche とかで、call/cc の実装を見ると結構複雑っぽいことを しているんだけど、なんか考えが足りないのかなあ 識者の見識を聞かせてください
眠れないからC++のバリアントを試作してみたよ。
未知の構造体を格納しつつ自由にメンバにアクセスしたいときってどうやってやるんかな。
リフレクション自作とかしないといけないのかな・・・。ドウヤッテツクルンダ・・・。
void*に突っ込んで使用時にキャストがいいのかな??スクリプトエンジンでそんな指定どうやって??
テンプレートは一個しかできない上に決めうちしないといけないから向いてない感じがする。
悩む。
>>94 C言語的構造体指向OO風味だと、メモリの配置さえあってれば問題なく下位の構造体にアクセスできるから、
なんとか構造体EXとかは可能だと思う。関数ポインタつければ仮想関数もどきとかもできますぜ。
ただ、型識別フラグは拡張を指しているだけとかそういうことになりそう。
細かい指定はどうだろ、enumの拡張って動的にできるのかな。あぁ、INTつかえばいいのかな??
型ID予約制とかそういうことになって管理大変かも??
とか、書いてたらねむくなってきたなぁ。
論点ずれてたらごめんね。
>>95 継続というのはその時点での全アクティベーションレコード (スタック
フレームと思っておけばいい) そのものだから、基本的にはそれだけ
取っておけばいい。アクティベーションレコードを全部ヒープに
アロケートする処理系なら単にその先頭のポインタを掴むだけで済む。
概念的にはとても単純。
複雑になるのは効率を考えるから。普通のプログラムは、継続が絡まない
通常の関数呼び出し/復帰の方がはるかに多く、その場合はスタックを
利用する方が一般的にずっと速い。けれどスタック上のアクティベーション
レコードは関数復帰時に自動的に開放されてしまうから、継続が作られた
場合にそれを防ぐ何らかの方法がいる。継続作成時にヒープにコピーするとか、
継続作成時にスタックのベースを動かしてそれまでのスタックをヒープに
しちゃうとか、色々テクニックはある。
それから、単純な関数呼び出し/復帰モデルで賢い最適化をしたつもりが、
継続が入るとうまく動かなくなるってことも多い。効率を考えてゆくと
だんだん実装は複雑になる。
>>97 C++で、コードが複雑な場合に、最適化でバグの発生する理由がようやく理解できた
>>96 型式別のフラグ=型を理解するコードへのポインタ
にすればフラグの値を全部知ってる必要は無いでしょう?
実行時にロードされた場所が被るハズないって前提なのではあるけど。
C++の話は別でやってくれ シッシッ
>>97 効率を考えると色々あるのですね
効率を考えずに単純に実装しようと思うのですが
一度中間言語へコンパイルし、仮想マシンなりで走らせるようにする部分は
継続を実装する上で必須なのでしょうか
中間言語とかなしでインタプリタのままで実装することはできないものかと・・・
例えば、(+ 2 (+ a 1)) とかで、(+ a 1) の継続を
その時点での環境を丸々コピー&(lambda (x) (+ x 2)) を
継続コードとして保存する、とか考えてたのですが、
S式全体から (lambda (x) (+ x 2)) の部分を取得する上手い方法が
思いつかないっす
っ CPS 変換
C++って、嫌われてるの?
>>102 なるほど!それがまさにそれに該当する方法っぽいです
ただどっちが簡単なんでしょうか
1.VM作って中間言語へコンパイルして継続を管理
2. CPSで継続渡し?みたいな形にS式をコンバート
なんか後者も結構メンドイ気がしてきた・・・
初心者向けなのはどっちですか?
別に中間言語にする必要もCPS変換かける必要もない。 ただ、スタックを陽に管理することになるので (実装言語のスタックをそのままは使えない) それを仮想マシンと言えなくはない。
効率、実用性を度外視して、とりあえず動くものを作りたいだけなら CPS 変換の方が圧倒的に楽だと思う。 後は callcc 以外の Scheme インタプリタ作るだけだし。 ところで実装言語は何?
>>99 レスty!
ぜんぜん僕が思ってたのと違う方法なきがする。
型を理解するコードか・・・。変数のことかな。
勉強不足でうまく思い浮かばないOrz
そのほかでは、
名前と値保持の領域をmap使って管理するのがいいのかな。
これ使えばJS風味のバリアントできるな。
でも1オブジェクトに1mapってなんか色々コスト高いような・・・。
あとは関数をどうやって抽象化するかかな・・・。
これこそテンプレートのでばんか!?
という感じで色々ひねって見ます。
ありがとー。
>106 C#です。GCとか作る自信ないもんで。
>>107 typeinfoクラスへの参照をメンバに持っとけって話だろ。
>>108 実装する目的がわからんのだけど、もしただの勉強なら、
せっかくだから Scheme で実装したらどう?
(eval 使ってはい終わりって意味じゃないよ)
自分のインタプリタで自分のインタプリタを動かすのは
一度はやっておくべきだと思う。
見当違い、余計なお世話だったら無視してくれ。
111 :
デフォルトの名無しさん :2006/01/03(火) 09:23:29
>>110 C#で実装して、.net framework, managed directX と連携してゲームとか
簡単な画像処理のフィルタとかをお手軽に作れるような scheme インタプリタを
作ろうというのが処理系の目的といえば目的ですが・・・
現状はC#のインタプリタ部分は call/cc とかマクロとかその辺を
除けばほぼ完成まで来たので、とりあえずはこの路線で進もうかと。
scheme で実装するというのは発想自体思いつかなんだ
いずれやってみようかなと思いました
113 :
111 :2006/01/03(火) 09:33:39
ごめん、上げてしまった
>>112 構文木を直接評価してくときに、素直に実装言語の(非末尾)再帰を
使うと、対象言語のスタックが実質的には実装言語のスタック上に
置かれることになるでしょ。そうすると継続を捕まえるのが面倒。
対象言語のスタックは自分で管理して、実装言語側で再帰しないように
評価器を呼んで行くことを「陽に管理する」と表現した。
実行時にCPS変換かけてるのと同じことだけどね。
GCを自分で実装しようとする人が多いのは 自分でメモリ管理することで(GC以外の部分でも)最適化の 余地が大きいからでせうかね?
>>115 コアの部分に、他人のクセだらけのソースコードを使えるか?という問題かと
良くも悪くもGCには、作った人の技術の粋が集まるから 他人のGCを使うのは、リスクが大きすぎるんだよな 何処にどんなバグが潜んでいるかは、作った人にしか分からない……
つか、他人の作ったGCって、Bohem以外にあったっけ? C/C++にライブラリ乗せただけで使えるGCは原理的にコンサバ以外になり得ないので、 exactなGCが欲しければ、自分で作るしかあるまい。 だいたい、(mark sweepだとすれば)mark phaseはその言語のオブジェクト構造に モロに依存するから、結局自分で書くことになると思うんだが。
Boehm使ってる。 自分で書くことも考えたんだけど、ネイティブスレッドとか incremental GCへの対応はプラットフォーム依存のコードが 入って来るから、自分一人ではサポートしきれないという判断。 色んなアーキテクチャでテストとデバッグしてくれる要員が いるくらいプロジェクトが大きくなればいいんだけれどね。
>>109 な!そんなクラスが!!!!
目から鱗です。
レスty!!
所詮俺言語ってことかw 俺言語に俺研究、本当にお前らときたら(ry
そりゃな、誰が好き好んで他人向け言語なんて作るんだ? 自分が好き勝手に色々な事をやりたいから作るんだよ。w それで他人向けにもなっていて、神になれれば万々歳だよ。www 妄想入り過ぎだな……orz
それで成功した例が、お前らの嫌いなRubyって訳か。 ある意味皮肉なもんだ
つまり、ツンデレ?
そもそもC言語が自分がUNIX作るために作った俺言語だから。
>>126 表面上は嫌っている(ツンツン)が、
内面では認めている(デレデレ)って意味
Ruby最高! 実行速度の遅さと、色々と無駄の多くて破綻している文法以外……
ruby の文法って日本語的な思考方向(熟語が最後に来る)になってるような 気がしている
>>123 まあねえ。
このスレにいるような連中(のうち何割か)は、俺言語の5つや6つとっくに作ってて
(あるいは作りかけていて)、みーんなディスクの肥やしにしてるんだと思う。
言語処理系作るのなんて別に難しくないんだけど、ちゃんと完成させて、
かつちゃんと普及させる人は珍しい。その点じゃまつもとさんはすごいんだと思う。
obj.m1.m2.m3.m4 を objをm1してm2してm3してm4する。 と書けるようになればいいのかも。
ruby のイメージってそんな感じなんですけど
>130 まだまだ諦めとらんよ。 (SchemeとIOを合わせたようなのを作成中)
SchemeやLispを使うとプロトタイプ作成は早いですよ 最近実感した
>>133 くだらねぇなあ。
そういう既存のものを中途半端に組み合わせたのって
数あるつまらん言語のうちの1つになるだけだろ。
有名どころが作ったとかではないなら、少なくとも何らかの他と 違う特徴がないとほんとに俺用で終わってしまうな。 Rubyだってフリーで国産とか、イテレータとか、一応特徴あったしな。 LispやSmalltalkやPrologやPerlなどは言うまでもないし。
Rubyが出てきた頃は、最初からオブジェクト指向を元に設計されてる スクリプト言語が無かった。 今では珍しくもないと思われるかもしれないが。
Lisp系言語を作っても、ほぼLisp系言語愛好者(超少数派)しか注目しない しかも、Lisp系言語愛好者は多少浮気をしたところで、 必ず最後はメジャー(少数派の中でだが)なCLかSchemeに戻る したがって、どうあがいてもユーザーはほとんど出来ないだろうね
え?Lispなんて超がつくほどメジャーな部類では?
140 :
デフォルトの名無しさん :2006/01/04(水) 02:30:58
141 :
デフォルトの名無しさん :2006/01/04(水) 02:42:32
>>140 Hspとなでしこは世界ではダメだったか・・・
世界的にはRubyのほうが知名度高いんだな。
やっぱりLispですね 議論はここに戻る 遠回りするアホは嘲笑の対象だね
お願いだから、あんまり Lisp を釣りネタに使わないでくれ。
>>139 Lispがマイナー言語だとは書いてないだろ
Lisp愛好者が超少数派と書いたんだ
Lisp愛好者が多数派だと、本気で思ってるなら
死んだほうが良くねえか?
少なくとも、ボケ老人レベルの判断力としか思えんわ
全体の割合で見たら超少数派かもしれんが、 A言語愛好家、B言語愛好家、C言語愛好家、 〜言語愛好家って、たくさん見てけば超人数 多い部類だと思うが。
"Cが好き" の検索結果 約 440 件 "Lispが好き" の検索結果 約 316 件 "Javaが好き" の検索結果 約 259 件 "Rubyが好き" の検索結果 約 186 件 "C++が好き" の検索結果 約 175 件 "Perlが好き" の検索結果 約 134 件 "Pascalが好き" の検索結果 約 57 件 "Basicが好き" の検索結果 約 25 件
Lisp愛好者って最近になってちょっと増えたんじゃないか? 高学歴の若者にファンが多い気がする。
ウェブ全体から検索で "I love Ruby" の検索結果 約 21,500 件 "I love Java" の検索結果 約 17,200 件 "I love C" の検索結果 約 13,800 件 "I love Perl" の検索結果 約 9,980 件 "I love C++" の検索結果 約 1,610 件 "I love Basic" の検索結果 約 1,290 件 "I love Lisp" の検索結果 約 310 件 いろんな意味で m9(^Д^)プギャー!!
vのあとのlは比較的発音しにくいからな。 likeにしてみると多少マシなんじゃないかな? やってないけど
"Lisp hacker" の検索結果 約 17,200 件中 "Java hacker" の検索結果 約 14,800 件中 "C++ hacker" の検索結果 約 1,540 件中 "Ruby hacker" の検索結果 約 969 件中
>>150 "I like Ruby" の検索結果 約 15,700 件
"I like Perl" の検索結果 約 14,600 件
"I like Java" の検索結果 約 14,000 件
"I like C" の検索結果 約 11,000 件
"I like Basic" の検索結果 約 1,600 件
"I like Lisp" の検索結果 約 653 件
"I like C++" の検索結果 約 508 件
なるほど、確かに多少マシだw
おまけ。
"Pythonが好き" の検索結果 約 91 件
"I love Python" の検索結果 約 12,100 件
"I like Python" の検索結果 約 24,300 件
"Python hacker" の検索結果 約 808 件
>>152 しかし、C++より多いのか。
いずれにせよ、それら超メジャー言語と張り合う程度に
愛好家はいるんだから、超少数派というのは当ては
まらないのではないか?
Lisp Hackerが多いってのがLispを象徴してるな。 Lisperっていうメジャーな代替表現があるのにこれはすごい。
おまいらプラス思考だな。
まあ、Ruby 厨の俺から見ても Lisp が超少数派なわきゃないと思うけどね。
>>153 C++ は確かに超メジャー言語だが、
"I love C++" "I like C++" って発言するほど C++ 自体が好きな奴って
あんまりいないんじゃないかという先入観がある。
>>154 Lisp Hacker ≒ Paul Graham
とりあえず、PythonとRubyは人名と宝石が引っかかってるぞ。
>>156 今じゃ誰もこんなこと言わないとわかっているが敢えて言わせて貰おう。
ネタにマジレスカコワルイ
まあ何だ。こと布教にかけては、本職の宣教師が最強だったってことじゃねえ?
話題がRubyに向かいやすいのは、Rubyの人気が出たことに対する 言語設計者の嫉妬にみえなくもない
このスレではRubyのソース読んだ人の割合が他の言語より多いってのも多少関係するかと。 ソースコード完全解説が出版されるはオンラインで公開されるは、挙句Matz氏もソース嫁と言わんばかりの勢いだからな。
308 "I hate Ruby" 743 "I hate Perl" 15500 "I hate Java" 726 "I hate C" 988 "I hate Basic" 257 "I hate Lisp" 1320 "I hate C++" Javaダントツ人気で砂
何が嫌いということもないけれど わざわざ触りたいという気には不思議とならない
ていうか、JavaとかBasicとかも違うのひっかかってるから。
まあ検索なんかに頼らなくても、 愛好家の数で言ったら、大体 C++、Java、Perl、Pythonなど>Ruby、Delphi、VBなど>Lisp、Basic、Pascalなど >Cobol、PL/I、Fortran、Prologなど>>>>>>>>>マイナー言語の数々 って感じになるのは、これらを知ってる奴なら納得するだろ?
年も改まったのに頭の中は進歩しない奴ばっかりだな。 処理系の実装に関係ない話はどっかよそでやってくれ。
処理系と関係ないようでいて間接的に関係あります。 処理系を作っても、特徴がなければただの俺言語になる。 特徴があってもLispのように超少数派になる。 いや、Lispは超少数派ではない。←いまここ
特徴の有無が問題なのかよ レベル低いなあ
特徴の有無は問題だろ レベル低いなあ ↑これと同じくらいお前の論理は無意味
なんか、このスレすごいレベル低い・・・もうお気に入りから消そうかな・・・ 皆さん、どう思います?
>>165 愛好家ってカテゴリだったらC++の位置はそこじゃねぇだろ、実用性じゃダントツだってのは認めるけどさ。
チームに一人デコ助がいるだけで地獄を「簡単」にみられる言語の筆頭だぜ。
もうスレ違い議論はやめてくれr いつから言語比較スレになったんだ?
言語比較ほどの価値もないな。 個人個人が好き勝手に好きな言語を推しているに過ぎない。 検索結果がどうのこうのしょうもない外人が書いたようなリストを持ち出そうが、そんなもんが言語研究と何の関係があるんだよ。 お前らもうちょっと理性的に考えたらどうなんだ?
自分の好きな言語を押し付けたいだけの厨にそんな事言っても無視するだけだろうな
>>167 第二段が間違ってるぞ
「特徴があってもLisp系ではLisperしか食いつかないうえ、
Lisperは試食しただけで、またCL Schemeに戻る」だ
特徴を「他の言語との比較」に頼ってるあたりが 井の中の蛙臭さの原因なんじゃなかろうか
まあLispとIoを組み合わせるなんて、いかにも中途半端なオタクが 考えそうなありふれたアイディア。 目だった特徴にはならん。
>>176 原因はむしろ比較の基準が使用者の人口なことじゃね?
IoってSmalltalkみたいなもんだろ? CLOSじゃいかんのか?
Smalltalkはフォロワーを生み出してるところが偉大だな。 LispもSchemeやJavaScript、果てはRubyやPythonに至るまで フォロワーを生み出したことに凄さがある。
そうニダ Lisp起源ニダ Ioも実はLispが起源ニダ
>>181 そもそもSmalltalkがLisp起源・・・
やっぱりLispですね 議論はここに戻る 遠回りするアホは嘲笑の対象だね
>>180 そうだな。何だかんだ言われても、HSPにもフォロワーはいるからな
フォロワーで言ったらCも相当なものだな
HSPにフォロワーはいるのかもしれないが、有名なフォロワーはいないな。
フォロワーってフォローする人の事じゃないの??
そうだな。「信者」の類義語とかかな。
小室です 今年は、環境ごとにミニ言語をさくっとでっち上げるのが 来ます
人じゃなくても概念や物でも擬人化して考えれば可じゃないか?
>141 Hspとなでしこって何?って素で思ったよ。漏れはorz 結構はびこってやがったのねん
>>180 の言う「〜のフォロワー」は「〜に大きく影響されて生み出された言語」
という意味だろ。
ワカメちゃん・・・ 僕らはもっと、早く、 出会うべき、ダッタ、のかも、 ウゥン・・・マスオ兄さん シレナヒ・・・ ダッテ・・・もっと早かったらァ・・・ 私ィ、赤チャンだyo^ イイの・・・ イイの・・・ イイ!!
今日 Essentials of Programming Language を読了した すごくいい本だった 中身は scheme で ML 作る本だった 多相型、型推論、CPS変換まで丁寧すぎるぐらいだった Friedman 本にハズレないっすわ
>>194 > 今日 Essentials of Programming Language を読了した
> すごくいい本だった
> 中身は scheme で ML 作る本だった
> 多相型、型推論、CPS変換まで丁寧すぎるぐらいだった
> Friedman 本にハズレないっすわ
大学院のとき、輪講でその本やったんだけど、俺、当時CPSで
脱落しました。orz
今でも、継続を使ったコルーチンなど、どうしてこうなるのか理解
できません。
今は、SICPからやりなおしています。EOPLには、機会を見て再挑戦
したいと思います。
196 :
デフォルトの名無しさん :2006/01/04(水) 19:38:32
やっぱりLispなんですね。 時が流れても、原点はLispであることを認識することができました。
Lispは機械語で作られてます。 時代が流れても、原点は機械語です。
こんな感じでスレ立てようか?
--- 言語処理系開発議論スレ ---
コンパイラ・スクリプトエンジン相談室があまりにアホばっかなんで立てました。
このスレの話題は処理系の実装に関する議論に限定します。
言語の善し悪しなどは遠慮ください。
つまり、実装の議論に直接関わらない限り言語のデザインに関する議論、
もちろんどの言語が優れているだの使われる言語がえらいだの特徴がどうだの
成功失敗だのユーザがどうだのどの言語が起源だのなどなどの議論は禁止。
処理系をどの言語で実装するのがいいだのも禁止。
過疎上等、高S/N比優先でいきましょう。
くだらなくてもにぎわってる方がいいという方にはもっとよいスレがあります↓
関連スレ:
「コンパイラ・スクリプトエンジン相談室」という名の言語比較厨隔離スレ
http://pc8.2ch.net/test/read.cgi/tech/1135082582/l50
機械語は二進数の数字で出来ています。 時代が流れても、原点は二進数の数字です。
Lispにしろ機械語にしろ、コンピュータで実現可能なアルゴリズムはチューリングマシンで実現可能なことと同値です。 時代が流れても、原点はチューリングマシンです。
チューリングマシンで実現可能なことは、λ計算で全て書けます。 時代が流れても、原点はλ計算です。
お久しぶりです、実装について質問させてくださいまし クロージャの実装についてですが例えば、以下のソース (let ((a 0)) (define hoge (lambda (x) (+ a x)))) を eval する際に、クロージャ hoge をどのようにクラス化 するかについてですが、 トップ環境フレームを top 、矢印は親を指すとして上の例だと top <- frame1(aを束縛している) のようにフレームが伸びていて、クロージャオブジェクトは frame1へのポインタをメンバに持つように作成したとします で、このクロージャへの呼び出しをするとき、例えば (hoge 10)としたとき top <- frame2(10を束縛) のように別フレームが伸びるじゃないですか。 このとき、(hoge 10)を評価するときに必要な環境として2つの連結リスト top <- frame1 top <- frame2 が二つ必要になる?という見解はあってますか?評価手順としては x の検索を frame1 に対してかける(見つかる) a の検索を frame1 に対してかける(見つからない) a の検索を frame2(クロージャクラスのメンバ変数) に対してかける(見つかる) を順次探しにいく、という風にするという考え方?で良いのでしょうか なんか上手く日本語化できなかったorzけど 壮大な勘違いをしている可能性もありそうなのでアドバイス求む
アホとは、Lispをあえて避ける行為のことでしょうか。
>>198 実装に関する質問だったらレベル低くてもOK?
当方このスレにかなり助けられているので相談できなくなるのは寂しい
>>198 は他人がレベルを高くしてくれるのを待ってるだけの他力本願野郎。
誰も同意しないので、気にするでない。
>>202 んー、素直にやるなら、hogeの中の評価時には
top <- frame1 <- frame2
ってならない? 内側から探してけば自然にレキシカルスコープに
なると思うけど。
俺言語作ってる様な奴は大抵秘匿主義だからな。 俺もそう。 こんなスレのレベルが高くなるわけないだろ。
>>207 俺なんかこのスレの誰も及ばないくらいレベル高いことを秘匿してるけどな。
>>202 (let ((a 0))
(define hoge (lambda (x) (+ a x))))
(hoge 10)
だと、3行目ではシンボルhogeに値が束縛されてないと思うぞ。
(define hoge #f)
(let ((a 0)) ; frame1
(set! hoge (lambda (x) (+ a x)))) ; frame2
(hoge 10)
たぶん↑のようにしたいんだと思うけど、
この場合だと、letを評価した時点でframe1が作られ、top <- frame1 になり、
lambdaで作られた手続きは top <- frame1 の frame1 部分を参照する。
で、(hoge 10)が評価されたときに frame2 が作られて
top <- frame1 <- frame2 になる。
あとはaを検索するときは上から順に。という感じかな。
top <- frame2 のようなリスト(か何か)も必要になるけど、
これは継続絡みの話だと思う。
俺には反論側のほうが全く説得力ないように見えるけどな。
213 :
デフォルトの名無しさん :2006/01/04(水) 23:33:08
>>211 最後の記事を実際に見てみると、Lisp信者が改宗した話というよりは、
Lisp信者がLispを絶賛してる話にしか見えないぞ。
スレ違いも甚だしい これだからLisp厨は・・・
211はどう見てもアンチLispだがな。 Lisp厨=アンチLispだったら同意。
> 他人がレベルを高くしてくれるのを待ってるだけの他力本願野郎 待つのを諦めたからの提案だと思うけど。
>LispのS式表記は、声高に、はっきりと、過去半世紀の間拒否されてきた。 これってどういう意味で言ってるのか知らないけど、括弧がネストしすぎると 見難いとかめんどくさいとかなら、Lisp信者でもそう思ってると思うぞ。
>>216 待ってないで自分で書き込めばいいのにね。
>>206 ,209
THX!! なんとなくわかってきたような。
hoge に束縛された closureオブジェクトは
メンバに top->frame1 のフレームリストをメンバに持っている、と。
で、(hoge 10) という関数呼び出しを評価するとき
hoge はクロージャなので、hoge.env( top->frame1 ) に対して、frame2(10を束縛)を
リストに連結して評価する( top->frame1->frame2 )、と。
もし hoge がプリミティブなら掴んだ環境を持っていないので、
素直に10を束縛したフレーム(frame'とする)を
top に連結して( top->frame' )評価する、ということでしょうかね?
>>209 >あとはaを検索するときは上から順に。
上からというのは最下層からということですか。
top からではないですよね?
ありがとうございました。
S 式を叩けば良いみたいな風潮は何とかならんかね。頭悪過ぎなんだが。
知らない/調べない/でも批判する...
223 :
209 :2006/01/05(木) 00:58:00
>>219 > 上からというのは
frame2側からね。
> もし hoge がプリミティブなら掴んだ環境を持っていないので…
プリミティブって、トップレベルで定義された手続きの事かな?
1. topを普通のフレームと同じように扱って、
NULL <- top <- frame1 <- frame2 ....
トップベルで定義された手続きはtop環境を参照。
2. topを特別なフレームと考えて
NULL <- frame1 <- frame2 ...
(検索して見つからなかったらtopから検索)
トップレベルで定義された手続きはNULLを参照。
の、どっちかかな。
>>221 個人的には、リストがやたらと扱いやすいことを挙げたい。
>マクロは生産性の向上には有効、わかりやすさにはかなり不利
「構文を言語のユーザが拡張する」という考えに慣れていないだけだと思う。
matz氏自身、Rubyの構文の拡張を何度も行っているが、
Rubyを拡張したことでRubyがわかりづらくなったと本人は言ってないよね?
>>223 >個人的には、リストがやたらと扱いやすいことを挙げたい。
それは、リスト部分だけ、たいがいのスクリプト言語にある配列のリテラル
みたいに表記できるだけでは不足なの?
あとは簡潔に記述できるクロージャがあれば、(処理を変数などに代入することも
できるんだから)プログラムコードまでS式である必要は薄いんじゃ、って
疑問なんだけど。
>「構文を言語のユーザが拡張する」という考えに慣れていないだけだと思う。
ていうかその考え自体に批判的なんじゃないかなあ。
C++のオペレータオーバロードが、同じ文脈でよく批判されるよね?
Rubyの場合、Matz氏は言語設計者なんだから、拡張しても問題なし、
でもユーザがやるのは許さん、と。
そんなに知りたかったら自分で触ってみろよ。
226 :
223 :2006/01/05(木) 02:52:56
>>224 > リスト
「後ろ半分だけ実体が共通なリスト」とか、
「変数aの参照しているリストの3番目以降のリストを変数bに参照させたい」とか。
全体から見ると、リストというよりはグラフになるのか。
このスレに沿った話題だと、
構文木をいじったり、クロージャのリストを実装したりが簡単。
> プログラムコードまでS式である必要は薄いんじゃ
マクロを一切使わないなら必要ないんじゃない?
自分の作りたいプログラムを書くのに十分な構文をサポートしている言語が
常にあるなら、と読み替えてもいいけど。
> C++のオペレータオーバロードが、同じ文脈で
その辺の話なら同意。
利点欠点は大体同じだよね。
マクロの利点欠点ははオペレータオーバロードよりもずっと大きいけど。
>マクロは生産性の向上には有効、わかりやすさにはかなり不利 いいんじゃない?生産性が上がればいいんだし。
>>211 御大ですら自分の好きな言語が一番素敵厨かYo!と思いマスタ(w
他人を改宗させようとは思わないけれど。 頭の中でコードを考えてる時はグラフなわけ。 S式だとそれをそのままシンプルに書き下せる感じがする。 そして、Emacsの式単位 (文字単位や行単位でなく) の編集は 頭の中のグラフを直接いじっている感覚がある。 他の構文は、読むときも書くときもいちいち頭の中の 構造と字面とを翻訳してやらないとならないんでかえって面倒。
a した結果を b して、その結果を c して、その結果を d する というのを、頭の中では、 (d (c (b (a ... )))) と考えるんだ、凄い頭だね
>>230 >a した結果を b して、その結果を c して、その結果を d する
この時点で違ってんじゃないの、Lisp 脳と C 脳では。
要は人によるってことでおさまりそうな議論だな
S 式に特定した話というではないが、read/write invariance なのが良いとは聞くね。 計算途中のデータを引っ張りだして、ちょっと修正してまた計算みたいなのを何も考えずに出来る。
>>230 そっちの方向にネストが深くなるときってのは、だいたい
逆に考えてる。欲しいものが先にあって、最後にdを呼べば
それが得られる、dがその結果を出すためにはcが返す値
が必要で… とトップダウンで。
逆にボトムアップで考えるときはletが深くなる。構造が
見えて来たらどんどん整理するけど。
>>231 Cでも d(c(b(a(..)))) なんだけど・・・
C++なら、hoge.a().b().c().d() とも出来る(どっちも出来る)が
>>235 文法の話じゃなくて、「〜して、次に〜する」という手続き的な考え方をしていないんじゃないかって事。
逆にボトムアップで考えるときは・・・、とか書いてんじゃんw let云々はCで言えば a_result = a(...); b_result = b(a_result); c_result = c(b_result); d(c_result); といったやり方だし これを、S式で書くとグダグダになるが
だからツリーをいじってるって言ってるだろ。 (let ((ra (a x))) (let ((rb (b ra))) (let ((rc (c rb))) (d rc)))) でカーソルが一番最初にある時に、rcを束縛する let式に行くのは C-M-d C-M-f C-M-f C-M-d C-M-f C-M-f そのlet式全体をリファクタリングするために外に出したければ C-M-Space C-M-w でカット。 (a x), (b ra), (c rb) の部分がどんなに複雑になっても この操作は変わらない。木構造が変わらないからね。 a_result = a(...); b_result = b(a_result); c_result = c(b_result); d(c_result); でa(), b(), c() の部分が何行にもわたる式になった時に 同じことができるのかい。
スレ違い乙
emacs講座ですか
>>238 let*ってそのためにあると思ってたんだけど…。
(let* ((a-result (a ...))
(b-result (b a-result))
(c-result (c b-result)))
(d c-result))
使った事ないけどさ。
どっちにしても、ぐだぐだやん。
何がぐだぐだなのかわからん。
245 :
デフォルトの名無しさん :2006/01/05(木) 21:30:18
Lisp脳と聞いて、Ruby脳が飛んで着ました。
Flexのライセンスについて質問なのですが、いまいち不明なところがあります。 Flexをつかって生成されたものに関してなのですが、 Note that the "flex.skl" scanner skeleton carries no copyright notice. You are free to do whatever you please with scanners generated using flex; for them, you are not even bound by the above copyright. とあるので、生成されたものに関しては著作権表示すらなしに組み込むことが可能であってますでしょうか? それとも、 This product includes software developed by the University of California, Berkeley and its contributors この一文はやはりいれておかなければならないのでしょうか? 識者の方々よろしければご教授いただけたらとおもいます。
普通に読めば著作権表示入れる必要はないと思うけど…。
ここは Copyright and/or Copyleft については素人集団だからな。 一応、著作権スレにでもあたってみたら?
そういうツールで生成したやつは、たいてい著作権的には ツールの方の著作権は関係ないって感じになる。 ライブラリリンクとかで、生成した成果物が、他人の著作物を含むと ややこしくなるがこの場合そうじゃないしな。
250 :
デフォルトの名無しさん :2006/01/06(金) 00:14:17
>>249 その程度なら誰でも想像できるんだけどな
中途半端なカキコ見は混乱のもと
ていうか、246はどう見ても著作権表示入れる必要はないと はっきり書いてあるようにしか見えんが。
>>251 俺にもそう読める。246よ著作権表示は一切不要と心得よ
246です。 みなさま質問に対してのご返答ありがとうございました。 ライセンスは色々とありまして、その中でも、特にツールで生成されたものに対しては扱いが分かりづらいものが ありまして質問させて頂くに至りました。 コンパイラ・スクリプトエンジンに関連あるFlexについての質問でしたが、微妙にスレ違いだったかもしれません。 そのために気を害してしまった方がおられましたら、お詫び致します。
もともとスレ違いの連続みたいなスレだから
俺言語を作ってる人達の雑談スレッドだろ
>>255 俺言語は非難しないが、俺様言語な香具師が来ると痛すぎ
俺言語と俺様言語の違いとは?
Lisp と Ruby の違いと解く。 さて、その心は?
>>257 俺言語は局所的用途の為に作られたもの
俺様言語は自己満足のたまもの。
WinAPIの質問ですいませんけど、 WindowsでJIT作ろうとしたら void *mem = VirtualAlloc(NULL, size, MEM_COMMIT, PAGE_READWRITE) memの先にコード書き込む VirtualProtect(mem, size, PAGE_EXECUTE, &old) ジャンプする で良いんでしょうか?
WRITEをはずしておくと意図しないアレをアレできるからアレかも
262 :
デフォルトの名無しさん :2006/01/07(土) 19:10:16
ま、何を作ろうともLispに還元されるわけだけどね。
>>261 PAGE_EXECUTE
コミット済みページ領域に対する実行アクセス権を有効にします。
このコミット済み領域の読み取りまたは書き込みを行おうとすると、
アクセス違反が発生します。
>>264 そうだったんか・・・
PAGE_EXECUTE_READ とは別か・・・
266 :
デフォルトの名無しさん :2006/01/08(日) 23:06:40
りんご
===== FORTRAN 77 =====
DEFINT A-Z
269 :
デフォルトの名無しさん :2006/01/10(火) 23:40:58
なんで、最適化用語って変なのばかりなんだろう? もうちょっと、かっこいい名前つけられんのかねぇ?
コンパイラの用語って変なのばっかり。 還元(reduce)って言葉見つけたとき、酸化還元の還元かとおもったよ。
合ってるよ。reduce には酸化還元の還元という意味もある。
272 :
デフォルトの名無しさん :2006/01/11(水) 00:05:43
コンパイラ用語に使うときは意訳でよいから別の言葉を使って欲しかった。
もとに戻すんだから意味的にも還元で問題なかろう。 日本語力の乏しさを棚に上げて何言ってんだ。
上方遷移…余計わからんな
>>270 コンピュータ用語自体変なの多いから気にスンナ
自己満足のために、lispのdefmacroのc言語風なものを実装してます。 for(i=0,i<10,i++,printf("%d\n",i)); といったかんじのことは出来るようになったのですが、 for(i=0;i<10;i++){printf("%d\n",i);}と言った外側にブロックを 持ったマクロは、どうやって実現したらいいか悩んでます。 何かいい参考資料ないでしょうか???
>>278 ありがとうございます。
Dylanですか。初めて聞きました。
結構古い言語なんですね。仕様読んでみます。
使ってみたい気がするのですが、windowsバイナリとか落ちてないのかなぁ。
>>280 ほんとだ。ちょっと探せば見つかるじゃん。orz
ありがとうござます。
Hygieneって書いてあるので、基本的に名前の衝突が回避されていて、
BNFを書くような感じでパターン照合を行うものがDylanのマクロと考えてよいのでしょうか?
パターン照合はやったことがないのですが、
構文解析器の自動生成ができる技術力ないと作れないような気がするのですが。。。
>>281 Schemeのsyntax-rulesの美しさに萌えろ。S式最強。
>>282 Schemeのsyntax-rulesが作れれば、そりゃ、もー、うれしいんですけど。
S式だとS式でない場合に比べて、実装が簡単になるのでしょうか?
それだと、うれしいんだけどなぁ。
>>283 どんな文法を使おうと、結局はツリーにしてマッチや変換をかけるでしょ。
S式の場合は最初からツリーになってるから前半の(どっちかっつうとtrivialな)
ステージが省ける、ってだけじゃないかと。
言語デザイナの立場だと文法も重要なんだろうけど。
285 :
269 :2006/01/11(水) 20:30:31
パターンマッチマクロってどんな syntax の言語でも実装可能なの?
自分の欲しいsyntaxのマクロを人に書かせたいと見たw
>>286 可能か不可能かなら可能でしょう。
使いやすいとかわかりやすいものになるかどうかは別。
>>288 どうもありがとう。
>>287 Ruby や ECMAScript, Python は acceptable lisp と言われているけど、
マクロを追加すればもっと Lisp の強力さに近付くかなと。
>>287 自分は、schemeのsyntax-rulesを実装したいのだけど、
わからないので、簡単なソース付きで解説してほしいです。
自分のほしい言語をすべて書いてもらえたら幸せです。
schemeのスレとかで聞いたほうがいいのかなぁ?
>>287 >>288 >>289 PythonはDylanに似たマクロが入るとかいう噂がある(あった?)ようです。
どんな言語でも適用できそうなので、(よくわかってないのですが)
Dylanのマクロのアイディアはとにかく凄いような気がします。
C用のDylan風マクロとか、Java用のDylan風マクロとかあったら
そりゃもう、うれしいんじゃないかなぁと思います。
schemeのスレで質問してみました。
萌言語案 ハァハァ{ … } の機能 while(1){ ... }
萌えとハァハァは別だよ派 萌えもハァハァも一緒だよ派
#define _ 1 とかやると、 for (;_;) 仕事; となるわなw 萌えないが、実感はむしろこっちのほうが(泣)
#define T_T 1 while (T_T) 仕事;
#define ハァハァ 999 while(ハァハァ) 言語スレ
変な用語の例(その2) ・せわしない。。。 ・なまけた。。。
bool A = ture; bool T_T = true; for(;A;) wile(T_T) int y=-(T_T);
assert マクロって must って名前にしたほうがよくない? assert ( a == b ) → must( a == b )
assert that a equals b (thatは略可) はそのまま読めるけど、mustはどう読んだらいいんだ?
a == b で「なければならない」 should ( a == b ) とか must( a == b )
must(a == b) を a == b でなければならないと読むのは 英語的におかしくないか。 ! 演算子みたいに must が演算子だとして a must== b ならわかるが。
must be (a is equal to b) なんじゃないの。
だから、それが英語的におかしいといっている。
じゃ、 must be a condition of (a == b) は?
307 :
300 :2006/01/14(土) 16:14:15
いや、まあそんなに深い意味で発言したわけじゃないけど 英語的にどうこうというか、 自分的にはこっちのほうが直感的かなと思っただけ 初心者に assert を教えたらピンとこなさそうな顔してたもんだから
個人的には ensure が良いと思う。ちょっと意味合いが変わって来ちゃうけど。
>>307 assertって単語になじみが無いだけだ、辞書引かせてからassertを使った例文を毎日一個5営業日続ければ覚える。
310 :
デフォルトの名無しさん :2006/01/14(土) 18:37:19
俺なら、 must.be.A.eq.B が一番すんなりと入るかな?
俺なら、 zettai(a == b) が一番すんなりと入るわ。
(a == b)じゃなきゃいやん
313 :
300 :2006/01/14(土) 19:41:09
assert だけだと、どっちの場合に警告するのかよくわかんなくない? a == b 「だったら」警告するのか a == b 「でなければ」警告するのか。 must とか(あるいは311,312 でもいいけど)だと、 明らかに後者が連想されるんじゃないかなと思った
「ここでは(a == b)になると断言する」と日本語で言っても?
assert に 『警告する』 って意味は無いんだよなぁ……。
assert false の場合はどーやって解釈すりゃいい?
『常に偽であると表明する』 prolog の fail みたいな。
318 :
300 :2006/01/14(土) 20:37:49
>>315 あ、ホントだ、やべえ!長いこと勘違いしとった!!
「断言する」で問題ないじゃん!
てことは、assert でも問題ナスorz
ドンマイ
>>316 正確には「もしここに来たら(a == b)がtrueであると断言する」と思えばいい。
assert falseは「もしここに来たらfalseがtrueであると断言する」、
つまり「ここには来ることはありえないと断言する」。
#define assert 断言する 断言する(a == b)
スキャナとパーザって、マルチバイト文字を通せるのですか?
通すように作れば通る。
シングルバイト文字の8バイトの連続だよ? たまたま 0x80 より大きいだけ
>>324 8バイトって何だ8バイトって。
実際には322の言うように、通るように作れば通るし、今時flexもbisonも
8bitは通す。マルチバイト文字というと、SJISだと0x5c問題が出てくる
可能性は歩けど、それはlexerのつくりの問題だよな。
変な用語その3 マトン
羊肉?
自動羊肉
オートマタ。
オート マトン というよりは オー トマトン 何だが。
Oh! Tomato! n?
コンピュータ関係の変な用語ってのはKILLとかZOMBIEとかENTITYとかじゃねぇのか?
デムパな単語が、そんなに嫌か?
>>327 automate(自動)+ton(〜風)、「自動っぽいもの」くらいの意味。
自動人形
ギリシャ語のautomatos(自立して動くもの)が語源だっけか。 別にどうでもいいけど。
>>329 昔食肉工場の機械が、簡易プログラムのような物で動いていて
たまたま羊毛の盛んな時期と重なった
>>339 ツマンネ
しかしあれだな、Lisp叩きやRuby叩きの話が出て来ると、すぐ「実装の話をしろよ!」という
主張が出て来るが、実装の話が好きな人達は、スレが閑散としてても実装の話はしないんだよな。
assertやらオートマータやらの話をしている輩が何を偉そうに
>>341 何一つ自分からネタ振れない輩が何を偉そうに。
つか、俺はassertやオートマータの話なんかしてないし。
だいたい、ここじゃちょくちょく構文解析+αのレベルで「間違い」が書き込まれる
ことがあるんだが、自称凄い人達はその訂正もしてくれないのな。
まず、自称このスレの間違いをわかってる君が、具体的に間違いを指摘してみては?
344 :
260 :2006/01/18(水) 23:33:35
>>342 詳しい人らしいんで返答を乞うてみます。
342が「自分に何がわかっているのかを書かなくていい理由」を考えつくまで もう少しお待ち下さい。
なぜこんな流れに。。。 俺はレベルの低い実装の質問を書き込んでいたものですが 342の人は多分質問に答えてくれた人なんじゃないかという 気がしています。 逆に意地悪な感じで初心者を馬鹿にしている人達は 初心者の質問が書かれるたびに 「このスレ〜以外は意味ない」とかそんなんばかりでしょう。 そういうのはレベルが低くはないんですか?
エスパー光臨
348 :
デフォルトの名無しさん :2006/01/19(木) 22:59:51
マシンのネイティブコードを吐き出すための情報(命令セットってやつ?)はどこから入手したらいいのですか? VMや構文木直辿りのインタプリタしかやったことないのでそろそろコンパイラにチャレンジです。
前からテンプラにその情報源がないのは、 ひどく片手落ちな気がしてたよ
>>350 どのマシンがターゲットなんだかワカランのじゃ話にもならないし、少しだけ乗せるとアンチとか出てきて喧嘩になるし
ろくな事ないからじゃないの?
IA32だけならば、誰も文句いわねえと思うが・・・ マカーでさえもう文句いわねえ とおもったが、このスレの二大言語(笑)の信者は 蚊帳の外に置かれてしまうかw
>>352 でIA32の場合インテルに資料請求するか秋葉あたりでデータシート買うって言う選択肢な訳だけど。
lisp原理主義者はcarをeaxに、cdrをedxに。
>>353 例のpdfじゃ不足?
>>358 紙のマニュアルの方が扱いが楽だからなぁ。
プリントすると紙質の関係でつらいからね。
そんなの選択肢からはずす理由にはならんだろ。 知らなかっただけなのに、言い訳苦しすぎですよ先輩。
361 :
デフォルトの名無しさん :2006/01/22(日) 12:39:02
新しい言語本がでてるな。 リンゴに続けるか?
っていうかリンゴってどれだw スモールコンパイラの制作で学ぶプログラムのしくみ?
手続き呼び出し/呼び出されの制御はどうするのが一番簡単だと思います? 一時変数・局所データとか考えると色々と面倒…… 一時変数については呼び出し側にスタック作っといて、呼び出され側が 勝手に取り出すようにするのが簡単かな?スタックマシンにすると構文木 を解釈するのが面倒臭そうだし……
>>366 作ろうとしているのが機械語吐くコンパイラなのか、バイトコード吐くのか、
Rubyみたいに解析木を実行するタイプなのかもわからんでは何も言えんわな。
>一時変数については呼び出し側にスタック作っといて、呼び出され側が
>勝手に取り出すようにするのが簡単かな?
呼び出し側と呼び出され側でスタックが違うの?
>スタックマシンにすると構文木を解釈するのが面倒臭そうだし……
意味わかんねえっす。どっちみち構文木は解釈しなきゃいけないのでは。
368 :
366 :2006/01/24(火) 00:46:10
>367 おお、すみませぬ。インタープリタ作ろうとしています。 まずの目標はRubyみたいな解析木を実行するタイプですね。 >呼び出し側と呼び出され側でスタックが違うの? 一時変数の管理責任と、手続呼び出しの動作主体をどのように割り振ろうかな…… と思いまして。前述の例だと 一時変数の管理責任:呼出側 -> スタック作って管理 動作主体:呼び出され側 -> 駆動はこちら とかを考えています。 >意味わかんねえっす。どっちみち構文木は解釈しなきゃいけないのでは。 確かにそうですな……知恵が回らなかった…… 結局、 今日一日考えた結果、スタックマシンの連鎖みたいなのを作ってみることにしました。
>>368 実行環境フレームとか言う奴の事さしてんの?>>スタックマシンの連鎖
370 :
366 :2006/01/24(火) 02:47:12
どっちかっていうと、駆動レコード+スタックマシンといった感じですかね。 (実装の手を抜くために)駆動ごとにスタックマシンを付けた感じ。
お手本がRubyだと、この擦れ的には受けが悪いかもw おれは第三世
372 :
デフォルトの名無しさん :2006/01/25(水) 01:20:34
LISP最高!
>>372 なんでそこでLupinと言ってぼけないだよ
374 :
366 :2006/01/25(水) 22:18:52
そういや、単純なスタックマシンだと(いくつ実引数を渡すかは関数側で決まるから) オーバーロードでひどい目に会いそうですな…… 取りあえずはスタックのリストを作って回避しようかと考えていますが、他にどんな アイディアがあります?
オーバーロードを何時解決するかによる。コンパイル時に全部解決するなら問題あるまい。
>>375 メソッド名とシグニチャが結びついてれば実行時解釈でも問題ないしね。
377 :
366 :2006/01/25(水) 23:20:36
そういやそうですな。 でも、折角だから多値戻しを実装してみたい気もするんですよね…… Rubyみたいに配列を戻す手もありますが。
あまり欲張らない方がいいよ。複雑にしすぎると作ってて嫌になる。
379 :
366 :2006/01/26(木) 00:06:21
ははは、ご心配なく。かれこれ1年以上弄んでいますので、嫌んなるのは慣れっこです。 仕事だったら素直にC++使いますし。 まあ、未だに駆動が回んなくて鬱ですが…… “1+1”ができるのはいつになることやら……
ルビーに学べ
381 :
(ぱ) :2006/01/26(木) 21:14:22
どうもです。上のほうで出ていた「ライターのM」です(たぶん)。
Rubyのような解析木実行タイプの言語を作ろうとしていて、かつ、独自スタックも
使うつもりなら、うちのcrowbarなんかは参考になりませんか?
http://kmaebashi.com/programmer/devlang/ >>368 >一時変数の管理責任:呼出側 -> スタック作って管理
>動作主体:呼び出され側 -> 駆動はこちら
ここで言っている「一時変数」がローカル変数のことであれば、管理責任は
呼び出され側にあるのでは。呼び出し側は呼び出され側のローカル変数を
知らないからです。
引数についてであれば、呼び出し側で領域を確保するにしても、別段それを
スタックに積む必要はないように思います。
crowbarの場合、駆動レコードごとに、変数名と値の対応表を持っています
(ver.0.3以降は、クロージャの実現のためにスコープチェーンを持っているので
ちょっとややこしいですが)。関数呼び出しでは、呼び出し時に、呼び出され側の
駆動レコード(CRB_LocalEnvironment)を作成し、その中に、ローカル変数として、
実引数の値を突っ込んでいるだけです。
引数やローカル変数の領域をスタックに確保するという実装ももちろん考えられますが
(crowbarでは代入により実行時にローカル変数が作られるのでそれはできなかった)、
その場合、引数は呼び出し側で積むことになるのでは。
いずれにしても、関数呼出しごとにスタックを持つ必要なないと思うのですが、
どうでしょうか。crowbarは演算用の独自スタックを持っていますが、スタックは1本です。
まあ、crowbarのスタックは足りなくなるとrealloc()するので、そのへんの効率低下を
嫌って関数呼び出しごとに持つ、というのならわかりますけど。
382 :
(ぱ) :2006/01/26(木) 21:22:58
ついでに上の方の質問に。
>>91 >ライターのM氏のページで、Cでの実装だと型そのものはUNIONにまとめてる感じでした。
>やっぱり処理系が扱う変数型をまとめてUNIONにしてしまってフラグ変数で型を見分けて扱うというのが一般的なんでしょうか?
一般的かどうかは知りませんが、crowbarでは値を保持するために2箇所で共用体を使っています。
変数の値を直接保持するCRB_Valueと、変数から指された先のヒープ中にある、
CRB_Objectです。
>そのときに、たとえばWinapiに対する拡張とか、製作時点で未知のオブジェクトに対応する場合はどういう方向になるんでしょうか?
Winapiに対する拡張とかを狙って、ネイティブポインタ型というのを導入しています。
luaのユーザデータ型も同じようなもののように見えます。
>>96 >C言語的構造体指向OO風味だと、メモリの配置さえあってれば問題なく下位の構造体にアクセスできるから、
>なんとか構造体EXとかは可能だと思う。関数ポインタつければ仮想関数もどきとかもできますぜ。
これは、crowbarで言うところのCRB_Objectについては可能でも、CRB_Valueについては
不可能ですよね。
383 :
366 :2006/01/27(金) 00:10:43
>381 情報サンクスです。考え方のところとか色々と参考になります。 ただ、自分の目指しているのは型なし&プロトタイプ指向ですので、やっぱりちょっと ポイントが違うようですね。まあ、その違いを見るのも楽しいですが。 >ここで言っている「一時変数」がローカル変数のことであれば、 いえ、関数の戻り値ですね。最初は関数の戻り値を次の継続に直接渡そうかと 考えていたのですが、そうすると今の自分のアイディアだと(継続のずっと先にある) ブロックのローカル変数から実引数を取ってくるのが面倒にだったので、少し悩んでました。 スコープチェーン作って管理するのもいいのですが、もっと簡単な方法が無いかな……と いうことで、取りあえずはスタックマシンを利用する方法でトライすることにします。 >いずれにしても、関数呼出しごとにスタックを持つ必要なないと思うのですが、 call/ccを実装したいと思っているのですが、その都度スタックを保存するのも面倒だし いっそのこと全部の継続にスタック持たせちまえ、という乱暴なアイディアから来ています。 ……まだ実装できていないので、本当にうまくいくのか不明ですが……
アイデアだけではなぁ、 なぜ既にあるものを使わん? アフォ?
385 :
366 :2006/01/27(金) 00:37:09
>384 既にある言語では無いから作っているんだけど……Schemeは近いものを感じるけどね。 あと、勉強という意味では車輪の再発明も重要だよ。
一年以上やって1+1も出来ないんだろ? 勉強になってるか疑問だな。 >ただ、自分の目指しているのは型なし&プロトタイプ指向ですので、やっぱりちょっと >ポイントが違うようですね。まあ、その違いを見るのも楽しいですが。 形無し&プロトタイプ指向だからポイント違う? 何言ってんだお前。
387 :
366 :2006/01/27(金) 02:45:51
> 一年以上やって1+1も出来ないんだろ? > 勉強になってるか疑問だな。 あら、そう? 1+1てけっこう大変だよ? まあ、継続とか移譲とかグラフとかオートマトンとか、回り道が多いちゃ多いがね。 それもまた勉強。 >形無し&プロトタイプ指向だからポイント違う? >何言ってんだお前。 どういう意味?
もういいから来るな。 一年以上で未だ1+1もできないほど頭悪いんだろ? これから先何年もアホ質問書き込まれるかと思ったらゾッとする。
継続でスタック保存するのが面倒ってんなら、駆動レコードを全部 ヒープに置くって手もあるが。それだとcall/ccは駆動レコード チェインの頭の掴んでおくだけだよ。 性能を気にしてるわけでもなさそうだし、駆動レコードごとに スタックなんて面倒なことをなぜするのかよくわからない。
Lisp使いはリストを見ると車とかCD-Rとかを使い出す
>>390 どうして車とCDRに発想が結びつくの?
なにこの変なマジレス
Lisp使いはCD-Rのことを「クダー」と読むんだな
久多良木信者はLisp使いか否か?
>>391 しらないけどcarとcdrだからじゃない?
396 :
(ぱ) :2006/01/27(金) 20:21:31
>>383 >ただ、自分の目指しているのは型なし&プロトタイプ指向ですので、やっぱりちょっと
>ポイントが違うようですね。まあ、その違いを見るのも楽しいですが。
crowbarは思いっきり型なし&プロトタイプベースのつもりですが。
>いえ、関数の戻り値ですね。最初は関数の戻り値を次の継続に直接渡そうかと
>考えていたのですが、そうすると今の自分のアイディアだと(継続のずっと先にある)
>ブロックのローカル変数から実引数を取ってくるのが面倒にだったので、少し悩んでました。
継続をやりたいということ自体初耳なわけですが。
継続は詳しくないので以下見当外れならすみませんですが、
「Rubyみたいな解析木を実行するタイプ」で、解析木を再帰で辿っているとすれば、
「Cのスタックどうするの?」という疑問が出てきます。
「関数の戻り値を次の継続に直接渡そう」ということだから、CPS変換を前提にしている?
だとすればそれはもう「Rubyみたいな解析木を実行するタイプ」とは言えないのでは。
>>389 関数内での、計算途中の値を積んでおくスタックのことなんじゃないでしょうか。
1+1ねぇ、マジレスするけど、 yacc触りはじめてその日でできたよw
コンパイラ構成法の一番最初の項目が電卓だからな。
1+1が一年以上できないとか言ってるなら、いったんScheme作ればいいのに。 コアな部分に限れば仮想マシンとコンパイラそれぞれ一日で書けるよ。 そしたら作りたい俺様言語で何をどうするかも少しは見えてくるんじゃね?
>>398 漏れが最初にやったのは逆ポーランド式の理解だった・・・懐かしいな
きっかけを大別すると、 ・yacc/lexまたはbison/flexで独学 ・大学や専学でコンパイラ/インタプリタの講義 って感じなのかな?
授業でちょっとやったけど、あまりに講義資料・内容がヘボかったから独学に切り替えたなぁ。
情報処理の講師の説明よりも、数学の講師の説明の方が、実は分かりやすかったりするんだよな。w
アルゴリズムの大半は、数学の勉強だからな
406 :
366 :2006/01/28(土) 04:22:49
しまった……中途半端な情報で混乱させていますね。すみません >389 今作っている実装だと、駆動レコードチェイン+駆動レコード内のスタックといった 感じにしています。>396の指摘通りですね……と言っても詳しく説明していないから わかんないよね。ごめん >396 >crowbarは思いっきり型なし&プロトタイプベースのつもりですが。 失礼しました。まだ読み込んでいないので…… >「Rubyみたいな解析木を実行するタイプ」で、解析木を再帰で辿っているとすれば、 >「Cのスタックどうするの?」という疑問が出てきます。 今のところ、Cの関数処理プロセスに頼らない(再帰を使わない)で、 ・解析木から継続の連鎖を作る ・継続を駆動する という駆動を外部からループで回そうとしています。 >399 そうなんだけど、作りたいのはSchemeじゃないし、Schemeからちょっと離れているし。 ……とはいっても、練習に作ってみるのもいい勉強かな…… >388 はあ。
1年で1+1が作れない、最低限の理解力すら無い人間が406を書いたと思うと その恐ろしい知ったかぶりに愕然とする
しばらく放っとけないのか?
俺は407の方の噛みつき具合いの方が愕然とする。
1+1 って、意外と難しいよ。特に数値オブジェクトを + メソッドで加算する場合……とか。 経験ない人が独学でやるには、1年はちょっとキツ過ぎじゃないか? とか擁護してみる。
まあそういうのは人による部分が大きいよ。 CSのバックグラウンドあってOOにドップリつかった人がやり始めれば理解するのに1日かからないだろうし、逆にこれからプログラミングを始めますって人には1年じゃ無理だろうし。 極端に言えばね。 一口に何日で理解したとか何年かかっても理解できないとかから能力を量ってしまうのはナンセンスだとは思う。
413 :
デフォルトの名無しさん :2006/01/28(土) 11:18:12
10秒デデキマツタ! if(strcmp(str,"1+1")) printf("2\n");
>>413 情報サンクスです。考え方のところとか色々と参考になります。
ただ、自分の目指しているのは型なし&プロトタイプ指向ですので、やっぱりちょっと
ポイントが違うようですね。まあ、その違いを見るのも楽しいですが。
>>406 > 今のところ、Cの関数処理プロセスに頼らない(再帰を使わない)で、
> ・解析木から継続の連鎖を作る
それをCPS変換というんじゃ…
でも素直にCPS変換したらスタックなんて出てこないと思うんだけど
(「計算途中の値」も全て継続への引数になる)。
それとも複数の引数を渡す際に、既に計算した引数の値を一時保存
しておくエリアってことかな。それを「スタック」と呼ぶのはどうかと
思うが (FILOである必要がないから)。
スタックは、普通の関数呼び出し→リターンに特化した一種の最適化
なんだよ。
>>406 が何か特別な最適化のアイディアを試したいなら
別だが、原理を理解するために書いているなら、まず基本的な
CPS変換→実行系を動かしてみることをお薦めする。判断に迷うところは
とりあえず簡単に実装できるほうで書いてみる。書いてみないとわからない
ことってたくさんあるからね。とにかく動かしてから、別のアイディアを
試してみればいい。
>411 そうだよね……自分の場合は駆動に引っ掛かっています。オブジェクトとメソッドを 等価に扱おうとして、『どうやって駆動すりゃいいの?』というところで散々悩んでいます。 あとは名前解決とか変数呼び出しとか…… >412 OOにはけっこうドップリ漬かっているんですけどね。 ここまで彷っているのは『当たり前と思っていた駆動とか関数呼び出しが、いざ やってみると全然当たり前じゃなかった』というのが大きいですかね。 >407, 413, 414 へえ?
>415 >それをCPS変換というんじゃ… ……そうだった。 > でも素直にCPS変換したらスタックなんて出てこないと思うんだけど 最初は素直にCPS変換していたんですけど、レキシカルスコープやろうとしたときに (オレ言語のアイディアが邪魔して)うまくアクセスリンクが処理できなかったので、 スタック……というか単なるリストも併用する形を検討しています。 > まず基本的なCPS変換→実行系を動かしてみることをお薦めする やっぱりそっちの方が近道かな……もうちょっと悩んでみます。
418 :
366 :2006/01/28(土) 13:38:37
>>415 情報サンクスです。CPS変換のところとか色々と参考になります。
ただ、自分の目指しているのはCの関数処理プロセスに頼らない(再帰を使わない)ですので、やっぱりちょっと
ポイントが違うようですね。まあ、その違いを見るのも楽しいですが。
ありゃ、騙りも出て来たか……これだからIDの無い板は駄目だよな。 そろそろ名無しに戻るか。 >418 ふうん?
彼は型無し&プロトタイプ指向の言語に対して >ただ、自分の目指しているのは型なし&プロトタイプ指向ですので、やっぱりちょっと >ポイントが違うようですね。まあ、その違いを見るのも楽しいですが。 とか言ったのが一番面白かった。最高にバカ丸出しで。 何か言われたら、はあ?とかへえ?とかふうん?とか、 何か言い返さないと気がすまないってのもポイント高し。
プライドだけ高そうだね。技術は(ry
425 :
デフォルトの名無しさん :2006/01/28(土) 17:55:29
ここの住人はプライド高いからナァ ただし、技術は(ry
お前の事か?
プライドが高くなるのは仕方が無いのでは? PGの四大欲求の一つである、言語の作成をやってるわけだし OSと言語とファイルシステムとAIで良かったんだっけ?
OS と言語と AI は分かるけど、ファイルシステムってのは何で? 4 番目に来るのは、Emacs とか Smalltalk みたいな「環境」じゃないかな。
OSと言語は分かるけど、AIってのは何で? アフォ?
ちょwww「四大欲求」てwww
ファイルシステムってOSの一部じゃないの?
DOS
どっちかってーと、OS・言語・マイクロコード(CPUの)・BIOS(とかEFI) とかの方が
それはただLow Levelな方をかき集めただけじゃん
OS、言語、データーベース、ゲームじゃね?w
AIは、作れなさそうだから実際に作ろうとまでは思わないが、 願望を持つ奴は多いと思う。 ゲーム、言語、OS、AIだろう。
>>437 この人は自分が高いレベルにいすぎて、考え方の基準が高すぎるね。
確かに数学者を目指すレベルからすれば、計算機科学はおちこぼれが
流れる分野なのかもしれないが、一般の高校生から見れば
やっぱり、数学が必要な学科だよ。
単位とるにも数学的なものの考え方が必要な科目ばかりだしね。
一般の高校生の99%は大学でどちらかと言えば数学嫌い
になるだろうし。
一般の高校生のレベルと数学者のレベルを混同してるように見える。
そりゃ、京都大学理学部出身から、立命館大学情報工学科みりゃ レベル低くも見えるだろ。 それでもそこにいる学生は相対的に数学が得意で好きだった学生 なんだということが理解できないんだろうな。
理学と工学は似て非なるものだしな。
工学で一度数学の必要性を身に沁みるとまじめに勉強する気にもなるもんだが。 一度数学の講義を受けないとそもそも数学の必要性に気付けない罠。
>>436 ああなるほど、ようやく分かった
人工無能の事ではなく、ホントの人格の事だったのか
人間の場合は四つの判断力を持ってるからな。
直感と理性の再現だけならどうにかなるかもしれないが、
感情と欲求の再現となると、なかなか難しいだろな
443 :
デフォルトの名無しさん :2006/01/29(日) 16:30:38
PGの3第欲求 (1)OS (2)言語 (3)ハーレム この辺りが本当の所だろう。
で、エロゲで代用するわけか
プログラマをPGと略す奴にろくな奴がいない
>>443 OSも言語も興味ないやつはいくらでもいそうだけどな。
447 :
デフォルトの名無しさん :2006/01/29(日) 20:15:58
(1)金 (2)酒 (3)ハーレム
448 :
初心者 :2006/01/29(日) 21:13:56
質問です。 Yaccとかで論理式の短絡評価を行う常套手段はどのようなものでしょうか? 例えば、if(a==b||c==d) でa==bが確定するとc==dの評価はスキップ可能ですが、 Yaccとかだと、先にa==bとc==dが認識されてしまうと思うのです。
>>448 yaccが生成するのは構文解析器。
意味解析は通常は構文解析で構文木を作った後のステップであって、yaccはやってくれません。
[文字列]→字句解析→[トークン列]→構文解析→[構文木]→意味解析→[一時コード]→最適化→[ましなコード]→コード生成→[出力コード]
というように道のりは長い。
yaccがやってくれるのは構文解析だけ(でも構文解析は最適化の次に面倒くさい部分なので大助かり)。
まあ、たいていの入門書ではyaccの最初のサンプルは電卓で、
そのプログラムではアクションの中で計算もやっちゃってることが多いから
>>448 のように思ってしまうのも無理はないのかも。
制御構造を持つちゃんとしたプログラミング言語を作ろうと思ったら、
yaccのアクションでは解析木を作るだけにしておいて、評価は後で行います。
452 :
448(初心者) :2006/01/31(火) 02:22:55
>>449 ,451
そうでしたか。奥が深いですね。
一瞬、言語の仕組みが分かったような錯覚をしましたが、
本格的なものと電卓的なものとでは、ずいぶんとギャップがあるということが
わかりました。
ありがとうございました。
C# コード出力するコンパイラコンパイラって、もしかして未だ無い?
>>452 その錯覚はあながち間違いじゃないよ。
449で道のりは長いとか書いちゃったけど、実際には構文木まで作れれば終わったようなもんだし。
あとはその周辺の理論的な考察とか最適化の手法は好きなように学んだらいいだけ。
>>453 多分ある。というかC#でコンパイラ作るみたいな本がなかったっけか。
>>453 たしかANTLRが対応してたような気が
457 :
448(初心者) :2006/01/31(火) 23:15:15
>>454 どうもです。すこしづつ勉強して行きたいと思います。
(老後の趣味です。ハハハ)
ところで、Yaccってコンパイラコンパイラ等と呼ばれたりもしますが、
結構誇張された言い方とも受け取ったのですが、言語専門家の方は
どのように感じますか?
(技術的な話でなくてすいません。)
そんなことを聞いてどうする
コンパイラコンパイラは言い過ぎ パーサジェネレータの方がしっくり来る
なんで2chの回答者って偉そうなのばっかりなんですか?
Copying でも Generational でも、オブジェクトを移動させる GC で、 移動不可なデータ(ロックとか)ってどう扱ってるのでしょうか。 何かおいしい資料(論文とか)ありましたら教えて下さい。
移動不可なデータのみを別に扱っておけば良いのでは? 例えば、移動不可データ専用の予備領域を取っておくとか
>>460 質問者にとっては初めての質問でも、答える方は3度目、4度目というのが当たり前。
日常では温厚な人間でも切れ気味になる。顔が見えりゃいいんだけどね。
おれは一度目にした質問にはレスしないことにしている。
>>462 どうもありがとう。後で思いついたんですが、世代別なら一番古い世代に置くというのも手ですね。
467 :
デフォルトの名無しさん :2006/02/01(水) 22:19:13
灰色→白は? カレントオブジェクトに参照A,B,Cがあってこの順で処理するとして、 Aをキューに追加して灰色にした後、Bを処理しようとしているときに 別プログラムがAを白への参照に書き換えてしまったら?
>470 ごめん、ちょっと勘違いしていたみたい。 ・カレントオブジェクトの処理(参照先の灰色化 & 参照元の黒化)はアトミックに処理する ・カレントオブジェクトが参照された場合、処理を中断してキューの最後に持ってくる ・カレントオブジェクトは黒と同様に処理する あたりはどう?
>>471 最後でしょうか。つまりこの条件においては黒→白取り付けと同様に考える
(のでその後に書いてある各手法のようなバリアを張る)と。
前二者はオーバーヘッドが重すぎますよね。
このページ、過渡状態を無視せずにもうちょっと厳密に書いてくれていれば
よかったんですけどねえ。
まずカレントオブジェクトを黒にしてから参照先を灰色にすれば、カレントオブジェクトを 特別扱いしなくて済むかな?
ちょっと考えたら分かることだろ。
>>473 処理中のカレントオブジェクトが
「それが参照している先は必ず灰色か黒」という黒の定義に反することになるのが
気持ち悪い。
>>472 そのページはマルチスレッドは考えてないでしょ。
シングルスレッドなら普通
>>471 の 1 にするかと。
>475 黒の定義を変えるヨロシ 「GCから『それが参照している先は灰色か黒しか存在しない』と認識されるオブジェクト」 かな?
スタックアロケーションには定数時間が必要なのに対し、 生きているオブジェクトの数だけに比例する時間がかかるGCは メモリを大きく取ることでいくらでも1セルあたりのGCコストを減らせますよね。 だからGCはスタックアロケーションよりも速いっていうのは間違ってますか?
全体的にどういう計算、それ?
>>480 例えばコピーGCでメモリのサイズをM、GCで生き残ったオブジェクトのサイズをA
とすると、GCにかかる時間は定数Cを使ってCAになります。
回収されたオブジェクトのサイズはM-Aなので、これで割るとCA/M-Aになります。
スタックのポップだと一般にサイズ当たりにかかる時間は定数です。
コピーGCではMを大きくすることで、いくらでもコストが減るので
"Garbage Collection Can Be Faster Than Stack Allocation" Andrew W. Appel
ということらしいです。
よくわかんないけど その理論だとスタックの最大サイズM(仮想メモリ使えば∞と思ってよい) に対して同じ式が出てくるんじゃないか? スタックのポップのコストがサイズ当たりってことは、 ポップのコストはサイズに比例って意味だよね?
>>482 スタックのポップは引き算すればいいだけなので、ほんとは比例しないんですが
使い終わる度にポップするのでサイズに比例するってことです。
スタックのポップのコストにスタックの最大サイズは関係ありません。
>479 それって、前提条件が 1スタック=1オブジェクト になっていない? ただ単に「GCによるオーバーヘッド > まとめてメモリ回収する時間節約」つうてる だけのような気がする
>>484 すいませんがよく意味が分からないです...
VMのスタックをポップせずに一杯になったときにGCを起動した方が
性能がいいんじゃないかって話です。
環境をヒープにコピーしたり末尾再帰を最適化したりしなくてすみます。
ただコンパクションしないと断片化するのでGCは結構重そうです。
>>482 のようにメモリが無限にあるのなら GC自体必要ないのでコストは0です。
で、現実問題としてどんなもんなのかなあと。Chickenで実装されているらしいのですが...
元論文をつまみ読みして想像するに ・Mはメモリのサイズというよりは、今までアロケートしたセルのサイズ ・「スタックアロケーション」といっているのはヒープに確保したセルを明示的に開放する話。スタックは関係ない。 ・「スタック〜」では開放するセルの個数に比例したコストがかかるが、 コピーGCでは生き残ったセルの個数に比例したコストがかかる。 ・コピーGCでは開放するセルあたりのコストはCA/M-A なので、 開放するセルあたり1インストラクションより小さくなることすらある。
>>486 > ・Mはメモリのサイズというよりは、今までアロケートしたセルのサイズ
MはコピーGCで使われるメモリ領域です。つまり 2Mのメモリが必要です。
> ・「スタックアロケーション」といっているのはヒープに確保したセルを明示的に開放する話。スタックは関係ない。
どちらにしても explicit freeingはセルの個数(開放する回数)に比例したコストがかかります。
この論文でも特にヒープかスタックか特定していないような気がします
5章でもスタックとヒープを比較しているので、どちらかといえばスタックかなあと
間違ってたらすいません。
>・「スタック〜」では開放するセルの個数に比例したコストがかかるが、
> コピーGCでは生き残ったセルの個数に比例したコストがかかる。
>・コピーGCでは開放するセルあたりのコストはCA/M-A なので、
> 開放するセルあたり1インストラクションより小さくなることすらある。
その通りです。
他の論文にも StackGCの性能がよいと書いてあったのですが
Chicken くらいしか実装例を知らないのでどうなのかと思ったんです。
飯喰ってきます。
488 :
484 :2006/02/07(火) 14:49:37
ごめん。 意図しているのは >486 の通りね。 GCによるオーバーヘッド => GCでの生き残ったセルの個数に比例したコスト まとめてメモリ回収する時間節約 => スタックでの開放するセルあたりのコスト - GCでの生き残ったセルの個数に比例したコスト といった感じかな?
>>481 >これで割るとCA/M-Aになります。
うんうん。なるほど・・・
ところで、その割った「値」っていうのは、
一体何を意味している数なのかな?
>>489 そのまんま「回収したサイズ当たりの計算量」です。
一般的なコピーイングでは 2Mのメモリが必要ですが、explicit freeing
と効率が同じになるサイズNを超す生存オブジェクトを許さないのならば M + Nで済みます。
(コピーGCでは生存オブジェクトのサイズに比例したコストがかかるので、
Nを超えると explicit freeingの方が効率的になるということです。)
生存オブジェクトのサイズがNを超えたらスタックオーバーフローにします。
で、この論文の例の場合 M = 7Nなので 8Nのメモリが必要となります。
これは コンスセル一つ 3ワードという前提の上での計算です。
VMスタックにこの GCを使った場合、環境フレームの大きさは固定では
ありませんがほとんどの場合 3ワードよりも大きいので、M/Nはもっと大きいです。
という訳で生存オブジェクトに対して十分大きなメモリが確保されないと
GCの優位性は保たれないので、現実問題としてどうなのかと思ったのです。
20年前の論文なのでもっと流行っててもよさそうなものですし
(停止時間が長いという欠点はありますが)。
コピーGCでは1回のGCのコストがヒープ領域の大きさに依存しないので、 ヒープ領域が大きいほどGC回数が減ってGCのオーバヘッドが小さくなる ということ自体は別に直感に反してないし、流行る流行らないの話ではない と思うな。他の要因がなければヒープ領域は大きいに越したことはないに 決まってるし。
>>490 >現実問題としてどうなのか
が知りたいなら、
>>479 の時点でそう書け。
学生がゼミの宿題で悩んでるのかと思って
時間割いちまったじゃねぇか。
知ってる人には当たり前の内容で 知らない人には何を言ってるかわからない説明力。
>>491 その通りなんですが、スタックをヒープとみなしてポップせずにGCで回収してしまおう
って話なんです。何度も書きますが。
VMのスタックをGCで回収させる処理系って何があるでしょうか。
>>492 ごめんなさい。2chにこんな優しい人がいるなんて。
さあどんどん後出し設定が出てきますよ。
>>485 >VMのスタックをポップせずに一杯になったときにGCを起動
>>494 >スタックをヒープとみなしてポップせずにGCで回収
それって普通はスタック上で確保するフレームを
ヒープ上に確保するのと一緒だから
パフォーマンスが悪くなることはあっても良くなる事はないんじゃない?
>>496 494はたぶんHenry BakerのCheney on the M.T.A.みたいな話を
してるんだと想像するが。この話のキモは、多くのオブジェクトは
短命で、GCが走る頃にはごみになってるからヒープにさえ移らな
いってこと。スタックを世代別GCの第0世代とみなしてると考えても良い。
で、Chickenがそれを実装してるわけだが。Scheme処理系としての
性能はそこそこ良いらしいが、処理系の性能はGC以外の部分にも
依存するからねえ。Cheney on the MTA自体がどのくらいの性能かを
測るには、GC部分だけを取り替えて比べるしかないんじゃない。
>>497 言語の構造にも依存するんだよね、ヒープ上につくるオブジェクトの種類。
もし比較するならそのあたりの事も考慮しないといけないし、その場合の
試験プログラムの内容も影響受けるだろうし面倒臭そうだね。
そだね。特に第一級の継続が無い言語ではアクティベーションフレームの エクステントは関数を抜けるまでに決まってるから、popしてしまう方が 良さそうだ。継続がある場合はどうせ捕捉時にスタックを何とかしなくちゃ ならないからCheney on the MTAと相性が良さそうなんだが。
>>499 環境に関してはどうですか?
一般的にはクロージャが生成されたときにスタックからヒープにコピーすると
思うんですが、それが必要なくなりますよね。
どちみちGCのときにはコピーするので微妙ですが。
501 :
デフォルトの名無しさん :2006/02/12(日) 14:59:24
yaccを使ってるんですが、トークンの数字を文字列に変換することはできますか? NUMBER => "NUMBER", STRING=>"STRING", '+' => "+" みたいなかんじです。
502 :
デフォルトの名無しさん :2006/02/12(日) 23:09:56
アフォ?
>>501 yaccはそんなことするためのものではないので、ご自分でどうぞ。
>>501 yaccの仕事じゃない。
もしどうしても今組んでいるコードがそれを要求するのであればlex側で処理しておくべし(トークンの持ち方で2つの意味づけしとけ)
505 :
デフォルトの名無しさん :2006/02/14(火) 23:32:01
>>501 kmyaccならできる。起動時に-tオプションをつけてみて。
506 :
デフォルトの名無しさん :2006/02/16(木) 20:56:42
kimyacc ? キムチ!
sage
>>506 ワロwwwwwwwwwwwwwwwwwww
そういや、少し前にGUI型言語の話が出ていたけれども、 それってオーサリングツールとどう違うの?
スクリプトや言語の支援ツールとしてのモデリングツールなら、 たま〜に見る。 で思った事なんだが、言語の一部としてモデリングツールがあり、 モデリングツールの細かい調整用にスクリプトを用いたツールを 作ろうと思ってるのだが、このツールは何と呼べば良い?
>>510 オーサリングツール自体が、広義ではコンパイラだと考えられる。
>>512 どちらかといえばスクリプトエンジンの方かと
「細かい調整」の内容による?
大昔のPlusの時代のMacにブロックダイアグラムをGUI上で用いて機能設計
(というよりモジュールプログラムって感じ)して、バイナリを出すシステム
があったけど、そういう奴のこと?
>>510 それともIBMのVisualAgeシリーズみたいな奴かな?
>>516 前スレの最後の方で出てたネタなんだが・・・見れないな。
CAD/CAMとか、UMLとか、電子回路みたいな奴の事。
DVDの編集ツールとか、アニメーション製作ツールといったオーサリングツールと、どうも似てるなと。
前々スレだったかもしれんし、はっきりとは覚えて無いが。
『コンパイラ入門 C#で学ぶ理論と実践』 って、本はどうなのでしょう? 初心者向け?
>519 だれか答えてやれよ。
amazonの書評にも誰も書いてねーよーな 1000部も出てないだろう本の内容なんか知るかボケ。 自分で買うなり立ち読みするなりして調べろバーカ。
無理してレスつけなくてもいいんだよ
omaemona
521は無理矢理感ありまくりだけど 522はそうでもない
と、522が寂しそうにつぶやいた。
526 :
デフォルトの名無しさん :2006/02/19(日) 20:07:33
やっぱりこのスレLispやRubyがネタに絡まないと寂れる一方ですね。 Lisp最高!!! と言ってみるtest
↓Lispnおなにが良いか答えなさい
528 :
デフォルトの名無しさん :2006/02/19(日) 20:42:23
ば〜かw Rubyがいいに決まってるだろ? 新しい時代には新しい言語が必要だ Lisp?はぁ〜? コボルジジイと一緒にオナ●ーでもしてる!
529 :
デフォルトの名無しさん :2006/02/19(日) 20:46:14
はぁあ……Lisp……カッコいいのぉ…… S式……すごい興奮します…… あふっ、いぐのぉおおおっ、インデントすごいぃいいい! いくっ、いきます、いっちゃう!いぐぅぅぅぅぅぅぅぅぅぅぅぅぅぅぅぅぅ!!!
よし、いいだろう!
燃料投下の自作自演イラネ
532 :
デフォルトの名無しさん :2006/02/20(月) 00:27:06
最強はJRubyだろ Javaの機能も使える超絶的多機能Ruby
AspJ
534 :
デフォルトの名無しさん :2006/02/20(月) 00:56:14
lispy
ようやく俺Lispにクロージャが加わった記念にカキコ
536 :
デフォルトの名無しさん :2006/02/21(火) 20:42:51
Lispって存在意義あるの? ゴボルと一緒で保守用?
そろそろ釣り餌の変え時では? 信者の多そうなHaskellとかSmalltalkがお勧め
信者率は高いだろうが、絶対数がな
539 :
デフォルトの名無しさん :2006/02/21(火) 23:40:07
釣り餌じゃなく本当に lisp の存在意義が疑問なんだが (除く、研究用)
疑問に思う
>>529 に尋ねる。
なぜ「研究用」が除かれるんだ?
手軽に自分用のスクリプトを組み込むという用途としては 最適であるのは間違いないと思うがな。
>>539 には Python の存在意義を問うてみたいな。
Java用のスクリプト言語にHaskellが加わったらしいね Javaのスクリプトコレクションがどんどん増えていって楽しい
545 :
539 :2006/02/22(水) 21:51:56
釣り餌じゃなく本当に python の存在意義が疑問なんだが (除く、実用)
> Lispの存在意義 新しい言語を手軽に実装できる、に尽きるような。 (で、この言葉がまた誤解されると。)
釣り餌じゃなく本当に ruby の存在意義が疑問なんだが (除く、他の言語を見下して優越感に浸る)
Pythonは教育用言語がはじまりだよ だれが書いても同じようなソースになるのは意図したこと 汚くないソースを書く癖を付けさせるためにインデントを強制している
>>548 Pythonって使ったことないんだけどtabの扱いってどうなるの?
>>542 >手軽に自分用のスクリプトを組み込むという用途としては
>最適であるのは間違いないと思うがな。
なんで?
パーサ書くのが簡単だから、というのはよく聞くけど、パーサなんて
パーサジェネレータ使えば簡単に生成できるから、メリットにならんと思う。
LL(1)文法なら再帰下降パーサでもそんなに大変じゃないし。
# だからよく聞く「言語処理系を作りたければまずLispから」ってのは
# おかしいと思う。みんな、自分が普段使ってるCとかJavaみたいなのから
# 処理系に興味を持つんだから、そういうのを作ってみたいんじゃなかろうか。
それとも他の理由?
>>550 他の理由。
飽きれるぐらい繰り返し出てる話だけど、
新しい言語を追加できるんだよ。
554 :
デフォルトの名無しさん :2006/02/23(木) 21:26:25
>>547 それ程までに、優越感を感じる言語って
一体…?
習得が難しい言語でなければ ユーザーが優越感を感じたりはしないだろうな
>>555 よい言語ではある、でも偉いのは作ったmatzで優越感を感じてる厨房は単なる馬鹿
>>552 >新しい言語を追加できるんだよ。
新しい言語を「何に」追加するのさ。
542は、AutoCADがAutoLispを組み込んでいるように、アプリケーションにLispを
組み込む話をしてるのかと思ったから550を書いたんだけど、違ってたのかね。
Lispでプログラムをばりばり書きながら、そのなかのある特定の領域について
DSLが欲しいと思ったときにLispだと楽に作れるって話?
だとすれば、それはどんな言語をどんな形態で組み込むことを想定しているの?
(1)Lispでスキャナやパーサを書いて、Lispとはまったく似ていない言語を組み込む。
(2)Lispのリーダを使ってS式を読み込み、自力で評価する。
(3)Lispのマクロで俺言語っぽいものを作る。
どれ?
(2), (3)だと、作れる言語は所詮S式になるな。
>>557 もちろんLispを使うということはS式ありきだよ。
552じゃないけどLisperの思考なら(1)も結果をS式に変換して、
Lispにそのまま食わせたり(これが(2)や(3)に繋がったり)すると思うよ。
適当に俺言語っぽいものを作ってみたとして、仮にS式で不満に
なったらフロントエンドに俺言語スキャナを追加したりという、
色んな箇所で入出力できるのがLispの使い勝手の良さに繋がってる
のではないかと。
アプリの組み込みについては、とりあえずS式読めるように
Lispコアを埋め込んでおくと便利という意味じゃないかな。
559 :
デフォルトの名無しさん :2006/02/24(金) 09:22:51
括弧が深くならないLISPってないですか?
>>559 ( ´Д`) キサマ・・・見た目に惑わされているな
括弧開くと括弧閉じるの書き方が違うだけでは
563 :
デフォルトの名無しさん :2006/02/24(金) 23:13:29
結局は括弧ばかりのカッコウ言語w
なにその昭和な親父ギャグ
565 :
デフォルトの名無しさん :2006/02/25(土) 01:44:26
ワンライナーならPythonのPLY。 アプリ組むならC++Boostのspritがデフォなんだけどどうなんだろう。 開発業務における調査・解析の仕事って結構あるのよね。 最終的にはgrep一覧と確認結果をレポートするんだけど、当たりを付ける時は 自前のスクリプト使ってる。 抽象的な入力を対話式に行って解析出来るツールが欲しいなぁと思うこの頃。 誰か作ってません?
prolog?
567 :
565 :2006/02/25(土) 02:35:29
>>566 あー、そういうアプローチもあるねw
自分が考えているのは、もっとバカチョンなやつ。
理想は自然言語をINPUTとして扱えるとか。
チームで使うのに、Prolog覚えるのは敷居を上げてしまうので
普及しない希ガス。
Eliza?
569 :
565 :2006/02/25(土) 02:53:28
>>568 それやりすぎだしw
つか、相当マニアックだなおい。
文章は命令形式で良いと思うんだ。
list param CFoo::m_bar1 when CFoo::m_bar2 == 0
見たいな感じ。全然自然言語じゃないな。やっぱ形式言語がいいかw
SQLみたいだと良いかも。
すまんな、求めているものが変わってきたw
死ねよ
571 :
デフォルトの名無しさん :2006/02/25(土) 11:59:25
こうして、またひとり Ruby ユーザが増えました。 めでたしめでたし。
572 :
デフォルトの名無しさん :2006/02/25(土) 13:34:49
>>569 こんな感じだろ
もしお金が10億あれ場合
会社を辞める
それ以外の場合
銀行を襲う
以上
>>572 ElizaよりMedicが必要な希ガス
上のほうにあった
コンパイラ入門 C#で学ぶ理論と実践 ソフトウェア実践講座
冨沢 高明 (著)
http://www.amazon.co.jp/exec/obidos/ASIN/4797331690/qid=1140946035/sr=1-1/ref=sr_1_10_1/250-3599959-2832238 マクロアセンブラのコードを吐く「ジェネレータ」の説明に60ページほど費やしてました。
このコードをインラインに展開するツールも添付されてます。
現在MS社の上級社員?である著者がアメリカの大学で行っていた講義の中身を再編集した本らしいです。
MS製品の開発環境の使い方から書かれてあるので
手元にC#があれば便利ですが、C++が使える人には多分問題でないでしょう。
Javaのバイトコードを吐く「スモールコンパイラ」本と同程度の内容ですが、
類書でマクロアセンブラのコードジェネレータまで扱う本はあまり無かったのではないでしょうか?
やる気のあるアメリカ人大学生相手の講義が元ネタなので内容はずっと真面目で、
著者は特に情報工学部の実習本・TAのためのガイド本を意識されておられるようです。
ただ、アセンブラ「ジェネレータ」部分ですが、複雑なテクニックは使っていないはず
なので、「俺はCのソースを見るだけでアセンブラのコードが頭に浮かんでくる、
これまでにコンパイラはいくつも書いてきた」、という方やRuby厨は買う必要ないと思います。
インタプリタやスクリプト言語の作成から、コンパイラの作成へとステップアップしたいが
アセンブラの勉強がどーにも…、という方には喜ばれる内容だと思いました。
上のほうにあった
コンパイラ入門 C#で学ぶ理論と実践 ソフトウェア実践講座
冨沢 高明 (著)
http://www.amazon.co.jp/exec/obidos/ASIN/4797331690/qid=1140946035/sr=1-1/ref=sr_1_10_1/250-3599959-2832238 マクロアセンブラのコードを吐く「ジェネレータ」の説明に60ページほど費やしてました。
このコードをインラインに展開するツールも添付されてます。
現在MS社の上級社員?である著者がアメリカの大学で行っていた講義の中身を再編集した本らしいです。
MS製品の開発環境の使い方から書かれてあるので
手元にC#があれば便利ですが、C++が使える人には多分問題でないでしょう。
Javaのバイトコードを吐く「スモールコンパイラ」本と同程度の内容ですが、
類書でマクロアセンブラのコードジェネレータまで扱う本はあまり無かったのではないでしょうか?
やる気のあるアメリカ人大学生相手の講義が元ネタなので内容はずっと真面目で、
著者は特に情報工学部の実習本・TAのためのガイド本を意識されておられるようです。
ただ、アセンブラ「ジェネレータ」部分ですが、複雑なテクニックは使っていないはず
なので、「俺はCのソースを見るだけでアセンブラのコードが頭に浮かんでくる、
これまでにコンパイラはいくつも(心の中に)書いてきた」、という方は勿論買う必要ないと思います。
インタプリタやスクリプト言語の作成から、コンパイラの作成へとステップアップしたいが
アセンブラの勉強がどーにも…、という方には喜ばれる内容だと思いました。
576 :
デフォルトの名無しさん :2006/02/26(日) 22:27:19
上のほうにあった
コンパイラ入門 C#で学ぶ理論と実践 ソフトウェア実践講座
冨沢 高明 (著)
http://www.amazon.co.jp/exec/obidos/ASIN/4797331690/qid=1140946035/sr=1-1/ref=sr_1_10_1/250-3599959-2832238 マクロアセンブラのコードを吐く「ジェネレータ」の説明に60ページほど費やしてました。
このコードをインラインに展開するツールも添付されてます。
現在MS社の上級社員?である著者がアメリカの大学で行っていた講義の中身を再編集した本らしいです。
MS製品の開発環境の使い方から書かれてあるので
手元にC#があれば便利ですが、C++が使える人には多分問題でないでしょう。
Javaのバイトコードを吐く「スモールコンパイラ」本と同程度の内容ですが、
類書でマクロアセンブラのコードジェネレータまで扱う本はあまり無かったのではないでしょうか?
やる気のあるアメリカ人大学生相手の講義が元ネタなので内容はずっと真面目で、
著者は特に情報工学部の実習本・TAのためのガイド本を意識されておられるようです。
ただ、アセンブラ「ジェネレータ」部分ですが、複雑なテクニックは使っていないはず
なので、「俺はCのソースを見るだけでアセンブラのコードが頭に浮かんでくる、
これまでにコンパイラはいくつも書いてきた」、という方やLisp厨は買う必要ないと思います。
インタプリタやスクリプト言語の作成から、コンパイラの作成へとステップアップしたいが
アセンブラの勉強がどーにも…、という方には喜ばれる内容だと思いました。
577 :
デフォルトの名無しさん :2006/02/26(日) 22:56:34
上のほうにあった
コンパイラ入門 C#で学ぶ理論と実践 ソフトウェア実践講座
冨沢 高明 (著)
http://www.amazon.co.jp/exec/obidos/ASIN/4797331690/qid=1140946035/sr=1-1/ref=sr_1_10_1/250-3599959-2832238 マクロアセンブラのコードを吐く「ジェネレータ」の説明に60ページほど費やしてました。
このコードをインラインに展開するツールも添付されてます。
現在MS社の上級社員?である著者がアメリカの大学で行っていた講義の中身を再編集した本らしいです。
MS製品の開発環境の使い方から書かれてあるので
手元にC#があれば便利ですが、C++が使える人には多分問題でないでしょう。
Javaのバイトコードを吐く「スモールコンパイラ」本と同程度の内容ですが、
類書でマクロアセンブラのコードジェネレータまで扱う本はあまり無かったのではないでしょうか?
やる気のあるアメリカ人大学生相手の講義が元ネタなので内容はずっと真面目で、
著者は特に情報工学部の実習本・TAのためのガイド本を意識されておられるようです。
ただ、アセンブラ「ジェネレータ」部分ですが、複雑なテクニックは使っていないはず
なので、「俺はCのソースを見るだけでアセンブラのコードが頭に浮かんでくる、
これまでにコンパイラはいくつも書いてきた」、という方やLisp厨は買う必要ないと思います。
インタプリタやスクリプト言語の作成から、コンパイラの作成へとステップアップしたいが
アセンブラの勉強がどーにも…、という方には喜ばれる内容だと思いました。
どうした? どうした? どうした? どうした?
同じファイル内のdiffを取るツールって時々欲しくなるよね。 エディタ組み込みのスクリプトで書くのも面倒だし。
581 :
デフォルトの名無しさん :2006/02/27(月) 22:05:37
>>580 perl : Algorithm::Diff
Python : difflib
>>579 コンパイラ屋なら差分くらい自分で抽出せい
上の本、買っていいんじゃない?
>>582 プログラマは無駄を嫌うので、
出来る・出来ないに関わらずやりたくない。
とりあえず最後の577だけ読んだ。
そんなレスも考えたら凄い無駄だな
そして
>>585 も…
「いまどきのプログラム言語の作り方」って本を読んでるんだけど、サンプルコードがJavaで 書かれているにもかかわらず、インターフェースがまったく使われてない。 そういうもの?
インタフェースは仕様を記述するものだからな 作者は仕様を考えたりできなかったんだろう
588 :
デフォルトの名無しさん :2006/02/28(火) 11:20:56
名に要ってんだコイツ
590 :
デフォルトの名無しさん :2006/02/28(火) 12:47:34
↑意味不明もここまで来ると病気だろう
591 :
デフォルトの名無しさん :2006/02/28(火) 14:00:13
2つ上をさす時は 矢印使わないほうが紛れが無くて良いと思うよ。
そうだな。こういう風にな。
>>591 はバカでアホすぎ。死んだ方がいいよ。
おまえらいい加減にしろ
594 :
591 :2006/02/28(火) 15:39:26
まぁ相当悔しかったんだろうな。
お前だろwww悔しかったのww
wはいい火病メーターだなホント
ほらww悔しかったから反応しちゃってるwww
ListやConnectionの仕様をみると、確かにこりゃインタフェースだと思った。 ClonableやAppendableとかはなんかインタフェースとは違う気がする。(使うないう意味じゃなくてね)
という悔しさいっぱいの反応でした
自作自演で荒らしてるのか?
自演じゃないならある意味チキンレースだな 相手に放置されちゃった方の負け 反応が無くて俺のこのレスが最後になったらどうしよう、と ハラハラしながら送信してるんだろうな、どっちも
見当違いな意見だ。 逆だ逆。自分が最後じゃないと悔しいんだよ。こういう手合いは。
606 :
デフォルトの名無しさん :2006/02/28(火) 23:42:26
また、rubier と lisper かw まったくお前らって(ry
>>606 もう Ruby や Lisp じゃ釣れない事を学習しろ。
(・∀・)ニヤニヤ
以前Flex/Bison使うと生書きするより実行速度が遅くなるって誰か言ってたけどいったいなぜ? それともデマ?
そりゃターゲット言語に特化すれば速くなるでしょ。何でデマ?
611 :
デフォルトの名無しさん :2006/03/01(水) 07:17:46
もうだれかVIPとか言う言語つくるしか
>>610 よーわからんけどFlex/Bisonに勝てそうな気がしない。
なんかすごい効率的にやってそうじゃん。
>614 >381
がいしゅつでしたか (><)
617 :
デフォルトの名無しさん :2006/03/02(木) 19:41:51
俺言語でなく姫言語というのはないのか?
618 :
デフォルトの名無しさん :2006/03/02(木) 22:32:39
プログラミング言語 姫
彼女に捧げるプログラミング言語 Love そんな彼氏に捧げるプログラミング言語 氏ね
620 :
デフォルトの名無しさん :2006/03/03(金) 19:52:46
love か、いいネーミングだ。 プログラミング言語 ORZ
>>619 ウィザードしか使えないくせによく言う(都市伝説ですか?)
>>618 >プログラミング言語 姫
これの勉強を始めるのは「姫はじめ」か。
入門書「はじめての姫」
参照カウンタやマークスイープ型より効率のいい方法のGC考えた。 循環参照でも問題ないし、スループット、レスポンスともにほとんど アプリの動作を邪魔しないし、効率は参照カウンタ方式の99%は 出る見込み(Cで普通にmalloc,freeする程度の負荷以上はかから ない)
同じことをやってるヤシはいると思うが、まあガンガレ
Cのようにポインタをビット操作できてしまう言語ではGCの実装は無理でOK?
コンサバなものならいくらでもあるわけだが…
↑C「で」実装するではなく、Cのような言語にGCを搭載する、の意
C/C++ 用の GC があるの知らんの? 現状だってプロセスのメモリ空間の中はスタックとか読み込んだライブラリを置く所とか 色々細分化されている訳で、そういう所は好き勝手弄っちゃダメでしょ。同じように GC ヒープ領域を用意してあげれば良いんじゃないの。
>C/C++ 用の GC があるの知らんの? 通常のmallocやnewに対応した完全に汎用的なGCがあるの? 原理的に絶対無理だと思うんだが。 やっぱGC専用のポインタが必要ってことだよね。
>>628 >>630 ポインタのアライメントを利用して下位1ビットに情報を…
とか、その手の事をやられるとお手上げ。
はいはい、C++/CLIでもやってなさいボウヤ
>>632 >ポインタのアライメントを利用して下位1ビットに情報を…
もともとこういうことをするのは、C言語でも未定義なのでする奴が悪い、でオワリ
JavaでできていることがCで出来ないはずはないだろ。 アセンブラに落とす時にJavaのVMみたいに複雑なメモリ管理を織り込めばいいんだから。 お前ら、言語仕様とABIを混同してないか?
この話は仕舞いだな。
>>635 >JavaでできていることがCで出来ないはずはない
JavaがGCできるのはCよりも操作の制約が強いからだ
char *a = malloc(100);
int b = (int)a; // これの善悪は別問題として
a = 0;
ってやってaからの参照がなくなった時点でGCが掃除しちゃったら
まずいだろ。プログラムとしてはbから復元して利用することもあり
えるから。
よってこういうことが出来る素のCには、「触らないでねポインタ」を
新たに導入しないとGCは装備できないんじゃねーか?
だからコンサバ。
わかんないおれのためにもっとくわしく。コンサ何とか型のGCって名前は 聞いたことあるけど、そんなにすごいもんなのか?
640 :
632 :2006/03/05(日) 21:00:00
>>641 リンク先見たけど(情報どうも)結局
>>637 をやられると吹き飛ぶじゃん。
回収し損ねは許容するとして、ポインタを隠蔽して分解して
持っておくようなことはやったら駄目ってことだね。
よって「触らないでねポインタ」を導入しないことには回収しそこねや
ハングアップを防止することは出来ないというのがオレの結論。
643 :
デフォルトの名無しさん :2006/03/05(日) 21:18:53
まぁ、ばかはどの刷れにもいるけどなw
>>637 でGCがおかしくなるって言ってる奴は機械語レベルの表現を
全然理解できないんだろうなあ。
うむ。
まあ、マジックリストに対応できるようなGCは それなりに大変だろうね
たしかCからJavaを呼べるはずだから JavaはCのManagedコードライブラリと見ることも出来る
はあ?
>>642 スマソ。
>>641 の下のリンク先は読まない方が良いや。
適当にググって貼っつけただけだから。何じゃこりゃ。
>>644 もうちょっと詳しく。当方アセンブラプログラマだ。
int b = (int)a;
a = 0;
とやったあとでb をビットレベルで分解したらどうにもならんと思うが、
コンサバ型だとそうならない魔法があるのか?
bを再構成してポインタに戻してアクセスしたら開放されてるって
いう状況は起こりうると思うが。
だんだん条件が増えていく件。
そりゃさすがにどうにもならない。
とはいえ、ビットレベルで分解→後で計算によって得た値が
セマンティクスの面で有効なポインタかどうかは疑問ではある。
>>652 つか、「原理的に無理」で思考停止してるから。
>>652 議論に勝つために、徐々に条件を変えていくんだよなー。
2chはこういう奴ばかり。
議論に勝った所で何があるわけじゃないんだけどね 俺の知らないところで何かあるのかな?w
>>654 議論に勝つためというより、物知らずというか
ものの評価基準が幼稚なだけだと思われる。
えーと、どこで笑えばいいのかな?
ふーん。
>>656 コンサバティブ GC を初めて知ったレベルなら仕方が無いんじゃないの。
まだ当たりが付けられないだけだと思う。
あのー
>>642 の時点で分解って書いてるんですけど
>>652 651じゃないが、わざわざポインタを整数として扱おうとするなら、
その後なんらかの演算を行うんじゃないかってのは
容易に想像つきそうなものだが。
ま、演算は演算させておいて、ポインタはポインタのまま
別に持っておくとか手はありそうだけど。
重箱の済みつつき過ぎ、話も出来やしないよ。
>>662 はまともな人だね
いや、
>>631 なんじゃないの。
631を無視して637だけなら対応したGCを書けばいいだけの話。
>>662 演算をするかどうかじゃなくて、再代入するかどうかが問題でしょ。
コード辺だけでそこまでケアしろと?
再代入というか、計算で合成した任意の値をアドレスとして アクセスできるかどうかだね。 GCはプログラム中のデータからトレースできるものを残して それ以外を回収するってことだから、 可能な演算の集合を定義してルートとなる即値だけでなく その集合に含まれる演算で計算可能な値もアドレスとして コンサバティブに扱うことをトレースとすればいいだけの話。 だから、むしろ「原理的には」GCは設計可能。「原理的には」だけど。
ちょっと修正 ルートとなる→アドレスとなる 「原理的には」GCは設計可能→「原理的には」完全に汎用なGCは設計可能
そのGC、何一つヒープを開放してくれなさそう
>>666 想像しろよ。書いてるもんが100%だと決めなきゃ話できないようじゃ
CPUと一緒じゃないか。人間だろ?
>>662 は十分想像可能な範囲。
現に出来てる者が居る以上、それが出来なかった奴は気がまわら
ないということ。
なんで整数に持ってきたいのか用途は色々あるだろ。まあ想像でき
ないかもしれないがな。
671 :
デフォルトの名無しさん :2006/03/05(日) 23:47:32
まぁなんらかのお約束は必要だよ
>>669 コンサバだからねw
演算の集合は全域で同一である必要はないわけで、
適当にヒントを与えて限定してもいいし、GCがコードを解析してもいい。
普通はそこまでやってらんないから演算は値をそのまま使う
という一択だと考えるだけで。
>>670 幾らでも拡大解釈しようはあると思うけど、GC の仕組みを知っていれば
そちらには振れないんじゃないかというのが俺の解釈だっただけだよ。
ま、GC の仕組みを知っていれば、最初からこんな質問も出なかった
だろうけど。
674 :
デフォルトの名無しさん :2006/03/06(月) 00:36:57
なんか理論の飛躍が Ruby vs Lisp の時と似ているなぁ
同じ面子でグルグル回してるだけだから
>〜俺の解釈だっただけだよ 後から言うなよ
後から想像しろとか言ってきたのアンタじゃん。俺にどうしろと?? もうこの話は終わったんだから絡んで来るなよ。
>>677 > 俺にどうしろと??
恐らく謝罪を要求してるのでしょう :-)
あなたをやり込めたい一心であらゆる論理を適時付け替えて頑張っているのですから、
彼のプライドを満たすためにも謝ってあげてはどうかと思います。
>>679 笑えない現実に対する対処の話ですから、笑う箇所などありませんよ。
そんなことも読み取れないのですね :-)
>>680 よし、じゃ俺のプライドを満たすためにおまいが謝れ。
エェェェェェェ(;´Д`)ェェェェェェェエ
/\___/\ / / ヽ ::: \ | (●), 、(●)、 | / ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ | ,,ノ(、_, )ヽ、,, | < まーた始まって、終わった。 | ,;‐=‐ヽ .:::::| \___________ \ `ニニ´ .:::/ /`ー‐--‐‐―´´\
まけず嫌いで粘着なキチガイが暴れているスレはここですか
ぶるんぶるん体操 ぶるんぶるんと僕は言う ぷるんぷるんとあなたは笑う そんな2人は、フォーエバー 世界の端から今日は そんなあなたはお毎度さん 今日もぶるんぶるん体操始まるよ ぶるんぶるん、ぷるんぷるん ぷるんぶるん ぶぷぷぷぷぷ *四谷街道繰り返し
このスレでオリジナル言語作って公開してる人って何人ぐらいいるの?
俺的には、スクリプトはあくまで手段。目的は別にある。 だからスクリプトだけを公開する事は、俺にはありえん。
現在の人数=0
>>690 ところで、目的って何ですか?
現在の人数=1 ←どういうカウントだこれは?
>>690 ぼくちんも知りたい。その手の業界ってけっこうあるのかな?
>>693 あーそういう意味だったのか。
じゃリセット。
現在の人数=0
現在の人数=1 でもどこだかは教えない(w
現在の人数=2 ……まあ、趣味の領域ですが。
>>691-692 単に自分の作りたいソフトを作るために、
下ごしらえでスクリプトを作ってるだけだよ。
現在の人数=3 ……自分専用ツールとしてはじめたのがきっかけです。 私も、どこかは内緒w
>>697 マクロみたいなの搭載してるって意味だよね。
それとも何か目的のソフトを作るための言語を作ってるって意味?
>>700 マジで?言語作ってる間に既存の言語でソフト作っちゃったほうが早いんじゃないの?
>>701 プログラマの癖に手段と目的を取り違えたことがないの?
>>702 くせにとは何だ!くせにとは!
お前こそ●●のくせに、いい気になるなよ。
>>703 なんだとこの●●●!
お前だって●●●の●●●だろうに!●●●●!
の●●の ↑鼻と目に見えた orz 以下、何事も無かったかのように再開。・゚・(ノД`)・゚・。↓
>>702 こいつは、真性の●●●●。
つまり、●●w
あるいみ、●●●●●● ruby ● lisp ●●w
>>701 理想が高すぎる事と、自分自身の能力不足が原因なんだよ。
オブジェクトが多くなりすぎると、内容を追い切れなくなる。
つか、状態変位やイベントトリブンは、漏れには理解しづらい‥‥orz
で、主に、個々の処理を独立させて、別個にまとめて見られる
ようにするためにスクリプトを使ってる。
>>709 一言で言い表すと、
「グローバルオブジェクトなんて嫌いだぁ・・・
全部ローカライズ化してやるぅ・・・・」
ってな感じでつ。orz
ローカライズ化? 頭痛が痛いだな。
英語は嫌いだぁ・・・w
>>709 >つか、状態変位やイベントトリブンは、漏れには理解しづらい‥‥orz
>で、主に、個々の処理を独立させて、別個にまとめて見られる
>ようにするためにスクリプトを使ってる。
ちなみに、エミュレータのレジューム機能が元ネタ。
つ〜か、スレッドの場合は同期の管理が面倒なんだよな。
OSとエミュレータと、エミュレートされるソフトの動作を、 全部一つの実装で実現させたい、ってな所。
ネタが特許級に見えるのは気のせいか? 出願前に公開すると無効なはずだが・・・
レジューム機能付きのエミュレータが出る前なら、可能だったかもね。
>>714-715 似たようなネタのスクリプトなら実在するから探して味噌。
扱いやすいかどうかは別だが。w
構文規則で、よくこんな表記つかってるけど A → B,C 矢印逆じゃないの? なんか、すげ〜違和感あり。
なにゆえ
「生成」規則だからね。もともとのオートマトン理論では 規則によりどういった文章が生成されるかを考えていたから。 構文解析は、逆に与えられた文章がどういう生成規則を たどって作られたかを求める問題だ。その過程で生成規則を 逆向きに使って還元を行う。 だから構文解析だけを考えていたら、矢印が逆だと思うかも しれんね。
>>718 別に逆でもいいけど、たぶんおまいは逆にすると今度はそっちに違和感を感じるんだろ。
A → BC | DE
ってのは
A is defined as BC or DE
A expands to BC or DE
A generates BC or DE
A is rewritten as BC or DE
逆方向には
BC or DE can constitute A
BC or DE can be reduced to be A
などなど、色々な読み方ができる。
A ← BC | DE を A is defined as BC or DE と読んじゃいけないのかよ。
>>722 いいよ別に。咎めはしないけど真似してくれる人は少なそうだね。
っていうか矢印の向きなんてどーでもいいし。 矢印以外の記号だって使われるわけだし、勝手にしろとしかいいようがない。
そんなに揉めるくらいならこっちを指せばいい A m9(^Д^) BC | DE
>>726 ワロタw
でも、確かに代入文とかも A=B+C は A->B+C とは書かんな
どうみても A<-B+C だな。
A ブギャー BC or DE と読むのか。勢いがあって好いな。
A pgr BC or DE なんかよく分からんが格好良いぞ
yaccやbisonでは、演算子の順位を指定することができますが、これもLALR(1)で必要なのでしょうか。 コンパイラの本を読むと、LALR(1)の説明では生成規則しか使わず、演算子の順位を含めたaction表やgoto表の作り方は特に書いてないように思います。 もしかして、yaccやbisonではLALR(1)と演算子順位解析法との併用なのかなと思ったりするんですけど、どうなんでしょうか? なお、やりたいことは自前で簡単なパーサジェネレータを作ることです。LALR(1)のアルゴリズムを勉強しているんですが、演算子の順位がまるででてこないので、どうやるんだろうと疑問に思ってます。
>>730 コンフリクト時にシフト/還元のどれを選択するかでうまいことやっている。
ドラゴンブックに説明があったかもしれない。
>>730 > もしかして、yaccやbisonではLALR(1)と演算子順位解析法との併用なのかなと思ったりするんですけど、どうなんでしょうか?
そうです。
expr → expr + expr | expr * expr
っていう生成規則はLALR文法ではないけど使えた方が便利でしょ。
bisonってGLRにならなかったっけ?
bisonの入力になりえる文法はGLRだろうけど(自信なし)、あいまいさを解決するアルゴリズムが違うからパースした結果が変わっちゃうんじゃないの? GLRはshift/reduceコンフリクトでreduceを優先するから、あいまいなぶらさがりelseが遠い方のifにくっついちゃう。
>GLRはshift/reduceコンフリクトでreduceを優先
ちがうよー。
コンフリクトでshiftとreduceの両方追いかけるのがGLR。
>>734 GLRもできるけど
>>732 をGLRで扱うと
+の優先度が高い場合の構文木と*の優先度が高い場合の構文木の
両方を解析結果として得る話になるから、
演算子の順位指定の話とはからまないと思われ。
737 :
730 :2006/03/11(土) 22:13:54
>>731 ,732
どうもありがとうございます。
けっこう複雑なことやってるんですね。
作るの自信なくなってきたな。。。
がんがってくれい なせばなるよ
既に慣れてしまってる方ばかりだろうが、 還元ということばに違和感を感じる自分。 どうせなら、還元よりも換言だとおもう。
それだと向きを含意しないから、reduceの語感が出ないなあ。
これはなかなか面白い (厭味じゃなくて)
>>739 は明治時代辺りに生れてればよかったのに
コンサバって何?
松平健が歌ってるヤツだろ。
744 :
:2006/03/13(月) 08:44:18
しってる言語はJavaなんでJavaのバイトコードに変換する本当に簡単なコンパイラ?つくりたいんですが、古い本でも大丈夫ですか? Programming for the Java(TM) Virtual Machineって本見つけたんですが1999年出版なんです。バーチャルマシンの仕様とかは変わってないのですか?
746 :
:2006/03/13(月) 22:17:19
747 :
デフォルトの名無しさん :2006/03/17(金) 23:50:51
>>726 1から見てみたが、お前のレスが一番ワロタw
748 :
730 :2006/03/18(土) 08:20:23
C言語とかで、'*' や '&' がポインタ演算だったり四則演算だったりビット演算だったりするけど、 このように1つの記号が複数の意味を持つ場合、字句解析で別のトークンを返さないといけないのでしょうか。 それとも構文解析時に判断できるものなのでしょうか。 例えば仮引数に *p とあれば、これはポインタを意味するための * であり、四則演算ではないとすぐにわかります。 しかし、*p1 * *p2 などとあった場合、ひとつの式の中でポインタを表す * と四則演算を表す * とが混じってるんですけど、こういったものはどうやって別物であると判断しているのか不思議です。
>>748 字句解析では区別せず、構文解析で判定する。
教科書で、-1 - -2 のような式を扱う例を探してみて。
前置子やね
そういうやり方をするから、vector<vector<int>>がコンパイルできなかったりするw
752 :
http://www.vector.co.jp/soft/win95/util/se072729.html :2006/03/18(土) 19:03:18
TextSS のWindowsXP(Professional)64bit化おながいします もしくは64bitにネイティブ対応したテキスト置換ソフトありますか?
753 :
デフォルトの名無しさん :2006/03/18(土) 19:50:35
なぜ、関係演算子は結合を持たない例が多いんだろうか? 単純に 3<=x<99 とか書けてもいいとは思うんだが、
C がそうやってるから右に習えだと思う
10 < x >= y < 20 <= z > 0 とかあったら何なんだか困るじゃん Lispだと (< 10 x 20) とか書けるけどね
演算子で思い出したけど おれは perl の =~ を代入演算子だとばっかり思ってたから $a =~ s///; はいいけど $b =~ m//; の意味がわかんなくなって混乱してた…
>>754 とりあえず、C で 3<=x<99 はコンパイル通るぞ。
コンパイル通るから何?
>>752 いっぺん死ねって書いてもよまねぇだろうな(w
>>753 確かに
Mathematicaは書ける、って言うか書けないと数学ソフトだし不便すぎる。
スタックマシンでスタックが溢れそうな時、スタックを reallocするのと 別に領域を確保するのとではどっちが一般的ですか? 前者はスタックが一つの領域でないといけないのと reallocのコストが欠点で、 後者はフレームの削除などを絶対アドレスで指定しないといけないので 継続を作る時にちょっとめんどくさいのが欠点だと思います。
762 :
デフォルトの名無しさん :2006/03/19(日) 20:27:31
>>760 へぇ、書ける言語あるんだね。しらなんだわ
763 :
デフォルトの名無しさん :2006/03/19(日) 21:19:10
おそらく専用でない一般高級言語だと、Rubyあたりが実装しそうな木ガス
Pythonがそうだった記憶がかすかに
>>761 おれなんかは自家製超高速malocを作ってダブルリンクリストでスタック作ってます。
スタックに無茶な要求するにはこれが一番かなとか思ってたりします。
>>762 おれは、例外を作ってもこの表現ができるべきだと思うのですが、みんなどう思っているのだろうか?
絶対見通しいいとおもうんだけどな・・・
ダブルリンクリストだと継続が困らないか? (スタックがツリーになるから) 継続使わないならシングルリンクリストでも良さそうだが。
>>766 ダブルでないと削除がややっこしいです。
単なる好奇心だけど、途中のスタックフレームを削除したいってどういう場合ですか?
769 :
761 :2006/03/19(日) 23:11:42
セグメント、オフセットを使えば相対アドレスでもスタックを分割できることに
気づきました。
>>765 セグメントテーブルをリストにするってことでしょうか?
最初からセグメントテーブルのサイズを決め打ちして配列にしても良い気がします。
リストだとアクセスにコストがかかりますし。
確かに途中を削除するっていうのならリストの方がいいですが、どういう状況なんでしょうか。
>>765 ヒープへの参照をスタックに積んでスタックそのものは小容量ですまそうって方向じゃないんだ?
無知な俺が、話ぶった切って恐縮ですが リフレクションってどんな構造で作るの? javaぐらいみっちり仕込まないと不可能?
>>771 例だけど、
scheme(L)でscheme(L')インタプリタを書いて、L'からLを操作したり、L'自身の環境情報などを
取得できるように作る。このときL'からLをいじったことによってL'の動作に影響が及ぶことを
causal connectionという。
言語、用途により様々だけど、メタレベルに何を求めるのかで、実装や仕様が変わると思う。
>>771 どんな構造っつーか、単にオブジェクトやクラスに関する情報を、実行時に取り出せる(アクセスできる)仕組みを用意するだけ。
ただそれだけだから、あんまり構造がどうとか悩まなくていいよ。
リフレクションの仕組みや構造について考えるなら、まずは言語の仕組みについて知らないと。
それがわかれば、リフレクションの仕組みはおのずとわかる。
774 :
デフォルトの名無しさん :2006/03/23(木) 14:28:00
775 :
デフォルトの名無しさん :2006/03/26(日) 10:03:01
助けてください。 ↓こんな文章があって要はfortran90でない場合一番下のfcに何か入力しろという意味だと思うのですが、 なんと打ちこんだらよいのですか?fortran77なので打ち込まないといけないのはわかっているのですが、 全くこのあたりの知識がないのでわかりません。 -------------------------------------------------------------------- #if your machine's fortran compiler command is not "f90", need to set # # the following macro to adjust. # --------------------------------------------------------------------- FC=
FORTRAN より C
778 :
775 :2006/03/26(日) 13:29:06
ありがとうございます。 ですが入力してもだめでした。 そこで方向転換してfortran90のコンパイラをインストしたいのですが、 どこに転がっているのですか? windowsです。
書いてあるとおりのことすればいいじゃねぇかよ。
それともネタですか?
>>775
780 :
デフォルトの名無しさん :2006/03/26(日) 17:47:03
FC=f77 じゃあかんの?
ポインタ操作のできるスクリプト言語作りたい そゆーの既にある?
CINT?
>>775 訳してみた。
-------------------------------------
#手持ちのマシンにおいて、Fortranコンパイラのコマンドが "f90" でない場合は、
#次のマクロを設定する必要があります。
-------------------------------------
FC=
つまりだな、Fortranコンパイラのコマンドが例えばf77とかだったら、
FC=f77
と設定すればよい。
これ以上はスレ違いだから質問はやめたほうがよい。
とある対話型計算ソフトの入力行を横取りして先に字句構文解析したいんだけど perlだとParse::RecDescentがメジャーなの? 代入と()のネストくらいを1行ずつ処理できればいいので手で書いてもいいけど 昔yacc+bisonで遊んでたときみたいにまたBNF触りたくなった 割鶏焉用牛刀だが
>>785 yacc+bisonの経験あるなら、kmyaccはどう?
yaccの書き方そのままで、perlやjavaやjavascriptが使える。
ひとつ聞きたいんだけど、 2型言語の任意の位置に [] の組を挿入できるようにした文法って1型言語? 例えば 1+2 を変化させた 1[+2] とか [1+]2 とかを許容する文法なんだけど……
>>785 入力が小さい場合は Parse::RecDescent が手軽だね。外部ツールにくらべると
手軽さが違う。
790 :
デフォルトの名無しさん :2006/03/31(金) 18:10:09
よく、他言語のライブラリとか呼べる言語があるけど、 あれって事前に呼ぶ関数名を全て列挙して組み込んでるのですか?
普通マーシャリングしてるだけじゃないか
それは結局の所、「事前に呼ぶ関数名を全て列挙して組み込んでる」のでしょうか?
事前にわかんない場合はどうしてるんだとか思わないのか
違う
そういうのもあるし、そうじゃないのもある。
LALR(1)の文法をLL(k)に変えることって可能ですか?
>>793 事前にわからない場合でも呼べる方法ってありますか?
むむ、アセンブラですか! orz
いや、単なる例として出しただけだから...
引数の積み上げ方と呼出し後の処置さえ合ってればいんだから 簡単だろ
>>796 規則を増やして左再帰を消去して左括り出しするとか地道な方法しかなさそう(自動化するツールもあるのかな?)。
それで衝突が起こるならその文法がそもそもLLじゃない可能性もあるので、文法自体を修正する。
ちなみにLL文法ってLALR文法のサブセットだっけ?
LL(∞)⊂LR(1)は確かだったと思うけど、LR(0)は微妙だったような気が。
誰か教えて。
>>790 ,799
その言語のソースを読んでみようとは思わないのかな。
xyzzyのdefine-dll-entryとかRubyのdlモジュールはC++/Cだった。
804 :
デフォルトの名無しさん :2006/04/03(月) 21:46:49
コンパイラを書くのにオススメな言語を教えてください。 最近は、海外では関数型言語で書くのがはやっているみたいですが・・・ OCamlとか。 自分の一番慣れている言語!というのはなしの方向で。
>>804 yaccがあるからC! とか、JavaCCがあるからJava! ってのもなしの方向で?
ある程度以上メヂャーな言語なら、hogeCCの類いは存在するからねえ。
>>804 自分で作った言語でコンパイラ書くのがおすすめ
誰も使わないけどな。
elisp みたいな組み込み言語にすればオケ emacs 程の神アプリじゃなくても、ちょっと気の利いたツールの拡張言語にすれば それなりにユーザを獲得出来るんじゃない。
そういえば、情報処理学会の会誌でコンパイラの連載始まるみたいね。 COINS使うらしい。
812 :
デフォルトの名無しさん :2006/04/04(火) 01:28:00
>>807 そこまでいければ苦労しないw
と思ったけど、それもいいな。
GCCみたいに、最初はどこでもコンパイルできるミニマムなCでコンパイラを生成して、
そのコンパイラで自分自身をまたコンパイルして・・・と。
そういえば、マルチプラットフォームなコンパイラつくりたいと思ったら、
やっぱり、GCCのフロントエンド作るのが正解なんかね。
最初見たとき、中間言語がわけわかめだった。
他に方法ないすか?
>>812 >他に方法ないすか?
お前の知能じゃドレもムリ。
大人しくHSP使ってろ
HSPならできるんですか?
つまり、HSP最強
はいはいわろすわろす
>810 COINSはいつJavaに対応するのでしょうか? 図には書かれているのに…
>818 > Javaのフロントエンドは以下の方針で開発しているが、デバッグ中であるので、 > リリース版にはまだ入っていない。 だから公開はされてないんですね。いつからデバッグしてるのかちょっと不安…
820 :
デフォルトの名無しさん :2006/04/11(火) 18:25:41
>>818 参考になります。
ただ、自分の目指しているのは型なし&プロトタイプ指向ですので、やっぱりちょっと
ポイントが違うようですね。まあ、その違いを見るのも楽しいですが。
なぜ>383
どこかにJavaでかかれたCの処理系とかない? 自分で作ろうかと思ってるんだけど、結構大変そうだし。 自作するならSableCCあたりで作ろうと思ってる。 ASTを作るまでは楽だろうけど、その後が...。
>>823 どうもありがとう。学習支援用にインタープリタでも作ろうかと思って。
学会誌見るまでCOINSなんて知らなかった。
>>822 構文解析だけなら、JavaCCやANTLRなら有志によってCの文法定義ファイルが用意されている。
Cだけじゃなくて、JavaやXMLも用意されている。
JavaCCやANTLRのサイトをのぞいてみて。
どんなに遅くてもいいから、実装まで作った処理系のサンプルがほしい
>>828 感謝。実はSableCC用のgrammarを発見しました。
あとはASTを上からなめるようなものを書けばいいと思う。
あとプリプロセッサがないから手で書くか、IPAのを借りようかと思う。
>>829 完成したらソース公開するから期待しないで待ってて。
Javaで作るつもり。ライブラリはアドオン形式で。
C89も結構複雑だよねぇ。これがC99になったらと思うと・・・。
今公式サイト見たけどCOINSって錚々たるメンバー参加してるんだね。 国内のコンパイラの書籍で見かける人ばっかり・・・。
>>830 それを言うならC++0xになったらと思うと…
>>832 仰る通り。言語が複雑化すると処理系作る人は大変だね。
LL(1)で解析できる言語(Pascalとか)は素晴らしいなあ。
もっともそのせいで":="あたりで賛否両論になるわけだが...。
> もっともそのせいで":="あたりで賛否両論になるわけだが...。 どういうことですか?kwsk 代入演算子が = で、比較演算子が ==なら済む話?
>>834 ごめんごめん、深い意味はないのよ。個人的な感想。
個人的には":="が"="で、"<>"が"!="で、"="が"=="だったら
もっと好きになってたかもってことで。
#自分が最初に使った言語にもよるんだろうけど
>>835 それは、ホントに個人によるな。
俺の場合、= が代入なのはキモく感じる。
今は慣れたが、最初に言語を習うときに、既存の教育(数学)の常識と違うから。
代入は、:= とか <- とかの方がしっくりくる。
>>836 確かに。a = a + 1 なんて絶対成立しないもんね。
そういう意味では := や <- が支持されるのはわかるなぁ。
ただ、<> が等しくないというのはちょっと違和感?
後輩で「<>って大なりでも小なりでもないから等しいってことですか」って
マジで言ってる奴がいた(w
...なるほど深読みするとそうとも取れるのかと思ったよ。
<>と!=は好みがでそう。 個人的には!=という記号の対称性のなさが少し嫌かも。 それだったらprologのように=\=の方が好きだ。
<and>か<or>か、確かにどっちにも取れるよなぁ。
昔は"#"が不等号って時代もチョロットだけあったよね。
a := 3 は a: int = 3 の略だったりするのはちょっと萌え。
俺の知人がアドレスバーにあった ://www.com/?1=1+2 なよーなURL見て、 このサイト足し算もできないとんでもねー馬鹿だなって言ってたの思い出した この業界はとりあえず普通じゃないよね
>>842 というかURLの意味がわからないんだけど。
俺のプログラマでない友人も、x=x/3というのを見て、x==0と思い込んでた
844 :
デフォルトの名無しさん :2006/04/18(火) 23:17:02
洩れは if .. elsif を見て英語音痴だとおもたよw
"=="を定義の意味にすべきだと思う。
ウゼー、言語初心者が2,3人迷い込んでガタガタ騒いでやがる
自称熟練者さんは理論にもさぞお詳しいのでしょう。
演算子の記号の意味なんか言語の仕様書読めば済む話 スレ違い
自称熟練者さんは「演算子の記号の意味」が理論だと思っていらっしゃるようです。
つーか何で = が代入なんだよ
代入要らない。
代入って古いんだよね ダサい きもい
そっか。
知り合いに「Pascalの代入演算子が:=なのは文法をLL(1)にするためだ」って 力説してるヤツがいたなぁ。 つーか、トークンの切り出しは字句解析の仕事で、 LL(1)は構文解析の話だと思うのだが。
本によるとLALR(1)文法は手書きには向かないって書いてあるんだけど Rubyとかの言語がコンパイラコンパイラで作られてるのはその為?
>>857 その本によるとなんで手書きに向いていないか書いてある?
>>857 LALR(1)を手で書こうとすると地獄を見るよ。
再帰下降の文法がどれだけ簡単か感謝するようになる(w
LL(1)は適用範囲が狭いけど書きやすい。 LALR(1)は適用範囲が広いけど書きにくい。 すげージレンマです!
862 :
デフォルトの名無しさん :2006/04/20(木) 21:58:00
flex 使ってると、このようなメッセージが出るんだけど、 この関数を定義しないようにするにはどうすればいいでしょうか? lex.yy.c: warning: 'yy_flex_realloc' defined but not used
#undef yy_flex_realloc
865 :
デフォルトの名無しさん :2006/04/22(土) 10:56:10
HSPもyaccとか使ってんのかね?
>>867 どうでしょう。HSPって文法は何?LALR(1)?
HSPは字句解析とか構文解析みたいな、まともな理論使ってなさそうな雰囲気 例えるなら紙芝居エロゲのシナリオスクリプト
エロゲスクリプタもbisonで書いてるの多いと思うが
コンパイラを書くのに最も適した言語って何ですかね?
最初の立ち上げの言語のことか? それともツール込みの事か? おいらは最後には自己記述するから自分自身とかって事になるもんだと思ってるんだけど。
コンパイラの仕事ってのは、大半がツリーからツリーへの変換だから、 ツリーを弄りやすく、静的な強い型検査をし、メモリ管理がらくちんな 言語が向く。ML系かHaskellでどうぞ。
コンパイラの仕事ってのは、大半がツリーからツリーへの変換だから、 ツリーを弄りやすく、強力なマクロを持ち、メモリ管理がらくちんな 言語が向く。LispかSchemeでどうぞ。
コンパイラの仕事ってのは、大半がツリーからツリーへの変換だから、 ツリーを弄りやすく、すべてがオブジェクトで、メモリ管理がらくちんな 言語が向く。Ruby でどうぞ。
コンパイラの仕事ってのは、大半がツリーからツリーへの変換だから、 ツリーを弄りにくく、貧弱なマクロを持ち、メモリ管理がたいへんな 言語は向かない。CかC++はやめとけ。
でも結局yaccとc使うんでしょ
yaccとCをつかうと何が有利なのでしょう?
なにも。
あれを使えばいい、とか、これを使えばいい、とか言ってるだけのやつはいなくなってもいいよ。
882 :
デフォルトの名無しさん :2006/04/30(日) 16:31:29
そもそも、ここで具体的なことを質問に来るやつなんていないじゃない? スレもここで終了してもいいんじゃないかな? というわけで ======= 終 了 =========
久しぶりに終了厨を見たな
時代的にはHaskellですかね? でも習得が簡単なのはLisp? うーん迷う。
>>884 お前が言いたいのはLispじゃなくてSchemeだろ?
>>875 では、何故Rubyは、Rubyで書かれていないのですか?
コンパイラはブートストラップできるけど、スクリプタは出来ない希ガス
ほとんどの速いLISP/Schemeはそれ自身で書かれてるけど コア部分はCだったりする。 移植考えた場合gccでミニ言語構築してからブートストラップかな。 開発者はELFとかPEまで面倒見たくないのが本音。
889 :
デフォルトの名無しさん :2006/05/01(月) 08:26:55
>>886 こういう馬鹿がたまに湧いてでてくるようだが、
おっとそろそろ連休かぁw
言語にはそれぞれの目的があるのも分からんの?
アセンブラからベン教しなおしたら?
.o0(下らない煽りを入れるだけなら、書き込まなきゃ良いのに・・・)
886じゃないけど、ブートストラップする目的の一つには言語の記述力の高さを証明するって意味合いもあるんじゃまいか。 rubyのことはよく知らないけど、もしパフォーマンスに関して考慮しないとしたら、rubyは自己記述できるだけの記述力はあるの?
ruby で ruby を記述することはできるっしょ。
893 :
デフォルトの名無しさん :2006/05/01(月) 19:54:21
ruby を用いれば(理論上は)なんでも記述できる。 ただ、パフォーマンスが問題なだけ。
>>893 >ruby を用いれば(理論上は)なんでも記述できる。
証明は?
遅いってのは、それだけで罪だと思う
896 :
デフォルトの名無しさん :2006/05/01(月) 20:09:17
早漏よりはましだと思うけどね
>>893 あまり良い例じゃないかもしれないけど、GC は Ruby で書けないんじゃない?
GCも書けないんじゃチューリング完全といえるのか?
書けるよ^^;
900 :
897 :2006/05/02(火) 00:07:17
>>898 まぁ、そういう意味では書けそうかな。
仮想的なメモリの様な物を定義して、GC のアルゴリズムを実装したり、
malloc/free/etc. をラップしてゴリゴリ書いたりは出来るだろうね。
つーか実装可能かどうかよりも、実装しやすいかどうかが問題なんじゃないの?
コンパイラ作る側のことは問題じゃない^^;
ユーザーにコンパイラ作らせるって意味じゃなくて言語の記述力の話だったような気が
マジレスすると Ruby の記述力はほぼ最強クラス Ruby と Haskell を学べば他のウンコ言語は不要
Rubyは型なしライトウェイト言語。Haskellは強い型あり言語。ぜんぜん用途も違うから住み分けが必要だね。
>>905 いやしかし、ごく普通のPCで
「720x480ピクセルのインターレースの画像データを
デインターレース処理してね。当然60fpsでよろしく」
「ビットレート10MBpsのMPEGデータを・・・」
とか、そういうごく有りがちな応用とかでは C/C++ は捨てがたい。
この板もID制になればなぁ。 一日中一人で荒らしてるが丸分かりでおもしろいのになぁ
909 :
デフォルトの名無しさん :2006/05/02(火) 22:57:40
>>907 そろそろrubyでも届く処理になっていると思われ。
>>909は世間知らず
Rubyの売りは手軽に書けるということでしょ? C/C++はシビアな処理が必要なところとか、大規模開発向き。 言語は住み分けが大切なんだって言ってるでしょ。
Rubyはなんだかうんこくさいんです。
清濁併せのむって事がわからない馬鹿は死ね
scheme みたいにミニマム指向で、型付きで、オブジェクト指向をサポートしていて、 repl があって、文法が奇麗な言語って無いですかねぇ。仕様がある程度かっちり していると嬉しいのですが。 JavaScript に型が付いた様なの、あるいは言語仕様がきちっと決まっている Pike みたいな感じのキボンヌ。
>>915 オブジェクト指向はラムダ式の包含的なアプローチなわけだが・・
とりあえずOCamlあたりのことを言っているのかな・・
ラムダでオブジェクトを作れると言う意味では、syntax sugar としての OO をサポートしている -- object.method() の様な感じで記述出来る -- 言語が無いかなと思いまして。 OCaml はミニマム指向なのでしょうか? ML97 みたいな規格があると嬉しいです。
もうRubyはいいってw
動的型まで含めたらだめだろ
>>915 JavaScript 2.0では随所に型情報をつけられるよ。
つーか「型が付いた」ってどういう意味で言ってるの?
静的型付けってこと?
>>921 JavaScript 2.0 は以前ちょっとだけ見て忘れてました。
もう一度調べてみます。どうもありがとう。
JavaScript 2.0って昔からドラフトだけは出てたけど、 今はもう実装されてんの?
誰も実装しないね。草案が固まらないのかな?
ActionScript3.0は
>>919 Ruby コンプレックスかよダセw
どうせオブジェクト指向が使いこなせなかった低能だろ?
氏んでくださーい。あっ HSP 厨房?
926みたいな奴を見るたびに、Ruby使う気が失せていくんだよな。
レベルの低下が著しいスレですね
このスレは前からこんなもんだ。
j} _ ..∠ ≧=≠ー≒=辷z、_ _メ }} ≠´ `く≠≦´_ 〃 . , ' 〈、⌒ヽ`ヽ=≠" /, , / , キヽ. ヽ ///〃 / / / }}川 i|! i } ハ ト、 キ . jハl|‖{ { { { ノノ川 jj| j / / j}_,メ ヾリ . l{八 ヽヽヽ \ //ノノノノノ} /〃// `二ニ=- 、 八 、ヽ、 x≦ミヽ、{ { ≧=ミ.ノ/ノ_厶斗-‐== 二 」 / ゝ≧ミyィ゙j:i} ` ´{゙j:;;!ii}ゞ≧=彡ヘ-‐=≡ ‐= ニコ . / /{ミ辷彡}oー ' , ーo' {ミ辷__彡}二ニ=- jノ { / , ゝー=人"" cっ "" °{ミ辷__彡}-‐==≡ミ〉 \{ / /{辷彡}> .. __ イj从ミ辷_彡ノ==≡ニ≦、 `{ { f´≧=彡'´ ̄`ヽ_」 jァァ' ゞ=个辷ニニ=-テ′ `ーァ `≠ x==く(´ /,≠=キテノハミ辷=≦ ヤ/ 〈く `'ァfj彡'゙ 》/ ヽ_弓 `{ ヾx、__,≠ハミヽ、 〃 丿 リノ . \/´  ̄_/,≠= 、 `'≡彡゙ '⌒'く ´ / _/´~ニ{ニ Y´ -‐- 、丿 { /i{ ニ{- ハr┬- 、 } ノイ| キ ノ゙T ¬i ! } } ヽ { / {l| キf´‖{| j }ノノ } } ‖ ミ{ キ!、リ キ /// ′ハ 人 ヾ、 ヾツ キー' 〃 _ .. イ ヽ . / `アアア丁! ! `T¨丁 ̄i i | \ . / / / / Ui i U | U i i \ うう・・・・・・・グス・・・・・・・ひっく・・・・・・・・ごめんなさいなのぉ・・・
931 :
デフォルトの名無しさん :2006/05/03(水) 22:14:41
オブジェクト指向言語って全体のどれぐらいを占めるのでしょうね? 最近流行ってる見たいですが…
オブジェクト指向言語というのは、オブジェクト指向でプログラミングすることを念頭に置いた言語という意味だって知ってる?
いまどきアセンブラの仕事している俺っていったい・・・ さすがに紙に穴あけたことはないけど。
>>933 > いまどきアセンブラの仕事している俺っていったい・・・
1チップ組込用マイコン設計屋で、アセンブラでテストパタン作っていますが、何か?
アセンブラがかっこいいとか思ってるの?
オブジェクト指向が主流の現代にアセンブラかよ。プゲラ
>>937 disassemble や decompile した事無いの?
アセンブラに対する評価って、色々なんやね。 そういや、アセンブラやってからCをやると、 ポインタが分かりやすいという話があったな。
>>944 それ、逆というか本末転倒。
ポインタの概念を理解できないと、そもそもアセンブラを理解できない。
従って、アセンブラをやった者にはポインタは空気のような存在。
使えない事の方が理解しがたい。
>>945 アセンブラの次にcやった人だと、ポインタに対する
インクリメント(++)で、型によって値が+2されたり+4
されたりするのが理解しづらいとオモ
つ〜か、漏れが昔はそうだった
へー頭悪かったんだね。
煽り乙
スレの本題を忘れるなよ。まぁ今後オブジェクト指向が主流となる事は間違いない
OO つかクラス指向は 90's 中頃からずっと主流だったし、最早、水や空気と変わらんね。 1チップマイコンは地味に流行ってて面白そう。ARM 基板とか安く手に入るし。
951 :
デフォルトの名無しさん :2006/05/04(木) 23:18:48
オブジェクト指向はruby以外まともなものは知らない。 みな中途半端
Ruby 以外の言語を知らないんじゃないの?
YARV の話しようぜー 今んとこ最強だよね
大昔 Smalltalk-80 とか Smalltalk/V とかつかってて、 それほど中途半端な感じはしなかったけど・・・
つか、rubyは手続き型の記述が「可能」な時点でオブジェクト指向ぽい言語なのでわ?
>>956 それを言っちゃうとメジャーな言語でオブジェクト指向を謳ったものはほとんど残らないじゃないか。
>>954 また古い話だな。でも Ruby は Smalltalk の良い所を継承しつつ、その制限や
不便な部分を改善しているよ。今迄実行環境については構文木を Eval という
Smalltalk に大きく見劣りする形式だったけど YARV によって GC 回りを含め
て大きく改善された。
一番最後に出来た VM だな。 YARV の詳細は知らんけど、世代別 GC と JIT くらい備えないと 10 年前の Smalltalk にすら追い付いてないのでは。
>>359 YARV 世代別 GC になるよ。JIT も計画されてるみたいだけど
最初は搭載されないだろうなー
Ruby関係はIPA採択されやすいのかな YARVてなんか未踏でもなんでもない気がくぁwせdrftgyふじこ
国産ですので。
早っww
やっぱり「純粋な〜」が好きな国民性ゆえ Ruby と Haskell がブームとなるん だろう。 純粋な関数型: Haskell 純粋なオブジェクト指向: Ruby このスレもこの二つメインで良くね?ぶっちゃけのこりの雑種共はいずれ死滅 するだろ。
YARVって速いの?
Rubyが純粋なオブジェクト指向て。 孤高の言語 Lisp Prolog > 新しいパラダイム Smalltalk Haskell > 面白いモデル ML Forth て感じだろ。 Java Perl Ruby Python なんかはカスみたいなもんだ。
今日はじめて彼女とHしました。記念sage
>>986 まじめな話Forthは実用言語だぞ。
今はあまり使われないがリソースが少なかった頃の組み込み分野じゃ一斉を風靡したもんだ。
(ちなみにforthラブラブな本があったんだけどタイトル失念した)
でも再帰下降が普及してからforthでなくともスクリプト組み込みは容易になったからなあ
完全に純粋であることに意味なんか無いしなぁ。 つうか、あるパラダイムに本当に完全に純粋な言語なんて無いよなぁ。
Microsoft パラダイムに 純粋な言語は幾らでもあるけれど?
>>972 政治的な話はなしにしないとemacsとviみたいに不毛な話しかでてこなくなる。
#つーか原理主義だけはやめようよ〜
純粋な言語って使い物にならないよ。
実用的なソフトが作れない
>>969 おお、それは失礼した。
組み込みで使われてたか。知らん分野だった
>>972 どこどこ?
つVB つC$
言語が「純粋」ってどういう意味?
977 :
デフォルトの名無しさん :2006/05/05(金) 23:07:39
>>976 Vi を使って Ruby スクリプトを書くようなイメージ
だーかーら Rubyは「純粋」じゃないのっ もっとお勉強しましょうねー
「実用的」なソフトってどんなの?
>>978 お前の言う「純粋」な言語は存在しない。お前がもっと勉強してね。
>>974 あと印刷関連の言語 PostScript もほぼ純粋 Forth だよ。
>>980 SchemeとSmalltalkはRubyよりは「純粋」だと思うよ
Rubyのアイデンティティってなんなの?
>>982 SchemeとSmalltalkが「純粋」?
ブハッツww バカだコイツww
>>983 Smalltalk のどのへんが OO 言語として純粋でない部分?
ちょっと通りすがりだけど興味あるんで聞いてみたい。
だーかーら SchemeとSmalltalkは「純粋」じゃないのっ もっとお勉強しましょうねー
ruby はブロックの扱いが Smalltalk に比べて純粋でないというか、 後付っぽい感じがただよいまくり。
クラスの概念はOOとして純粋じゃない。 実用の為に導入されている。
>>987 OO の本質が何であるかは人によって様々。
勿論クラス指向でも問題無し。
Scheme は最小構文、クロージャ、プログラムがデータ Smalltalk は全てオブジェクト Ruby は 、、、 えっ 文字列を evalするの? ブロックなにそれ? そんな Rubyのアイデンティは? 、 ないよねー
>>988 つまり、人によって純粋の定義は異なる。
よって、純粋かどうかに拘って、アイデンティティがどうとか言ってる982はバカだってことで
や、
>>977 の発言を見て Rubyを純粋だと信じてやまないピュアな若者を
いじってみたくなっただけなんだ。
正直純粋とかアイデンティティとかどうでもいい。いまは反省している。
>>990 >つまり、人によって純粋の定義は異なる。
これはそのとおりだし、「純粋」議論には意味がないと思うが。
で、「純粋なOO言語だっ」と言いたがるのはたいていRuby信者だが、それはさておき。
Rubyが、いろんな言語からつぎはぎした統一感のない言語だってのは事実なんじゃね?
それを「いいとこ取り」と言う奴もいるだろうが、「ぐちゃぐちゃ」とか「アイデンティティがない」とか
思う奴もいてよかろう。
>>990 純粋の定義は変わらんよ。どっちの方向に純粋かが変わるだけ。
純粋である事にはそれ程意味がある訳じゃないけどね。
>>989 Ruby のアイデンティティは ad-hoc さとごちゃ混ぜ感じゃないの。
yet another perl だから。
>Rubyが、いろんな言語からつぎはぎした統一感のない言語だってのは事実なんじゃね? 他の言語のよいところをつぎはぎしない言語は、死んで使われてない言語だけだろ。 >それを「いいとこ取り」と言う奴もいるだろうが、「ぐちゃぐちゃ」とか「アイデンティティがない」とか >思う奴もいてよかろう。 それは無知だからだろ。 というと怒るか? では、Rubyも全てオブジェクトだし、純粋だと言うヤツがいてよかろう。 それを否定して、無知だからだと言ってるヤツは何だ?
>>995 その話はもう終わり。無駄レスで残り少ないレスを消費するなよ。
お前のそのレスがムダだし、その所為でこうしてまたムダレスが書かれる。 浅はかなんだよ。お前は。
>>993 アイデンティティがないのがアイデンティティって? まあ否定はしないけど。
>>995 ブロックはオブジェクトじゃないよ。RubyはSchemeに似すぎている。だからこそ中途半端に感じる。
もっと Schemeっぽくして callを applyにしてオブジェクトを evalするようにするのは簡単
だろうけど、それって嬉しいの? ってなる。Schemeでいいじゃんみたいな。
使ってる人もいっぱいいるし、身動きとれなくなって結局 Perlみたくなるんだよ。
ブロックはオブジェクトとして扱えばオブジェクトになる。 >RubyはSchemeに似すぎている。だからこそ中途半端に感じる。 最近のLL言語はそらLisp系に似てるだろうけど、それで中途半端に感じる?意味不明すぎ。 >もっと Schemeっぽくして callを applyにしてオブジェクトを evalするようにするのは簡単 >だろうけど、それって嬉しいの? ってなる。Schemeでいいじゃんみたいな。 なんでSchemeっぽくする話にしてんの?しないよ。 Schemeでいいじゃんみたいなって、意味不明な論理からその結論かよ。アホか。 >使ってる人もいっぱいいるし、身動きとれなくなって結局 Perlみたくなるんだよ。 だからなんだってんだ?
1:00ちょうどに 1000!
1001 :
1001 :
Over 1000 Thread このスレッドは1000を超えました。 もう書けないので、新しいスレッドを立ててくださいです。。。