Better Software - December 2007 - (Page 11) Code Craft ATTRIBUTE Compiled (native code) Interpreted Scripting Dynamically Typed Statically Typed Object Oriented Systems Programming Functional Programming Garbage Collection Table 1 LANGUAGES C, C++, D, COBOL, Ada, FORTRAN Java, PHP Perl, C#, Python, JavaScript, Ruby, Lisp, Lua , Perl, Python, JavaScript, Ruby, Lua PHP Perl, Python, JavaScript, Ruby, Lisp, Lua , Java, C, C++, C#, D, COBOL, Ada, FORTRAN All but C (requires modern versions of Ada and FORTRAN) C, C++, D, Ada Lisp (100%), Perl, Python, Ruby, C++, D, Lua Java, PHP Perl, C#, Python, JavaScript, D, Lisp, Lua , (templates) are type-safe. Listing 2 is a simple stack template. Since it is declared with the empty [] syntax, data is a dynamic array. The length property for dynamic arrays can be updated, which resizes the array. Listing 3 is a sample driver for Stack. You use the exclamation point to instantiate a template. Note how the length member function automatically acts as a property in the assert statements (i.e., no function-call syntax is required). Note also that instead of throwing an the features we take for granted in modern programming languages, and then some. The obligatory “Hello, world” program is shown in listing 1. The import statement works just like Java’s, except that modules have a one-to-one correspondence to files, as in Python. // hello.d import std.stdio; void main(string[] args) { writefln("Hello, modern world"); } Listing 1 Free-standing functions behave as in C and C++, except that main doesn’t have to declare int as a return type (although it can). The writef function is like C’s printf with formatting extensions. The writefln function appends a newline. For Java programmers, D has pretty much everything except dynamic class loading, which doesn’t apply since it is a compiled language. Other Java features are there, including interfaces and inner classes. In contrast to Java, D’s generics // stack.d: A stack template struct Stack(T) { private T[] data; public void push(T t) { data ~= t; } public T pop() { T t = data[$-1]; // $ == data.length data.length = data.length-1; return t; } public T top() { return data[$-1]; } public int length() { return data.length; } } Listing 2 import std.stdio; void main() { Stack!(int) s; // Instantiate template s.push(1); assert(s.length == 1); // Property access writefln("top: %d", s.top()); writefln("popping %d", s.pop()); assert(s.length == 0); try { s.top(); // Intentional underflow } catch { writefln("caught exception"); } } /* Output: top: 1 popping 1 caught exception */ Listing 3 public T top() in { assert(data.length > 0); } body { return data[$-1]; } Listing 4 underflow exception in pop and top, I just let automatic array bounds-checking do the job. You could also use D’s built-in support for contract programming to validate preconditions, if you prefer, as the implementation of top in listing 4 illustrates. Preconditions go in an in clause while postconditions go in an out clause. Violated assertions raise an AssertError exception. D can also enforce class invariants. www.StickyMinds.com 11 DECEMBER 2007 BETTER SOFTWARE http://www.StickyMinds.com
Table of Contents Feed for the Digital Edition of Better Software - December 2007 Better Software - December 2007 Contents Mark Your Calendar What's Happening @ StickyMinds.com Technically Speaking Code Craft Test Connection Management Chronicles Man and Machine Let Your Values be Your Guide A Story About User Stories and Test-driven Development Product Announcements The Last Word Ad Index Better Software - December 2007 Better Software - December 2007 - Better Software - December 2007 (Page cover1) Better Software - December 2007 - Better Software - December 2007 (Page cover2) Better Software - December 2007 - Better Software - December 2007 (Page 1) Better Software - December 2007 - Better Software - December 2007 (Page 2) Better Software - December 2007 - Contents (Page 3) Better Software - December 2007 - Mark Your Calendar (Page 4) Better Software - December 2007 - Mark Your Calendar (Page 5) Better Software - December 2007 - Mark Your Calendar (Page 6) Better Software - December 2007 - Technically Speaking (Page 7) Better Software - December 2007 - Technically Speaking (Page 8) Better Software - December 2007 - What's Happening @ StickyMinds.com (Page 9) Better Software - December 2007 - Code Craft (Page 10) Better Software - December 2007 - Code Craft (Page 11) Better Software - December 2007 - Code Craft (Page 12) Better Software - December 2007 - Code Craft (Page 13) Better Software - December 2007 - Test Connection (Page 14) Better Software - December 2007 - Test Connection (Page 15) Better Software - December 2007 - Management Chronicles (Page 16) Better Software - December 2007 - Management Chronicles (Page 17) Better Software - December 2007 - Management Chronicles (Page 18) Better Software - December 2007 - Management Chronicles (Page 19) Better Software - December 2007 - Man and Machine (Page 20) Better Software - December 2007 - Man and Machine (Page 21) Better Software - December 2007 - Man and Machine (Page 22) Better Software - December 2007 - Man and Machine (Page 23) Better Software - December 2007 - Man and Machine (Page 24) Better Software - December 2007 - Man and Machine (Page 25) Better Software - December 2007 - Let Your Values be Your Guide (Page 26) Better Software - December 2007 - Let Your Values be Your Guide (Page 27) Better Software - December 2007 - Let Your Values be Your Guide (Page 28) Better Software - December 2007 - Let Your Values be Your Guide (Page 29) Better Software - December 2007 - Let Your Values be Your Guide (Page 30) Better Software - December 2007 - Let Your Values be Your Guide (Page 31) Better Software - December 2007 - A Story About User Stories and Test-driven Development (Page 32) Better Software - December 2007 - A Story About User Stories and Test-driven Development (Page 33) Better Software - December 2007 - A Story About User Stories and Test-driven Development (Page 34) Better Software - December 2007 - A Story About User Stories and Test-driven Development (Page 35) Better Software - December 2007 - A Story About User Stories and Test-driven Development (Page 36) Better Software - December 2007 - A Story About User Stories and Test-driven Development (Page 37) Better Software - December 2007 - A Story About User Stories and Test-driven Development (Page 38) Better Software - December 2007 - A Story About User Stories and Test-driven Development (Page 39) Better Software - December 2007 - A Story About User Stories and Test-driven Development (Page 40) Better Software - December 2007 - A Story About User Stories and Test-driven Development (Page 41) Better Software - December 2007 - A Story About User Stories and Test-driven Development (Page 42) Better Software - December 2007 - Product Announcements (Page 43) Better Software - December 2007 - Product Announcements (Page 44) Better Software - December 2007 - Product Announcements (Page 45) Better Software - December 2007 - Product Announcements (Page 46) Better Software - December 2007 - The Last Word (Page 47) Better Software - December 2007 - Ad Index (Page 48) Better Software - December 2007 - Ad Index (Page cover3) Better Software - December 2007 - Ad Index (Page cover4)
For optimal viewing of this digital publication, please enable JavaScript and then refresh the page. If you would like to try to load the digital publication without using Flash Player detection, please click here.