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. DB2数据库实例创建与删除 学习笔记

    以root身份执行 $DB2HOME/instance/db2idrop -f 实例名,注意一定要加-f,否则不会删除实例下面sqllib文件.如果不幸忘了,执行db2icrt,会报sqllib文件存 ...

  2. MVC 的 视图中 @section 是什么作用?

    可以定义一个渲染块,这个渲染块可以在LayoutPage里面引用,使用Html.RenderSection("section名称"); 可以指定一个bool参数指定如果Conten ...

  3. 利用Paramiko模块远程连接Linux

    使用Paramiko模块模拟SSH远程连接到服务器,并执行命令.(支持Tab键补全) 1.安装相关模块: 1)安装 Crypto 模块: 下载源码包解压 安装: sudo python setup.p ...

  4. 初级AD域渗透系列

      net group /domain 获得所有域用户组列表 net group “domain admins” /domain 获得域管理员列表 net group “enterprise admi ...

  5. 聚类算法K-Means, K-Medoids, GMM, Spectral clustering,Ncut

    原文请戳:http://blog.csdn.net/abcjennifer/article/details/8170687 聚类算法是ML中一个重要分支,一般采用unsupervised learni ...

  6. 关于MongoDB数据库中文件唯一性的问题

    ※重要※——介绍一下我的环境:MongoDB的“win32-x86_64-2008plus-ssl-3.0.5”,MongoVUE版本是1.6.9,VS2010,dll是1.10版本. MongoDB ...

  7. how to make a git repo un-git?

    If you have a git repo and now you want to make it a plain filesystem tree .. (removing the git trac ...

  8. Linux下获取IP、MAC、网关、掩码的shell脚本

    Mask:ifconfig |grep inet| sed -n '1p'|awk '{print $4}'|awk -F ':' '{print $2}'IP:ifconfig |grep inet ...

  9. kubernetes port nodePort targetPort 理解

    port The port that the service is exposed on the service's cluster ip (virsual ip). Port is the serv ...

  10. ng-Directive

    伪代码: var myModule = angular.module(...); myModule.directive('namespaceDirectiveName', function facto ...