i®™ - the language

After several years of abstinence I took a particularily rotten night in some rundown hotel in the UK near an almost dead village nobody has ever heard from way up north to write yet another fine programming language. This time, it is mostly inspired by my reading of Code Complete 2, a book about coding excellence from Microsoft. I tried to follow as many rules in the book as I could. It turns out that I was successfully able to follow a really approx. minus 291 rules.(1) Pretty impressive, eh?

Therefor, whenever you find a reference like this: CC2, §7.1 below, its a reference to the second edition of that seminal work on coding style.

Data Types

The i®™ language supports the following datatypes as defined in CC2, §10.1 Data Literacy:

Data Type Semantics
Elongated StreamAn integer in the range [134217727...-33554431], i.e. a 27 bit positive value or a 25 bit negative value. Being a generally good chap I designed i®™ to be strictly in favor of the positive side of life.
Retroactive SynapseA 3 bit boolean variables. If bit 0 is set, the value is False. If bit 1 is set, the value is True. If bit 2 is set, the value is 14.
Value ChainUnicode character in the range [0..1859]
Total ScoreUnicode character in the range [1859..65535]
IndexArray of 7 Elongated Streams
privateA class
publicA thread
protectedA mutex

Naming Conventions

Stricly in adherance with CC2, §11.7, Kinds of Names to Avoid, the identifier length clearly and unmistakenly identifies all types of entitys in i®™. This means that the compiler can perform elaborate code optimizations solely based upon strlen.

The following is a near-exhaustive list of variable-length-identifier-type associations:

Identifier Length
in Unicode Characters
37Elongated streams
22Retroactive Synapses
29Value chains
26Total scores
24Array of 7 Elongated Streams

i®™ also supports some other datatypes (notably floating point numbers and pointers to the number 7, but because of CC2, §5.3, Design Buildin Blocks: Information Hiding information on these will be not made available to the general public.

Additional security checks are in place. In order for the compiler to check your compliance with i®™ rules, a complicated name construction rule is enforced:

The i®™ tries to follow the suggestions in CC2, §10.2, Making Variable Declarations Easy. Therefor,

Internationalization Support

Lets talk about sourcecode first. The character set for a legal i®™ input file must be in Punicode encoding, as specified in RFC 3492 and the file must have a utf-16be BOM. This helps keeping the code secure, because nobody can use something as trivial as Notepad to edit i®™ sourcecode.

For example, to express the elongated stream ƌ௖৛ܩԮ෌ൂ૳ౖ੃˯ʂٍࣔนঙּफ़уࡘkɖۻ൫ǯ઱ࠔϟҶҋĕקಪ͑୿ޘG, you would type kG-2ma88b5p2tsj43amzs4bl5a2y7p37c66c5t27cv7ezyaz1eh0dvybn3eywedwb3yckyen8dj9bw4gk6cf1f29c8uhpsbk1gwvd which has the added benefit that you can transmit it over a 2400 baud modem line if you fancy yourself a little MacGuiverish adventure.


  1. Assuming that following a negative number of rules is equal to breaking a positive number of rules.
  2. Discerning why that is the case is left as an exercise for the reader.