注意:本文基于DeepSeek对附件文档的翻译总结而来,原文档为英文。

这篇文章详细介绍了NIST(美国国家标准与技术研究院)在1990年发布的EXPRESS工具包的改进过程,并总结了在开发过程中学到的经验和教训。以下是文章的主要结论和总结:

1. 工具包的改进背景

  • NIST在1990年发布了基于早期EXPRESS草案的工具包,包括解析器、解析器和用于生成模式无关工具的框架。
  • 随着时间的推移,EXPRESS语言的标准发生了变化,工具包逐渐变得过时,且存在一些实现上的错误和效率问题。
  • 为了提高工具包的效率和功能,NIST团队对工具包进行了全面的重新设计和实现,使其符合最新的EXPRESS草案国际标准(DIS)。

2. 工具包的主要改进

  • 性能提升:通过优化代码和数据结构,工具包的运行时间减少了99%,空间消耗减少了25%。
  • 完整实现:新的工具包实现了EXPRESS语言的所有特性,包括之前被忽略的一些复杂构造。
  • 错误检测:工具包增加了更复杂的错误和警告检测机制,帮助用户更好地调试和优化他们的EXPRESS模式。

3. 实现中的挑战

  • EXPRESS语言的复杂性:文章详细讨论了实现EXPRESS语言中的一些难点,特别是作用域(scoping)和枚举类型(Enumerations)的处理。NIST团队通过引入字典和指针机制,简化了作用域的处理,尽管这增加了存储空间的开销,但显著提高了处理速度。
  • 面向对象设计的取舍:最初的工具包使用了面向对象(OO)的设计,虽然简化了代码结构,但导致了显著的性能开销。NIST团队最终决定放弃OO设计,改用更高效的C语言实现,通过使用联合体(unions)和显式的类型处理来提高性能。

4. 多遍解析与单遍解析的对比

  • 最初的工具包使用单遍解析和解析机制,虽然表面上看起来是单遍处理,但实际上由于对象之间的依赖关系,某些对象会被多次访问,导致效率低下。
  • 新的工具包采用了多遍解析机制,将解析过程分为多个阶段,确保每个对象在需要时已经被解析,从而减少了重复解析的开销。

5. 用户反馈与错误处理

  • 工具包的改进过程中,NIST团队非常重视用户反馈,特别是在错误处理和诊断信息的改进上。新的工具包能够更早地报告严重的错误,并且错误信息的格式更加友好,支持与GNU Emacs等编辑器的集成。

6. 模式无关工具的概念

  • 文章重新审视了模式无关工具的概念,指出其优点和缺点。模式无关工具的主要优点是可以在不重新编译应用程序的情况下修改模式,特别适用于开发中的模式。然而,对于已经标准化的模式,模式相关的工具可能更高效。
  • NIST团队认为,尽管模式无关工具在某些情况下效率较低,但其灵活性和可维护性仍然使其在许多场景下具有优势。

7. 结论

  • 经过几年的开发和改进,NIST的EXPRESS工具包在性能、功能和用户体验方面都有了显著的提升。新的工具包符合最新的EXPRESS标准,提供了更好的错误诊断和更高效的运行性能。
  • 尽管用户需要对现有的应用程序进行一些修改以适应新的工具包,但NIST团队相信这些改进将使用户更加满意,并重新验证了工具包最初设计的合理性。

总结:

NIST的EXPRESS工具包经过多年的改进,成功解决了早期版本中的性能问题和实现错误。通过放弃面向对象设计、引入多遍解析机制、优化错误处理和诊断信息,工具包在性能和功能上都得到了显著提升。尽管模式无关工具的概念在某些情况下效率较低,但其灵活性和可维护性使其在开发环境中仍然具有重要价值。最终,NIST团队认为这些改进重新验证了工具包的设计理念,并为用户提供了更好的开发体验。

其中的模式无关工具的具体解释:

模式无关工具(Schema-Independent Tools)是指那些不依赖于特定EXPRESS模式的工具,能够处理任何符合EXPRESS语言规范的模式的工具。这种工具的设计理念是为了提供更高的灵活性和通用性,特别是在处理多个不同模式或模式频繁变化的情况下。以下是对模式无关工具的详细理解:

1. 核心概念

  • 模式无关:模式无关工具不依赖于任何特定的EXPRESS模式。它们能够解析和处理任何符合EXPRESS语言规范的模式文件,而不需要为每个模式生成特定的代码或进行特定的配置。
  • 通用性:由于工具不依赖于特定模式,因此可以用于处理各种不同的模式,而不需要为每个模式重新编译或修改工具。

2. 优点

  • 灵活性:模式无关工具的最大优势在于其灵活性。用户可以在不修改工具的情况下处理不同的模式,特别适用于模式频繁变化或开发中的场景。
  • 减少重复工作:由于工具是通用的,用户不需要为每个模式编写特定的代码或配置,减少了重复劳动。
  • 维护简单:只需要维护一个工具版本,而不是为每个模式维护一个特定的工具版本。

3. 缺点

  • 性能开销:模式无关工具通常需要在运行时解析和处理模式,这可能导致一定的性能开销,特别是在处理大型或复杂模式时。
  • 启动时间:每次运行工具时,都需要重新解析和翻译模式,这可能会增加启动时间。
  • 不适合标准化模式:对于已经标准化的模式,模式相关的工具可能更高效,因为它们可以针对特定模式进行优化。

4. 应用场景

  • 模式开发阶段:在模式尚未定型或频繁变化的开发阶段,模式无关工具非常有用,因为它们可以灵活地处理各种变化。
  • 多模式处理:当需要处理多个不同的模式时,模式无关工具可以避免为每个模式编写和维护特定的工具。
  • 快速原型开发:在需要快速验证或测试不同模式的情况下,模式无关工具可以节省大量时间和精力。

5. 与模式相关工具的对比

  • 模式相关工具(Schema-Dependent Tools)是针对特定模式生成的工具,通常通过将模式翻译为特定编程语言的代码(如C++)来实现。这种工具在运行时不需要解析模式,因此性能更高,但缺乏灵活性。
  • 模式无关工具则通过通用的解析器和处理器来处理任何模式,虽然性能可能不如模式相关工具,但在灵活性和通用性方面具有明显优势。

6. NIST工具包中的模式无关工具

  • NIST的EXPRESS工具包最初设计为模式无关工具,能够解析和处理任何EXPRESS模式。尽管在性能上存在一些挑战,但通过优化和改进,NIST团队成功提升了工具包的效率,使其在实际应用中仍然具有很高的价值。
  • 文章中提到,尽管模式无关工具在某些情况下效率较低,但其灵活性和可维护性使其在开发环境中仍然具有重要价值。

总结:

模式无关工具是一种能够处理任何符合EXPRESS语言规范的模式的通用工具,具有高度的灵活性和通用性。尽管在性能上可能存在一些开销,但其在处理多模式或模式频繁变化的场景中具有显著优势。NIST的EXPRESS工具包通过优化和改进,成功提升了模式无关工具的效率,使其在实际应用中仍然具有很高的价值。

原文在这里下载:NIST的EXPRESS语言工具开发经验