mirror of
https://github.com/vishapoberon/compiler.git
synced 2026-04-06 05:12:26 +00:00
227 lines
8.8 KiB
Markdown
227 lines
8.8 KiB
Markdown
[](http://brownsmeet.com/log/)
|
||
|
||
# Ѵishap Oberon
|
||
|
||
[Ѵishap Oberon](http://oberon.vishap.am) is a free and open source (GPLv3)
|
||
implementation of the Oberon-2 language and libraries for use on
|
||
conventional operating systems such as Linux, BSD, Android, Mac and Windows.
|
||
|
||
Vishap's Oberon Compiler (voc) uses a C backend (gcc, clang or msc) to compile
|
||
Oberon programs under Unix, Mac or Windows. Vishap Oberon includes
|
||
libraries from the Ulm, oo2c and Ofront Oberon compilers, as well as
|
||
default libraries complying with the Oakwood Guidelines for Oberon-2 compilers.
|
||
|
||
###### Contents
|
||
|
||
> [Installation](#installation)
|
||
> [A 'Hello' application](#a-hello-application)
|
||
> [Licensing](#licensing)
|
||
> [Platform support and porting](#platform-support-and-porting)
|
||
> [Language support and libraries](#language-support-and-libraries)
|
||
> [History](#history)
|
||
> [Roadmap](#roadmap)
|
||
> [Contributors](#contributors)
|
||
> [Origin of the name "Ѵishap Oberon"](#origin-of-the-name-Ѵishap-oberon)
|
||
> [References](#references)
|
||
|
||
|
||
## Installation
|
||
|
||
###### Prerequisites
|
||
|
||
| Platform | Packages |
|
||
| --------- | ------------ |
|
||
| Debian/Ubuntu/Mint ... | `apt-get install git` |
|
||
| Fedora/RHEL/CentOS ... | `yum install git gcc glibc-static` |
|
||
| FreeBSD/OpenBSD/NetBSD | `pkg install git` |
|
||
| Cygwin | use setup-x86[_x64] to add packages git, make and gcc-core |
|
||
| Darwin | type 'git' at the command line and accept the prompt to install it. |
|
||
|
||
More details, including for MingW and MS C, in [Installation](/doc/Installation.md).
|
||
|
||
###### Build and install
|
||
|
||
1. `git clone https://github.com/vishaps/voc`
|
||
2. `cd voc`
|
||
3. `[sudo] make full`
|
||
|
||
Since 'make full' will install the compiler and libraries, it needs root (unix) or administrator (windows) privileges.
|
||
|
||
###### PATH environment variable
|
||
|
||
Set your path to the installed compiler binary location as reported
|
||
by make full, e.g.
|
||
|
||
| System | Set path |
|
||
| --------- | -------------------------------------- |
|
||
| Linux | `export PATH="/opt/voc/bin:$PATH"` |
|
||
| BSD | `export PATH="/usr/local/share/voc/bin:$PATH"` |
|
||
| Windows | See [Installation](/doc/Installation.md) |
|
||
| Termux | `export PATH="/data/data/com.termux/files/opt/voc/bin:$PATH"` |
|
||
|
||
Also see [Installation](/doc/Installation.md).
|
||
|
||
## A 'Hello' application
|
||
|
||
Anything appended to Oberon.Log is automatically displayed on the console, so the
|
||
following conventional Oberon program will display 'Hello.':
|
||
|
||
```Modula-2
|
||
MODULE hello;
|
||
IMPORT Oberon, Texts;
|
||
VAR W: Texts.Writer;
|
||
BEGIN
|
||
Texts.OpenWriter(W);
|
||
Texts.WriteString(W, "Hello."); Texts.WriteLn(W);
|
||
Texts.Append(Oberon.Log, W.buf)
|
||
END hello.
|
||
```
|
||
|
||
Alternatively the Console may be accessed directly as follows:
|
||
|
||
```Modula-2
|
||
MODULE hello;
|
||
IMPORT Console;
|
||
BEGIN
|
||
Console.String("Hello."); Console.Ln;
|
||
END hello.
|
||
```
|
||
|
||
Compile as follows:
|
||
|
||
voc hello.mod -m
|
||
|
||
The -m parameter tells voc that this is a main module, and to generate an
|
||
executable binary.
|
||
|
||
Execute as usual on Linux ('./hello') or Windows ('hello').
|
||
|
||
|
||
Also see [Compiling](/doc/Compiling.md).
|
||
|
||
## Licensing
|
||
|
||
Vishap Oberon's frontend and C backend engine is a fork of Josef Templ’s Ofront, which has been released
|
||
under the FreeBSD License. Unlike Ofront, Vishap Oberon does not include the Oberon v4 environment.
|
||
|
||
The Ulm Oberon Library and the Ooc libraries are distributed under GPL. Proprietry code
|
||
using these libraries may not be statically linked.
|
||
|
||
Voc tools are distributed under GPLv3.
|
||
|
||
Most of the runtime in libVishapOberon is distributed under GPLv3 with runtime exception.
|
||
|
||
|
||
## Platform support and porting
|
||
|
||
Vishap Oberon supports 32 and 64 bit little-endian architectures including Intel x86 and x64, arm and ppc.
|
||
|
||
It compiles under gcc, clang and Microsoft Visual C.
|
||
|
||
Installation supports GNU/Linux, MAC OSX, BSD and Windows (native and cygwin).
|
||
|
||
A C program (src/tools/make/configure.c) detects the details of the C compiler
|
||
and operating system on which it is running. In most cases it will automatically
|
||
determine all that is needed for the port to a new platform. and 'make full'
|
||
will just work.
|
||
|
||
In some cases manual work will be required:
|
||
|
||
- If configure.c cannot recognise the operating system on which it is running
|
||
a few lines will need to be added to detect and set the make variables
|
||
correctly.
|
||
- If porting to a system that does not provide a Unix style API, it will be
|
||
necessary to implement a new variant of Platform.Mod providing the same
|
||
interface as Platformunix.Mod and Platform Windows.Mod.
|
||
|
||
For details, see [Porting](/doc/Porting.md).
|
||
|
||
## Language support and libraries
|
||
|
||
Vishap Oberon supports the Oberon 2 programming language, including type-bound procedures.
|
||
|
||
It also supports some features of Oberon-07.
|
||
|
||
Vishap Oberon comes with libraries easing the porting of code from the major
|
||
Oberon systems:
|
||
|
||
- Oberon V4 and S3 compatible library set.
|
||
|
||
- ooc (optimizing oberon-2 compiler) library port.
|
||
|
||
- Ulm’s Oberon system library port.
|
||
|
||
Some other freely redistributable libraries are available as a part of voc distribution.
|
||
|
||
See also [Features](/doc/Features.md).
|
||
|
||
## History
|
||
|
||
See [History](/doc/History.md).
|
||
|
||
## Roadmap
|
||
|
||
See [Roadmap](/doc/Roadmap.md).
|
||
|
||
## Contributors
|
||
|
||
Originally developed as a cross platform implementation of the
|
||
Oberon system by Joseph Templ.
|
||
|
||
Updated for 64 bit support, refactored as a standalone compiler and brought
|
||
to new platforms by Norayr Chilingarian.
|
||
|
||
Build process simplified for more platform support and bugs fixed by David
|
||
C W Brown.
|
||
|
||
## Origin of the name "Ѵishap Oberon"
|
||
|
||
###### Ѵishap
|
||
|
||
Vishaps are dragons inhabiting the Armenian Highlands.
|
||
We decided to name the project “Vishap” because ties between compilers and dragons have ancient traditions.
|
||
|
||
Also, Vishaps are known in tales, fiction. [This page](http://blog.fogus.me/2015/04/27/six-works-of-computer-science-fiction/) refers to some technologies as “computer science fiction”. Among them to Oberon. This brings another meaning, Oberon is like aliens, ghosts. And Vishaps.
|
||
|
||
###### Oberon - System and Programming Language
|
||
|
||
Oberon is a programming language, an operating system and a graphical
|
||
user interface. Originally designed and implemented by by Niklaus Wirth and
|
||
Jürg Gutknecht at ETH Zürich in the late 1980s, it demonstrates that the
|
||
fundamentals of a modern OS and GUI can be implemented in clean and simple code
|
||
orders of magnitude smaller than found in contemporary systems.
|
||
|
||
The Oberon programming language is an evolution of the Pascal and Modula
|
||
languages. While it adds garbage collection, extensible types and (in
|
||
Oberon-2) type-bound procedures, it is also simplified following the principals
|
||
of Einstein and Antoine de Saint-Exupéry:
|
||
|
||
> Make it as simple as possible, but not simpler. (Albert Einstein)
|
||
|
||
> Perfection is finally attained not when there is no longer anything to add, but
|
||
> when there is no longer anything to take away. (Antoine de Saint-Exupéry,
|
||
> translated by Lewis Galantière.)
|
||
|
||
## References
|
||
|
||
###### Oberon
|
||
- [The History of Modula-2 and Oberon](http://people.inf.ethz.ch/wirth/Articles/Modula-Oberon-June.pdf)
|
||
- [The Programming Language Oberon](https://www.inf.ethz.ch/personal/wirth/Oberon/Oberon.Report.pdf)
|
||
- [Project Oberon: The Design of an Operating System and Compiler ](http://www.ethoberon.ethz.ch/WirthPubl/ProjectOberon.pdf)
|
||
- [Oberon - the Overlooked Jewel](http://citeseerx.ist.psu.edu/viewdoc/download?doi=10.1.1.90.7173&rep=rep1&type=pdf)
|
||
|
||
###### Oberon 2
|
||
- [Differences between Oberon and Oberon-2](http://members.home.nl/jmr272/Oberon/Oberon2.Differences.pdf)
|
||
- [The Programming Language Oberon-2](http://www.ssw.uni-linz.ac.at/Research/Papers/Oberon2.pdf)
|
||
- [Programming in Oberon. Steps beyond Pascal and Modula](http://www.ethoberon.ethz.ch/WirthPubl/ProgInOberonWR.pdf)
|
||
- [The Oakwood Guidelines for Oberon-2 Compiler Developers](http://www.math.bas.bg/bantchev/place/oberon/oakwood-guidelines.pdf)
|
||
|
||
###### Oberon 07
|
||
- [Difference between Oberon-07 and Oberon](https://www.inf.ethz.ch/personal/wirth/Oberon/Oberon07.pdf)
|
||
- [The Programming Language Oberon-07](https://www.inf.ethz.ch/personal/wirth/Oberon/Oberon07.Report.pdf)
|
||
- [Programming in Oberon - a Tutorial](https://www.inf.ethz.ch/personal/wirth/Oberon/PIO.pdf)
|
||
|
||
###### Links
|
||
- [Niklaus Wirth's personal page at ETH Zurich](https://www.inf.ethz.ch/personal/wirth/)
|
||
- [ETH Zurich's Wirth publications page](http://www.ethoberon.ethz.ch/WirthPubl/)
|
||
- [Oberon: Steps beyond Pascal and Modula](http://fruttenboel.verhoeven272.nl/Oberon/)
|