40

Forth システムの実装に興味があります。単純な VM とランタイムを構築する経験を積むためです。

Forth を開始する場合、通常、最初にスタックとその演算子 (DROP、DUP、SWAP など) について学習するため、これらを基本的な演算子の 1 つと考えるのが自然です。しかし、そうではありません。それらのそれぞれは、メモリとスタック ポインターを直接操作する演算子に分解できます。後で、DUP や SWAP などの実装に使用できるストア (!) とフェッチ (@) について学びます (ha!)。

では、プリミティブ演算子とは何でしょう? 他のすべてをビルドできるランタイム環境に直接実装する必要があるのはどれですか? 高性能には興味がありません。私 (そして他の人) が学べる何かが欲しいのです。オペレーターの最適化は後で行うことができます。

(はい、私はチューリング マシンから始めて、そこから行くことができることを認識しています。それは少し極端です。)

編集: 私が目指しているのは、オペレーティング システムまたは新しいコンパイラのブートストラップに似ています。これらの基本的な構成要素からシステムの残りの部分を構築できるようにするには、少なくとも何を実装する必要がありますか? これをベア ハードウェアに実装するつもりはありません。教育的な演習として、私は独自の最小限の VM を作成します。

4

8 に答える 8

23

This thread covers your exact question. Here is a soup-to-nuts implementation with complete documentation.

I wrote a subroutine threaded Forth targeting 68K when I was in college. I defined the runtime environment and dictionary format, then wrote some C code that boot strapped a Macintosh application that loaded a default dictionary, populated some I/O vectors and got the code running. Then I took the Leo Brodie book Starting Forth and started implementing the basic dictionary in 68K assembly language. I started with arithmetic/logic words, then did control structures then word definition/manipulation words. My understanding is that at a minimum you need @, !, +, -, * and /. The rest can be implemented in terms of those, but that's like trying to write an entire graphics library based on SetPixel and GetPixel: it will work, but yikes, why?

I enjoyed the process as there were some really interesting puzzles, like getting DOES> exactly right (and once I had a solid DOES> implementation, I was creating closures that turned into tiny, tiny amounts of code).

于 2009-01-02T21:26:10.893 に答える
13

昔、私は「スレッド化されたインタープリティブ言語」と呼ばれる本を持っていました.Byteによって出版されたと思います.Z80アセンブリでForthのような言語(Forthと呼ばれたことはないと思います)を実装する方法について説明しています。

あなたは Z80 を手元に持っていないか、Z80 を欲しがっているかもしれませんが、この本は参考になるかもしれません。

于 2009-01-02T21:13:10.527 に答える
8

comp.lang.forth のこの投稿には、いくつかの「最小限の Forth」がリストされています。

http://groups.google.com/group/comp.lang.forth/msg/10872cb68edcb526

なぜ私はこれを知っているのですか?弟の Mikael は #3 を書き、「最小限の Forth」の作成についての論文も書きました (ただし、スウェーデン語で)。私の記憶が正しければ、彼はシリコンに組み込むことができる最小限の演算子のセットを取得したいと考えていました。

于 2009-01-02T23:55:56.520 に答える
4

私はまだ質問が整形式であると確信していません。たとえば、Plinth の指示を減らすことができます。結局のところ、*andはおよび/の観点から実装できますが、「+」は後続関数の観点から実装できます (ペアノの公理を参照してください)。これにより、チューリング マシンの近くに配置されます。停止する場所をどうやって知るのですか?+-

于 2009-01-02T23:19:01.850 に答える
4

Hans Bezemer の4thH compilerも参照してください。

于 2009-01-03T13:29:31.290 に答える
2

ドキュメントにこの情報が記載されていない、どのForth実装を使用していますか?Forthの性質を考えると、実装に依存する可能性があります。辞書には標準的な単語のセットがありますが、Forthは定義上自己拡張可能な言語であるため、アセンブリ/ C /何でも、またはForthによってそこに到達したかどうかは重要ではありません。

于 2009-01-02T21:01:00.757 に答える
1
  1. 私のお気に入りの 1 つは、 Frank Sergeant による MSDOS Pygmy Forthの 3 つの命令です。彼はテザリングされた Forth を使用し、PC 上でより完全に機能し、ターゲットへのシリアル リンクを使用し、ターゲット上でピーク、ポーク、実行 (基本的な言語用語)、つまり読み取り、書き込み、および実行を行います。

  2. 最新の技術的に高度な回答が必要な場合は、Charles Moore によって開発された144 コアの第 4 CPU に記載されている 5 ビット (32) 命令 (PDF のページ 5、図 3)を参照してください。フォースの父。基本的に、ムーア氏は私たちに Forth を与え、彼が当時持っていたもののフォークを作成することを許可しましたが、彼は今までの残りの人生でそれを最適化し続け、最終的には CPU レベルに結晶化しました (VLSI チップ CAD も作成しました)。彼自身のチップを設計するための設計ツールであり、彼自身の ColorForth で徹底的に設計されています. それは低レベル言語でも高レベル言語でもありません -- それはオムニレベル言語です!)

  3. Factor プログラミング言語は非常に似ていると考えており、そのコアには C (または c++) 言語でコーディングされた仮想マシンがあります。

  4. 最後に、pForth と呼ばれるパブリック ドメインの Forthがあり、そのカーネルは C で記述されています。

于 2019-07-23T04:58:37.807 に答える