/ linux

Self-Hosting and Recursive Acronym

In development and programming language, we can see Self-Hosting and Recursive Acronym, those are both quite interesting definition which I would like to share with you.

Self-Hosting

We use Self-Hosting to describe a program, which is a tool used to create new version of itself. For example, we can use a programming language to create a compiler for it. Then we have self-hosting. Self-Hosting softwares includes operating system kernels, assemblers, shell and version control systems.

First self-hosting ever compiler was writen in Lisp, used to interpret Lisp language, compile Lisp source and test Lisp program.

The golden rule is: developer will improve the compiler until it can compile itself source. Then we will have a self-hosting compiler. At the first time, developer will use other languages to do this job, or use a special technique called bootstrapping.

Today we have many languages which own their own self-hosting compiler: Ada, BASIC, C, C++, C#, CoffeeScript, F#, Haskell, Java, Lisp, Pascal, Python, Scala, Smalltalk or even Visual Basic.

There are rumours about big IDE like Visual Studio, they should able to compile itself.

Recursive Acronym

An acronym refers to itself in the expression for which it stands, is called recursive acronym. You will find this is hard to understand at the first sight, but let’s look at some example:

  • Allegro: Allegro Low LEvel Game ROutines (Atari ST is called Atari Low LEvel Game ROutines at the beginning)
  • ANX: ANX is Not XNA (A game framework)
  • AROS: AROS Research Operating System (an operating system which used to be called Amiga Research Operating System)
  • BAMF: BAMF Application Matching Framework
  • CAVE: CAVE Automatic Virtual Environment
  • EINE: EINE Is Not Emacs (a text editor)
  • FIJI: FIJI Is Just ImageJ (a wrapper for image processing library Java ImageJ)
  • GiNaC: GiNaC is Not a CAS (Computer Algebra System)
  • GNU: GNU’s Not Unix
  • HIME: HIME Input Method Editor (a typing input method)
  • INX: INX’s Not X (a clone of UNIX)
  • JACK: JACK Audio Connection Kit (you already know it, dont you?)
  • KGS: KGS Go Server (a server for chess)
  • LAME: LAME Ain’t an MP3 Encoder (a libary for encoding/decoding MP3)
  • LISA: LISA: Invented Stupid Acronym (private name for LISA project of Apple)
  • LiVES: LiVES is a Video Editing System
  • Ninja-ide: Ninja-IDE Is Not Just Another IDE (an IDE)
  • PHP: PHP: Hypertext Preprocessor (called Personal Home Page at first)
  • RPM: RPM Package Manager (Red Hat Package Manager at first – a package management system used in Red Hat Linux)
  • WINE: WINE Is Not an Emulator (a Windows virtual machine for OS X)
  • XBMC: XBMC Media Center (a famous media center)
  • XINU: Xinu Is Not Unix (a clone of Unix)
  • XNA: XNA’s Not Acronymed (XNA Framework)
  • YAML: YAML Ain’t Markup Language (Yet Another Markup Language at first)