<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	>

<channel>
	<title>Intel Software Network Blogs &#187; Steve Lionel (Intel)</title>
	<atom:link href="http://softwareblogs.intel.com/author/steve-lionel/feed/" rel="self" type="application/rss+xml" />
	<link>http://softwareblogs.intel.com</link>
	<description></description>
	<pubDate>Fri, 29 Aug 2008 22:50:49 +0000</pubDate>
	<generator>http://wordpress.org/?v=2.6.1</generator>
	<language>en</language>
			<item>
		<title>MIXing it up with Donald Knuth</title>
		<link>http://softwareblogs.intel.com/2008/04/28/mixing-it-up-with-donald-knuth/</link>
		<comments>http://softwareblogs.intel.com/2008/04/28/mixing-it-up-with-donald-knuth/#comments</comments>
		<pubDate>Mon, 28 Apr 2008 15:23:45 +0000</pubDate>
		<dc:creator>Steve Lionel (Intel)</dc:creator>
		
		<category><![CDATA[Software Engineering]]></category>

		<guid isPermaLink="false">http://softwareblogs.intel.com/2008/04/28/mixing-it-up-with-donald-knuth/</guid>
		<description><![CDATA[The other day, I ran across an interesting interview with Donald Knuth.  Knuth, of course, is world-famous as the creator of the Potrzebie System of Weights and Measures (1 potrzebie = The thickness of issue #26 of MAD Magazine - just ask Google!)
Only slightly less known is Knuth's series of books The Art of [...]]]></description>
			<content:encoded><![CDATA[<p>The other day, I ran across an <a href="http://www.informit.com/articles/article.aspx?p=1193856">interesting interview</a> with <a href="http://en.wikipedia.org/wiki/Donald_Knuth">Donald Knuth</a>.  Knuth, of course, is world-famous as the creator of the <a href="http://en.wikipedia.org/wiki/Potrzebie#Unit_System">Potrzebie System of Weights and Measures</a> (1 potrzebie = The thickness of issue #26 of <a href="http://en.wikipedia.org/wiki/Mad_%28magazine%29">MAD Magazine</a> - just ask <a href="http://www.google.com/search?q=1+potrzebie">Google</a>!)</p>
<p>Only slightly less known is Knuth's series of books <a href="http://www-cs-faculty.stanford.edu/~knuth/taocp.html">The Art of Computer Programming</a> (TAOCP).  Planned as a seven-volume set, the first three volumes were published in the 1970s and were considered "required reading" by most everyone studying computer science. In college, I was especially taken with Knuth's use of an invented computer architecture called MIX, as it was a mixture of several well-known (at the time) architectures, and like some other college students of the era, I wrote an extended MIX interpreter, (mine was in IBM System\370 Assembler in two boxes of punch cards), that I oh-so-cleverly called XIM.</p>
<p>My XIM implemented not only the standard MIX instruction set, but also added all of the architectural extensions Knuth described in the volumes, such as floating point and I/O.  In the mid-70s, I wrote Knuth a letter describing XIM and asking, as an aside, when we might expect to see volume 4 published.  I received a thoughtful and courteous reply, saying, essentially, not to hold my breath! Sadly, my only copy of XIM perished in an apartment fire.</p>
<p>Knuth since has rewritten and revised TAOCP volumes 1-3 multiple times, trying to keep it relevant for the times. (Algorithms for efficient sorting of data stored on magnetic tapes are probably not as useful as they once were.)  What I missed, though, was the start, in 2005, of the publication of parts of TAOCP Volume 4!  Still a work in progress, Knuth has published "Fascicles", sets of chapters from the book.  Fascicles 1-4 are out, and Fascicle 0 has just been released.</p>
<p>What?  Oh, yeah.  The interview.  Knuth has been an advocate of what he calls <a href="http://www.literateprogramming.com/">Literate Programming</a>, which if I understand it correctly, has one write programs that are designed to be read by humans so that they can understand what the program is supposed to do.  I'm all in favor of this, as a long time advocate of writing understandable code and letting the compiler handle the optimization.</p>
<p>Knuth also expressed disdain for "unit tests", saying "lots of time is wasted on activities that I simply never need to perform or even think about. Nothing needs to be 'mocked up.'"  He also takes CPU manufacturers to task for moving to multicore:</p>
<blockquote><p><em>... it looks more or less like the hardware designers have run out of ideas, and that they’re trying to pass the blame for the future demise of Moore’s Law to the software writers by giving us machines that work faster only on a few key benchmarks! I won’t be surprised at all if the whole multithreading idea turns out to be a flop, worse than the [Itanium] approach that was supposed to be so terrific—until it turned out that the wished-for compilers were basically impossible to write.<br />
...<br />
I know that important applications for parallelism exist—rendering graphics, breaking codes, scanning images, simulating physical and biological processes, etc. But all these applications require dedicated code and special-purpose techniques, which will need to be changed substantially every few years. </em></p></blockquote>
<p>Well, some at Intel would take issue with that! It is certainly true that multithreading requires a different way of approaching algorithms, and there's a lot of progress in making threading easier, but there's lots more work to do.</p>
<p>Knuth has also revised the 1960s-era MIX, creating <a href="http://www-cs-faculty.stanford.edu/~knuth/mmix.html">MMIX</a>, a more modern 64-bit architecture.</p>
<p>Finally, I note that Knuth still plans to complete the seven-volume set of TAOCP.  I'll look forward to that!</p>
]]></content:encoded>
			<wfw:commentRss>http://softwareblogs.intel.com/2008/04/28/mixing-it-up-with-donald-knuth/feed/</wfw:commentRss>
		</item>
		<item>
		<title>Dick Hustvedt, the consummate software engineer</title>
		<link>http://softwareblogs.intel.com/2008/04/23/dick-hustvedt-the-consummate-software-engineer/</link>
		<comments>http://softwareblogs.intel.com/2008/04/23/dick-hustvedt-the-consummate-software-engineer/#comments</comments>
		<pubDate>Wed, 23 Apr 2008 20:52:11 +0000</pubDate>
		<dc:creator>Steve Lionel (Intel)</dc:creator>
		
		<category><![CDATA[Software Engineering]]></category>

		<guid isPermaLink="false">http://softwareblogs.intel.com/2008/04/23/dick-hustvedt-the-consummate-software-engineer/</guid>
		<description><![CDATA[I've written a couple of "farewell" posts before, but this one is personal. I learned today that Dick Hustvedt died last week, and my heart is heavy. As I knew him, Dick was one of the principal architects and developers of the VAX/VMS operating system and a major force behind the development of the VAXcluster.
I [...]]]></description>
			<content:encoded><![CDATA[<p>I've written a couple of "farewell" posts before, but this one is personal. I learned today that <a href="http://en.wikipedia.org/wiki/Dick_Hustvedt">Dick Hustvedt</a> died last week, and my heart is heavy. As I knew him, Dick was one of the principal architects and developers of the <a href="http://en.wikipedia.org/wiki/OpenVMS">VAX/VMS</a> operating system and a major force behind the development of the <a href="http://en.wikipedia.org/wiki/VAXcluster">VAXcluster</a>.</p>
<p>I greatly admired Dick for his brilliance, his keen sense of what it meant to design things <em>right</em>, and for his wicked sense of humor.  Dick was famous for his elaborate pranks, including the <a href="http://slashdot.org/comments.pl?sid=76256&amp;cid=6805264">SD730 Fixed Head Solar Horologue</a>, a sundial with a photocell that detected noon, connected by a parallel port to the VAX-11/730 which lacked a time-of-day  clock. This also inspired Dick's choice of <a href="http://en.wikipedia.org/wiki/List_of_unusual_units_of_measurement#Microfortnight">microfortnights</a> as the unit for the VMS SYSGEN parameter TIMEPROMPTWAIT.</p>
<p>As a young software engineer at DEC in the late 70s and early 80s, I looked up to Dick as a shining example of what I aspired to be. Dick believed in <em>architecture</em>, designing and thinking things through before building, and he was great at getting cooperation and extra effort out of the VMS team.  I like to think that a little of him rubbed off on me.</p>
<p>Tragically, Dick suffered severe brain injury in 1984 when his car was struck in an auto accident.  I visited him a couple of times afterward, at the home he shared with his wife (and DEC engineer) Audrey Reith.  His son Marc wrote a <a href="http://seedwatcher.typepad.com/seedwatcher/2008/04/in-memory-of-my.html">memorial post</a> which provides some more information about Dick and his life.</p>
<p>Rest in peace, Dick.  And farewell.  I'm privileged to have known you.</p>
]]></content:encoded>
			<wfw:commentRss>http://softwareblogs.intel.com/2008/04/23/dick-hustvedt-the-consummate-software-engineer/feed/</wfw:commentRss>
		</item>
		<item>
		<title>Doctor, it hurts when I do this!</title>
		<link>http://softwareblogs.intel.com/2008/03/31/doctor-it-hurts-when-i-do-this/</link>
		<comments>http://softwareblogs.intel.com/2008/03/31/doctor-it-hurts-when-i-do-this/#comments</comments>
		<pubDate>Mon, 31 Mar 2008 18:52:16 +0000</pubDate>
		<dc:creator>Steve Lionel (Intel)</dc:creator>
		
		<category><![CDATA[Software Engineering]]></category>

		<category><![CDATA[Fortran]]></category>

		<guid isPermaLink="false">http://softwareblogs.intel.com/2008/03/31/doctor-it-hurts-when-i-do-this/</guid>
		<description><![CDATA[It is often said that you can write bad code in any language, and I certainly can't argue with that.  I do find, though, that the worst-looking code comes from programmers who are more familiar with another programming language.  One can often tell that a C programmer wrote Fortran code, or that a [...]]]></description>
			<content:encoded><![CDATA[<p>It is often said that you can write bad code in any language, and I certainly can't argue with that.  I do find, though, that the worst-looking code comes from programmers who are more familiar with another programming language.  One can often tell that a C programmer wrote Fortran code, or that a Fortran programmer wrote C code (my C code probably looks like the latter.)</p>
<p>One certainly can write clear and understandable code in Fortran, and many do.  I see a lot of code from different people cross my desk each day, and I've learned to recognize certain "idioms" in Fortran code which are there to help make the code easier to understand. Meaningful variable names, use of mixed-case and free-format source, etc.  Sometimes, though, a helpful coding practice can bite you.  Here's one I ran across the other day...</p>
<p>One of the big strengths of modern Fortran is its wealth of array-oriented features.  Few languages offer the whole-array and array slice operations that Fortran does, and often you can do an array operation without a traditional DO loop.  For example, you can add two arrays with:</p>
<p>A = B + C</p>
<p>You can even have functions that return arrays (<a href="http://softwarecommunity.intel.com/isn/Community/en-US/forums/permalink/116158/116170/ShowThread.aspx#116170">explicit interface required!</a>), which freaks out some who grew up on FORTRAN 77 or even FORTRAN IV.  Some programmers, though, like to remind readers that an array is an array, so they'll write code that looks like this:</p>
<p>A(:) = func(B(:), C(:))</p>
<p>with the (:) alerting the reader that the variable is an array (sort of like the Dave Barry joke that an apostrophe serves to warn you that the letter "s" is coming up in grocery store signs.)  In Fortran syntax, (:) indicates an array section that starts at the first element and ends at the last element - the whole array, in other words.</p>
<p>Whenever I see this usage, I cringe, because I know that the compiler has to work extra hard to recognize that the programmer really meant "the whole array" and not a piece of it. In the past, unnecessary use of (:) would often prevent optimizations. Nowadays this is less often the case, thanks to hard work by the compiler developers, but sometimes it still happens.  Still, most of the time, the (:) is "harmless" in that it does not change the overall meaning of the program, since an array section is "definable" (can be stored into), as long as you don't use a vector subscript such as A([1,3,5,7]).</p>
<p>In the recent case, the customer had written something like:</p>
<p>A(:) = func(B)</p>
<p>where A was an ALLOCATABLE array and function "func" returned an array. In Fortran 90 and 95, the language required that A already be allocated and have the same shape (dimensions) as the function return value.</p>
<p>Fortran 2003, however, added a new twist. In F2003, if the allocatable array on the left of the assignment is not currently allocated with a shape matching the right-side, it is automatically deallocated (if needed) and then allocated with the correct shape.  This can make code a lot cleaner as you don't have to worry about knowing the shape in advance.</p>
<p>The downside, though, is that the checking required to support this is a lot of extra code, and applications where it is known that the array is already allocated to the correct shape don't need this check which would just slow them down.  This is why Intel Fortran does not support this F2003 feature by default - you have to ask for it with the option /assume:realloc_lhs, or for Linux and Mac users, -assume realloc_lhs.  ("lhs" here means "left hand side".)</p>
<p>The programmer who wrote the above code had in fact used this feature and depended on it, with array A starting out unallocated.  He was therefore surprised to find that his program, when it got to the above assignment, complained that array bounds were violated!</p>
<p>It turned out that it was the use of the "helpful" (:) that caused the problem.  This changed the meaning of the left-hand-side from an "allocatable variable" to an array section, and as such, it did not qualify for automatic reallocation.  Consider, for example, if the code had read:</p>
<p>A(2:5) = func(B)</p>
<p>you could not reallocate some elements of an array section!</p>
<p>The solution in this case was to remove the superfluous (:), in which case the program ran as expected.  On my advice, the customer also removed unnecessary (:) in other places as they could impede optimization.</p>
<p>So, Doctor Fortran's advice if you put (:) on your arrays?  Don't do that!</p>
<p>Got any other examples of Fortran coding practices that can hurt you?</p>
]]></content:encoded>
			<wfw:commentRss>http://softwareblogs.intel.com/2008/03/31/doctor-it-hurts-when-i-do-this/feed/</wfw:commentRss>
		</item>
		<item>
		<title>You Are In a Maze of Twisty Little Passages, All Alike</title>
		<link>http://softwareblogs.intel.com/2007/08/22/you-are-in-a-maze-of-twisty-little-passages-all-alike/</link>
		<comments>http://softwareblogs.intel.com/2007/08/22/you-are-in-a-maze-of-twisty-little-passages-all-alike/#comments</comments>
		<pubDate>Wed, 22 Aug 2007 15:09:42 +0000</pubDate>
		<dc:creator>Steve Lionel (Intel)</dc:creator>
		
		<category><![CDATA[Gaming]]></category>

		<category><![CDATA[Software Engineering]]></category>

		<guid isPermaLink="false">http://softwareblogs.intel.com/2007/08/22/you-are-in-a-maze-of-twisty-little-passages-all-alike/</guid>
		<description><![CDATA[MAGIC WORD XYZZY
For computer geeks of a certain age, such as yours truly, it was an opportunity to relive the glorious past when Dennis Jerz announced that an early 1977 version of Will Crowther's Adventure game source code had been discovered. Adventure was one of the first puzzle-exploration games and it not only captured the [...]]]></description>
			<content:encoded><![CDATA[<p><strong>MAGIC WORD XYZZY</strong></p>
<p>For computer geeks of a certain age, such as yours truly, it was an opportunity to relive the glorious past when Dennis Jerz <a href="http://brain.lis.uiuc.edu:2323/opencms/export/sites/default/dhq/vol/001/2/000009.html">announced</a> that an early 1977 version of Will Crowther's Adventure game source code had been discovered. Adventure was one of the first puzzle-exploration games and it not only captured the imagination of computer users worldwide when it became more widespread in 1978, but it inspired many future games such as the popular Zork and even many of today's graphics-heavy computer games. Not bad for a text-only game written in Fortran. Right, Fortran.</p>
<p><strong>A HOLLOW VOICE SAYS 'PLUGH'</strong></p>
<p>Crowther's game was inspired by <a href="http://www.nps.gov/maca/">Mammoth Caves</a>, a real-life cave system in Kentucky. In the game, you explore the cave and give one or two word commands to move or perform actions. As you go, you collect items that may or may not be useful in other parts of the game, and often there is a sequence you need to follow in order to complete a task. Don Woods expanded the game and the version most well known was released in 1978.</p>
<p>I first encountered Adventure soon after I joined the VAX Fortran compiler project in 1978, as it had been released on a DECUS (Digital Equipment Computer Users Society) library tape and made its way into the compiler's test system, where a script had it play a perfect game. (Factoid: Another game in the VAX Fortran test system was a program that played Scrabble against a human opponent. When the VAX-11/730, a low-cost model, was being tested in 1980, we were puzzled to find that the 730 played a different game than the previous 750 and 780 models did. It turned out that the program had a 30-second limit to its search for the optimal play, and the 730 was enough slower that it exceeded this on certain plays, leading it to choose a different word.)</p>
<p>Like many others, I spent many hours exploring the game and drawing up a "map" of the various rooms with notes as to what commands were valid and what to do in each room. Many of the game's phrases and "magic words" became part of the programmer's vernacular in the following years.</p>
<p>I found it interesting to compare the "original" version of the code with the one I knew. For example, the original did have the set of eight connected rooms all of which described themselves as "You are in a maze of twisty little passages, all alike", but lacked the additional set of the newer version which were variously "You are in a twisty maze of little passages, all different", "You are in a maze of little twisty passages, all different", etc. (This inspired my usual description of Linux as "A maze of twisty little distros, all different.")</p>
<p><strong>NOTHING HAPPENS<br />
</strong></p>
<p>It was amusing to see the <a href="http://games.slashdot.org/article.pl?sid=07/08/14/011230">Slashdot</a> crowd examine the Fortran code and try to make sense of constructs many had never before seen, such as computed GOTO and arithmetic IF, not to mention such oddities (and extensions) as comparing a REAL variable to a five-character string (Crowther developed the code on the 36-bit DEC PDP-10 which had 6-bit characters, uppercase only).</p>
<p>If you're interested in learning more, or want to play the game yourself, explore Rick Adams' <a href="http://www.rickadams.org/adventure/">Colossal Cave Adventure Page</a>. For building with Intel Fortran, the "Adventure 6" version can be used. Turn off array bounds checking and note that the ADVSETUP program needs to be built and run once before running the game. Happy spelunking!</p>
]]></content:encoded>
			<wfw:commentRss>http://softwareblogs.intel.com/2007/08/22/you-are-in-a-maze-of-twisty-little-passages-all-alike/feed/</wfw:commentRss>
		</item>
		<item>
		<title>Not Dead Yet!</title>
		<link>http://softwareblogs.intel.com/2007/05/25/not-dead-yet/</link>
		<comments>http://softwareblogs.intel.com/2007/05/25/not-dead-yet/#comments</comments>
		<pubDate>Fri, 25 May 2007 13:58:31 +0000</pubDate>
		<dc:creator>Steve Lionel (Intel)</dc:creator>
		
		<category><![CDATA[Software Engineering]]></category>

		<guid isPermaLink="false">http://softwareblogs.intel.com/2007/05/25/not-dead-yet/</guid>
		<description><![CDATA[At least once a week, I see someone refer to Fortran as a "dead" language. A recent interview I did included asking me if I worried about my job since "many people say there is no future in Fortran".
So it was with some amusement that I ran across an article on the Computerworld web site [...]]]></description>
			<content:encoded><![CDATA[<p>At least once a week, I see someone refer to Fortran as a "dead" language. A recent interview I did included asking me if I worried about my job since "many people say there is no future in Fortran".</p>
<p>So it was with some amusement that I ran across an article on the Computerworld web site titled <a href="http://www.computerworld.com/action/article.do?command=viewArticleBasic&amp;articleId=9020942">The top 10 dead (or dying) computer skills</a>. Fortran was <strong>not </strong>on the list, though COBOL and C were. (I'll choose to ignore the possibility that the author wasn't even aware of Fortran...)</p>
<p>This sort of list always brings out emotions in people, and this one was no exception, looking at the comments. The inclusion of C on the list upset many, but the article's point was that if you know only C and not C++, you'll fall behind in the job market, and I think that is true.</p>
<p>My take on this is that one is served best by not focusing too narrowly on one particular technology, no matter what it is. In the case of programming languages, more is always better. You may not be actively using more than a couple of languages at a time, but being familiar with diverse languages can help expand your thinking and lead to better code. I think I've learned some two-dozen programming languages over my career. I could not write a valid program in many of them today, but I could probably read most (<a href="http://en.wikipedia.org/wiki/APL_(programming_language)">APL</a> perhaps excepted).</p>
<p>The old adage, "When the only tool you have is a hammer, everything looks like a nail" applies to programming. There is not one single programming language that is best for all applications. Take the time to learn a few different languages, including scripting and object-oriented languages, and pick the one that is best suited to your application (keeping in mind issues such as who's going to maintain it, company policies and the like - just because you know <a href="http://en.wikipedia.org/wiki/Python_%28programming_language%29">Python</a> that doesn't necessarily make it appropriate for your company's payroll application.)</p>
]]></content:encoded>
			<wfw:commentRss>http://softwareblogs.intel.com/2007/05/25/not-dead-yet/feed/</wfw:commentRss>
		</item>
		<item>
		<title>And a Farewell to John</title>
		<link>http://softwareblogs.intel.com/2007/03/20/and-a-farewell-to-john/</link>
		<comments>http://softwareblogs.intel.com/2007/03/20/and-a-farewell-to-john/#comments</comments>
		<pubDate>Tue, 20 Mar 2007 13:38:50 +0000</pubDate>
		<dc:creator>Steve Lionel (Intel)</dc:creator>
		
		<category><![CDATA[Software Engineering]]></category>

		<guid isPermaLink="false">http://softwareblogs.intel.com/2007/03/20/and-a-farewell-to-john/</guid>
		<description><![CDATA[John Backus, the creator of Fortran, passed away Saturday, March 17, at the age of 82. The New York Times has a nice obituary. I never met Mr. Backus, but my life and career has certainly been inflienced by his work.
]]></description>
			<content:encoded><![CDATA[<p>John Backus, the creator of Fortran, passed away Saturday, March 17, at the age of 82. The <a href="http://www.nytimes.com/2007/03/19/obituaries/20cnd-backus.html?ex=1332043200&amp;en=adde3ee5a1875330&amp;ei=5124&amp;partner=permalink&amp;exprod=permalink">New York Times</a> has a nice obituary. I never met Mr. Backus, but my life and career has certainly been inflienced by his work.</p>
]]></content:encoded>
			<wfw:commentRss>http://softwareblogs.intel.com/2007/03/20/and-a-farewell-to-john/feed/</wfw:commentRss>
		</item>
		<item>
		<title>A Farewell to Jean</title>
		<link>http://softwareblogs.intel.com/2007/03/05/a-farewell-to-jean/</link>
		<comments>http://softwareblogs.intel.com/2007/03/05/a-farewell-to-jean/#comments</comments>
		<pubDate>Mon, 05 Mar 2007 16:38:59 +0000</pubDate>
		<dc:creator>Steve Lionel (Intel)</dc:creator>
		
		<category><![CDATA[Software Engineering]]></category>

		<guid isPermaLink="false">http://softwareblogs.intel.com/2007/03/05/a-farewell-to-jean/</guid>
		<description><![CDATA[If you asked me what my favorite programming language is, you might be surprised when I don't say Fortran. No, my favorite is Ada, the language named for the first computer programmer and the result of an international competition sponsored by the US Department of Defense. Jean Ichbiah, the creator of the "Green" language which [...]]]></description>
			<content:encoded><![CDATA[<p>If you asked me what my favorite programming language is, you might be surprised when I don't say Fortran. No, my favorite is <a href="http://en.wikipedia.org/wiki/Ada_programming_language" title="Ada language at Wikipedia">Ada</a>, the language named for the first computer programmer and the result of an international competition sponsored by the US Department of Defense. Jean Ichbiah, the creator of the "Green" language which became Ada, died January 26 at the age of 66.</p>
<p>I met Jean, briefly, back in 1984 when I was working on DEC's VAX Ada compiler project. In March of 1984 I had the delightful task of traveling to Versilles, France, to deliver to Ichbiah's company Alsys a magtape containing the first beta test version of VAX Ada. I spent a week with the Alsys team helping them shake out the compiler, which went on to be one of the most highly regarded implementations of the language. My main assignment from 1983 through 1988 was project leader for VAXELN Ada, a variant which ran on VAX systems under the real-time and embedded OS VAXELN, created by Dave Cutler just before he left DEC for Microsoft. In August 1988 I then joined the VAX Fortran compiler team.</p>
<p>Ada was an elegant and full-featured language with extremely expressive declaration features, multitasking, exception handling, a module facility with intelligent separate compilation and much more. The language gave the programmer the ability to tell the compiler what was allowed and not allowed to happen in the program and this enabled the compiler to do checking at a level rarely seen in other languages. I liked to say that if you could get an Ada program to compile, it would probably run correctly the first time. This, of course, was one of the things that the DoD wanted.</p>
<p>The DoD mandate that Ada must be used in defense contracts was both a blessing and a curse for Ada. A blessing in that it jumpstarted the widespread use of the language, but a curse in that many developers were dragged kicking and screaming into the world of Ada and non-defense programmers often avoided Ada specifically because of the DoD connection. After ten years, the screaming became loud enough that the DoD dropped the Ada mandate, and Ada use pretty much dropped out of sight. The orignal Ada 83 language was updated to Ada 88 and again in 1995, but DEC and most other vendors did not update their implementations.</p>
<p>What's the relevance of Ada to Fortran? Some of the major Fortran 90 features, such as modules and generics, are derived at least in part from Ada. Fortran's separate compilation model made it difficult to implement one of Ada's most elegant module features, IS SEPARATE, which permitted the implementation of a module procedure to be compiled separately from its declaration. The "submodules" proposal for Fortran 2008 finally brings that to the language.</p>
<p>So what's my second favorite language? <a href="http://en.wikipedia.org/wiki/SNOBOL4">SNOBOL</a>.</p>
]]></content:encoded>
			<wfw:commentRss>http://softwareblogs.intel.com/2007/03/05/a-farewell-to-jean/feed/</wfw:commentRss>
		</item>
		<item>
		<title>Powerful Beyond Imagination</title>
		<link>http://softwareblogs.intel.com/2006/11/16/powerful-beyond-imagination/</link>
		<comments>http://softwareblogs.intel.com/2006/11/16/powerful-beyond-imagination/#comments</comments>
		<pubDate>Thu, 16 Nov 2006 10:57:00 +0000</pubDate>
		<dc:creator>Steve Lionel (Intel)</dc:creator>
		
		<category><![CDATA[Software Engineering]]></category>

		<guid isPermaLink="false">http://softwareblogs.intel.com/2006/11/16/powerful-beyond-imagination/</guid>
		<description><![CDATA[No, the title of this post isn't intended to refer to the new quad-core processors Intel announced yesterday (as I write this), though I suppose it could. Rather, it's the slogan of this year's SC06 (Supercomputing 2006) conference, whose US edition this year is being held in sunny Tampa, Florida. And yours truly is there.
This [...]]]></description>
			<content:encoded><![CDATA[<p>No, the title of this post isn't intended to refer to the new quad-core processors Intel announced yesterday (as I write this), though I suppose it could. Rather, it's the slogan of this year's <a href="http://http://sc06.supercomputing.org/">SC06 </a>(Supercomputing 2006) conference, whose US edition this year is being held in sunny Tampa, Florida. And yours truly is there.</p>
<p>This is the third Supercomputing conference I have attended, and I am astonished and surprised each year at the wide variety of exhibitors showing off hardware, software, services and projects, all in the "high performance computing" space. In what seems to be an amazing instance of <a href="http://en.wikipedia.org/wiki/Kismet">Kismet</a>, the booths of Intel and AMD, usually far apart on the show floor, are directly across from one another this year. But I digress...</p>
<p>What struck me, as I wandered the show floor, is that Fortran, a fifty-year-old language considered long-dead by many, has a customer base vibrant enough to support (at least) <strong>seven</strong> commercial vendors offering compilers on the same platforms, plus <strong>two</strong> (why two?) competing open source compiler projects! What other widely-adopted programming language can say the same? Some dinosaur, eh?</p>
<p>I'm currently reading <a href="http://www.amazon.com/Andy-Grove-Life-Times-American/dp/1591841399/">Andy Grove: The Life and Times of an American</a>, by Richard S. Tedlow. Grove, as many of you know, is one of the three founders of Intel and was CEO during Intel's most explosive growth in the 1990s. I didn't know too much about Grove, a Hungarian Jew who made his way to the US in the 1950s, but Tedlow tells the story well, other than the worshipful attitude of Tedlow towards Grove getting on my nerves at times.</p>
<p>So imagine my delight when I came across the following on page 86, as Tedlow is relating Grove's first few weeks working for Gordon Moore at Fairchild Semiconductor in 1963, sometimes quoting Grove:</p>
<blockquote><p>Somewhere, during the course of his education, Grove had learned computer programming. This knowledge served him in good stead. He analyzed data on a batch-processing computer service that allowed him to create the "representation of that closed-form solution." [A problem Grove had been assigned to solve.] "[V]ery few people," said Grove, "knew how to program in Fortran in 1963 at a Silicon Valley commercial company."</p></blockquote>
<p>See? Intel and Fortran go waaay back!</p>
<p>Also meeting this week is the Fortran standards committee. (They meet in sunny Las Vegas, but way off "the Strip".) I'll have to ask Stan Whitlock, our representative, what new things have been added to the next standard currently known as Fortran 2008. There's already a lot on the plate, and this is before a single full Fortran 2003 implementation exists. (F2003 is massive enough.) I'll talk about F2003 and F2008 in a later post.</p>
]]></content:encoded>
			<wfw:commentRss>http://softwareblogs.intel.com/2006/11/16/powerful-beyond-imagination/feed/</wfw:commentRss>
		</item>
		<item>
		<title>Domestic or Imported?</title>
		<link>http://softwareblogs.intel.com/2006/10/05/domestic-or-imported/</link>
		<comments>http://softwareblogs.intel.com/2006/10/05/domestic-or-imported/#comments</comments>
		<pubDate>Thu, 05 Oct 2006 11:15:00 +0000</pubDate>
		<dc:creator>Steve Lionel (Intel)</dc:creator>
		
		<category><![CDATA[Software Engineering]]></category>

		<guid isPermaLink="false">http://softwareblogs.intel.com/2006/10/05/domestic-or-imported/</guid>
		<description><![CDATA[One day while I was wandering the aisles of my local grocery store, a woman beckoned me over to a table and asked if I would like to "try some imported chocolate?" Neatly arrayed on the table were packages of Lindt, Toblerone, and... Ghiradelli? I asked the woman if California had seceded from the Union, [...]]]></description>
			<content:encoded><![CDATA[<p>One day while I was wandering the aisles of my local grocery store, a woman beckoned me over to a table and asked if I would like to "try some imported chocolate?" Neatly arrayed on the table were packages of <a href="http://www.lindt.com/">Lindt</a>, <a href="http://www.toblerone.com/">Toblerone</a>, and... Ghiradelli? I asked the woman if <a href="http://www.ca.gov/">California</a> had seceded from the Union, as <a href="http://ghirardelli.com/">Ghiradelli</a>, despite its <a href="http://en.wikipedia.org/wiki/Italy">Italian</a> name, hails from <a href="http://onlyinsanfrancisco.com/">San Francisco</a>. I suppose that from the vantage point of <a href="http://www.visitnh.gov/">New Hampshire</a>, California might as well be another country, much as depicted in that famous <a href="http://en.wikipedia.org/wiki/Saul_Steinberg">Saul Steinberg</a> 1976 cover for <a href="http://www.newyorker.com/">The New Yorker</a>, "<a href="http://www.saulsteinbergfoundation.org/gallery_24_viewofworld.html">View of the World from 9th Avenue</a>".</p>
<p>(I've been warned that my blogs don't have enough arbitrary links - this should hold 'em for a while.)</p>
<p>Similarly, in Fortran (I'll bet you were wondering when I'd get to that), something can be so near yet seem so far away. A short time ago, I was writing a new module for <a href="http://www.intel.com/cd/software/products/asmo-na/eng/compilers/index.htm">Intel Visual Fortran</a> to provide declarations for the <a href="http://msdn.microsoft.com/library/default.asp?url=/library/en-us/dllproc/base/process_status_helper.asp">Win32 Process Status API</a>. This would contain declarations of types and constants as well as interface blocks for the API routines, some of which take arguments of the new type. The natural inclination is to write something like this:</p>
<p>MODULE psapi<br />
TYPE sometype<br />
some component<br />
END TYPE sometype</p>
<p>INTERFACE<br />
FUNCTION newroutine (arg)<br />
INTEGER :: newroutine<br />
TYPE (sometype) :: arg<br />
END FUNCTION newroutine<br />
END INTERFACE</p>
<p>END MODULE psapi</p>
<p>If you did and compiled it, you'd get an error that type <strong>sometype</strong> is undefined in the declaration of <strong>arg</strong>. "What? It's not undeclared, I can see it right above in the same module!" Well, yes and no. Yes, it's declared in the module and could be used anywhere in the module, except.. Except in interface blocks!</p>
<p>The problem is that interface blocks are a "window into the external routine" - they essentially duplicate the declarations you would see in the actual external routine, assuming that routine were written in Fortran. As such, they do not "host associate" any symbols from the enclosing scoping unit (the module in this case.)</p>
<p>In Fortran 90 and Fortran 95, the typical solution for this was to create a separate module, say, "psapi_types", containing all of the types and constants to be used, You'd then add a USE statement inside each function, just as you would have to in the hypothetical external routine written in Fortran. (If it <strong>were</strong> written in Fortran, the Doctor would slap your wrist with a wet punchcard and tell you to make the routine a module procedure, and then you wouldn't need to worry about this nonsense.) So you would end up with something like this:</p>
<p>MODULE psapi<br />
USE psapi_types ! This is for the benefit of users of module psapi<br />
INTERFACE<br />
FUNCTION newroutine (arg)<br />
USE psapi_types<br />
INTEGER :: newroutine<br />
TYPE (sometype) :: arg<br />
...</p>
<p>Those of you who use Intel Visual Fortran know that in fact there's a giant module IFWINTY for this purpose, containing all of the types and constants for the other Win32 APIs. It's messy and inelegant, but that's what you have to do. Until now...</p>
<p>Fortran 2003 attempts to restore some elegance to this sorry situation, but to preserve compatibility with older sources, it couldn't just declare that interface blocks participate in host association. Instead, a new statement was created, IMPORT. IMPORT is allowed to appear in interface blocks only and it tells the compiler to import names visible in the host scope.</p>
<p>IMPORT is placed following any USE statements but before any IMPLICIT statements in an interface body (the FUNCTION or SUBROUTINE declaration). IMPORT can have an optional import-name-list, much like USE. Without one, all entities accessible in the host become visible inside the interface body. With a list, only the named entities are visible.</p>
<p>With IMPORT, my PSAPI module can look like the first example with the following change:</p>
<p>...<br />
FUNCTION newroutine (arg)<br />
<strong>IMPORT</strong><br />
INTEGER :: newroutine<br />
TYPE(sometype) :: arg<br />
...</p>
<p>I could, if I wanted to, use:</p>
<p>IMPORT :: sometype</p>
<p>to say that I wanted only that one name imported. Nice and neat and all in one module!</p>
<p>"But why are you telling me this?", you might ask, "That's a Fortran 2003 feature and Intel Fortran doesn't yet do all of Fortran 2003." True enough, but we keep adding more and more F2003 features to the compiler and IMPORT made it in back in August! So if you are keeping reasonbly current, you can now IMPORT to your heart's content and do away with the mess of a separate module for your types and constants.</p>
<p>If you want to know what other F2003 goodies are available to you, just check the Release Notes for each update. A full list of supported F2003 features is in each issue. Collect 'em all!</p>
]]></content:encoded>
			<wfw:commentRss>http://softwareblogs.intel.com/2006/10/05/domestic-or-imported/feed/</wfw:commentRss>
		</item>
		<item>
		<title>The long and winding road</title>
		<link>http://softwareblogs.intel.com/2006/09/25/the-long-and-winding-road/</link>
		<comments>http://softwareblogs.intel.com/2006/09/25/the-long-and-winding-road/#comments</comments>
		<pubDate>Tue, 26 Sep 2006 04:20:00 +0000</pubDate>
		<dc:creator>Steve Lionel (Intel)</dc:creator>
		
		<category><![CDATA[Software Engineering]]></category>

		<guid isPermaLink="false">http://softwareblogs.intel.com/2006/09/25/the-long-and-winding-road/</guid>
		<description><![CDATA[The other day, I posted something in comp.lang.fortran in response to a post asking for a new feature in the Intel Fortran compiler. I suggested that the best thing to do was to submit an issue to Intel Premier Support asking for the feature since the more customers who ask for a feature, the easier [...]]]></description>
			<content:encoded><![CDATA[<p>The other day, I posted something in comp.lang.fortran in response to a post asking for a new feature in the Intel Fortran compiler. I suggested that the best thing to do was to submit an issue to Intel Premier Support asking for the feature since the more customers who ask for a feature, the easier job the Fortran project manager has in justifying it. This prompted a startled reply from someone who thought that <strong>I </strong>was the Intel Fortran project manager. "Heck no," I replied, "I'm not even the most senior engineer on the project!" Well, really, I'm not on the compiler project itself anymore, but I still sit and work with those who are. Yes, I started my Fortran career at DEC in 1978, but there are others on the team who have been at it longer.</p>
<p>Stan Whitlock, now he <strong>IS</strong> the Intel Fortran project manager, as well as our Fortran standards committee representative. He joined the DEC FORTRAN-10 (for the PDP-10) engineering team in 1976. Stan later worked on Fortran for the DECsystem 20, VAX APL, and then rejoined the DEC Fortran team when the short-lived MIPS-based DECstation line was introduced. He's led the Fortran team ever since, through the years of Alpha, Digital Visual Fortran and now Intel Fortran. But wait, there's more...</p>
<p>Dave Eklund joined DEC in 1975 doing support for DEC FORTRAN-10, but support also meant bug fixing and eventually development. He stayed with the DEC 36-bit systems and then joined Stan on DEC Fortran, so he's been doing Fortran continuously for 31 years now.</p>
<p>And then there's Rich Grove. Rich started with DEC back in 1971 on PDP-11 Fortran. Rich was later the project leader for VAX-11 FORTRAN-IV-PLUS, to give it it's full name, and he interviewed me for the job I eventually landed on the VAX Fortran project. Rich later became the project leader for DEC's GEM code generator and optimizer, which powered the DEC compilers for MIPS, Alpha and IA-32 (with Digital Visual Fortran.). When Rich joined Intel, he was named an "Intel Fellow", an extremely senior position in the company, with the role of "Compiler Architect". While Rich doesn't work daily on Fortran, he sits just a couple of offices down from us and keeps Fortran in mind as he helps shape the future of Intel compilers. (Edit: Rich retired from Intel in 2007, after a long and illustrious career.  We had a wonderful dinner in honor of Rich, attended by many who had worked with him in the past.  Rich is now enjoying his grandchildren and still drops by from time to time to say hello.)</p>
<p>I should also mention Peter Karam, another Fortran compiler developer who has been with the project since he started in 1980. Peter tried being a manager for a while, but soon found that his heart was in development so that's where he returned and what he does today.</p>
<p>As you can see, there's a core of dedicated engineers who have guided a set of Fortran implementations for more than three and a half decades, starting with DEC, through the couple of years of Compaq, and now Intel. (We missed HP, which bought Compaq shortly after we joined Intel, which was a bit more than five years ago.) Of course, there's more to the project than just these folks, including many developers who have worked on compilers for 20 years or more (and some young whippersnappers, too.)</p>
<p>I once told a group of customers about our long Fortran heritage and that we were "a bunch of old farts". One of the group replied, "That's good - Fortran needs old farts."</p>
<p>P.S. Doctor Fortran now has his own URL. You can find the doctor at <a href="http://www.intel.com/software/drfortran">http://www.intel.com/software/drfortran</a> I'll be posting more regularly in the future.</p>
]]></content:encoded>
			<wfw:commentRss>http://softwareblogs.intel.com/2006/09/25/the-long-and-winding-road/feed/</wfw:commentRss>
		</item>
	</channel>
</rss>
