4

我即将在 Smalltalk (Pharo) 中构建一个项目。还有一个我打算使用的python库。现在,有3个选项:

  • 那些 python 库的 Smalltalk 包装器
  • 将 python 库移植到 Smalltalk
  • 从头开始编写库(在 Smalltalk 中)以用于我的项目

以下是我的查询:

  1. 移植/包装的“基本”差异是什么(尚未在任何地方找到令人满意的解释)
  2. 如何知道何时使用哪一个(在所有三个中)?
  3. 任何可以让我获得进一步帮助/启动项目的资源或指针。

谢谢!

4

1 回答 1

12

包装器

用本地语言编写函数,其唯一目的是调用外部库中的函数。目标是尽可能少地使用母语。例如,将数据类型从本地语言翻译成外部库语言等。

当外部库为:

  • 用比本地代码更高效的语言编写(例如,从 Python 调用的 C++ 库)
  • 大/复杂,翻译耗时或容易出错
  • 定期更新;在维护良好的库中,接口(您的包装器所关心的)的更改频率将低于功能的实现;因此,如果您对功能有包装,更新到新版本的库应该相当简单

移植

端口只是从一种语言到另一种语言的翻译。一般来说,尽可能保持相同的逻辑。

在以下情况下移植是有意义的:

  • 本机语言比外部库更高效
  • 该库很简单,并且希望节省包装所涉及的开销
  • 打算以母语对移植代码进行和维护更改
  • 没有计划以自己的语言使用外部库
  • 想要学习一种或两种所涉及的语言

改写

将 Re-Write 视为具有大量重构的 Port。目标是利用本地语言的特性以某种方式改进库(效率、可读性等)

在与移植相同的所有场景中,重写都是有意义的。决定是做一个简单的移植还是完全重写通常归结为一个问题:

  • 有没有更好的方法来用本地语言实现外部库的功能?
于 2012-04-11T21:05:00.650 回答