Libelektra: 错误代码生成

创建于 2019-08-11  ·  4评论  ·  资料来源: ElektraInitiative/libelektra

在之前的错误概念中,生成宏非常有用,因为我们经常添加新错误。 然而,代码生成本身非常复杂(打印代码的 C++ 代码;这对于交叉编译也不理想,另见 #2814)。

现在我们或多或少地固定了一些错误。 所以问题是我们应该怎么做:

  1. 手动写下几个宏(将 kdberrors.h 设为静态,可能还包括 #2697),并手动写下语言绑定的异常(以及从 Elektra 的内部错误到特定于语言的好的错误的映射)
  2. 迁移到使用我们的 mustache 系统生成代码的更现代和更简单的方法,并让它为所有编译语言(C、C++、Java、Rust、Go)生成(映射)代码。
  3. 迁移到生成此类宏/类的 CMake 代码(另请参见 #2814)

@PhilippGackstatter @raphi011 @kodebach @Piankero你怎么看?

proposal

所有4条评论

就我个人而言,我更喜欢选项 1。错误代码应该很少更改,这使得手动编写 C 代码和保持其他语言同步的额外工作可以忽略不计。 与设置任何形式的自动生成相比,最初的工作也应该更少。

为什么不是选项 2?

Mustache 模板必须以某种方式提供输入数据。 要么我们必须使用在构建时编译的自定义可执行文件。 在这种情况下,我们只需去掉 C++ 代码中的std::cout << ... ,其他的不会改变。 另一种选择是使用默认的 mustache 可执行文件,它是一个 Ruby 脚本,因此需要安装 Ruby。

另外kdb gen不能重用,因为这需要首先编译kdb ,这需要kdberrors.h

为什么不是选项 3?

生成 C 代码可能适用于 CMake,但更复杂的语言在使用 CMake 时可能会出现问题。


如果我们决定使用某种形式的代码生成,我们应该只生成绝对需要生成的部分。 例如,当前的kdberrors.h包含许多完全静态的代码,与我们实际遇到的错误无关。 不应生成此代码,我们应该从静态文件中#include它。

由于稳定的错误代码,我也更喜欢选项 1。 添加代码生成还会给整体代码增加不必要的复杂性,这又很容易出错。

@kodebach感谢您对选项 2 的详细说明

我认为很明显我们选择选项 1, @Piankero你能写下决定吗?

对于绑定,这意味着没有太大变化。

如果我们有一个绑定写作教程,描述:

  1. Elektra 绑定的哪些部分有意义(应用程序、插件、工具等)
  2. 如何将绑定集成到 CMake 中(如果可能且有用)
  3. 对于每种语言,绑定的哪些部分可以并且应该不同。 这包括:

    • 迭代器

    • 转换为本机类型(字符串、整数、...)

    • 运算符重载(如果可用)

    • 其他编程语言集成(流、哈希码、身份等)

    • 从 kdb 函数返回错误(这里的问题是关于什么的)

我希望我们可以针对我们在不同语言中看到的不同情况扩展本教程。 @Piankero能否请您开始编写教程,特别是错误处理部分(如何实现继承,...)

教程:#2875
设计决策:#2872

此页面是否有帮助?
0 / 5 - 0 等级

相关问题

mpranj picture mpranj  ·  3评论

sanssecours picture sanssecours  ·  3评论

mpranj picture mpranj  ·  3评论

mpranj picture mpranj  ·  3评论

markus2330 picture markus2330  ·  4评论