Essence# is a fully dynamic and highly polymorphic programming language which features pervasive message passing, pervasive dynamic and strong typing, pervasive and deep reflection and pervasive object orientation.
Essence# implements and reveals the "essence" of object-oriented programming:
Message passing: Almost all computation in Essence# happens via the sending of messages. The only way to invoke a method is to send a message—which necessarily involves dynamic binding (by name) of message to method at runtime (and never
at compile time.) The internals of an object are not externally accessible, ever—the only way to access or modify an object's internal state is to send it a message. So function and data encapsulation and abstraction are both complete and universal.
Dynamic and strong typing: Although any object can be assigned to any variable, the only way to access or modify the internal state of an object is to send it a message—and the sending of any invalid message is detected and prevented
at run time. So, even though Essence#'s pervasive use of dynamic typing enables the programmer to define highly polymorphic abstractions with an extremely high degree of applicability and reusability, it is impossible to apply a function to a value for which
there is no valid, defined behavior.
Reflection: In most programming languages, the specifications of types, classes, functions and subroutines exist only in the source code, and so are not accessible at runtime. But in Essence#, all specifications of all program constructs (classes,
methods, etc.) are live objects that exist both at compile time and at runtime—and those objects are fully accessible to a running program, and can be queried or modified by sending them messages. So an Essence# program can not only fully introspect
on itself, it has full power to change itself.
Object-orientation: In Essence#, all values are objects—even booleans, integers and other numbers, characters, strings, classes, blocks of code...and even"null." That's right, in Essence# you can not only send messages to "null,"
you can even add methods to the class of "null," and then send "null" the corresponding messages! That's because
all Essence# values are instances of a class, and so can all be sent messages. And Essence# classes can be created and modified while the program is running. In Essence#,
almost all computation is done by sending messages.
Inter-language interoperability: Thanks to the DLR's Meta Object Protocol,
Essence# provides deep and comprehensive integration and interoperability with other programming languages that are hosted on the CLR, whether those are statically-typed languages such as C# or are dynamically-typed languages that use the DLR's
Meta Object Protocol.
In fact, Essence# serves as an excellent language for scripting the creation and manipulation of C# objects (for example.) The original motivation for the creation of Essence# was to use it as a
domain specific language for creating and configuring C# objects that specify trading plans generated in response to trading signals. It has been and is being used for that purpose by the original
Necessity is the essence of invention. :-)
You might also like to follow the
Essence# blog. All new releases, and introductory explanations of new features, are published on the blog. Release announcements, and links to new articles published on the blog,
are also posted on the Essence# page on Google+
You can download the latest version by clicking on the big purple button labeled
DOWNLOAD on the upper right-hand side of this page. Or, if you'd like to read the release notes (recommended,) you can navigate to the tab labeled DOWNLOADS on the tabs bar (near the top of the page; the leftmost tab
is labeled HOME.) Both options will get you a program that installs all of Essence#, including the
Essence# Standard Library and the Microsoft Visual Studio project folder used to develop the C# code that implements Essence# (the compiler and the run time system.)
The SOURCE CODE tab (above) will let you either download just the Visual Studio project or else make a local clone of the Git repository for it--but neither of those options will get you all that's required to actually use Essence#.
download and installation instructions, for instructions on executing scripts written in Essence#, and for information
on the language's syntax, semantics and class library, please see the
Other programming languages in which you might be interested:
The essence of OOP: It's all messages, all the time.