Linoleum (programming language)

From Wikipedia, the free encyclopedia

Linoleum
Paradigm procedural
Appeared in 1996[verification needed]
Designed by Alessandro Ghignola
Developer Alessandro Ghignola
Latest release 1.2/ 2007[clarify]
Typing discipline weak, dynamic
Major implementations Windows, Linux (alpha)
Dialects none
OS Windows, Linux (alpha)
License WTOF (Lino 1.13), LGPL (Lino 1.2)
Website Home Sweet Pixel

The L.in.oleum (often called Linoleum or simply Lino) programming language is an unstructured, untyped, procedural, cross-platform assembler developed by Italian private programmer Alessandro Ghignola beginning in 2001. (The unusual acronym stands for Low-level INterfaced OverLanguage for Extremely Universal Machine-coding.) L.in.oleum (hereafter referred to as Lino) is easier than native assembler. Uniquely for an assembler, it is designed to be recompilable across different CPUs without requiring changes to the source code of a program written in Lino. (For more details, read the section on portability below.)

Contents

[edit] Applications

Lino is intended for writing general-purpose programs, especially when high portability, execution speed, and module compactness are critical to the application's success. These traits are especially important in fields of study that demand performance-intensive programs. Examples of such fields (in which Lino is actually being used) include fractals, mathematics (such as an implementation of Fast Fourier Transform), and ray tracing, to name a few.

This increased performance is achieved by Lino's nearly one-to-one ratio between Lino instructions and CPU instructions. That is, most instructions in Lino can be executed in one machine cycle, due to the way the language is set up. This gives a skilled programmer increased control over the computer, allowing for further optimization and tighter loops.

Although Lino is a relatively new language, several useful programs are already being written in it. These programs, most of which are available via the official Lino discussion forums or from Peterpaul Klein Haneveld's site, are in various stages of development. The list below is by no means comprehensive.

A selection of Lino programs
Name
Status
Link
Fire demo Completed Link
Fractals (Mandelbrot set) Completed Link
LinoLife, an implementation of Conway's Life Completed Available with Lino 1.2 package
LinoPaint, a clone of Microsoft Paint Alpha Link
Noctis V, the sequel to the freeware game Noctis IV (written in C++) Beta (Unreleased) Link
Ray tracer (static and real-time) demo Kaizen Link
Terrain mapping demo Alpha Link
Text-based games Completed Link
Text Editor Completed Link
Yahtzee Completed Link

Note that many of the above links take you to forum threads where these programs are uploaded and discussed.

In addition to the above programs, there are many more programs written in Lino, as well as dozens of libraries written in Lino. Interest in this unique language is maintained by a small but dedicated community of programmers.

[edit] Examples and screen shots

[edit] Hello world

Low-level languages usually have no direct equivalent of the print statement found in many high-level languages. Thus, while a Hello world example can be done in Lino, it is too long to quote here. [1]

[edit] Raising the power

Rather, Alex introduces Lino by an example of its stack and mathematical abilities. Here is an example of a full Lino program. [2]

( *** LINOLEUM Example 1: Raising the power! *** )

"directors"
    program name = { Raise_the_power! }
    unit = 32;

"programme"
    A = 7;
    B = 10;

"raise"
    --> B;
    C = 1;
    ? B = 0 -> finished;

"raise again"
    C * A;
    B ^ raise again;

"finished"
    <-- B;
    show registers;

The preceding program stores the value 7 in variable A and the value 10 in variable B. The program pushes the variable B onto the stack and sets the variable C equal to 1. Then it multiplies C by 7 for 10 loops. In other words:

C = 1 * 7 * 7 * 7 * ...

Finally the program pops B off the stack and (in its last line) shows the values of A, B, and C (which are CPU registers) on the screen.

The above example is a nontraditional introduction to a programming language. But the language itself is nontraditional. For example, it allows access to the CPU registers, which most high-level languages don't allow the programmer to access. Also, it comes with its own GUI, called the iGUI, although the programmer is not forced to use it.

Current iGUI window interface (Lino 1.2).
Current iGUI window interface (Lino 1.2).

[edit] Portability

Each Lino program comes bundled with a Run Time Module included in the .exe file, so there is no installation process needed. In other words, each Lino program is essentially self-contained, though it may need external files (i.e. data files) in order to perform correctly.

A Lino program does, however, need to be recompiled for each platform it's meant to run on—but the source code doesn't need to be changed. Dutch university student Peterpaul Klein Haneveld is currently working to create a fully functional Lino compiler for Linux (see below for further details).

Free Lino compilers are available for these platforms:

A port to a new platform requires ...

The Lino compiler is written in Lino as of version 1.13. And as of version 1.2 (see below), the Lino compiler is itself a Lino library, which means it no longer needs to be ported. (For more details, read the section on portability above.) Lino libraries are stored as plain text files, just like programs.

Source code is stored in .txt files. Such files can easily be read and edited by any text editor, such as Notepad or ConTEXT. Currently, you can compile a file by right-clicking on it and choosing the option "Compile as LINOLEUM Source" or by dragging the file over the compiler's icon.

[edit] Latest versions

The latest stable versions of the Lino compiler (Windows) are 1.13.11b and 1.2 (formerly version 1.14).

Lino 1.2 (available from the main website) features an improved visual compiler and several minor improvements to the language, enough to warrant a jump from 1.14 to 1.2. Many of the improvements are bug fixes and improvements to existing features. There are also new features, such as the ability to print monochrome bitmaps, and to insert "jump alignment directives", which allow programs (if optimized by skilled programmers) to run more efficiently.

Screenshot of the Lino 1.2 Visual Compiler.
Screenshot of the Lino 1.2 Visual Compiler.

The Lino 1.2 compiler can still compile as before, but it is now a visual compiler. This means that, unlike before, it can compile programs and view output from one place. The read-only (to prevent forking) code for the compiler (written in Lino as of this version) is available with the downloaded package (see the External links section below).

The "Linux Linoleum Compiler" is still in alpha. It is currently being developed by Dutch university student Peterpaul Klein Haneveld. Development is now inactive but may resume with the release of Lino 1.2. Additionally, Peterpaul has released the source code for the Linux run-time module, available on the main website, for those interested in continuing the project.

[edit] Advocacy poem

From an old version of the Lino site, as retrieved by www.archive.org on 4 October 2001:

Stop hiding into Basic:
you know there's more.
Stop lying to yourself,
one day your system
will be obsolete.
Stop playing with toys,
be a programmer.

[edit] External links

Wikibooks
Wikibooks has a book on the topic of
  • Home Sweet Pixel This is Alessandro Ghignola's personal software house. Home Sweet Pixel, often abbreviated as HSP, is the official website of Lino, Noctis, and other programs, all of which are free.
    • Linoleum This is a direct link to the Linoleum section of the HSP site.
  • Peterpaul's Place This is the website of Dutch university student Peterpaul Klein Haneveld, an avid Lino programmer who is developing the Linux compiler.
  • Herbert Glarner's Linoleum libraries (data structures and algorithms)
  • Unified Programming Languages Archive: LINOLEUM This is a repository for archived Lino code.

[edit] Footnotes

  1. ^  This last claim is supported by example in the "programme" section of the Lino documentation. It involves the use of CPU registers, which most high-level languages don't allow the programmer to access.
  2. ^  But there is an example of a Hello World program in the Lino documentation (example #12).
  3. ^  This example program was written by Alessandro Ghignola and is copyrighted by him. It is presented here unchanged except for the deletion of comments for the sake of brevity.
  4. ^  32-bit versions of Windows range from Windows NT 3.5 up to and including Windows Vista.