Skip to content
Cross-platform JX Objective-C suite with compiler and class library.
Branch: master
Clone or download
JX7P Update README.md
With respect to its end.
Latest commit bac4f81 Jun 17, 2017
Permalink
Type Name Latest commit message Commit time
Failed to load latest commit information.
BootDist @ b021add CODEBASE: Remove needless list functions. Only the list data Apr 6, 2016
Kmk
doc
objc CODEBASE: Remove needless list functions. Only the list data Apr 6, 2016
objcrt
objpak
util
.clang-format update clang-formatting Oct 6, 2015
.gitattributes
.gitignore
.gitmodules Adjust GIT submodules to use relative path. Mar 16, 2016
.travis.yml Travis script must install byacc, too. Mar 16, 2016
Client.kmk
Config.kmk BUILD SYSTEM/DRIVER: Press ahead with portability efforts. I begin Mar 16, 2016
License.txt initial commit Sep 29, 2015
Makefile.kmk
README.md

README.md

JX Objective-C Logo

End of an Era

I had a lot of fun working with JX Objective-C. It was a fun project that taught me much about compiler design and parsing.

But an Objective-C compiler is a fraught endeavour. This is mainly because of the C. It is a language that has custom extensions numbering likely in the hundreds. I failed to adapt JX Objective-C to support Microsoft C/C++ Optimising Compiler because of this.

I have therefore embarked upon a new endeavour - Oopsilon - which is deeply inspired by Objective-C, but which does not form a C superset.

The historic readme is preserved below for posterity.

Travis CI GitHub release Objective-C (JX) version 5.1 Platforms: FreeBSD, Windows, OS X, Linux

Overview

Basic overview

JX Objective-C is a powerful development suite implementing the programming language Objective-C (JX) (abbreviated JXobjC.) It is the reference implementation of the JXobjC language.

JX Objective-C consists of several components: firstly a compiler, jxobjc, which provides a complete implementation of the Objective-C (JX) language, and which is itself written in JXobjC. The compiler assists the programmer-user, and is designed to act as a friend and assistant, offering clear explanations when an issue arises.

A class library, called Object Kit, forms the second component. This provides a class library equipped with a comprehensive world of objects, allowing the creation of powerful programmes and libraries. Classes are provided for working with containers, threads, messaging, networking, and more. The Object Kit containers subsuite is derived from the design of the IC-Pak 101, the standard library for the historic Stepstone Objective-C. The overall design of the Object Kit is informed primarily by that of SmallTalk-80's famously acclaimed standard library.

Language

Objective-C (JX) is a programming language in the Kayian School of object-orientation. It bears most similarity to SmallTalk-80, often considered to be the pinnacle of programming language design.

JXobjC is founded upon a humanist, modernist, and universalist philosophy, and is unapologetically Object-Oriented in the Kayian sense, with a capital O. Read about the philosophy of JXobjC here.

The language provides a variety of features. You can read about these in the eBook, ["The Programming Language Objective-C (JX) and Its Implementation jxobjc"] book which is linked. Some features of JXobjC include the following:

  • C basis, allowing inlining of C code as desired.

  • Blocks, similar to the lambda expressions of the functional languages:

    Block * aBlk = { :aParam | printf("%s\n", [aParam str]) };
    [aBlk value:@"Hello, world!"];
  • Dynamic or static typing as desired, with static typing permitting the compiler to assist the programmer-user by pointing out seemingly-inappropriate assignment and sending of messages.

  • Lightweight Generics, which allow the advisory warnings in the context of classes such as containers that may be asked to warn when an object of another type is passed to a method.

  • Garbage collection (with Boehm LibGC), freeing the programmer-user from the today-needless concern that is manual memory management.

  • Powerful introspection and reflection - even a class' message responders may be swapped or altered at runtime.

  • Expressive messaging syntax, designed to imitate conversion:

    [theShop pleaseSellMe:@"A box of chocolate" for:[myWallet takeFivePounds]];
  • Kayian late-binding, which permits even such features as forwarding a message between objects, which is used to practical benefit in Object Pak's AtomicProxy class (this activates a lock around all messages sent to an object from different threads.)

Compiling

Instructions are available in doc/Build.md detailing compilation on various platforms. If building presents issues for you, please report this as a GitHub issue on this repository.

Community & Contribution

Contribution to JX Objective-C (M-L) is welcomed. Pull requests and the creation of issues are the ideal means by which to do so.

The JX Objective-C (M-L) community aims to be a place where people of diverse bkacgrounds may congregate to build a better computing.

You can’t perform that action at this time.