dram.me

Modula-2和Oberon-07比较

补遗

  1. Oberon调整数值型字符常量的后缀为X,Modula-2为C。—— 2017-01-05

  2. Oberon去除八进制数值后缀B。—— 2017-01-05

  3. Oberon去除CARDINAL类型,相应的也不需要说明符号整数和无符号整数类型兼容性问题。—— 2017-01-07

  4. Oberon去除subrange类型。—— 2017-01-07

N. Wirth设计的三大编程语言Pascal (1970),Modula-2 (1979),Oberon (1988),当前虽然没有大范围的应用,但依然有一定活跃度。Pascal自不用多说,Modula-2在嵌入式领域依然有广泛的应用,N. Wirth自己则依然专注于对Oberon语言和Oberon System的完善。

这里想就Modula-2 PIM4Oberon-07作比较说明(PIM4的语言规范可以在链接中Back Matter部分PDF中找到),以此可以看到语言设计的一些思路。看似差异不大的两个语言,或大或小的差异有很多。

新增(或更新)特性

  1. 结构体支持可扩展,该特性源于对面向对象范式的支持;

  2. 结构体中字段支持可见性申明;

  3. PROCEDURE如果有返回值,必须在结尾处定义(这一特性取代了之前任意放置RETURN语句的模式);

  4. WHILE语句增加ELSIF子句(这一特性取代了之前LOOPEXIT语句组合的模式);

  5. 允许对结构体和数组赋值(这一特性取代了COPY过程,虽然更加简洁,但这一某种程度上让使用者无法感知拷贝结构体和数组的隐含成本);

  6. 不允许对结构体或者数组的值参数(value parameter)赋值(对于这一点,觉得可以更严格些,要求对于所有值参数都不允许赋值,这样可以允许编译器对所有值参数的传入做优化处理。不过这样在并发的环境中如果有竞争关系的数据需要显式传入);

  7. 不允许对导入的变量赋值;

  8. 新增ASSERT过程(非常有用的方法,可以类似C语言中宏的实现,可以在错误提示中打印涉及的代码以及代码位置);

  9. 新增FLOOR过程(取代MathLib0.entier过程);

  10. 限制指针只能指向结构体(从Wirth的论文Data Structures and Algorithms中也可以看到,指针主要用于组建复杂结构体)。

删除特性

  1. 去除RETURN语句;

  2. 去除EXIT语句;

  3. 去除LOOP语句;

  4. 去除字符串不能包含换行符的限制,这一点在字符串字面值中的换行符有讨论;

  5. 去除/不能用于整型的限制(这个限制感觉是有用的,应用于整数的结果依然是整数,这样就可能需要有浮点数转整型的过程,这一过程存在多种模式);

  6. 数组不支持指定开始下标;

  7. 去除枚举类型;

  8. 去除WITH语句;

  9. 去除COPY过程;

  10. 去除HALT过程(由ASSERT(FALSE)代替,但这样就需要另外找一个正常退出系统的方式);

  11. 删除MINMAX

  12. 删除CAP过程。