Ecere SDK 0.43: Templates, Syntax Highlighting…

September 3rd, 2008

After a lot hard work, I am pleased to announce the release 0.43 of the Ecere SDK. Download links follow:

For Windows:

Ecere SDK 0.43 for Windows - September 3, 2008 (36 MB)

If you already have MinGW installed on your system (or if you already have an earlier version of the Ecere SDK installed), you can chose the following significantly smaller package instead. Note that it doesn’t contain GDB and UPX either.
Ecere SDK 0.43 (No MinGW/GDB/UPX) for Windows - September 3, 2008 (7 MB)
If you chose this smaller package, make sure that the MinGW executables are either in your PATH or in the IDE’s File/Global Settings/Executables paths so that they can be found by the build system. Also, the IDE will be looking for a “make.exe” (rather than a mingw-make.exe).

For Linux:

Ecere SDK 0.43 for Linux (Generic binaries) - September 3, 2008

Please read the INSTALL file for instructions on how to install the generic tarball and for general notes on operation under Linux.

Ecere SDK 0.43 for Debian/Ubuntu - September 3, 2008
The samples will be located in /usr/ecere/samples/ .

Ecere SDK 0.43 for GoboLinux - September 3, 2008
(Add http://www.ecere.com/gobo/packages/MANIFEST to your official repository and run InstallPackage Ecere)
The samples will be located in /Programs/Ecere/0.43/samples/ .

Additions to the eC language

This release main highlights are class templates as well as standard collection (container) classes which have been added to the eC language. This functionality represents major work which had actually started in the the earlier releases as well, and finally is ready in this new version.

Templates

Class templates make possible generic/meta programming.

The approach of eC towards templates is unique in that it is completely dynamic. A template class is in fact declared the same way as (and no different from) a regular class, but specify “template parameters” to be parametrized. It is dynamic in that the class as it is can already deal with any parameters the class template could be used with, even if that parameter refers to for example a class not defined within the module of that template.

eC classes can exist within a shared library, or an eC source file and it can be used across multiple modules without the need for header files. The same is true for eC class templates, which do not require any additional compilation for use with different parameters. Only a single piece of code for the actual class templates and its functions exists, just like for any other eC class.

This “no recompilation” approach templates makes for smaller code size, but may scare some about its performance. However, in practice this should be minimal, since many optimizations are being applied, and more optimizations should come as we benchmark the eC dynamic templates approach. These new templates have worked and performed nothing but extremely well so far.

Classes can be parametrized using any number of three types of parameters: data types, expressions (e.g. specifying a constant value), as well as identifiers (Which can currently identifier a data member, but will be extended to properties and methods as well).

The templates are very powerful and support even complex cases with recursions as in the following example:

class A : B<A> { int a; }
class B<class T> { T test; }

Containers

The standard container classes included in this release are “typed” class templates to replace the previous “non typed” container classes (List, BinaryTree, and pseudo-template Array, which will be slowly phased out. In the meantime List has been renamed to “OldList”, Array to “OldArray”, and Link to “OldLink”). The new containers are all derived from a base “Container” class from which all containers should derive in order to benefit from generic iteration and new eC syntactic sugar. The provided default containers cover dynamic arrays through the new Array class, link lists through the new classes List and LinkList, associative arrays through the new class Map, as well as AVL trees (a particular type of self balancing binary tree) through the new classes AVLTree and CustomAVLTree. It is somewhat analogous to a subset of the Standard Template Library and its corresponding classes such as std::vector, std::list and std::map, though I believe eC’s approach is generally a lot more elegant.

The syntactic sugar for containers include the array notation, e.g. [ 1, 2, 3 ] to denote a container containing the three integers 1, 2 and 3. It also introduces a “foreach” syntax using the regular for keyword in a new way. The following will print all i in array which are greater than 1:

Array<int> array { [ 1, 2, 3 ] };
for(i : array; i > 1) PrintLn(i);

Notice how i (which takes the type of the array elements) does not need to be declared. Iterating can be done generically (not knowing what kind of container we’re dealing with) using the Iterator class, for example in the following manner:

Iterator<int> i { array };
while(i.Next()) PrintLn(i.data);

The indexing operator can also be used directly with the container classes. The following example can be used to count the occurrences of strings, assuming it is repeatedly called with “s” being each string to count. Notice how wordCounts is indexed with “s”.

Map<String, int> wordCounts { };
wordCounts[s]++;

The container classes can also be used to iterate through infinite collections, or through data contained outside the actual container class. Please look at the ContainersTest sample in the samples directory for additional examples, including iterating through the Fibonacci series.

Print / PrintLn

You might have noticed the PrintLn function which is now available to print to the standard output any data type followed by a newline. The equivalent function Print does the same without printing the new line. Furthermore, these functions can take any variable number of parameters which can be of different types, and it comes in various flavors (inside the File class, PrintBuf/PrintLnBuf, PrintString/PrintLnString). The following demonstrate the elegance of this new tool:

int a = 3, b = 4;
PrintLn(a, " + ", b, " = ", a + b);

 Other improvements

Another very enjoyable improvement is much improved syntax highlighting inside the IDE’s code editor, as well as some tweaks to the way the editor works which can be changed in the File/Global Settings dialog.

Many bug fixes and other issues were resolved inside the IDE, notably relating to the debugger integration. The debugging functionality should now be very useable under both Linux and Windows.

I’m also happy to provide new packages available for specific Linux distributions, such as Gobolinux (my personal favorite to which I switched my main development station - www.gobolinux.org) and Debian/Ubuntu.

Ecere Communicator as well as Acovel Media Player have been slightly updated for the new release, with some minor fixes along the way not justifying new versions. Here are the download links:

Acovel Media Player 0.01 for Windows
Acovel Media Player 0.01 for Linux

Ecere Communicator 0.02 for Windows
Ecere Communicator 0.02 for Linux

Ecere SDK 0.42.1 and Cute Fractals

June 12th, 2008

I just released Ecere SDK version 0.42.1.

This release features major bug fixes and improvements to the EDA library (Ecere Data Access), support for executables and DLLs compression through UPX, an improved EditBox Undo buffer, important optimizations to the region updating engine, as well as a bunch of other bug fixes and improvements.

Download Ecere SDK 0.42.1 for Windows - June 11, 2008

Download Ecere SDK 0.42.1 for Linux - June 11, 2008

I’ve been wanting to add a few features to the Ecere Fractals explorer (a sample project in the SDK) ever since I coded it up years ago. I finally took some time to work on it! Improvements include support for smooth coloring; a brand new gradient editor; the option to save with or without computed data; export to image files with bilinear filtering; and some new interesting presets. The new version is included in the SDK and here are some links to pre-built executables and source code:

Download Ecere Fractals Explorer for Windows / Linux / Source

Here is a screenshot of the new version:

and some of my new creations:




New Ecere SDK Release 0.42

May 15th, 2008

I am pleased to announce the release 0.42 of the Ecere SDK, for both Windows and Linux.

It brings a long overdue undo/redo buffer to the IDE’s code editor, improved X support, improvements to the IDE and numerous bug fixes.

The new installer for Windows comes with a GCC 4.3 alpha MinGW and should install and compile on Windows Vista with much less difficulty than last release.

The Ecere Database Access system (libEDA.so / EDA.dll) is included in this release, with two new samples making use of it: MedDB and EDATest. Please take a look at this wiki page for a quick walk through (draft) of using EDA and get in touch with me further assistance.

You will also notice a new libec.so / ec.dll which holds the compiler functionality. It is not required by applications built with the SDK, but shared by the IDE and compilation tools (you will notice they shrank in size).

The latest version of the programmer’s guide (a work in progress) is bundled as a PDF in a documentation folder as well.

Please register on the Mantis bug tracker to report any problem with this release.

Ecere SDK 0.42 for Windows - May 15, 2008

Ecere SDK 0.42 for Linux - May 15, 2008

Posix Regex

March 12th, 2008

Hi there!

I’m Redj, Ecere Contributor. :) This is my first post and I hope to be posting more and more as I have interesting news to report or cool code snippets like I have today.

Here is an early implementation of a Regex class the ecere way…

Download Regex.ec

Just add Regex.ec to your project and use it as follows:


import "Regex"

void TestRegex()
{
   char * result;
   Regex regex { "[abc][xyz]", true };
   if((result = regex.Match("match me aZ I am")))
      printf("we have a match: %s\n", result);
}

Note that at line 6, “[abc][xyz]” sets the regex property and true sets the caseInsensitive property.

If you need the POSIX Regex extended syntax, just set the extendedSyntax property to true. Do the same for the newLineException, lineStartException and lineEndException properties if you need them. If you don’t know what they are, you probably don’t need them.

For Windows users: Note that in order to use this class, you will need to download the user contributed mingw regex library mingw-libgnurx-2.5.1-bin.tar.gz and extract it’s contents (libgnurx-0.dll) to Ecere SDK’s bin directory. You will also need this regex.h file to be present in mingw’s include directory.

For Linux users: Make sure your include paths are correctly set to find regex.h and you should be all set.

If you need assistance or would like to give use feedback, join us in #ecere on freenode.net or visit the forums and wiki (see links in the Ecere section of the sidebar).

That’s it for now. Enjoy!

Posted by Redj

eC Programming Guide Section Completed

February 6th, 2008

It has been more than a month since the last blog post, but both sections 1 and 2 of The Ecere Tao of Programming are finally completed. The first sections teach mostly the aspects that eC shares with C, while at the same time pointing out the innovations of eC. The second section teaches the object oriented concepts introduced with eC.

These sections together are intended to teach eC programming to both new programmers and experienced programmers alike (regardless of the background experience, be it C, C++, C#, Java, VB…). They therefore make up the official eC programming guide.

The remaining sections of the book will focus on teaching the various functionalities available in the Ecere SDK, such as the GUI toolkit and 2D/3D graphics engine.

Ecere programming book, Happy Holidays!

December 22nd, 2007

I realize it has already been two weeks since the last blog entry. I’ve previously mentioned I would resume the work on the Acovel Media Player as well as improving the IDE’s code editor (Undo is still a blatantly missing feature…). These things are still high in priority, but I started working on a new project which should turn out very valuable. Thus those goodies will not be ready in 2007 as I would have hoped, but they’re still coming sometime soon in the new year.

About the new project, despite the abundance of good samples, I believe the lack of documentation is a major reason for people hesitating to jump on using eC and the Ecere SDK. Filling up the API documentation reference would certainly be helpful, but I think an in depth guide on how to use these various technologies available in the SDK would be even more useful. That is why I decided to start writing a book.

The Ecere Tao of Programming will teach programming from the ground up, making use of all the tools making up the Ecere SDK. I haven’t totally decided yet on the distribution method, but I would like to print and publish hard cover editions. You can take a look at an excerpt from the first chapters as well as an overview of the table of the contents for the book here. The intent is for the book to be a thorough Programmer’s Guide for the SDK, while at the same time it should be able to teach basic programming using C and eC to previously non programmers. It will also cover advanced programming concepts such as 3D graphics, multithreading, networking and much more.

I would like to wish everybody very happy holidays, and a wonderful year 2008. Also, special thanks to every current and future Ecere SDK users for their support :)

Multi-Monitor Support on Windows

December 7th, 2007

The Ecere SDK now supports multi monitor display setups on Windows.

Download Ecere SDK 0.41.17.11 for Windows

Acovel Media Player for Linux!

December 5th, 2007

Unicode in Acovel

I’m pleased to announce the first preview of the Acovel Media Player for Linux. Acovel is currently limited to playing albums: bring up the Media Library, and click on the import button in upper right corner. Choose a folder containing music albums to import, and enjoy an intelligent algorithm which will analyze both ID3 tags and filenames to fill up its music collection database. Acovel’s search feature is amazingly fast (We tested against iTunes search and the results were very impressive). It makes use of the Ecere Database engine (EDB), an extremely light and simple database solution under development.

Acovel has been on hold for a while as I was attending to Linux & Unicode support in the SDK, but now that I’m back on it you can expect a lot more improvements to come in the next few weeks.

Download Acovel 0.01 for Linux

Download Acovel 0.01 for Windows

Minor X fix for last release

December 2nd, 2007

Some extra calls to XSync which were used for debugging purposes mistakenly got slipped into the last release.

This is mainly a patch release to correct the performance issue.

Download Ecere SDK 0.41.17.11 for Linux

Download Ecere SDK 0.41.17.11 for Mac OS X

Initial Mac OS X Support, X Improvements - SDK 0.41.17.10

December 1st, 2007

Here is the first attempt at supporting Mac OS X. For now the interface & graphics driver run on X11. Support for a more native solution such as Carbon is planned for the future, but it is not a priority for the moment. This should allow Mac folks to give the Ecere SDK a try, and hopefully attract contributors who would like to improve Mac support.

There are a few glitches with Ecere on X on Mac. To get anywhere you will most likely need the X.org server rather than the old XFree86. X.org comes by default with Leopard, but for those still on Tiger, here is where you can obtain prebuilt binaries for it. Also take a look at this page. You will also need the same dependencies as for Ecere on Linux, such as libjpeg, libpng, freetype, fontconfig, etc., some of which might not be already installed on your system. Some other problems seem to be caused by the interaction with quartz-wm (another window manager might work better). For some reason, new windows always want to be positioned at the top-middle position of the desktop. I had to patch the X driver to get around this problem, but it still causes some annoying repositioning of the windows. Sadly, the overall performance especially with text seems a lot slower for me than on Linux/X.org 7.3. I am not sure what is making XRender so much slower on my Mac. On my system the IDE has a little trouble dialoguing with the installed GDB 6.1 which prevents the integrated debugger to function. It might work on a more recent version of GDB.

Please give me feedback on how Ecere on Mac works out for you in the comments.

A few important improvements were also made to the X driver. Windows can now be closed through the window manager. Repositioning windows from the Window manager doesn’t confuse their positions anymore. 15/16 bit displays are now supported.

I found that the Xrender API documentation is very difficult to find, and quite incomplete. Here is where the latest Xrender protocol is at and here is a copy of Xrender library API documentation. Trying to get 16 bit working, the XRenderFindFormat function was particularly difficult, but I learned that the count parameter which the above documentation isn’t so clear about had to be 0. The color masks should also not be shifted.

Download Ecere SDK 0.41.17.10 for Windows
Download Ecere SDK 0.41.17.10 for Linux
Download Ecere SDK 0.41.17.10 for Mac OS X