isVowel() - プログラミング言語 Ring 関連メモ

Ring 言語に関する資料の翻訳や執筆、拡張機能の開発など

RING API - ring_vm_funcregister2 の解析 (作業中)

まだまだ Ring ウェブサイトのほうは翻訳中です。

さて、該当個所のソースコードを引用しておきます。
ソースコードを読むに当たってすることは「辞書を作る」ことであると考えています。

/* Copyright (c) 2013-2018 Mahmoud Fayed <msfclipper@yahoo.com> */
#include "ring.h"
/* Support for C Functions */

RING_API void ring_vm_funcregister2 ( RingState *pRingState,const char *cStr, void (*pFunc)(void *) )
{
	List *pList  ;
	if ( pRingState->pRingCFunctions == NULL ) {
		pRingState->pRingCFunctions = ring_list_new_gc(pRingState,0);
	}
	pList = ring_list_newlist_gc(pRingState,pRingState->pRingCFunctions);
	ring_list_addstring_gc(pRingState,pList,cStr);
	ring_list_addfuncpointer_gc(pRingState,pList,pFunc);
}

ring/ring_api.c at ring-1.7-branch · ring-lang/ring · GitHubより引用 (使用条件は Ring のライセンスに従います)。


まず、気になるのがブロック内で使用されている関数ですね。これらは、 リスト・関数処理用ルーチンとして
ring/ring_list.c at ring-1.7-branch · ring-lang/ring · GitHub に収められています。

関数名 読み方 用途
ring_list_new_gc リング・リスト・ニュー・ジーシー
ring_list_newlist_gc リング・リスト・ニュー・リスト・ジーシー
ring_list_addstring_gc リング・リスト・アド・ストリング・ジーシー
ring_list_addfuncpointer_gc リング・リスト・アド・ファンク・ポインタ・ジーシー

現時点で用途は?にしておきますが、これではわからないので、

単語 意味
add 追加
gc ガベージコレクター(メモリ自動管理機構)の略記
list データ構造のリスト
new 新規作成
func 関数
pointer ポインタ

とすれば、少し当たりが付いて、用途が見えてくるかもしれません。
要するに、この ring_vm_funcregister2 は、

  • 関数ポインタ用のリスト配列に使用するメモリ配列オブジェクトの新規作成 (new_gc)
  • ...または作業領域の確保 (new_gc / new_list_gc)
  • Ring へ登録する拡張機能の命令追加? (ring_list_addstring_gc)
  • Ring へ登録する拡張機能の関数ポインタの追加? (ring_list_addfuncpointer_gc)

から構成されているものと思われます。
なのでキモとなるのは、

	ring_list_addstring_gc(pRingState,pList,cStr);
	ring_list_addfuncpointer_gc(pRingState,pList,pFunc);

の二行です。これが RingVM へ拡張機能を登録するための核の一つでしょう。