Wednesday, February 8, 2017

Crack 1.0 Released

I am pleased to announce the release of Crack 1.0!

This milestone has been over six years in the making.  Crack is now usable for a wide variety of applications, and I've used it to build everything from quick and dirty file scanners to web applications, music software, an OpenGL FPS engine and an encrypted filesystem.

In keeping with semantic versioning, this release also marks the beginning of interface stability for the language.  Any future 1.x releases should be backwards compatible with this one, so there's no longer any concern about the ground shifting out from under you when you write Crack code.

Massive thanks to the other primary contributors: Shannon Weyrick, Conrad Steenberg and Arno Rehn.

Curiously, the biggest thing Crack is lacking right now is a user community, so feel free to dig in, play around and speak up.  More good stuff to come :-)

Download 1.0

Friday, February 3, 2017

1.0 Release and Final Classes

I've just pushed the latest code that's been sitting on my laptop.  The exciting news is that after about six years of development, I'm finally preparing the 1.0 release!

I wanted to be announcing this about four years ago.  There have been a number of reasons that I delayed it for so long, all coming down to some level of perception that the language "wasn't ready" for a 1.0 release.

You could still argue that it's not ready.  There are a lot of things that the language lacks.  But the 1.0 designation was never about indicating completeness.  It was a promise of stability.  1.0 means that we won't break compatibility - your 1.0 code should continue to run until we release 2.0.  This doesn't matter much to the world at large, Crack doesn't have a lot of users.  But it does matter to me.  I use the language quite extensively, and I don't want to have to fix all of my projects when I make changes.

It also matters to me in a very personal way.  I've been working on this for a long time and I want to move on to other things (not that I'm abandoning Crack, quite the contrary, I plan to continue to use it and I'm already experimenting with ideas for the next major version).  I have a personal need for closure on this project, and this 1.0 label does that for me.

In the interest of ensuring compatibility, I've started work on one more feature which may or may not make it into 1.0.  The "FinalClasses" branch contains a set of changes to allow the @final annotation to be used on classes.  Final classes in Crack are similar to final classes in Java: you can't inherit from them.

The reason this change is important for 1.0 is because it lets us reserve classes in the standard library for future enhancements without breaking compatibility.  After 1.0, we can't add public or protected members to non-final public classes, because it is possible that users have derived from these classes and introduced their own members whose names would collide with those of the standard library classes.

The only problem is, at this point I'm not sure I care to delay the 1.0 release for this.  I still need to audit the entire standard library and add @final to all of the appropriate classes.  There's also the possibility that the feature may be buggy.

The alternative to introducing final classes is to simply accept that there won't be any new member additions to the standard library classes.  We can still add new functionality, but it will have to come in the form of new classes, which will likely be final themselves so they won't have this problem.

I'm going to weigh the arguments for and against final classes over the weekend.  On Monday, I'll either release 1.0 or delay it for a week or two while I make much of the library classes final.  But either way, there will be a Crack 1.0 release in February.

Friday, October 21, 2016

Crack 0.13.1 Released

We are pleased to announce the release of Crack 0.13.1.

This is a patch release that fixes a couple of test failures on 32-bit.  It also adds some nice features to "crackdoc".  Enjoy :-)

Wednesday, September 28, 2016

Crack 0.13 Released

We are pleased to announce the release of 0.13 of the Crack programming language.  Download here.

In addition to several prominent bug fixes, the primary feature of 0.13 is a complete restructuring of the HTTP server modules. As part of this, we include the #crack.http.auth# module which facilitates the implementation of complete HTTP application servers in the language.

The language environment is currently robust enough to merit a "1.0" label. However, since we aim to guarantee backwards compatibility for all 1.x versions after 1.0, the current plan is to stick with major version 0 until there is more demand for a stable interface.

Enjoy :-)

Friday, July 1, 2016

Crack 0.12 Released

I'm happy to announce the release of Crack 0.12.  Download the source from here.

Release notes:

  • Added full support for special documentation comments, created the model builder which knows how to extract them and created the "crackdoc" documentation tool.
  • Greatly improved http server support, moved it to crack.http
  • NML extensibility enhancements.
  • Convert buffer sizes from uint to uintz
  • Change alias serialization to deal with ordering issues in nested aliases.
  • Added SHA256 hashing module.
  • Added POSIX signal handling, display stack traces for fatal signals.
  • Many more small enhancements and bug fixes.
This release has been almost a year in coming, which is way too long.  I had planned to make this a 1.0 release, but since no one is clamoring for API stability I've decided to retain the 0.x versioning so I can continue to evolve the language and modules.

Tuesday, June 28, 2016

New Website!

I've finally take the time to create a real website for Crack:

Unsurprisingly, the site is generated by a crack script.  In the process of doing this, I've enhanced NML (the markup language that the Crack manual is written in) in order to support syntax highlighting.  At some point I'll regenerate the manual to fit in with the new theme.

Sunday, November 1, 2015

SSL Ciphers

I just checked in support for doing encryption/decryption through OpenSSL.  Crack provides a wrapper library (crack.crypt.ssl.cipher) that allows you to encrypt/decrypt using a writer, so for example to encrypt:

     import crack.crypt.ssl EVP_aes_256_cbc, EncryptWriter;

     backing := (cwd/'outfile').writer();
     out := EncryptWriter(EVP_aes_256_cbc(), key, backing);
     for (data :=
     out.close();   # You must explicitly close (or make them go out of scope).

There were a few ciphers (specifically the AES CCM and GCM ciphers) that didn't pass a round-trip test.  These require some special setup that I don't feel motivated to figure out.