The Essence of OOP: It's all messages, all the time.

Category Archives: Releases

The Omega-1 release contains bug fixes and internal improvements, and also includes preliminary support for networking using sockets. There will be a series of “Omega-N” releases, all of which will focus on implementing whatever is necessary in order to fully conform to the ANSI Smalltalk standard.

The name “Omega” is a reference to “the Alpha and the Omega,” because the builds in the Omega release series will be the final set of builds before the project status is promoted to Beta.

The Omega-1 release adds classes to the Essence# Standard Library that represent the fundamental classes in the .Net Base Class Library for sending and receiving data over the IP protocol. The Essence# Standard Library will be installed by the installer program attached to this release. It may also be obtained separately fromGitHub.

None of the utility scripts that aid in developing Essence# code were changed in this release. For more information on the scripts, please see the documentation.

The Nīsān-2 release makes no changes or additions to the Essence# Standard Library. The Essence# Standard Library will be installed by the installer program attached to this release. It may also be obtained separately fromGitHub.

None of the utility scripts that aid in developing Essence# code were changed in this release. For more information on the scripts, please see the documentation.

The Nīsān release introduces full support for ANSI-Standard Dates and Times into Essence#. It also fixes some important bugs.

Nīsān is the name of the first month of the eccelesiastical Hebrew Calendar (the name of the first month of the secular Hebrew Calendar is Tishri.) [We’re still using a Biblical naming scheme, because we’re still in alpha. However, we’re (hopefully) only 2-3 releases away from going to beta, which will happen after we achieve full compliance with the ANSI Standard.]

In addition to what’s required by the ANSI Standard with respect to times, dates and durations of time, convenience methods were added to class Number that enable the creation of Durations by sending messages such as #days, #hours, #minutes, #seconds, #milliseconds and #microseconds to numbers.

As you may or may not be aware, I’m not only the author Essence#, I’m also the author of the Chronos Date/Time Library. In spite of that, I’ve added very little time/date functionality in this release that wasn’t either required by the ANSI Standard or provided by the relevant classes and methods in the .Net Base Class Library.

About 80% of the users of a programming language just don’t need anything more in the way of time/date support beyond what is required by the ANSI Standard. And those who do only need it about 20% of the time. So it doesn’t make good sense to include anything like the Chronos Date/Time Library in the “standard library” for any programming language: It’s overkill for most people, most of the time.

But it does make sense to include the Chronos Date/Time Library as an extension library. But the time for that is not yet.

The Nīsān release includes changes and additions to the Essence# Standard Library–which will be installed by the installer program attached to this release, or which may be obtained separately from GitHub.

One of the utility scripts that aid in developing Essence# code was changed in this release, and a bug in one of the example scripts was fixed. Other that that, there were no other changes to any of of the scripts, and no new scripts were added. For more information on the scripts, please see the documentation.

Final note: If you have a version of Essence# prior to Alpha Build 17 (Philemon) and have also written your own Essence# code using that release that you would like to keep using with this release, then please be sure to also read the release notes for Alpha Build 17. There have been significant changes to the format of the Essence#Standard Library => Philemon (Alpha Build 17).

The Nile release introduces ANSI-conformant streams into Essence#. It also fixes some significant bugs, and provides new utility scripts for use in developing Essence# code.

The name Nile was chosen because it’s the name of a rather big stream that’s mentioned in the Bible–and we’ve been using a Biblical naming scheme for the Alpha releases. Recall that Moses as a babe was found among reeds along the banks of the Nile. So the Nile is a reed stream…

FileStream Usage Examples

Two new example scripts have been added which illustrate how to write to a file and how to read from a file using classes and messages that conform to the ANSI Smalltalk standard.

The AppendToFile.es script requires a command-line argument that specifies the pathname of the file to which to write. The script writes out the name of all root classes to the specified file. Note that it actually appends to the named file, and does not overwrite or truncate it:

To invoke the AppendToFile script so that it writes the names of the root classes to the local file ‘rootClasses.txt’, run the ES command with the following command line arguments:

es AppendToFile -a 'rootClasses.txt'

The ReadFromFile.es script also requires a command-line argument that specifies the pathname of the file from which to read. The script reads each line of the input file and writes it to the Transcript:

Download Nile (Alpha Build 20)

From the Essence# home page on CodePlex, you can download the latest version by clicking on the big purple button labeled DOWNLOAD on the upper right-hand side of the 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.)

You can also obtain components of Essence# on an ad-hoc (“a la carte”) basis:

The SOURCE CODE tab (immediately to the left of the HOME tab on the Essence# home page on CodePlex) 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 the Essence# Standard Library, which is required to actually use Essence#.

Final note: If you have a version of Essence# prior to Alpha Build 17 (Philemon) and have also written your own Essence# code using that release that you would like to keep using with this release, then please be sure to also read the release notes for Alpha Build 17. There have been significant changes to the format of the Essence# Standard Library => Philemon (Alpha Build 17).

The Philemon-3 release corrects a problem with the script of the NSIS installation program generator used to build the installer for the previous release. That issue could have been addressed by simply fixing the script and then regenerating the installation program, but a) it was judged to be less work to create a new release based on the current development code, and b) a new release does a better job of communicating the fact that the installation program for the previous release is broken.

Therefore, here’s a new release which not only fixes the problem with the installer, but also enhances the functionality of the new configuration profile feature which was introduced in the previous release.

However, since the previous release was published less than a day ago, and since there haven’t been many downloads of it, the remainder of the release note for this release will be worded as though the previous release had never been published. In other words, it will compare itself to the Philemon release (Alpha Build 17,) and not the previous release, which was Philemon-2 (Alpha Build 18.)

Changes with respect to the Philemon release (Alpha Build 17)

The Philemon-3 release fixes bugs, most of which have to do with the binding of .Net assemblies.

Configuration profiles have been added in order to help solve some of the .Net assembly binding issues.

Configuration Profiles

A configuration profile is persistently stored as a folder in the filesystem. It must be located in the folder %EssenceSharpPath%\Config. The folder name must use “.profile” as its file extension. A configuration profilefolder may (optionally) contain one or more files–each with its own format–that specify configuration options that globally apply to Essence#.

Currently, a configuration profile can be used to define an assembly map, to define a list of class library search paths and to define a list of script search paths.

A search paths file must have the file extension “.searchPaths” and must contain pathnames of folders to be searched, one per line with no other punctuation, listed in the desired sequence, from first to last. The listed pathnames must be absolute pathnames, but may use environment variable references, such as %UserProfile% or %EssenceSharpPath%.

The name of the search paths file for class libraries must be “library.searchPaths”, and the name of the search paths file for scripts must be “scripts.searchPaths”. Neither file is required.

An AssemblyMap configuration file must be named “AssemblyMap.es.” If present, it must contain an Essence# dictionary literal (which may be empty,) or else the file must be empty. If the dictionary literal isn’t empty, the keys in the dictionary must be logical assembly names, and the values must be physical assembly names that can be used to actually load a .Net assembly.

The benefits of using AssemblyMap configuration files are the following:

Application and class library developers can use logical names for .Net assemblies which are short and concise.

Application and class library developers can use logical assembly names to avoid committing themselves to a particular version of an assembly.

Developers and users can modify the AssemblyMap configuration file in order to globally change which versions of one or more .Net assemblies will be used at run time.

If it’s been defined in your configuration profile, then you may optionally use a logical assembly name in place of a physical assembly name as the argument to the message #assemblyName:, when sending that message to any Essence# namespace, trait or class.

Specifying The Configuration Profile(s) To Be Used

Any number of different configuration profiles may be used at the same time, or even none at all. To specify the set of configuration profiles that should be used, list their names–one per line with no other punctuation–in the “activeProfiles” text file, which resides in the %EssenceSharpPath%\Config folder. It is not necessary to use the “.profile” extension in the list of names.

Note that the order in which configuration profiles are listed in the “activeProfiles” file matters, because the effect of combining two or more of them together is additive, but conflicts between them are resolved by using the configuration options specified by whichever profile occurs later in the list of active configuration profiles.

Changes To The Essence# Standard Library

The ‘Philemon-3’ release makes some changes to the Essence# Standard Library–which is installed by the installer program attached to this release, or which may be obtained separately from GitHub.

A repository for Configuration Profiles has been added to the Essence# GitHub page.

Please see the documentation page on CodePlex for more information on how to use Essence#.

Finally, if you have a previous version of Essence# and have also written your own Essence# code, then please be sure to also read the release notes for the previous version: Philemon (Alpha Build 17).

The Philemon-2 release fixes bugs, most of which have to do with the binding of .Net assemblies.

Configuration profiles have been added in order to help solve some of the .Net assembly binding issues.

A configuration profile is persistently stored as a folder in the filesystem. It must be located in the folder %EssenceSharpPath%\Config. The folder name must use “.profile” as its file extension. A configuration profile folder may (optionally) contain one or more files–each with its own format–that specify configuration options that globally apply to Essence#.

Currently, the only configuration profile that can be defined or used is the default configuration profile (Default.profile,) and the only recognized/supported configuration file type is an AssemblyMap. Support for additional named configuration profiles will be added later; and it is highly probable that other types of configuration files will also be defined.

An AssemblyMap configuration file must be named “AssemblyMap.es.” If present, it must contain an Essence# dictionary literal (which may be empty.) If any, the keys in the dictionary must be logical assembly names, and the values must be physical assembly names that can be used to actually load a .Net assembly.

Application and class library developers can use short, concise names for .Net assemblies.

Application and class library developers can use logical assembly names to avoid committing themselves to a particular version of an assembly.

Developers and users can modify the AssemblyMap configuration file in order to globally change which versions of one or more .Net assemblies will be used at run time.

If it’s been defined in your configuration profile, then you may optionally use a logical assembly name in place of a physical assembly name as the argument to the message #assemblyName:, when sending that message to any Essence# namespace, trait or class.