current: 1.0.2

Open Source Approved

SourceForge Logo



Arrow Via Dots From Logo

The Development Roadmap For The Future Of Ferite

Table of Contents

1. Introduction

2. Language Enhancements
____2.1. Directives
____2.2. Types On Closures
____2.3. Type Hinting
____2.4. No More function On constructor or destructor
____2.5. Better Exception Handling

3. Compiler and Virtual Machine Changes

4. Marketing and Shameless Promotion
____4.1. webframework
________4.1.1. ManagementBubble.app
________4.1.2. Weblog.app
____4.2. Communication
________4.2.1. Mailing lists
________4.2.2. IRC chat bot
____4.3. Web-site
________4.3.1. Testimonials
________4.3.2. Tutorials: modules.ferite.org
________4.3.3. Language Comparisons
____4.4. Software Promotion: freshmeat releases
____4.5. Software Promotion: MySQL

1. Introduction

This document describes the planned roadmap of the ferite programming language, engine and related 3rd party projects.


2. Language Enhancements

There are always opportunities for improvement with any language, this section details the planned changes and their introduction to the platform.

2.1. Directives

Directives provide a mechanism for writing and executing functions at compile time. For instance, you may find yourself writing code for accessor functions however, this can cause clutter and potential nightmares in the face of code maintenance. The solution ? Create a directive that will write the code for you. The directive takes a number of arguments and can generate code that can then be passed to the eval keyword. For example:

class modifies Obj {
	
	directive access( ... ) {
		array a = arguments();
		string code = "class modifies ${Class.name(self)} {";
		Array.each( a ) using ( name ) {
			if( name isa string ) {
				code += "
				function set$name( void value ) {
					.$name = value;
				}
				function get$name() {
					return .$name;
				}";
			}		
		};
		code += "}";
		eval( code );		
	}	
}

The above directive takes one or more string arguments and generates get and set methods for the code. Note the new keyword directive; the keyword allows ferite to flag the function as a valid directive to stop the execution of a wrong function. The second part of directives is how to use them:

class Example {	
	private number X = 10;
	private string foo = "hi";

	[access X, foo];				
}

The above code calls the directive access and passes the names X and foo to it. The directive creates the get/set methods for the class allowing access to the private variables.

There are various uses for this, such as the ability to setup properties within classes and namespaces, build a class based upon an xml specification at runtime, tie a class to a specific database table etc.

Expected arrival: 1.1.0

2.2. Types On Closures

At the moment the parameters being passed into the closure mechanism are not typed, nor can a closure accept multiple arguments. This is going to be changed so that arguments can take a type and have multiple arguments so that the code below becomes valid:

object o = closure( number index ) {
	return index;
};
object p = closure( ... ) {
	Console.println( arguments() );
};

Expected arrival: 1.1.0

2.3. Type Hinting

For the most part the flexible type system of ferite can be more than enough checking for the average program. There are times though, when it is useful to clamp down a type to very specific guidelines. The solution is type hinting:

array<number> a = [ 1, 2, 3 ];
object<Stream> o = new Stream();
number<1..10> n = 5;

The type hints are in bold. The array example would restrict the contents of the array to only containing numbers, the object example would only allow the variable to point to an object that is a subclass of Stream (including Stream itself), the number example would restrict the number in n to the range 1..10.

The exact type hints that can be used needs to be discussed in more detail.

Expected arrival: 1.5.0

2.4. No More function On constructor or destructor

This simply removes the need to supply the keyword function before the declaration of constructor ordestructor.

Expected arrival: 1.1.0

2.5. Better Exception Handling

The current mechanism for exception handling sucks. It gets the job done but is cumbersome and does not feel part of the language. This is going to change: there will be the introduction of a throw keyword and iferr-fix-else will be modified to allow the optional collection of an error object.

class SpecialError extends Error {
	constructor( string error ) {
		super( error, 0 );
	}
}

function f() 
	throw new SpecialError( "Random Exception" );
	
iferr {
	f();
} fix ( object e ) {
	Console.println( "We got the error: ${e.getErrorString()}" );
}

Expected arrival: 1.3.0


3. Compiler and Virtual Machine Changes

[To Be Expanded]


4. Marketing and Shameless Promotion

4.1. webframework

4.1.1. ManagementBubble.app

[To Be Expanded: A webframework application that provides a novel and new methods for managing projects]

4.1.2. Weblog.app

The aim is to flesh out the Weblog.app program within webframework to provide a fully featured consumer application that is easy to install. The twist is that we provide a hosting platform for the weblog which each one having shameless promotion at the bottom of each page.

4.2. Communication

4.2.1. Mailing lists

Currently a lot of the conversations about ferite development, bugs, tricks and hints are conducted within the #ferite irc channel. This needs to be moved to the existing mailing lists to allow new comers to see activity and search for answers.

4.2.2. IRC chat bot

Daily chat recordings. The chat robot will sit in the #ferite irc channel and provide a chat log covering the days communication. The advantage is the ability to search for answers. The aim will also be the provide a set of markups that allow the bot to infer links from questions to answers. Provisionally will be the sending of emails to ferite-user@lists.sourceforge.net.

4.3. Web-site

4.3.1. Testimonials

ferite kicks ass. The language is great and those who use it love it. The aim is to convey this to the people visiting the ferite website. What do they need to discuss ?

  • Stability: ferite is used within complex and mission critical applications and works great. People can use it for big applications without fear of crashing or leaking memory.

  • Maintenance: ferite is a great language to understand, the constructs try to remove ambiguity and keep consistent code. Maintaining ferite code is easy, applications retain upwardly compatible and re-engineering ferite code for new technology is usually trivial.

  • Rapid Development: ferite is a great language to prototype, there is a contiually growing api that allows quick results from intial investment.

  • Portable: ferite works great on Linux, Mac OS X, Solaris, and now Windows.

The testimonials are there to inspire confidence with ferite as a software toolbox for building both casual programs for solving small problems up to enterprise level applications. Each one should cover the decision process to chosing ferite, was the choice successful, what technologies where leverages to provide the solution.

4.3.2. Tutorials: modules.ferite.org

Each module should ship with a manual-builder compatible document that will provide a tutorial describing the setup, use, and examples of that module. Each tutorial and group of API documents should be availiable on modules.ferite.org providing the casual reader an insight into the modules.

Each tutorial will provide a mechanism for giving feedback, hints and advice.

4.3.3. Language Comparisons

The aim of the game is to compare common programming problems with other languages and show how ferite deals with the problem more successfully. An honest critique should be given. This could be expanded to a recipe book.

4.4. Software Promotion: freshmeat releases

It is important to provide a regular set of freshmeat.net to garner interest with the ferite platform. These need to either be applications or ferite modules; with each one providing routes back to ferite.org.

4.5. Software Promotion: MySQL

There are some subtle links to ferite within case studies with MySQL, along with some work conducted to allow ferite to run within SQL queries. This should be exploited.


ferite et al © 2000-2005, Chris Ross