Common lisp cffi/外来类型的建议命名约定

Common lisp cffi/外来类型的建议命名约定,common-lisp,ccl,cffi,Common Lisp,Ccl,Cffi,在common lisp中,是否有推荐的外来类型命名约定?(和一般类型)?例如: (cffi:defctype glyph-index-t:uint32) (cffi:定义构造点 (x:int32) (y:int32)) (cffi:定义外部库fontlib(t(:默认“字体”)) (cffi:使用外部库fontlib) (cffi:defctype font-ptr-t:指针) (cffi:defcfun“hasKerning”:布尔值(fontptr font-ptr-t)) (cffi:d

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

(cffi:defctype glyph-index-t:uint32)
(cffi:定义构造点
(x:int32)
(y:int32))
(cffi:定义外部库fontlib(t(:默认“字体”))
(cffi:使用外部库fontlib)
(cffi:defctype font-ptr-t:指针)
(cffi:defcfun“hasKerning”:布尔值(fontptr font-ptr-t))
(cffi:defcfun“getKerning”点
(fontptr font-ptr-t)
(字形1字形索引-t)
(glyph2 glyph-index-t))
在本例中,
defcstruct点
对应于C/C++类型
struct点{int32 x,y;}
字形索引-t
对应于
类型定义uint32字形索引
font-ptr-t
struct font*

我不确定是否应该简单地在所有东西中添加<代码> -t/COD>后缀(就像我用<代码> GLUPH-DEXX-T/<代码>),使解释器大小写敏感(这样我就可以用大写字母来指示类型,比如C++,这可能是个坏主意),或者是否还有其他一些传统的方法来做。有什么建议吗?

CFFI对名称的翻译有一定的建议。相关文件包括:

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


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

经过一些测试,我发现CFFI类型名不会与CLOS类和Defstruct冲突。因此,不需要使用不同的类型名

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


结论:似乎cffi类型的不同命名方案是不必要的。

只是吹毛求疵,解释器(和编译器)总是区分大小写;默认情况下,是读卡器执行上套管操作。通过相应地转义,您仍然可以使用具有默认可读表的大小写混合符号名称,例如,
| mixedcasesymol
us\o\fa
@JoshuaTaylor:是的,我知道,但是,对于一个非常不标准的/不寻常的编码样式,区分大小写的lisp。另一方面,我是为自己编程的,所以这不应该是一个问题……有关于名称空间的问题吗?命名约定可以用来避免冲突,但这并不是它们的唯一目的。在使用外国库时,命名约定对于翻译问题至少同样重要(例如,能够在
NtCreateThread
nt create thread
之间,或者在
isSerializable
serializable-p
之间可靠地转换)就像名称空间冲突一样。@JoshuaTaylor:我说的是类型名,不是函数名。据我所知,
(defctype
'd类型与lisp类型不冲突(
defstruct
/
defclass
)从我所知道的,有一种隐藏的内部机制,它使用那些cffi类型名作为符号,就是这样-它们似乎都不是lisp类型。我问这个问题的原因是因为我知道的其他语言不是这样工作的-它们需要所有东西的唯一标识符。那么我遗漏了什么吗?你没有遗漏任何东西事物;它们在概念上是不同的名称空间。CL使这变得很容易;您可以使用隐藏表,或者只是向中添加一些内容。我感到困惑的是,问题没有提到任何有关命名的内容,以避免名称空间冲突。命名约定可以做的不仅仅是模拟名称空间,它们可以帮助程序员(和环境)查找和识别名称。例如,在Scheme中,谓词以
结尾;在Common Lisp中,谓词在
p
-p
defstruct
中使用此选项自动生成谓词名称。类似地,进行外部接口的库可以使用命名约定来帮助查找或生成相应的外部名称s、 例如,可以根据命名约定将
nt create thread
自动转换为
NtCreateThread
,而该约定(在这种情况下)与名称空间冲突避免无关。@JoshuaTaylor:“我的困惑是,这个问题没有提到任何关于名字空间的冲突避免。”我不认为我问这个问题是因为我想避免冲突(不确定)。你看,我习惯C++思维(任何东西都是标识符,它们可以发生冲突)。,当我问这个问题时,我忘记了lisp对类型的处理是不同的(它们与函数不冲突),并且您可以使用“符号”。所以我有点假设cffi声明了lisp类型,并且需要避免冲突,结果证明冲突是不真实的。(续…)
CFFI> (defcfun "someXmlFunction" ...)
=> SOME-XML-FUNCTION