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.
 
												

Oberon程序设计语言简介的更多相关文章

  1. [零] JavaIO入门简介 程序设计语言 为什么需要IO库

     本文旨在引申出来Java IO的概念含义,作为学习JavaIO一个起步的了解知识点 部分内容引自<计算机操作系统第三版>  操作系统的文件管理   "在现代计算机系统中,要用到 ...

  2. 01. Go 语言简介

    Go语言简介 引用原文地址:http://m.biancheng.net/golang/ Go语言也称 Golang,兼具效率.性能.安全.健壮等特性.这套Go语言教程(Golang教程)通俗易懂,深 ...

  3. 计算机程序和C++语言简介

    C++程序设计 第一章 计算机程序和C++语言简介 1.计算机是一台能够存储并处理数据的电子设备,包含硬件和软件两部分. 2.计算机硬件由: 1)中央处理单元(Central Processing U ...

  4. 《C程序设计语言》【PDF】下载链接:

    <C程序设计语言>[PDF]下载 https://u253469.pipipan.com/fs/253469-230382180 内容简介 在计算机发展的历史上,没有哪一种程序设计语言像C ...

  5. 《C++程序设计语言(十周年纪念版)》【PDF】下载

    <C++程序设计语言(十周年纪念版)>[PDF]下载链接: https://u253469.pipipan.com/fs/253469-230382171 内容简介 <C++程序设计 ...

  6. 《C++程序设计语言(英文第四版)》【PDF】下载

    <C++程序设计语言(英文第四版)>[PDF]下载链接: https://u253469.pipipan.com/fs/253469-230382177 内容简介 本书是C++领域经典的参 ...

  7. 《程序设计语言——实践之路》【PDF】下载

    程序设计语言--实践之路>[PDF]下载链接: https://u253469.pipipan.com/fs/253469-230382240 内容简介 本书在美国大学已有使用了十余年,目前被欧 ...

  8. 《程序设计语言——实践之路(英文第三版)》【PDF】下载

    <程序设计语言--实践之路(英文第三版)>[PDF]下载链接: https://u253469.pipipan.com/fs/253469-230382234 内容简介 <程序设计语 ...

  9. 《程序设计语言——实践之路【PDF】下载

    <程序设计语言--实践之路[PDF]下载链接: https://u253469.pipipan.com/fs/253469-230382240 内容简介 <程序设计语言--实践之路(第3版 ...

随机推荐

  1. Front-End(五)——工具使用

    mac端推荐使用sublime+emmet. 环境搭建 sublime 官网下载sublime text 02或者03,03现在(2016.07)还是测试版,我使用的是text02. emmet su ...

  2. Ajax中参数带有html格式的 传入后台保存【二】

    KindEditor.ready(function (K) { //编辑器插件 window.editor1 = K.create('#ctjs', { uploadJson: '/Hotelgl/U ...

  3. 利用LibreOffice与ImageMagick将网页分享至微信

    现在越来越多的内容分享都是在微信上进行了.然而,若想将电脑浏览器中看到的感兴趣的网页分享至微信,则只能以纯文本的方式粘贴超级链接,而不能直接拷贝图文混排的HTML.因此,我想到不妨借助LibreOff ...

  4. Ansible hostvars

    1.  inventory hosts file 中的server 变量会覆盖group变量. hostvars: { "iaas_name": "test", ...

  5. 在IT界取得成功应该知道的10件事

    导读:人人似乎都同意IT行业是一个艰难领域,但怎样才能克服逆境,成为一名成功的IT专业人士呢?下文这些特质应该是关键.此文作者Jack Wallen,他在前段时间写过不少文章讨论IT职场,比如退出IT ...

  6. cpu affinity (亲和性)

    来源:http://www.ibm.com/developerworks/cn/linux/l-affinity.html#download 管理处理器的亲和性(affinity) 为什么(3 个原因 ...

  7. 移动端默认返回按键,使用h5+修改默认事件

    hbuilder的h5+提供开发webapp的诸多便利,很多手机自带back虚拟按键,如果不修改其默认事件,点一下app就退出了,所以我这里提供一种修改这个按键默认事件事件的代码. 首先你要用hbui ...

  8. myeclipse2014安装aptana3.4.0插件

    1.下载aptana3.4.0_eclipse的zip包  http://pan.baidu.com/s/1qXOiZl6 2.打开myeclipse2014,选择help→install from ...

  9. GO interface显示类型转换方法

    一共两种,直接看代码 import ( "fmt") func main() { //var i interface{} = "TT" var i interf ...

  10. Redis集合相关命令

    1.无序集合集合的特性:①确定性②互异性③无序性redis的set是string类型的无序集合set元素最大可以包含(2^32-1)个元素 sadd key value1....valueN 将将元素 ...