2011-02-25 14 views
2

CFFIをClozure Common Lisp 1.6にロードしたところ、(ql:quickload "cffi")CFFI-FEATURES:X86 CFFI-FEATURES:UNIX :CFFIがあり、*features*にあります。いくつか他の人がcffi:でも動作しながら、Clozure Common LispでCFFIを使用するパッケージ接頭辞との混乱

? (documentation 'cffi:null-pointer 'function) 
"Construct and return a null pointer." 

? (documentation 'cffi-sys:%foreign-funcall 'function) 
"Perform a foreign function call, document it more later." 

cffi_0.10.6/src/cffi-openmcl.lispに探し
? (documentation 'cffi:null-pointer 'function) 
"Construct and return a null pointer." 

? (documentation 'cffi:%foreign-funcall 'function) 
> Error: Reader error: No external symbol named "%FOREIGN-FUNCALL" in package #<Package "CFFI">. 
> While executing: CCL::%PARSE-TOKEN, in process listener(1). 
> Type :GO to continue, :POP to abort, :R for a list of available restarts. 
> If continued: Use the internal symbol CFFI-SYS:%FOREIGN-FUNCALL 
> Type :? for other options. 

私は(defpackage #:cffi-sys ...を見ることができますので、どのように来るしかし私は、なぜCFFIの機能がcffi-sys:接頭辞と表示されているいくつかの好奇心が強いですそのcffi:null-pointerは機能しますか?

答えて

2

Lispにはいくつかの命名規則があります。いくつかは広く使われています。

パッケージに名前をつけて何か-YSS何か内部の機械を束ねるかもしれないというヒント。

シンボルに名前を付ける%SOMETHINGは、内部または実装固有の機能であり、ユーザーコードで直接使用するためのものではありません。

名前からわかるように、cffi-sys:%foreign-funcallは、CFFIによって内部的に使用されますが、ユーザが使用することは意図していません。したがって、このシンボルはメインパッケージのCFFIからもエクスポートされません。おそらく、CFFIパッケージからエクスポートされた別のシンボルがあり、より移植性のある便利な方法で機能を提供します。

+0

これは意味があります。つまり、私のコードには 'cffi:'を付けるべきです。 – FilipK

関連する問題