問題タブ [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.
memory-management - Forthのメモリ管理
ですから、私はForthを学んでいるところですが、メモリ管理が一般的にどのように機能するかを誰かが理解するのを手伝ってくれるかどうか興味がありました。現時点では、Cスタックとヒープのパラダイムの経験は(ある程度)しかありません。
私が理解していることから、辞書またはヒープに割り当てることができます。辞書はCのスタックのように高速/優先されますか?ただし、Cとは異なり、スコープと自動スタック再利用がないため、グローバルデータ構造にディクショナリのみを使用するのではないかと思います(あるとしても)。
ヒープに関する限り、それはCにかなり似ていますか?ヒープ管理は標準(ANS)の概念ですか、それとも実装定義ですか?
stack - Forth (または Factor) でアプリケーションをどのようにコーディングしますか?
Forth (または Factor) のようなスタックベースの言語の探索に興味がある可能性があります。私が見たいのは、アプリケーションがゼロから段階的に構築される方法です。私が見つけたチュートリアルは初歩的で、全体像を理解するのに役立っていません。たくさんの部品を扱うとき、スタックをどのように管理するかを考えるのは混乱します。
言語を学ぶ良い方法は、それを使ってローグライクゲームを作成することだと、私はいつも (おそらく間違って) 考えてきました。迷路、数十の生き物、宝物、キャラクターの統計など、スタック上の多くのものをどのようにジャグリングするかを理解するのに苦労しています.
forth - gforth で stdin から何かを読み取り、それを変数に格納するにはどうすればよいですか?
ドキュメントを読んだ後、次のコードを試しました。
これにより、連続するバフのアドレスごとに文字が取得されることを期待していましたが、次の奇妙な数字が表示されます。
ここで何が欠けていますか?
history - Forth が ENDIF の代わりに IF ステートメント THEN ... を使用するのはなぜですか?
Forth が ENDIF の代わりに IF ステートメント THEN ... を使用するのはなぜですか?
(非準拠の) Forth コンパイラーを実装しています。基本的に、Forth の構文は、IF ステートメントに関して非常に直観に反しているように見えます。
なぜ終わりの言葉はTHEN
? これにより、言語は私にとって非常に奇妙に読まれます。私のコンパイラでは、ENDIF
より自然に読めるようなものに変更することを検討しています。しかし、そもそも逆の IF-THEN ステートメントを使用する理由は何でしたか?
memory-management - Forth の S" ..." の寿命は?
これについて調べてみましたが、それについての言及は見つかりませんでした。
標準によると、 で作成された文字列は変更できません。GforthS"
での簡単な実験から、文字列のスペースが辞書またはパッド領域から来ていないことは明らかです。
その住所が有効であると期待できる期間はどれくらいですか?
言い換えれば、このアドレス (およびカウント) を変数に格納した場合、プログラムの後半でそれを参照できますか? それとも、辞書またはヒープ内の別の場所に移動する必要がありますか? アドレスを保存しないと、メモリ リークが発生しますか?
forth - Forthのプログラム名/argv[0]にアクセスするにはどうすればよいですか?
Gforthのドキュメントには、を呼び出すことで引数にアクセスするnext-arg
ように記載されていますが、これではプログラム名が省略されており、Cのような言語で出力されます。
Forthの引数ベクトルから自動的に削除されるようですが、それargv[0]
を返す特別な関数を呼び出すことができますか?
forth - 非常に簡潔なForthアプリケーションの例?
この講演では、チャック・ムーア(フォースの作成者)が次のような非常に大胆で抜本的な主張をしています。
- 「私がコーディングしなかったことがわかったすべてのアプリケーションには、必要な数の10倍のコードが含まれています。」
- 「約1000の指示は、私には何でもするのが正しいようです」
- 「[ローカル変数]を必要とするコードを書いている場合は、最適でないコードを書いています。ローカル変数を使用しないでください。」
私はムーア氏がa)絶対に素晴らしい天才なのかb)クラックポットなのかを理解しようとしています。しかし、それは主観的な質問であり、私はここでその質問に対する答えを探していません。私が探しているのは、Forthを使用して「1000命令以下」で解決できる複雑な現実の問題の例と、その方法を示すソースコードです。実世界のシステムの重要な部分を1つだけ示す例は問題ありませんが、別の高級言語の5行または10行で複製できる「おもちゃ」のコードサンプルは使用しないでください。
少量のソースコードを使用して実際のシステムをForthで作成したが、ソースを自由に表示できない場合(プロプライエタリであるため)、それについて聞きたいと思います。
primes - Forth での素数性のチェック
Forthで素数性を確認するにはどうすればよいですか?
これが私が今使っているものですが、数字が大きくなると遅くなります:
syntax-highlighting - Sublime Text 2の4番目の構文の強調表示?
私は周りを見回していて、SublimeTextで使用するGforthの構文定義を見つけられませんでした。
ありますか?TextPad用のものを見つけましたが、それだけです(TextPad構文定義を参照)。TextPad用のものをSublimeText2で動作するように変換することは可能ですか?
forth - Gforthの浮動小数点値に整数値を追加します
Gforthでは、浮動小数点値に整数値を追加する方法はありますか?
のようなもの1 + 2.1
?そうした場合1 2.1e f+
、値が同じスタックにないためだと推測しているエラーが発生します。私は自分にできることは知っていますが1.0e 2.1e f+
、それは私がその方法を理解しようとしていることではありません。