この記事は言語実装のカレンダー | Advent Calendar 2021 - Qiita https://qiita.com/advent-calendar/2021/lang_dev の4日目の記事です。 はじめに 昔、アセンブリ言語のみから出発し、GC・継続・オブジェクトシステムなどを持つ比較的高級な言語までブートストラップするということをやりました。いつか再挑戦してみたいと思っていて、正月休みにやりましたら思いのほか動くものになりましたが、死蔵させたまま1年経ってしまいました。勿体無いのでこの機会に紹介して供養します。 前回作ったAmberという処理系はこちら リポジトリ: https://github.com/nineties/amber 今回はアセンブリ言語じゃなく ELFファイルの手書き から出発してみたいと思います。ただのお遊びで、そんなことしても役には立ちません。が、計
Threaded Code(翻訳) Threaded Code(翻訳) スレッデッドコードは何に効果的か? スレッデッドコードとは何か? スレッディング技法 間接スレッデッドコード Forthと直接スレッディング トークンスレッデッドコード その他の用語 どのようにスレッデッドコードを移植可能に実装するか? 値としてのGNU Cのラベル 継続渡しスタイル スイッチスレッディング コールスレッディング 歴史 参考文献 原文 : http://www.complang.tuwien.ac.at/forth/threaded-code.htmlを翻訳したサイトがあったのだが、いつの間にかなくなった。仕方ないので、自家翻訳する。 追記:(ほとんど訳した後に、Internet archiveがあることに気がついた。私が以前見た訳文は、Threaded Code。翻訳の質はこちらの方が上) スレッデッ
はい。今日も新たな言語に挑戦してみます。前回は、s kだけで全部出来ちゃうよ〜という純粋関数型言語Unlambdaでしたが、今回はもうちょっと高級に攻めてみたいと思います。 今日の言語はForth。噂によると相当早い言語らしい。なんか聞いたことがあったけど、どんな言語かは知らなかったので謎を追っていきます。処理系はgforthを使います。 Hello, Forth World!! とりあえず、Hello, world。 ." Hello, Forth World!!" Hello, Forth World!! okドットでprint。文字列の場合は、ドットと文字列の間はスペースは開けちゃダメらしい。 Hello, worldは謎が多いので次へ行きます。 (追記:突っ込みを頂きました。 ." という関数みたい。) 足し算 高級過ぎたので、もうちょっと低レベルに足し算行きます。 1 1 +なん
IMMEDIATEというワードは、通常は、実行状態で利用される。このワード自体というよりも、このワードを実行したときに他のワードが被る効果が重要である。 IMMEDIATEとは、英語で、「間を置かない」とか「直接の」、「即時の」というような意味である。このワードを実行すると、その直前に定義された実行可能ワード — 通常はコロン定義である — が性質を変える。そのような性質の変わったワードはIMMEDIATE(イミディエット)ワードとも呼ばれる。どのように変わるかというと、コンパイル状態でも実行されるワードへと変わるのである。 通常のワード、つまり、IMMEDIATE指定されていないワードは、コンパイル状態で、つまり、何かのワードの定義の中で、その名前を書くと、そこに呼び出しがコンパイルされることになる(原則的コンピレーション・セマンティクス)。これに対して、IMMEDIATEワードは、定義
An awesome stack based programming language, which is able to extend itself during runtime. \ a comment followed by the shortest quine source type \ another shorty, hello world looks like that ." hello world" \ tell me, what else can we do? ask the system itself! words \ this will yield all defined words EuroForth 2025 Hamburg, 12.-14. September 2025 The 41st EuroForth conference takes place in Ha
プログラマの数だけForthが存在するといわれる、Forthを作ってみる。 実装言語は、C言語にする。 さて、やってみよう。 簡単なForthのプログラム スタックを作る 値をスタックに積む スタックから値を取り出す スタックの値を加算する スタックの内容を表示する Forthを実行してみる? プログラム配列を走査する 「値をスタックに積む」を実行する プログラムを用意する Forthを実行してみる ソースコードを読み込む 条件分岐を実装する 繰り返し構造を実装する ワード定義を実装する ワード名を登録する 処理内容を登録する ワード名と処理内容を関連付ける ワード定義のテスト 対話環境を作る 32ビット化する 対話環境の複数行対応 スレッディングの変更 文字列を表示する 変数を実装する 変数を実装する2 最後に ところで、「Forthを作ってみる」を電子書籍にしました。 Forthを作っ
リリース、障害情報などのサービスのお知らせ
最新の人気エントリーの配信
処理を実行中です
j次のブックマーク
k前のブックマーク
lあとで読む
eコメント一覧を開く
oページを開く