問題タブ [forth]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票する
3 に答える
950 参照

forth - Forth が True のフラグとして -1 を返すのはなぜですか?

Forth コード

を返しますが-1、私がこれまでに使用した他のすべての言語は1true のフラグとして使用します。どうしてこれなの?この違いの原因は何ですか?

0 投票する
1 に答える
485 参照

serial-port - Gforth でシリアルポートの設定を変更する

シリアル ポート (上の Arduino デバイス) と通信しようとしてい/dev/ttyUSB0ます。データを正しく読み書きするには、速度やパリティなどのさまざまなパラメーターを設定する必要があるため、問題が発生しています。

すでにこれを行う Gforth ライブラリはありますか?

C関数を通過して呼び出してtermiosパラメーターを直接設定するこのリンクを見つけました-http ://www.forth.org/svfig/kk/TestSerial.f.txtですが、Gforthに付属するものを使用することをお勧めします自体。

0 投票する
3 に答える
2936 参照

lisp - Common Lisp マクロと Forth メタプログラミング機能の比較

すべての Common Lisp プログラマーは、マクロが強力なツールであることを知っています。Common Lisp マクロは、とりわけ、言語仕様を変更せずに Lisp の上にオブジェクト指向を追加するために使用されてきました。read-macros は、マインド ベンディング機能を備えた別の構成要素です。

メタプログラミングを可能にする別のプログラムは Forth です。Forth は、'words' と 'generate words' を使用して、少し異なる方法でそれを行います。

両方の言語に手を出した人から、一般的な Lisp マクロと forth 構造が幅/力で匹敵するかどうかを知りたいです:前者でできて後者ではできないことはありますか? それともその逆?

もちろん、私は 2 つの言語のチューリング完全性について話しているのではありません。メタプログラミング機能について話しているのです。C はチューリング完全ですが、C マクロの能力が Common Lisp マクロに匹敵すると言うのは愚か者だけです。

0 投票する
1 に答える
347 参照

class - Forth で基本クラスとそのクラスのインスタンスを作成するにはどうすればよいですか?

入力電圧などの電気的測定値を表すオブジェクトを作成したいと思います。これを行うには、さまざまな種類の読み取り値 (たとえば、電流と電圧) を処理するための基本的なクラス構造を作成したいと考えています。

私がやりたいことの疑似コード(まあ、実際にはPython)はこれです:

Gforthoof.fs拡張子を使用しています。

0 投票する
1 に答える
295 参照

forth - Forth で BIOS 割り込みを使用することは可能ですか?

さまざまなプログラミング言語を比較するクラス プロジェクトを行っています。Forth 言語で BIOS 割り込みを使用することは可能ですか? 私はこれに関するそのような情報を見つけることができないようです。もしそうなら、例は何でしょうか?

0 投票する
1 に答える
1127 参照

compiler-construction - 8051 の関数呼び出しの実装

外部 RAM のない 8051 マイクロコントローラーがあるとします。内部 RAM は 128 バイトで、約 80 バイトが使用可能です。そして、スタック言語用のコンパイラを書きたいとします。

RPN 式をコンパイルするとします2 3 +。8051にはネイティブpushpop命令があるので、あなたは書くことができます

次に、次のように実装できます+

シンプルですね。ただし、この場合+はインライン アセンブリとして実装されます。このコードを再利用してサブルーチンに入れたい場合はどうすればよいでしょうか? 幸いなことに、8051 には指示がlcallありretます。lcall LABEL戻りアドレスをスタックにプッシュして LABEL にジャンプし、retスタックの一番上に指定されたアドレスに戻ります。ただし、これらの操作はスタックに干渉するため、最初の命令lcallの実装にジャンプすると、操作したい値ではなく戻りアドレスがポップされます。+pop A

各関数の引数の数が事前にわかっている言語では、いくつかの値をスタックの一番上に並べ替えて、引数をスタックの一番上に置き、戻りアドレスをさらに下にプッシュすることができました。しかし、スタックベースの言語の場合、各関数が受け取る引数の数はわかりません。

では、これらの状況で関数呼び出しを実装するには、どのようなアプローチができるのでしょうか?

8051 命令セットの説明は次のとおりです。http://sites.fas.harvard.edu/~phys123/8051_refs/8051_instruc_set_ref.pdf

0 投票する
1 に答える
2251 参照

c - Mac OS X で実行可能なファイル形式

Mac OS X で実行する Forth の独自のコピーを (一度に 1 ステップずつ) 構築しようとしています。

現在、PHP、Ruby、および Python で Apache および localhost で実行されているバージョンの Forth を使用しています。

コンパイルされた Forth コードの独自のネイティブ実行可能ファイルを作成できる Forth のネイティブ実行可能バージョンを作成する C で Forth のバージョンを作成したいと考えています。半再帰的な文章ですみません。私の目標は、C で開始し、最終的には独自の Forth コンパイラーになることです (もはや C コードでは実行されません)。

私の出発点は、最小限のテスト プログラムをターミナルのバイナリ実行可能ファイルとして実行することです。既存の C コンパイラが何をしているかを理解できたら、そのメソッドを自分の目的に合わせて変更できます。

私は C で小さな「hello world」プログラムを作成し、最終的に 8,497 バイトの実行可能ファイルになりました。これは、ほとんどが 0x00 配列 (おそらくバッファー) で構成されていました。私の推測では、stdio ライブラリ全体が含まれていました。

次に、考えられる限り最小の C プログラムを作成しました (完全にヌルのプログラムを除いて -- 結果の 16 進数で自分のコードを見つけられるようにしたかったのです)。

これにより、ASCII A のストレージとすべての 1 の戻り値を簡単に見つけることができるため、可能な限り最小限のオーバーヘッドが得られるはずでした。

代わりに、4,313 バイトのファイルになってしまいました。0x41 (ASCII 'A') には 4 つの位置がありましたが、MOV 即時バイト命令の一部ではありませんでした。おそらく、0x41 は定数データとして格納され、別の MOV 命令でロードされました。

ここでも、多数の 0x00 配列 (3,731 バイト、または 402 バイトを除くすべて) がありました。おそらく、オブジェクトファイルにはある種のヘッダーデータがあり(ターミナルで正しく実行され、-1 を通知します)、他に何があるかは誰にもわかりません。

現時点では、アプリケーション バンドルを持つことには関心がありません。Terminal で実行することが私の短期的な目標です。この最初のステップが機能したら、完全なアプリケーションに進むことができます。

オブジェクト ファイルがターミナル ツールとして正しく機能するために必要なものを決定する方法について何か提案はありますか?

0 投票する
1 に答える
206 参照

forth - 新しい Forth ワードがコンパイルされる場所を制御するにはどうすればよいですか?

何を指すかを変更する方法HERE、またはコンパイルする次の定義が特別な場所にあることを確認する他の方法はありますか? または、作成した定義を別の場所にコピーできますか? 理想的には、ANS Forth でのソリューションが必要ですが、Gforth 固有のもので十分です。