An Introduction to Objectivist-C

Let me introduce you to the best language you’ve never heard of: Objectivist-C.

Although academic computer scientists have generally dismissed Objectivist-C, it has a zealous following among self-taught programmers and college sophomores.

Objectivist-C was invented by Russian-American programmer Ope Rand. Based on the principle of rational self-interest, Objectivist-C was influenced by Aristotle’s laws of logic and Smalltalk. In an unorthodox move, Rand first wrote about the principles of Objectivist-C in bestselling novels, and only later set them down in non-fiction.

Here’s what you need to know to program in Objectivist-C.

In Objectivist-C, an object — every object — is an end in itself, not a means to the ends of others. It must live for its own sake, neither sacrificing itself to others nor sacrificing others to itself.


In Objectivist-C, a Hello World program looks like this (portions omitted for brevity):

#import <Fountainheader.h>
 
@interface HelloWorld
// ...
@end
 
@implementation HelloWorld
 
- (void)printHelloWorld
{
    NSString *hello = @"I am. I think. I will.";
    Printer *printer = [[Printer alloc] init];
    if (printer)
    {
        [printer print:hello inExchangeForUSDollars:2.00];
        [printer release];
    }
    else
    {
        // In Objectivist-C, objects are self-sufficient. 
        // Here, I implement string printing from scratch. 
        [self createTheUniverse];
        [self createStandardOutputDevice];
        [self print:hello];
    }
}
 
// ...
 
@end

In Objectivist-C, software engineers have eliminated the need for object-oriented principles like Dependency Inversion, Acyclic Dependencies, and Stable Dependencies. Instead, they strictly adhere to one simple principle: No Dependencies.

(Another principle that Objectivist-C software engineers have little use for is Don’t Repeat Yourself.)


In Objectivist-C, there are only two numerical data types: rational and real.


In Objectivist-C, there are only two colors:

+ (ReardenColor *)colorWithJudgment:(BOOL)isGood  // factory method
{
        return (isGood ? kReardenColorWhite : kReardenColorBlack);
}

In Objectivist-C, there are not only properties, but also property rights. Consequently, all properties are @private; there is no @public property.


In Objectivist-C, each program is free to acquire as many resources as it can, without interference from the operating system.


In Objectivist-C, objects communicate by message-passing. In Ope Rand’s magnum opus, one object sends a message that goes on for 70 pages.


In Objectivist-C, there are no exceptions.


I leave you with a quote from Ope Rand, in which she condemns programming languages that are inferior to Objectivist-C:

Through centuries of scourges and disasters, brought about by your code, you have cried that your code had been broken, that the scourges were punishment for breaking it, that men were too weak and too selfish to spill all the blood it required. You damned men, you damned existence, you damned this earth, but never dared to question your code. Your victims took the blame and struggled on, with your curses as reward for their martyrdom - while you went on crying that your code was noble, but human nature was not good enough to practice it. And no one rose to ask the question: Good? - by what standard?