Better Software - December 2007 - (Page 12) Code Craft What does D have that Java doesn’t? Here’s a partial list: stand-alone functions, nested functions, delegates, inline assembler, native-code compilation, deterministic destruction of objects for automatic resource management (“scope guards”), compile-time programming (a.k.a. metaprogramming), type inference (see the program in listing 5), and built-in support for automated unit testing and contract programming. In listing 5, the sample D program counts the number of occurrences of words in text files and lists the results alphabetically. Running this program on the previous sentence yields the output in Listing 6. The call to std.string.split takes the string returned from std.stdio.read (which is actually a byte array, hence the cast) and splits on whitespace. The auto keyword declares words to be the same type as the output from split, which here is a dynamic array of strings. Counts is an associative array (a.k.a. a map or hash) with string // wc.d: Counts the number of occurrences of each word in a text file keys and integer values. The foreach import std.stdio; keyword is D’s generic iterator conimport std.string; struct. Associative arrays have a keys import std.file; property that returns the keys as an array, and arrays have a sort proper// This function does all the work (Reads words into a list; ty that sorts the array in place. The // computes counts; displays results) expression [1..$] is an array slice, in void wc(string filename) { this case comprising the second slot auto words = split(cast(string) read(filename)); through the end of the array (denoted int[string] counts; by $). Slices are composable, mutable foreach (word; words) views into an array—no copies are ++counts[word]; made. foreach (w; counts.keys.sort) D’s power and readability have apwritefln("%s: %d", w, counts[w]); pealed to a large audience in a short } time, hence the favorable TIOBE ranking. Already in version 2.0, D // A simple driver: process all file arguments held its first Developers’ Conference void main(string[] args) { in August 2007 in Seattle, sponsored foreach(f; args[1..$]) { // Start at second arg ([1]) by Amazon. If you are looking for a writefln("\n%s:", f); high-level, type-safe language with the wc(f); efficiency of C++ and the convenience } of Java or C# and then some, D might } be the language for you. You can find information regarding all things D at Listing 5 digitalmars.com. {end} text.dat: 5,: 1 D: 1 In: 1 alphabetically.: 1 and: 1 counts: 1 in: 1 listing: 1 lists: 1 number: 1 occurrences: 1 of: 2 program: 1 results: 1 sample: 1 text: 1 the: 3 words: 1 Chuck Allison developed software for twenty years before becoming a professor of computer science at Utah Valley State College. He was senior editor of the C/C++ Users Journal and is founding editor of The C++ Source. He is also the author of two C++ books and gives onsite training in C++, Python, and Design Patterns. Sticky Notes For more on the following topic go to www.StickyMinds.com/bettersoftware. I TIOBE Are you marketable? In how many of the top-twenty languages are you fluent? Which are your favorites? M Listing 6 Follow the link on the StickyMinds.com homepage to join the conversation. 12 BETTER SOFTWARE DECEMBER 2007 www.StickyMinds.com digitalmars.com www.StickyMinds.com/bettersoftware StickyMinds.com 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.