【问题标题】:How to ensure maximum compatibility/portability of my code?如何确保我的代码的最大兼容性/可移植性?
【发布时间】:2017-11-15 16:32:32
【问题描述】:

随着较新版本的 MATLAB 引入了一些新功能,例如允许创建字符串数组的 string class,以及使用双引号 ""(参见 answer)定义字符串的可能性,以及其他功能。

这是个好消息,因为这类功能让生活更轻松。但是,这也带来了一个问题。

我经常与同事共享代码,他们可能不一定安装了最新版本的 MATLAB。如果他们运行我使用新语法编写的代码,它将在他们的机器中崩溃。

我可以采用哪些技术/措施来确保代码的最大兼容性/可移植性?

This post 建议不要使用较新的功能,但如果我不得不强迫自己使用较旧的语法,那么使用最新版本对我有什么好处?

我只有使用旧语法和checking for the MATLAB version 的选项吗?

【问题讨论】:

  • 真的没有办法以非基于意见的方式回答这个问题。您可以针对客观的兼容性问题生成codeCompatibilityReport,但最终是否花费精力来容纳不想升级的人是您的决定。
  • @excaza 谢谢你的提示。我认为值得一提的是,codeCompatibilityReport 是在 R2017b 中引入的。

标签: matlab backwards-compatibility


【解决方案1】:

我会做以下事情:

  1. 确定您要支持的 MATLAB 版本。这可以是特定版本的 MATLAB(用于开发代码的版本),也可以是一系列版本。这可能有一个上限和一个下限。

    您的决定可能基于您知道您的同事需要您支持的版本范围;或者它可能基于实际考虑。例如,我怀疑您是否想要支持真正旧版本的 MATLAB(如 v5),否则您将无法使用逻辑变量、元胞数组或维度大于 2 的数组。或者您可能真的想使用新的字符串数组,在这种情况下您将其限制为 R2017a 及更高版本,您的同事将不得不升级。

    就最近的版本而言,真正大的界限是 R2008a(引入了新的面向对象代码)和 R2014b(引入了 Handle Graphics 2)。但您的特定需求也可能决定其他界限。

  2. 在代码的开头,使用ververLessThan 测试MATLAB 的版本,如果不在该范围内,则会出错,并显示类似'Unsupported MATLAB version' 的消息。

  3. 在该版本范围内,您可以将自己限制在所有版本中存在的功能的最低公分母,或者您可以偶尔使用ververLessThan 的测试来在行为之间切换取决于版本。

归根结底,如果您要为他人生产产品(而不是仅供您自己使用的代码),您需要对您的潜在客户拥有哪些平台(或可以被说服使用哪些平台)进行一些研究install),找到一系列平台,这些平台大到足以满足您的大多数客户,但又小到对您来说实用,并支持这些平台。

【讨论】:

    【解决方案2】:

    这在很大程度上取决于您所说的“经常与同事共享代码”是什么意思

    如果您正在编写代码并且他们只是按照您提供的方式使用它,那么他们所要做的就是拥有最新的MATLAB Runtime。哪个是免费的。然后你可以使用任何你想要的版本。

    如果您和您的同事都在贡献代码,那么您肯定需要就使用的版本达成一致。

    【讨论】: