Share
VIDEOS 1 TO 50
Oberon V4.avi
Oberon V4.avi
Published: 2012/05/13
Channel: Boris Ilov
Reviving a computer system of 25 years ago - Wirth, 2014
Reviving a computer system of 25 years ago - Wirth, 2014
Published: 2015/11/02
Channel: UnlikelyAsItMaySeem
Oberon Tutorial Part #1
Oberon Tutorial Part #1
Published: 2016/11/20
Channel: Andres Ramos
Choosing a programming language to learn
Choosing a programming language to learn
Published: 2016/01/11
Channel: BitwiseCourses
Oberon Tutorial Part #6 -1st program and hardware hack
Oberon Tutorial Part #6 -1st program and hardware hack
Published: 2017/03/05
Channel: Andres Ramos
Niklaus Wirth on Teaching Computer Science
Niklaus Wirth on Teaching Computer Science
Published: 2012/06/20
Channel: ieeeComputerSociety
Eduard Ulrich C++, Java, Oberon - Pros and Cons
Eduard Ulrich C++, Java, Oberon - Pros and Cons
Published: 2017/05/28
Channel: Barcamp Yerevan
OBM - Programming language - Oberon
OBM - Programming language - Oberon
Published: 2016/11/18
Channel: Our Best Moments
Oberon (operating system)
Oberon (operating system)
Published: 2016/01/08
Channel: WikiAudio
Into the Realm of Oberon An Introduction to Programming and the Oberon 2 Programming Language
Into the Realm of Oberon An Introduction to Programming and the Oberon 2 Programming Language
Published: 2017/05/11
Channel: Amy Hudson
Oberon Hello World!
Oberon Hello World!
Published: 2012/05/14
Channel: Boris Ilov
Oberon Tutorial #8 - The Oberon Desktop
Oberon Tutorial #8 - The Oberon Desktop
Published: 2017/04/01
Channel: Andres Ramos
Download Oberon 2 Programming with Windows PDF
Download Oberon 2 Programming with Windows PDF
Published: 2016/11/21
Channel: O Stowers
Fantom - The Developer
Fantom - The Developer's Choice!
Published: 2016/12/10
Channel: Steve Eynon
Oberon Tutorial Part #3
Oberon Tutorial Part #3
Published: 2016/12/01
Channel: Andres Ramos
Download Oberon 2 Programming with Windows
Download Oberon 2 Programming with Windows
Published: 2017/01/16
Channel: Albiano E.
Project Oberon The Design of an Operating System and Compiler Acm Press Books
Project Oberon The Design of an Operating System and Compiler Acm Press Books
Published: 2016/01/08
Channel: Aaron. D
code injection [1/2]
code injection [1/2]
Published: 2008/03/17
Channel: xenopusRTRT
oberon.flv
oberon.flv
Published: 2010/01/21
Channel: frankml01
Top 20 Niklaus Wirth Quotes - The  Swiss Computer Scientist
Top 20 Niklaus Wirth Quotes - The Swiss Computer Scientist
Published: 2016/02/27
Channel: Daily-Quotes
BlackBox lessons. List Box.
BlackBox lessons. List Box.
Published: 2014/10/25
Channel: Ivan Kuzmitsky
xmonad + a2 oberon coding -- marsupial style
xmonad + a2 oberon coding -- marsupial style
Published: 2017/07/10
Channel: Soren Renner
GTAC 2009 - Opening Talk
GTAC 2009 - Opening Talk
Published: 2009/11/12
Channel: GoogleTechTalks
HD: Niklaus Wirth steuert  Ceres-PC mit Oberon @ETH, 27. Mai 2011
HD: Niklaus Wirth steuert Ceres-PC mit Oberon @ETH, 27. Mai 2011
Published: 2011/06/03
Channel: digitalaktuell
Computing Conversations: Bertrand Meyer: Eiffel Programming Language
Computing Conversations: Bertrand Meyer: Eiffel Programming Language
Published: 2012/08/29
Channel: ieeeComputerSociety
Computing Conversations: Niklaus Wirth
Computing Conversations: Niklaus Wirth
Published: 2012/06/20
Channel: ieeeComputerSociety
OberonAssistant
OberonAssistant
Published: 2013/11/11
Channel: Alexey Veselovsky
7   3   Lecture 5 3 Largest and Smallest 10 16
7 3 Lecture 5 3 Largest and Smallest 10 16
Published: 2015/09/16
Channel: Sabikk Sabikk
What is COMPONENT PASCAL? What does COMPONENT PASCAL mean? COMPONENT PASCAL meaning
What is COMPONENT PASCAL? What does COMPONENT PASCAL mean? COMPONENT PASCAL meaning
Published: 2017/10/23
Channel: The Audiopedia
Chapel Programing Tutorial 1 - Install with Helloworld
Chapel Programing Tutorial 1 - Install with Helloworld
Published: 2013/08/16
Channel: AcuStat
Google I/O 2012 - Meet the Go Team
Google I/O 2012 - Meet the Go Team
Published: 2012/07/02
Channel: Google Developers
My Little Pony - Darach Ennis, Sylvan Clebsch
My Little Pony - Darach Ennis, Sylvan Clebsch
Published: 2015/11/19
Channel: Erlang Solutions
Oberon System Implemented on a Low-Cost FPGA Board - Papers We Love #011
Oberon System Implemented on a Low-Cost FPGA Board - Papers We Love #011
Published: 2015/07/20
Channel: Engineers.SG
06-Pantheon of Programming - Niklaus Wirth
06-Pantheon of Programming - Niklaus Wirth
Published: 2011/07/08
Channel: Andy Wicks
Wirth
Wirth's queens algorithm animation experimental experiment
Published: 2017/07/12
Channel: Mabaka52
Sphere from icosahedron: OpenGL / Oberon / Sdl2
Sphere from icosahedron: OpenGL / Oberon / Sdl2
Published: 2016/05/21
Channel: Ivan Denisov
An Interview with Niklaus Emil Wirth, Part 3
An Interview with Niklaus Emil Wirth, Part 3
Published: 2010/04/02
Channel: ieeeComputerSociety
pokladnica oberon
pokladnica oberon
Published: 2014/10/21
Channel: Jaroslav Kessel
Vintage Computer Community Grid @ DMS Live Stream - June 19th - Pascal Day
Vintage Computer Community Grid @ DMS Live Stream - June 19th - Pascal Day
Published: 2017/06/20
Channel: Vintage Computer Community Grid @ DMS
An Interview with Niklaus Emil Wirth, Part 1
An Interview with Niklaus Emil Wirth, Part 1
Published: 2011/06/07
Channel: ieeeComputerSociety
0.4: What are some programming languages? - Processing Tutorial
0.4: What are some programming languages? - Processing Tutorial
Published: 2015/07/24
Channel: The Coding Train
Pascal (programming language)
Pascal (programming language)
Published: 2014/08/12
Channel: Audiopedia
GNU Modula-2 status - GNU Tools Cauldron 2016
GNU Modula-2 status - GNU Tools Cauldron 2016
Published: 2016/09/24
Channel: Embecosm
An Interview with Niklaus Emil Wirth, Part 2
An Interview with Niklaus Emil Wirth, Part 2
Published: 2010/04/02
Channel: ieeeComputerSociety
Java Programming Tutorial for Beginners Installing the JDK
Java Programming Tutorial for Beginners Installing the JDK
Published: 2013/12/02
Channel: iMAliceSmith
Hardware interaction with programming languages part 01
Hardware interaction with programming languages part 01
Published: 2009/03/16
Channel: suneth dissanayaka
DemoCloningViewersIntoNewVirtualDisplays
DemoCloningViewersIntoNewVirtualDisplays
Published: 2016/12/15
Channel: andreaspirklbauer
Running Plan 9 (9front fork) in Virtualbox
Running Plan 9 (9front fork) in Virtualbox
Published: 2014/10/13
Channel: Chris McGee
HD: Niklaus Wirth steuert Ceres-PC mit Oberon @ETH, 27. Mai 2011
HD: Niklaus Wirth steuert Ceres-PC mit Oberon @ETH, 27. Mai 2011
Published: 2015/11/16
Channel: CSP the secret adio
Modula-2 program reversing a text string.
Modula-2 program reversing a text string.
Published: 2011/05/18
Channel: redbear8174
NEXT
GO TO RESULTS [51 .. 100]

WIKIPEDIA ARTICLE

From Wikipedia, the free encyclopedia
Jump to: navigation, search
Oberon
OberonLogo.png
Paradigm imperative, structured, modular, object-oriented
Designed by Niklaus Wirth
First appeared 1986
Typing discipline strong, hybrid (static and dynamic)
Website www.projectoberon.com
Influenced by
Modula-2
Influenced
Oberon-2, Zonnon, Go, Nim

Oberon is a general-purpose programming language created in 1986 by Niklaus Wirth and the latest member of the Wirthian family of ALGOL-like languages (Euler, Algol-W, Pascal, Modula, and Modula-2).[1][2][3] Oberon was the result of a concentrated effort to increase the power of Modula-2, the direct successor of Pascal, and simultaneously to reduce its complexity. Its principal new feature is the concept of type extension of record types:[4] It permits the construction of new data types on the basis of existing ones and to relate them, deviating from the dogma of strictly static data typing. Type extension is Wirth's way of inheritance reflecting the viewpoint of the parent site. Oberon was developed as part of the implementation of the Oberon operating system at ETH Zurich in Switzerland. The name is from the moon of Uranus, Oberon.

Oberon is still maintained by Wirth and the latest revision is dated May 3, 2016.

Design[edit]

Oberon is designed with a motto attributed to Albert Einstein in mind: “Make things as simple as possible, but not simpler.” The principal guideline was to concentrate on features that are basic and essential and to omit ephemeral issues. Another factor was recognition of the growth of complexity in languages such as C++ and Ada: in contrast to these, Oberon emphasizes the use of the library concept for extending the language. Enumeration and subrange types, which were present in Modula-2, have been removed; similarly, set types have been limited to small sets of integers, and the number of low-level facilities has been sharply reduced (most particularly, type transfer functions have been eliminated). Elimination of the remaining potentially-unsafe facilities concludes the most essential step toward obtaining a truly high-level language. Very close type-checking even across modules, strict index-checking at run time, null-pointer checking, and the safe type extension concept largely allow the programmer to rely on the language rules alone.

The intent of this strategy was to produce a language that is easier to learn, simpler to implement, and very efficient. Oberon compilers have been viewed as compact and fast, while providing adequate code quality compared to commercial compilers.[5]

Characteristics[edit]

The following features characterise the Oberon language:

  • Case sensitive syntax with uppercase keywords
  • Type-extension with type test
  • Modules and separate compilation
  • String operations
  • Isolation of unsafe code
  • Support for system programming

Object orientation[edit]

Oberon supports extension of record types for the construction of abstractions and heterogeneous structures. In contrast to the later dialects—Oberon-2 and Active Oberon—the original Oberon doesn't have a dispatch mechanism as a language feature but rather as programming technique or design pattern. This gives great flexibility in the OOP world. In the Oberon operating system two programming techniques have been used in conjunction for the dispatch call: Method suite and Message handler.

Method suite[edit]

In this technique a table of procedure variables is defined and a global variable of this type is declared in the extended module and assigned back in the generic module:

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.

We extend the generic type Figure to a specific shape:

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.

Dynamic dispatch is only done via procedures in Figures module that is the generic module.

Message handler[edit]

This technique consists of replacing the set of methods with a single procedure, which discriminates among the various methods:

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.

We extend the generic type Figure to a specific shape:

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.

In the Oberon operating system both of these techniques are used for dynamic dispatch. The first one is used for a known set of methods; the second is used for any new methods declared in the extension module. For example, if the extension module Rectangles were to implement a new Rotate() procedure, within the Figures module it could only be called via a message handler.

Implementations and variants[edit]

Oberon[edit]

No-cost implementations of Oberon (the language) and Oberon (the operating system) can be found on the Internet (several are from ETHZ itself).

Oberon-2[edit]

A few changes were made to the first released specification (object-oriented programming features were added, the 'FOR' loop was reinstated, for instance); the result was Oberon-2, currently the most common implementation. There is a release called Native Oberon which includes an operating system, and can directly boot on PC class hardware. A .NET implementation of Oberon with the addition of some minor .NET-related extensions has also been developed at ETHZ. In 1993 an ETHZ spin off company brought a dialect of Oberon-2 to the market with the name Oberon-L, which was renamed to Component Pascal in 1997.

Oberon-2 compilers maintained by ETH include versions for Microsoft Windows, Linux, Solaris, and classic Mac OS. Furthermore, there are implementations for various other operating systems, such as Atari-TOS or AmigaOS.

There is an Oberon-2 Lex scanner and Yacc parser by Stephen J Bevan of Manchester University, UK, based on the one in the Mössenböck and Wirth reference. It is at version 1.4.

Oberon-07[edit]

Oberon-07, defined by Niklaus Wirth in 2007 and revised in 2011, 2013, 2014, 2015 and 2016 is based on the original version of Oberon rather than Oberon-2. The main changes are: explicit numeric conversion functions (e.g. FLOOR and FLT) must be used, the LOOP and EXIT statements have been eliminated, WHILE statements have been extended, CASE statements can be used for type extension tests, RETURN statements can only be connected to the end of a function, imported variables and structured value parameters are read-only and arrays can be assigned without using COPY. For full details, see The Programming Language Oberon-07.

Oberon-07 compilers have been developed for use with several different computer systems. OBNC compiles via C and can be used on any POSIX compatible operating system. Oberon-07M produces 32-bit Windows binaries and implements revision 2008 of the language. Akron's produces binaries for both Windows and Linux. oberonjs translates Oberon to JavaScript. Other implementations target 32-bit ARM Cortex-M3, M4 and M7 microcontrollers, and a Wirth-designed RISC processor implemented using a Xilinx FPGA Spartan-3 board. Ports to FPGA Spartan-6, Spartan-7, Artix-7 and a RISC emulator for Windows (compilable on Linux and OS X, as well as binaries available for Windows) also exist.

Active Oberon[edit]

Active Oberon is yet another variant of Oberon, which adds objects (with object-centered access protection and local activity control), system-guarded assertions, preemptive priority scheduling and a changed syntax for methods (- type-bound procedures in the Oberon world). Objects may be active, which means that they may be threads or processes. Additionally, Active Oberon has a way to implement operators (including overloading), an advanced syntax for using arrays (see OberonX language extensions and Proceedings[6] of the 7th Joint Modular Languages Conference 2006 Oxford, UK), and knows about namespaces (see Proposal for Module Contexts). The operating system A2 - Bluebottle, especially the kernel, synchronizes and coordinates different active objects.

ETHZ has released Active Oberon which supports active objects, and the Bluebottle operating system and environment (JDK, HTTP, FTP, etc.) for the language. As with many prior designs from ETHZ, versions of both are available for download on the Internet. As this is written, both single and dual x86 CPUs and the StrongARM family are supported.

Related languages[edit]

Development has continued on languages in this family. A further extension of Oberon-2, originally named Oberon/L but later renamed to Component Pascal, was developed for Windows and classic Mac OS by Oberon microsystems, a commercial company spin-off from ETHZ, and for .NET by Queensland University of Technology. In addition, the Lagoona and Obliq languages carry the Oberon spirit into specialized areas.

Recent .NET development efforts at ETHZ have been focused on a new language called Zonnon. This includes the features of Oberon and restores some from Pascal (enumerated types, built-in IO) but has some syntactic differences. Additional features include support for active objects, operator overloading and exception handling. Zonnon is available as a plug-in language for the Microsoft Visual Studio for .NET development environment.

Oberon-V (originally called Seneca, after Seneca the Younger) is a descendant of Oberon designed for numerical applications on supercomputers, especially vector or pipelined architectures. It includes array constructors and an ALL statement. (See "Seneca - A Language for Numerical Applications on Vectorcomputers", Proc CONPAR 90 - VAPP IV Conf. R. Griesemer, Diss Nr. 10277, ETH Zurich.)

See also[edit]

References[edit]

  1. ^ Wirth, Niklaus: The Programming Language Oberon. Software - Practice and Experience, 18:7, 661-670, Jul. 1988
  2. ^ Wirth, Niklaus: From Modula to Oberon. Software - Practice and Experience, 18:7, 671-690, Jul. 1988
  3. ^ Wirth, Niklaus: Type Extensions. ACM Transactions on Programming Languages, 10:2, 204-214, Apr. 1988
  4. ^ D. Pountain, Modula's Children, Part II: Oberon - BYTE 16(3), 135-142, Mar. 1991.
  5. ^ Mössenböck, Hanspeter. "Compiler Construction: The Art of Niklaus Wirth" (Pdf). Ftp.ssw.uni-linz.ac.at. 
  6. ^ Friedrich, Felix; Gutknecht, Jürg (2006). "Array-Structured Object Types for Mathematical Programming". In Lightfoot, David E.; Szyperski, Clemens. "Modular Programming Languages". Springer, Berlin Heidelberg. pp. 195–210. ISBN 978-3-540-40927-4. 

External links[edit]

General[edit]

Evolution of Oberon[edit]

Disclaimer

None of the audio/visual content is hosted on this site. All media is embedded from other sites such as GoogleVideo, Wikipedia, YouTube etc. Therefore, this site has no control over the copyright issues of the streaming media.

All issues concerning copyright violations should be aimed at the sites hosting the material. This site does not host any of the streaming media and the owner has not uploaded any of the material to the video hosting servers. Anyone can find the same content on Google Video or YouTube by themselves.

The owner of this site cannot know which documentaries are in public domain, which has been uploaded to e.g. YouTube by the owner and which has been uploaded without permission. The copyright owner must contact the source if he wants his material off the Internet completely.

Powered by YouTube
Wikipedia content is licensed under the GFDL and (CC) license