2

私は約 100 行の C の書き方を知っていますが、Rebol のようなより大きなソースの読み方や整理方法は知りません。どこかにホストキットとdllのチュートリアルがありましたが、R3が静的にリンクされているようです。だから、どこを見たらいいのかわからない。

値を取得して別の値を返すネイティブをどのように作成すればよいでしょうか? ソースのどこに置く?Cで何かを作成したことをGCに伝えるなど、何に従うべきですか?

また、R3 を他のプログラムに組み込んで、Python や Node.js から呼び出すにはどうすればよいですか? Python/Node部分は後ほどお願いします。しかし、学習メインは同様の方法で R3 にアクセスする必要があります。dll を意味します。また、そのような ffi には、起動/シャットダウンなどの典型的なフックがいくつかありますか?

[編集: 言い忘れました: Rebol 3 用です。]

4

1 に答える 1

1

それは2つの質問です。:-)


1 つ目 (ネイティブの追加について) については、おそらく Wiki の開発者向けドキュメントとして詳しく説明するのが最適です。タグ内の質問は、通常、ユーザーの視点から見た言語に関するものであるべきです。通常、ソース コード自体に関する回答は長くなり、それに回答できる人、または回答を気にする人は実際にはごくわずかです (StackOverflow は「ローカライズされすぎている」と呼んでいます)。そして、どちらかといえば、その時点でより

そのため、開発者に協力してそのドキュメントを作成し、それを一元的に整理された場所に置くように指示するのが、おそらく最良のアイデアです! :-P しかし、私は実際にこれを自分で試しました。インタープリターから環境変数を設定するための set-env ネイティブを追加しました。GitHub でそれを行うのにかかった差分を見て、ちょっとしたアイデアを得ることができます。

SET-ENV を追加し、環境文字列処理のためにホスト API を微調整

覚えておくべき重要なことは、特定のファイルに触れるときは、多くのスキャンとコード生成を自動的に行う make prepを実行する必要があるということです。ネイティブを追加することは、基本的なインターフェイスに変更するたびに、確実に行う必要があることの 1 つです。


インタープリターの埋め込みに関するユーザー向けの質問である 2 番目の質問については、最初に確認する場所の 1 つは、単純なREPLがどのように実装されているかです。現在、メイン リポジトリには 2 つのバージョンがあり、1 つは Posix 用、もう 1 つは Windows 用です。

https://github.com/rebol/r3/blob/master/src/os/host-main.c

つまり、弦が入り、弦が出てきます。しかし、より複雑な形式の相互作用があり、 src/includeからこれらのファイルを含むreb-host.hからそれらにアクセスできます。

#include "reb-config.h"

#include "reb-c.h"
#include "reb-ext.h"        // includes reb-defs.h
#include "reb-args.h"
#include "reb-device.h"
#include "reb-file.h"
#include "reb-event.h"
#include "reb-evtypes.h"
#include "reb-net.h"
#include "reb-filereq.h"

#include "reb-gob.h"
#include "reb-lib.h"

したがって、12 月 12 日のオープンソースの時点で存在していた API のファイルを調べることができます。物事は進化し、うまくいけば、よりよく文書化されます。しかし、今のところ、それは利用可能であるように思われるものです. ホスト キットを共有/DLL または静的ライブラリとしてリンクできます。ビルド設定と使用するコンパイラによって異なります。

于 2013-02-24T20:14:21.970 に答える