3

在 common lisp 中,是否有推荐的外部类型命名约定?(和一般类型)?例如:

(cffi:defctype glyph-index-t :uint32)
(cffi:defcstruct Point
    (x :int32)
    (y :int32))

(cffi:define-foreign-library fontlib (t (:default "font")))
(cffi:use-foreign-library fontlib)

(cffi:defctype font-ptr-t :pointer)
(cffi:defcfun "hasKerning" :boolean (fontptr font-ptr-t))
(cffi:defcfun "getKerning" Point 
     (fontptr font-ptr-t) 
     (glyph1 glyph-index-t) 
     (glyph2 glyph-index-t))

在此示例defcstruct Point中对应于 C/C++ 类型struct Point{int32 x, y;};glyph-index-t对应于typedef uint32 GlyphIndex;并且font-ptr-tstruct Font*

我不确定我是否应该简单地-t为所有内容添加后缀(就像我对 所做的那样glyph-index-t),使解释器区分大小写(所以我可以使用大写来指示类型,就像在 C++ 中一样,这可能是一个坏主意),或者是否有是其他一些传统的方法。有什么建议吗?

4

2 回答 2

2

CFFI 具有许多与名称翻译相关的功能。该链接文档包括:

尝试使用与这些函数交互良好的名称可能是有意义的。例如,translate-name-from-foreign页面上有一个示例(我意识到这是关于函数命名,而不是类型命名):

CFFI> (defcfun "someXmlFunction" ...)
=> SOME-XML-FUNCTION

我还建议找到一些使用 CFFI 生成绑定的库,并查看它们的作用。

于 2013-06-20T14:34:27.877 回答
1

经过一些测试,我发现 cffi 类型名不会与 CLOS 类和 defstructs 冲突。所以不需要不同的类型名称。

一般来说,关于“类型名称的标准”,lisp 对函数和类型有单独的“命名空间”。(准确地说,同一个符号可以用作函数名和类型名,据我所知)。

结论:看起来 cffi 类型的不同命名方案是不必要的。

于 2013-06-21T13:13:35.437 回答