Download 1.0

From Mesham
Revision as of 18:09, 19 January 2013 by Polas (talk | contribs) (Installation Instructions)
Jump to navigationJump to search


Mesham compiler 1.0
Icon:
{{{caption}}}
Description: The latest release of the Mesham compiler
Version: 1.0.0_232
Released: January 2013
Author: Nick Brown
Website: http://www.mesham.com

Introduction

This is the latest version of the Mesham compiler and is based upon the language as described here and documented on this website. The compiler has been entirely rewritten from scratch and this line of compiler (version 1.0 and upwards) is known as at the Oubliette line to distinguish it from the previous versions.

Version 1.0.0 is currently an alpha release and as such should be considered experimental. Please keep checking back for later versions which will be released as we fix bugs and add features.

The Mesham compiler and runtime library are compatible with Linux only, if you wish to use Mesham on a Windows operating system then you will need to download an older version.

Download

  • All components (compiler, runtime library, libgc) - download 64 bit here and 32 bit here
  • Latest compiler version: 1.0.0_232 released 19th January 2013 - download 64 bit here and 32 bit here
  • Latest runtime library version: 1.0.0 released 19th January 2013 - download 64 bit here and 32 bit here
  • Conservative garbage collector (libgc) version 7.2 - download 64 bit here and 32 bit here

Installation Instructions

Whilst it is a manual installation procedure, the good news is that this is very simple and will be elementary to anyone familiar with Linux.

It is suggested to download all components which will provide you with the compiler, runtime library and libgc. Unpack the archive and place the mcc (whihc is the main compiler) executable in your chosen location. It is suggested to either add the location to your path environment variable or add a symbolic link from the /usr/bin directory to the mcc binary so that you can call it regardless of the working directory.

Next we need to set up some environment variables to tell the compiler exactly where to find some different aspects. We can set these via the command export varible=value where variable is the name of the environment variable you wish to set and value is the value to set it to. The first environment variable, MESHAM_C_COMPILER, decides which C compiler to use - we suggest mpicc and if you agree then issue export MESHAM_C_COMPILER=mpicc.

Next we are going to set MESHAM_SYS_INCLUDE which points to the Mesham system include files (supplied with the compiler and all archive in the includes directory.) Set this variable to point to the directory containing these .mesh files. MESHAM_C_INCLUDE needs to point to the directory containing the mesham.h header file and will be used by the C compiler. This, along with the runtime library, is supplied in the rtl directory. Lastly, the MESHAM_C_LIBRARY should point to the directory containing the Mesham runtime library and also the libgc library (this can be in the same directory or you can separate the values the via ;.) It it suggested to add these exports to your .bashrc script to avoid excessive typing.

If you do not wish to set these last two environment variables then alternatively you can symlink libmesham.so and libgc.so into your /usr/lib directory and the mesham.h header file into /usr/include.

Now we have done this we are good to go; issue mcc -env which will display the environment variables.

Testing the compiler

Copy the following code into test.mesh, then compile via mcc -e test.mesh (the -e flag will display any errors reported by the C compiler.) All being well an executable test will appear, run this via mpiexec -np 1 ./test after ensuring your favourite MPI process manager is running.

#include <io>
#include <string>
#include <parallel>

function void main() {
   group 0,1,2,3 {
      print("Hello from process "+itostring(pid())+"\n");
   };
};

All being well, you should see the output (but the order of the lines will vary):

Hello from process 0
Hello from process 2
Hello from process 3
Hello from process 1