- Everything (1495)
- aminals (19)
- announcement (13)
- artwork (26)
- Best of (6)
- bicycle (37)
- code (27)
- comic (77)
- customer experience (106)
- debate (12)
- dream (42)
- food (119)
- friends (205)
- games (83)
- geekery (209)
- health (34)
- job stuff (289)
- linkage (95)
- media (54)
- meta (24)
- music (219)
- random (68)
- rant (142)
- travels (88)
- wrists (24)
- writing (26)
- May 2012 (3)
- April 2012 (5)
- March 2012 (10)
- February 2012 (6)
- January 2012 (9)
- December 2011 (6)
- November 2011 (14)
- October 2011 (6)
- September 2011 (4)
- August 2011 (13)
- July 2011 (7)
- June 2011 (8)
- May 2011 (2)
- April 2011 (7)
- March 2011 (9)
- February 2011 (7)
- January 2011 (5)
- December 2010 (13)
- November 2010 (10)
- October 2010 (13)
- September 2010 (8)
- August 2010 (11)
- July 2010 (12)
- June 2010 (9)
- May 2010 (13)
- April 2010 (13)
- March 2010 (18)
- February 2010 (4)
- January 2010 (12)
- December 2009 (8)
- November 2009 (3)
- October 2009 (4)
- September 2009 (10)
- August 2009 (13)
- July 2009 (12)
- June 2009 (15)
- May 2009 (13)
- April 2009 (14)
- March 2009 (17)
- February 2009 (13)
- January 2009 (21)
- December 2008 (22)
- November 2008 (15)
- October 2008 (17)
- September 2008 (14)
- August 2008 (27)
- July 2008 (43)
- June 2008 (22)
- May 2008 (23)
- April 2008 (26)
- March 2008 (26)
- February 2008 (23)
- January 2008 (25)
- December 2007 (8)
- November 2007 (14)
- October 2007 (15)
- September 2007 (10)
- August 2007 (22)
- July 2007 (15)
- June 2007 (16)
- May 2007 (6)
- April 2007 (20)
- March 2007 (16)
- February 2007 (15)
- January 2007 (12)
- December 2006 (16)
- November 2006 (10)
- October 2006 (16)
- September 2006 (5)
- July 2006 (13)
- June 2006 (11)
- May 2006 (15)
- April 2006 (20)
- March 2006 (8)
- February 2006 (10)
- January 2006 (13)
- December 2005 (9)
- November 2005 (9)
- October 2005 (13)
- September 2005 (7)
- August 2005 (8)
- July 2005 (11)
- June 2005 (9)
- May 2005 (13)
- April 2005 (9)
- March 2005 (13)
- February 2005 (30)
- January 2005 (10)
- December 2004 (14)
- November 2004 (16)
- October 2004 (19)
- September 2004 (25)
- August 2004 (14)
- July 2004 (23)
- June 2004 (29)
- May 2004 (9)
- April 2004 (20)
- March 2004 (15)
- February 2004 (11)
- January 2004 (12)
- December 2003 (16)
- November 2003 (9)
- October 2003 (15)
- September 2003 (15)
- August 2003 (14)
- July 2003 (18)
- June 2003 (19)
- May 2003 (19)
- April 2003 (4)
- March 2003 (9)
- February 2003 (14)
- January 2003 (6)
- Everything (1462)
- aminals (11)
- announcement (13)
- artwork (24)
- Best of (5)
- bicycle (37)
- code (26)
- comic (77)
- customer experience (101)
- debate (12)
- dream (42)
- food (118)
- friends (197)
- games (82)
- geekery (198)
- health (23)
- job stuff (285)
- linkage (94)
- media (54)
- meta (24)
- music (218)
- random (67)
- rant (138)
- travels (88)
- wrists (24)
- writing (26)
- December 2011 (6)
- November 2011 (14)
- October 2011 (6)
- September 2011 (4)
- August 2011 (13)
- July 2011 (7)
- June 2011 (8)
- May 2011 (2)
- April 2011 (7)
- March 2011 (9)
- February 2011 (7)
- January 2011 (5)
- December 2010 (13)
- November 2010 (10)
- October 2010 (13)
- September 2010 (8)
- August 2010 (11)
- July 2010 (12)
- June 2010 (9)
- May 2010 (13)
- April 2010 (13)
- March 2010 (18)
- February 2010 (4)
- January 2010 (12)
- December 2009 (8)
- November 2009 (3)
- October 2009 (4)
- September 2009 (10)
- August 2009 (13)
- July 2009 (12)
- June 2009 (15)
- May 2009 (13)
- April 2009 (14)
- March 2009 (17)
- February 2009 (13)
- January 2009 (21)
- December 2008 (22)
- November 2008 (15)
- October 2008 (17)
- September 2008 (14)
- August 2008 (27)
- July 2008 (43)
- June 2008 (22)
- May 2008 (23)
- April 2008 (26)
- March 2008 (26)
- February 2008 (23)
- January 2008 (25)
- December 2007 (8)
- November 2007 (14)
- October 2007 (15)
- September 2007 (10)
- August 2007 (22)
- July 2007 (15)
- June 2007 (16)
- May 2007 (6)
- April 2007 (20)
- March 2007 (16)
- February 2007 (15)
- January 2007 (12)
- December 2006 (16)
- November 2006 (10)
- October 2006 (16)
- September 2006 (5)
- July 2006 (13)
- June 2006 (11)
- May 2006 (15)
- April 2006 (20)
- March 2006 (8)
- February 2006 (10)
- January 2006 (13)
- December 2005 (9)
- November 2005 (9)
- October 2005 (13)
- September 2005 (7)
- August 2005 (8)
- July 2005 (11)
- June 2005 (9)
- May 2005 (13)
- April 2005 (9)
- March 2005 (13)
- February 2005 (30)
- January 2005 (10)
- December 2004 (14)
- November 2004 (16)
- October 2004 (19)
- September 2004 (25)
- August 2004 (14)
- July 2004 (23)
- June 2004 (29)
- May 2004 (9)
- April 2004 (20)
- March 2004 (15)
- February 2004 (11)
- January 2004 (12)
- December 2003 (16)
- November 2003 (9)
- October 2003 (15)
- September 2003 (15)
- August 2003 (14)
- July 2003 (18)
- June 2003 (19)
- May 2003 (19)
- April 2003 (4)
- March 2003 (9)
- February 2003 (14)
- January 2003 (6)
May 28, 2011
May 3, 2011
Vala (code, geekery)
A while ago I learned about an interesting language called Vala, which is basically C++ if it were redesigned from the ground up with only the good parts of C++, plus useful parts of other more-modern languages like C# and JavaScript. Every now and then I look at the tutorial again and it's just getting better and better. And it is designed to maintain ABI compatibility with C, and actually is just a front-end that generates and compiles C code, meaning it's also perfectly-suited for embedded programming, especially on platforms where C++ has been stupidly hobbled (such as Android NDK).
I especially like the way it handles generics, the way all Vala references are equivalent to boost::shared_ptr (with a keyword to make a reference weak - without any need to explicitly lock it), the way that you can still do explicit memory management if you need to (only with a very nicely-implemented equivalent of std::auto_ptr to make even that stuff easier), it supports contract-based programming features (including requiring explicit nullability for object parameters), and that it supports true closures (unlike Java's quasi-closures) with a syntax that isn't ridiculously horrible (unlike in Javascript, C99, or C++0xB2011). It also has a very nice syntax for function pointers delegates, and also has some syntactic features that are there specifically to support asynchronous message handling.
It's a shame that people only seem to think that it's suitable for Gnome, probably because it grew out of GObject and is part of the Gnome project. It's not! It's a general-purpose language, that just happens to also provide GTK and Gnome bindings as part of its standard library. But it's also compiled, C-compatible (and therefore C++-compatible), and doesn't require a ridiculously large and fragile runtime library.
Maybe someday I'll have an opportunity to actually do a project with it. For now I just feel like I keep on staring through the window at the shiny toy that I wish I could use.