Oberon程序设计语言简介

  Oberon奥伯龙是一种通用编程语言,也是一种同名操做系统(由Oberon语言开发,且参考过贝尔实验室的新一代网络操做系统Plan9),是由原Pascal程序设计语言的发明者Niklaus Wirth创造并实现,由Pascal发展而来,其语法优雅简洁,高效易用,适用于ARM等多种处理器应用。而且Oberon可用于开发系统程序和应用程序,而通常常见的程序语言较偏系统或应用的某一方面。程序员

 

**1,设计**
编程

  从维基百科处可知,Oberon设计有一个座右铭是艾伯特爱因斯坦的想法:“把事情变得尽量的简单,而不是更简单。”的方针是将注意力集中在那些基本的和必要的,忽略短暂的问题特征。另外一个因素是在如C/C++和Ada语言复杂性的增加识别:相对于这些,奥伯伦强调扩展语言的图书馆概念的使用。枚举、子界类型,这是目前在Modula-2,已被删除;一样,设置类型一直局限于小的整数,和底层设施的数量已大幅减小(最特别的是,型传递函数已被淘汰)。剩余的潜在的不安全设施消除的结论对得到真正的高级语言的最重要的一步。很是接近甚至跨模块的类型检查在运行时检查严格的指标空指针检查和安全类型扩展的概念在很大程度上容许程序员依靠语言规则设计模式

  这一思想理念的目的是产生一种更容易学习的语言,容易实现,并且很是有效,而且它的理念产生的结果是可用于研究和工程两方面。奥伯龙编译器一直被认为是紧凑和速度很快的同时相比商业编译器能提供或许更好的代码质量。安全

      但Oberon没有流传于世并发展起来,最主要的缘由是UNIXT/C的这对黄金组合奠基了现代开放计算机技术的基石,如今没有任何技术能够撼动(不要说Windows,现代操做系统在发展上都是相互相成的)。IBM的AS400是个例外,Oberon是个例外。虽然它是个理想式的编程语言工具,但它却没有函数式编程语言Lisp那么的纯粹。现代编程语言朝着两个方向在继续发展。网络

 

**2,特色**并发

      1,方法与关键字大写敏感的句法编程语言

  2,试验扩展函数式编程

  3,分离混合函数

  4,字符串操做工具

  5,垃圾收集器

  6,代码分离

  7,支持系统编程

 

**3,面向对象**

      该支持为抽象和异质结构的施工记录类型的扩展,但没有一个调度机制做为语言的特性而是编程技术或设计模式。这给予了极大的灵活性,在面向对象的世界。操做系统的两个编程技术已被用于链接调度通讯:方法消息处理方法

 

**4,方法套件**

示例的程序变量的定义和类型的一个全局变量在扩展模块声明分配通用模块

MODULE Figures; (* Abstract module *)

TYPE
   Figure*    = POINTER TO FigureDesc;
   Interface* = POINTER TO InterfaceDesc;

   InterfaceDesc* = RECORD
      draw*  : PROCEDURE (f : Figure);
      clear* : PROCEDURE (f : Figure);
      mark*  : PROCEDURE (f : Figure);
      move*  : PROCEDURE (f : Figure; dx, dy : INTEGER);
   END;

   FigureDesc* = RECORD
      if : Interface;
   END;

PROCEDURE Init* (f : Figure; if : Interface);
BEGIN
   f.if := if;
END Init;

PROCEDURE Draw* (f : Figure);
BEGIN
   f.if.draw(f);
END Draw;

(* Other procedures here *)

END Figures.

由上述示例,扩展了通用图形到一个特定的形状

 

MODULE Rectangles;

IMPORT Figures;

TYPE
   Rectangle* = POINTER TO RectangleDesc;

   RectangleDesc* = RECORD
     (Figures.FigureDesc)
     x, y, w, h : INTEGER;
   END;

VAR
   if : Figures.Interface;

PROCEDURE New* (VAR r : Rectangle);
BEGIN
   NEW(r);
   Figures.Init(r, if);
END New;

PROCEDURE Draw* (f : Figure);
  VAR
    r : Rectangle;
BEGIN
  r := f(Rectangle); (* f AS Rectangle *)
  (* ... *)
END Draw;

(* Other procedures here *)

BEGIN (* Module initialisation *)
   NEW(if);
   if.draw  := Draw;
   if.clear := Clear;
   if.mark  := Mark;
   if.move  := Move;
END Rectangles.

动态调度经过程序的数据模块,通用模块

 

**5,消息处理程序**

该技术包括更换一个程序设置方法各类方法之间的区别

MODULE Figures; (* Abstract module *)

TYPE
   Figure*    = POINTER TO FigureDesc;

   Message*   = RECORD END;
   DrawMsg*   = RECORD (Message) END;
   ClearMsg*  = RECORD (Message) END;
   MarkMsg*   = RECORD (Message) END;
   MoveMsg*   = RECORD (Message) dx*, dy* : INTEGER END;

   Handler*   = PROCEDURE (f : Figure; VAR msg : Message);

   FigureDesc* = RECORD
      (* Abstract *)
      handle : Handler;
   END;

PROCEDURE Handle* (f : Figure; VAR msg : Message);
BEGIN
   f.handle(f, msg);
END Handle;

PROCEDURE Init* (f : Figure; handle : Handler);
BEGIN
  f.handle := handle;
END Init;

END Figures.

扩展了通用到一个特定的形状
MODULE Rectangles;

IMPORT Figures;

TYPE
   Rectangle* = POINTER TO RectangleDesc;

   RectangleDesc* = RECORD
      (Figures.FigureDesc)
      x, y, w, h : INTEGER;
   END;

PROCEDURE Draw* (r : Rectangle);
BEGIN
  (* ... *)
END Draw;

(* Other procedures here *)

PROCEDURE Handle* (f: Figure; VAR msg: Figures.Message);
   VAR
      r : Rectangle;
BEGIN
   r := f(Rectangle);
   IF    msg IS Figures.DrawMsg THEN Draw(r)
   ELSIF msg IS Figures.MarkMsg THEN Mark(r)
   ELSIF msg IS Figures.MoveMsg THEN Move(r, msg(Figures.MoveMsg).dx, msg(Figures.MoveMsg).dy)
   ELSE  (* ignore *)
   END
END Handle;

PROCEDURE New* (VAR r : Rectangle);
BEGIN
   NEW(r);
   Figures.Init(r, Handle);
END New;

END Rectangles.
相关文章
相关标签/搜索