Changelog & News

Welcome to the news page of the Citrine Website. Here you can monitor the progress I make with the Citrine Programming Language. For every new version of Citrine I'll try to add a list of changes to the change log on this page. This also allows you to take a look at the history of Citrine. I started working on the language back in 2009 when I was working for a game company in the Netherlands. However, serious work started in 2013 when I wrote a real interpreter in C. Citrine has been rewritten from scratch 3 times. The current version is the 3rd incarnation. In 2016 Citrine was officially incorporated into my company GaborSoftware and I have begun offering commercial services based on Citrine. For instance, it is now possible to build Citrine websites and applications.

Back to homepage

Citrine 0.8.4 (10 August)

Citrine 0.8.3 (4 August)

Citrine 0.8.2 (27 July)

Citrine 0.8.1 (22 July)

Citrine 0.8 (14 July)

Citrine 0.7.18 (6 July)

Citrine 0.7.17 (1 July)

Citrine 0.7.16 (22 June)

Citrine 0.7.15 (16 June)

Citrine 0.7.14 (9 June)

Citrine 0.7.13 (1 June)

More clean-up... The difficulty with software is that it hurts to delete code you have written. However, it's the only way to build a really solid and beautiful language. So here we go again...

Citrine 0.7.12 (26 May)

More clean-up...Turning Citrine into a very clean, solid language!

Citrine 0.7.11 (21 May)

Killed a lot of darlings this round...

To perform string interpolation you can send a message to a string now:

☞ greeting := ('Hello audience!' audience: 'World').
Hello World!

Citrine 0.7.10 (5 May)

Citrine 0.7.9 (26 April)

Update: Fighting with Brooms (17 March)

Yeah well.. this week was not a very good week. I had planned to switch the memory pool allocator on by default, but then I ran into some very weird bugs regarding the Garbage Collector. I tested the GC using mode 4 and 12, these are the 'aggressive' modes. In these modes, the GC collects, marks and sweeps after every programming statement. Turns out my GC also happily destroys in-arguments still needed by the messages. So... crash! boom! Not good. Luckily, I managed to fix all the issues. Unfortunately, there is still a minor memory leak left now (concerning only global return values). I feel quite sure I will be able to fix that soon. However, as a result I have not been very productive in terms of new features as a result this week. Also the weather here is terrible, it's friggin' cold outside. Let's hope spring will start soon! I am in need of a little sunshine... ;)

Update: LibSodium has landed in Citrine! (10 March)

Just added support for LibSodium cryptography to Citrine!
Usage example:

☞ myPassword := Password new: 'secret123'.
(myPassword = 'secret123') ifTrue {
	loggedIn := True.
}.
	

Note the very neat trick with the =. The = message will not compare the password using a string comparison but rather use the libsodium verify mechanism to compare the password to avoid timing attacks! So in Citrine, the regular procedure of hash comparison has been abstracted away completely! No need for verify_password() or something like that, the = message associated with the Password object knows how to compare passwords safely! More cryptography plugins will follow soon!

Citrine 0.7.8 (3 March 2018)

First of all, February was a crazy month for Citrine. Lots of things happened and Citrine has had an enormous development boost this month. To begin with, Citrine is now 4x faster than the previous version. That being said, Citrine was horribly slow. Citrine still lags behind other languages like PHP or Python in terms of speed, but not so much anymore and more importantly, this step has proven that Citrine can be improved in terms of performance relatively easy and we will do so in the future. It will only be a matter of time before Citrine matches the performance of mainstream programming languages, mark my words! The new pool allocator responsible for the performance improvements is still experimental in version 0.7.8 and has to be turned on by sending the Broom mode: 9 message (setting bit 4).

But that's not all. Like I said, this month was really crazy. We can now say hello to the DUTCH VERSION of Citrine. That's right, you can now write Dutch programs in Citrine. Je kunt nu computerprogramma's schrijven in de Nederlandse Taal:

☞ klusjes := Lijst nieuw
	• 'vaten'
	• 'stofzuigen'
	• 'boodschappen'.

✎ schrijf: (klusjes samenvoegen: ',').

Not only did we improve performance and create a Dutch version of the language; we also shipped no less than 3 new plugins: a CURL plugin (based on the excellent work of Jake), a Json plugin and a PostgreSQL plugin. Also, the Web Request plugin has now been bundled in the default download packages. In terms of functionality, Citrine is now a closer match to mainstream languages!

And still... there is more. Thanks to the wonderful work of Twiggler a Windows version is coming! As I said before, it has been a crazy winter month!

Changelog for Citrine Version 0.7.8. Release date: 2018-03-03.
Download Citrine Version 0.7.8 from the Download Page.

Citrine 0.7.7 (3 February 2018)

Changelog for Citrine Version 0.7.7. Release date: 2018-02-03.
Download Citrine Version 0.7.7 from the Download Page.

Citrine 0.7.6 (6 January 2018)

Citrine 0.7.5 (3 January 2018)

Citrine 0.7.4 (31 December 2017)

Citrine 0.7.3 (December 2017)

Citrine 0.7.2 (June 2017)

Citrine 0.7.1 (June 2017)

Citrine 0.7 (April 2017)

Citrine 0.6.5 (February 2017)

Citrine 0.6.1 (January 2017)

Citrine 0.6 (November 2016)

Citrine 0.5 (May 2016)

Citrine 0.4 (March 2016)

Citrine 0.3 (January 2016)

Citrine 0.2 (December 2015)

Citrine 0.1 plan C (November 2015)

Citrine 0.1 plan B (December 2014)

Citrine 0.1 plan A (December 2013)

Penelope PHP (somewhere in 2010-2012)

First drafts (2009)

Inspiration

Citrine is loosely based on Smalltalk-70 (icons, symbols), Smalltalk-80 (messages, pure object-oriented programming), JavaScript (prototypes), C ({} notation), PHP (web template notation), Ruby and Self.

back to top.