<?xml version="1.0" encoding="UTF-8"?><rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
		>
<channel>
	<title>Comments on: The Measure Of Code</title>
	<atom:link href="http://gamesfromwithin.com/the-measure-of-code/feed" rel="self" type="application/rss+xml" />
	<link>http://gamesfromwithin.com/the-measure-of-code</link>
	<description>Living the indie life</description>
	<lastBuildDate>Thu, 09 Feb 2012 12:36:00 +0000</lastBuildDate>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.2.1</generator>
	<item>
		<title>By: Noel</title>
		<link>http://gamesfromwithin.com/the-measure-of-code/comment-page-1#comment-589</link>
		<dc:creator>Noel</dc:creator>
		<pubDate>Thu, 20 Nov 2008 18:46:39 +0000</pubDate>
		<guid isPermaLink="false">http://www.gamesfromwithin.dreamhosters.com/?p=447#comment-589</guid>
		<description>Brandon,

I&#039;m not a fan of code coverage tools. To me, TDD is not about achieving 100% coverage, but about helping drive design. It might be an OK metric to run on a large team that is not sold on TDD to make sure things aren&#039;t sliding, but I wouldn&#039;t get anything from running it on my own code.

And guess what, if I did run it, I doubt my code coverage would be higher than 80%. There is some glue code that is more of a pain to test than any benefits I get from testing it. Same thing with some &quot;leaf&quot; code that nothing depends on it.</description>
		<content:encoded><![CDATA[<p>Brandon,</p>
<p>I&#8217;m not a fan of code coverage tools. To me, TDD is not about achieving 100% coverage, but about helping drive design. It might be an OK metric to run on a large team that is not sold on TDD to make sure things aren&#8217;t sliding, but I wouldn&#8217;t get anything from running it on my own code.</p>
<p>And guess what, if I did run it, I doubt my code coverage would be higher than 80%. There is some glue code that is more of a pain to test than any benefits I get from testing it. Same thing with some &#8220;leaf&#8221; code that nothing depends on it.</p>
]]></content:encoded>
	</item>
	<item>
		<title>By: Brandon</title>
		<link>http://gamesfromwithin.com/the-measure-of-code/comment-page-1#comment-588</link>
		<dc:creator>Brandon</dc:creator>
		<pubDate>Thu, 20 Nov 2008 18:37:19 +0000</pubDate>
		<guid isPermaLink="false">http://www.gamesfromwithin.dreamhosters.com/?p=447#comment-588</guid>
		<description>Have you (or do you regularly) run a code coverage tool? TDD should show near 100% depending on how religiously it&#039;s practiced.  If not 100%, any patterns arising that explain the remaining percentage points?</description>
		<content:encoded><![CDATA[<p>Have you (or do you regularly) run a code coverage tool? TDD should show near 100% depending on how religiously it&#8217;s practiced.  If not 100%, any patterns arising that explain the remaining percentage points?</p>
]]></content:encoded>
	</item>
	<item>
		<title>By: Ismail</title>
		<link>http://gamesfromwithin.com/the-measure-of-code/comment-page-1#comment-472</link>
		<dc:creator>Ismail</dc:creator>
		<pubDate>Wed, 30 Nov -0001 00:00:00 +0000</pubDate>
		<guid isPermaLink="false">http://www.gamesfromwithin.dreamhosters.com/?p=447#comment-472</guid>
		<description>Cool! Especially in game programming where everybody just cares about the product, but not the process. If I am not mistaken your approach is very similar to the approach mentioned in the book &quot;Refactoring: Improving the Design of Existing Code&quot;

And, may I humbly suggest using Visual Assist X&#039;s (X part is important) &quot;rename&quot; refactoring instead of &quot;replace-in-files&quot;, because it works like a charm. Also with &quot;extract method&quot;, &quot;move implementation to source file&quot; they also work good. Enough advertising for Visual Assist X.

Thanks for you reply :)</description>
		<content:encoded><![CDATA[<p>Cool! Especially in game programming where everybody just cares about the product, but not the process. If I am not mistaken your approach is very similar to the approach mentioned in the book &#8220;Refactoring: Improving the Design of Existing Code&#8221;</p>
<p>And, may I humbly suggest using Visual Assist X&#8217;s (X part is important) &#8220;rename&#8221; refactoring instead of &#8220;replace-in-files&#8221;, because it works like a charm. Also with &#8220;extract method&#8221;, &#8220;move implementation to source file&#8221; they also work good. Enough advertising for Visual Assist X.</p>
<p>Thanks for you reply <img src='http://gamesfromwithin.com/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' /> </p>
]]></content:encoded>
	</item>
	<item>
		<title>By: noel</title>
		<link>http://gamesfromwithin.com/the-measure-of-code/comment-page-1#comment-473</link>
		<dc:creator>noel</dc:creator>
		<pubDate>Wed, 30 Nov -0001 00:00:00 +0000</pubDate>
		<guid isPermaLink="false">http://www.gamesfromwithin.dreamhosters.com/?p=447#comment-473</guid>
		<description>&lt;p&gt;I&#039;ve really wanted to like Visual Assist, but it seems that in the last several years, Visual Assist slows down the Visual Studio editor very significantly. To the point that I can type faster than the VA can keep up. Is it any faster these days? Maybe I&#039;ll give it a try whirl again.&lt;/p&gt;
&lt;p&gt;There are a handful of features I&#039;d love to use from VA, but I need to turn the other features off. For some reason, they don&#039;t give you the option to disable most features and only turn on a few!&lt;/p&gt;</description>
		<content:encoded><![CDATA[<p>I&#8217;ve really wanted to like Visual Assist, but it seems that in the last several years, Visual Assist slows down the Visual Studio editor very significantly. To the point that I can type faster than the VA can keep up. Is it any faster these days? Maybe I&#8217;ll give it a try whirl again.</p>
<p>There are a handful of features I&#8217;d love to use from VA, but I need to turn the other features off. For some reason, they don&#8217;t give you the option to disable most features and only turn on a few!</p>
]]></content:encoded>
	</item>
	<item>
		<title>By: noel</title>
		<link>http://gamesfromwithin.com/the-measure-of-code/comment-page-1#comment-474</link>
		<dc:creator>noel</dc:creator>
		<pubDate>Wed, 30 Nov -0001 00:00:00 +0000</pubDate>
		<guid isPermaLink="false">http://www.gamesfromwithin.dreamhosters.com/?p=447#comment-474</guid>
		<description>&lt;p&gt;Robin, I haven&#039;t looked at Scons and Jam since a couple of years ago, when I wrote &lt;a href=&quot;http://www.gamesfromwithin.com/articles/0509/000100.html&quot;&gt;this article about build systems&lt;/a&gt;. Have they fixed the horrible dependency checking in Scons that was causing incredibly slow incremental builds? If so, I&#039;d really like to revisit it.&lt;/p&gt;
&lt;p&gt;I&#039;d also be curious to find out how easy it would be to extend something like Scons to do asset building (with totally custom rules).&lt;/p&gt;</description>
		<content:encoded><![CDATA[<p>Robin, I haven&#8217;t looked at Scons and Jam since a couple of years ago, when I wrote <a href="http://www.gamesfromwithin.com/articles/0509/000100.html">this article about build systems</a>. Have they fixed the horrible dependency checking in Scons that was causing incredibly slow incremental builds? If so, I&#8217;d really like to revisit it.</p>
<p>I&#8217;d also be curious to find out how easy it would be to extend something like Scons to do asset building (with totally custom rules).</p>
]]></content:encoded>
	</item>
	<item>
		<title>By: Robin Green</title>
		<link>http://gamesfromwithin.com/the-measure-of-code/comment-page-1#comment-475</link>
		<dc:creator>Robin Green</dc:creator>
		<pubDate>Wed, 30 Nov -0001 00:00:00 +0000</pubDate>
		<guid isPermaLink="false">http://www.gamesfromwithin.dreamhosters.com/?p=447#comment-475</guid>
		<description>They added file hash caches and a lot of fixes, so the &quot;yeah, but SCons is slow&quot; argument has gone. It also arguably handles parallel builds better than Jam with less serialization if there are close dependencies or autogenerated files, but we&#039;ve never pushed it that far. No fully distributed builds for SCons yet. Handy for me, Stephen Knight is just upstairs!</description>
		<content:encoded><![CDATA[<p>They added file hash caches and a lot of fixes, so the &#8220;yeah, but SCons is slow&#8221; argument has gone. It also arguably handles parallel builds better than Jam with less serialization if there are close dependencies or autogenerated files, but we&#8217;ve never pushed it that far. No fully distributed builds for SCons yet. Handy for me, Stephen Knight is just upstairs!</p>
]]></content:encoded>
	</item>
	<item>
		<title>By: Steve Cothern</title>
		<link>http://gamesfromwithin.com/the-measure-of-code/comment-page-1#comment-476</link>
		<dc:creator>Steve Cothern</dc:creator>
		<pubDate>Wed, 30 Nov -0001 00:00:00 +0000</pubDate>
		<guid isPermaLink="false">http://www.gamesfromwithin.dreamhosters.com/?p=447#comment-476</guid>
		<description>Hey Robin (and Hi Noel!),

I remember reading Noel&#039;s Games From Within series on build tools a while ago and the main detractive thing he had to say about Jam was regarding its complexity.  Well, that and the fact that &quot;...Jam is dead...&quot;; hence also my interest in your comment about an avid developer community.  Serrendipitously in the last couple of days I ran across mention of KJam.  Don&#039;t really know much about either (with respect to the latter other than the main site, I found &lt;a href=http://www.gamedev.net/reference/articles/article2328.asp&gt;this&lt;/a&gt; article which looks to be by an author) but it would be interesting to hear what an experienced Jam user  has to say about it if you have an opinion.</description>
		<content:encoded><![CDATA[<p>Hey Robin (and Hi Noel!),</p>
<p>I remember reading Noel&#8217;s Games From Within series on build tools a while ago and the main detractive thing he had to say about Jam was regarding its complexity.  Well, that and the fact that &#8220;&#8230;Jam is dead&#8230;&#8221;; hence also my interest in your comment about an avid developer community.  Serrendipitously in the last couple of days I ran across mention of KJam.  Don&#8217;t really know much about either (with respect to the latter other than the main site, I found <a href=http://www.gamedev.net/reference/articles/article2328.asp>this</a> article which looks to be by an author) but it would be interesting to hear what an experienced Jam user  has to say about it if you have an opinion.</p>
]]></content:encoded>
	</item>
	<item>
		<title>By: Robin Green</title>
		<link>http://gamesfromwithin.com/the-measure-of-code/comment-page-1#comment-477</link>
		<dc:creator>Robin Green</dc:creator>
		<pubDate>Wed, 30 Nov -0001 00:00:00 +0000</pubDate>
		<guid isPermaLink="false">http://www.gamesfromwithin.dreamhosters.com/?p=447#comment-477</guid>
		<description>I certainly found plenty to read when I was getting up to speed, and everyone I have met who have used Jam have raved about it. But you are right, it is classic Jam dead as an active open source project - dead but used daily - and KJam is in permanent beta since 2006.</description>
		<content:encoded><![CDATA[<p>I certainly found plenty to read when I was getting up to speed, and everyone I have met who have used Jam have raved about it. But you are right, it is classic Jam dead as an active open source project &#8211; dead but used daily &#8211; and KJam is in permanent beta since 2006.</p>
]]></content:encoded>
	</item>
	<item>
		<title>By: Ilya</title>
		<link>http://gamesfromwithin.com/the-measure-of-code/comment-page-1#comment-478</link>
		<dc:creator>Ilya</dc:creator>
		<pubDate>Wed, 30 Nov -0001 00:00:00 +0000</pubDate>
		<guid isPermaLink="false">http://www.gamesfromwithin.dreamhosters.com/?p=447#comment-478</guid>
		<description>Been quite a while since your last post, sounds like you&#039;ve been spending one too many a day on the beach. How are things going?</description>
		<content:encoded><![CDATA[<p>Been quite a while since your last post, sounds like you&#8217;ve been spending one too many a day on the beach. How are things going?</p>
]]></content:encoded>
	</item>
	<item>
		<title>By: noel</title>
		<link>http://gamesfromwithin.com/the-measure-of-code/comment-page-1#comment-479</link>
		<dc:creator>noel</dc:creator>
		<pubDate>Wed, 30 Nov -0001 00:00:00 +0000</pubDate>
		<guid isPermaLink="false">http://www.gamesfromwithin.dreamhosters.com/?p=447#comment-479</guid>
		<description>&lt;p&gt;Yes, we&#039;re &lt;a href=&quot;http://www.youtube.com/watch?v=Y6ljFaKRTrI&quot;&gt;still alive&lt;/a&gt;. Has it really been over a month since our last post? Yikes! Things have been very busy, and writing my column for Game Developer Magazine has been taking most of my writing time. Don&#039;t worry, we&#039;ll have new updates soon. Really.... :-)&lt;/p&gt;</description>
		<content:encoded><![CDATA[<p>Yes, we&#8217;re <a href="http://www.youtube.com/watch?v=Y6ljFaKRTrI">still alive</a>. Has it really been over a month since our last post? Yikes! Things have been very busy, and writing my column for Game Developer Magazine has been taking most of my writing time. Don&#8217;t worry, we&#8217;ll have new updates soon. Really&#8230;. <img src='http://gamesfromwithin.com/wp-includes/images/smilies/icon_smile.gif' alt=':-)' class='wp-smiley' /> </p>
]]></content:encoded>
	</item>
	<item>
		<title>By: Ismail</title>
		<link>http://gamesfromwithin.com/the-measure-of-code/comment-page-1#comment-480</link>
		<dc:creator>Ismail</dc:creator>
		<pubDate>Wed, 30 Nov -0001 00:00:00 +0000</pubDate>
		<guid isPermaLink="false">http://www.gamesfromwithin.dreamhosters.com/?p=447#comment-480</guid>
		<description>It&#039;s a bit off-topic but I was just reading Noel&#039;s old articles at http://gamesfromwithin.com about refactoring tools. So, which tool do you use for refactoring, or do you use any tool at all?

By the way, best luck with &quot;Power of Two&quot;. You are really an inspiration for all indies.</description>
		<content:encoded><![CDATA[<p>It&#8217;s a bit off-topic but I was just reading Noel&#8217;s old articles at <a href="http://gamesfromwithin.com" rel="nofollow">http://gamesfromwithin.com</a> about refactoring tools. So, which tool do you use for refactoring, or do you use any tool at all?</p>
<p>By the way, best luck with &#8220;Power of Two&#8221;. You are really an inspiration for all indies.</p>
]]></content:encoded>
	</item>
	<item>
		<title>By: chas</title>
		<link>http://gamesfromwithin.com/the-measure-of-code/comment-page-1#comment-481</link>
		<dc:creator>chas</dc:creator>
		<pubDate>Wed, 30 Nov -0001 00:00:00 +0000</pubDate>
		<guid isPermaLink="false">http://www.gamesfromwithin.dreamhosters.com/?p=447#comment-481</guid>
		<description>&lt;p&gt;Hey Ismail-&lt;/p&gt;
&lt;p&gt;I guess it depends on the kind of refactoring.&#160; In C++, most of our &#039;rename&#039; refactoring is done using VS2005&#039;s built-in &quot;replace in files&quot; functionality.&#160; Amazingly enough, this purely syntactic approach usually gets us about 90-95% of the way through it and leaves us with just a few corner cases that require manual attention.&#160; I also use Visual Assist for simple refactorings.&lt;/p&gt;
&lt;p&gt;For bigger semantic refactorings, we usually end up following a fairly simple two-step pattern:&lt;/p&gt;
&lt;p&gt;1. Get the target code compiling.&#160; Start at the area of code you want to change, make your change, and try to compile.&#160; At least in our codebase, the compiler is great for telling us what we need to do next.&#160; Depending on how fundamental the refactoring is (and some of them have been _very_ foundational), this can take a while.&#160; When you&#039;re done, the game at least compiles.&lt;/p&gt;
&lt;p&gt;2.&#160; Get the tests compiling.&#160; Semantic refactorings almost always physically break tests.&#160; This is where you get to see the effects of your refactoring, and how it can change your original physical design in ways you didn&#039;t necessarily expect.&lt;/p&gt;
&lt;p&gt;3.&#160; Get the tests passing.&#160; This one can take a while, and usually contains a bunch of &quot;oh wow&quot; moments, where you realize, inevitably, that your changes had ramifications that you didn&#039;t even consider.&#160; This phase usually involves refactoring your original refactoring into a more refined and informed expression of what you originally intended.&lt;/p&gt;
&lt;p&gt;4.&#160; Write new tests.&#160; Often refactorings like this will introduce new code, or pulling out chunks of functionality into new modules.&#160; I usually go back and retro-test these after the fact, just to keep the test coverage high.&lt;/p&gt;
&lt;p&gt;&#160;&lt;/p&gt;
&lt;p&gt;Really though, it all boils down to the tests.&#160; We&#039;ve found that the two most useful purposes of having unit tests around are to help flesh out the design of a module, and to aid in refactorings.&#160; It&#039;s really hard to understand the ramifications of your changes in a large and complex system, and any help you can get that makes things more visible is 100% worth it.&#160; At least to us, anyway!&lt;/p&gt;
&lt;p&gt;-charles&lt;/p&gt;</description>
		<content:encoded><![CDATA[<p>Hey Ismail-</p>
<p>I guess it depends on the kind of refactoring.&nbsp; In C++, most of our &#8216;rename&#8217; refactoring is done using VS2005&#8242;s built-in &quot;replace in files&quot; functionality.&nbsp; Amazingly enough, this purely syntactic approach usually gets us about 90-95% of the way through it and leaves us with just a few corner cases that require manual attention.&nbsp; I also use Visual Assist for simple refactorings.</p>
<p>For bigger semantic refactorings, we usually end up following a fairly simple two-step pattern:</p>
<p>1. Get the target code compiling.&nbsp; Start at the area of code you want to change, make your change, and try to compile.&nbsp; At least in our codebase, the compiler is great for telling us what we need to do next.&nbsp; Depending on how fundamental the refactoring is (and some of them have been _very_ foundational), this can take a while.&nbsp; When you&#8217;re done, the game at least compiles.</p>
<p>2.&nbsp; Get the tests compiling.&nbsp; Semantic refactorings almost always physically break tests.&nbsp; This is where you get to see the effects of your refactoring, and how it can change your original physical design in ways you didn&#8217;t necessarily expect.</p>
<p>3.&nbsp; Get the tests passing.&nbsp; This one can take a while, and usually contains a bunch of &quot;oh wow&quot; moments, where you realize, inevitably, that your changes had ramifications that you didn&#8217;t even consider.&nbsp; This phase usually involves refactoring your original refactoring into a more refined and informed expression of what you originally intended.</p>
<p>4.&nbsp; Write new tests.&nbsp; Often refactorings like this will introduce new code, or pulling out chunks of functionality into new modules.&nbsp; I usually go back and retro-test these after the fact, just to keep the test coverage high.</p>
<p>&nbsp;</p>
<p>Really though, it all boils down to the tests.&nbsp; We&#8217;ve found that the two most useful purposes of having unit tests around are to help flesh out the design of a module, and to aid in refactorings.&nbsp; It&#8217;s really hard to understand the ramifications of your changes in a large and complex system, and any help you can get that makes things more visible is 100% worth it.&nbsp; At least to us, anyway!</p>
<p>-charles</p>
]]></content:encoded>
	</item>
	<item>
		<title>By: Bart van Deventer</title>
		<link>http://gamesfromwithin.com/the-measure-of-code/comment-page-1#comment-482</link>
		<dc:creator>Bart van Deventer</dc:creator>
		<pubDate>Wed, 30 Nov -0001 00:00:00 +0000</pubDate>
		<guid isPermaLink="false">http://www.gamesfromwithin.dreamhosters.com/?p=447#comment-482</guid>
		<description>I wonder, if you disable project parallelism in favour of the /MP switch, does that make a difference? I don&#039;t have a large enough project to test it on here right now.

Still, it&#039;s nice to see you can now build the Engine and Game in less time than it previously took just for the game!</description>
		<content:encoded><![CDATA[<p>I wonder, if you disable project parallelism in favour of the /MP switch, does that make a difference? I don&#8217;t have a large enough project to test it on here right now.</p>
<p>Still, it&#8217;s nice to see you can now build the Engine and Game in less time than it previously took just for the game!</p>
]]></content:encoded>
	</item>
	<item>
		<title>By: noel</title>
		<link>http://gamesfromwithin.com/the-measure-of-code/comment-page-1#comment-483</link>
		<dc:creator>noel</dc:creator>
		<pubDate>Wed, 30 Nov -0001 00:00:00 +0000</pubDate>
		<guid isPermaLink="false">http://www.gamesfromwithin.dreamhosters.com/?p=447#comment-483</guid>
		<description>&lt;p&gt;Given how the CPU is totally pegged at 100% during the build of the large game project, I suspect the best build time would be achieved by putting all the engine and game code in a single project. That would be a bit of a pain because we would need to maintain different project files (one for the game, one for each library), so probably the small build-time gains wouldn&#039;t outweight the drawbacks.&lt;/p&gt;
&lt;p&gt;Let me try it right now for the heck of it... Yeah, it&#039;s a bit faster, but not as much as I expected. Down to 30 seconds from 36 seconds. Definitely not worth it in this case, but I could see how it could make a big difference for some projects.&lt;/p&gt;
&lt;p&gt;Actually, I just realized you were probably not suggesting creating one mega project, but simply turning on /MP on all the projects and disabling the project-level paralellism. Trying right now... 35 seconds. So your hunch was right. It&#039;s a bit faster. And it would probably be significantly faster if the libraries were larger, but they&#039;re pretty small. Still, I think I like it better with the /MP switch. It feels more &quot;controlled&quot; somehow to know that the compiler is doing a single library before moving to the next one.&lt;/p&gt;
&lt;p&gt;And while I&#039;m it, let me try the opposite: No /MP switch, but crank up the number of parallel project builds to 4. And the results are... 33 seconds.&lt;/p&gt;
&lt;p&gt;Now, this is not a very good test case, because we have 16 smallish libraries, and one large game project. Still, considering that 30 seconds is probably the best possible paralellization, being at 33 with no extra effort is pretty good.&lt;/p&gt;</description>
		<content:encoded><![CDATA[<p>Given how the CPU is totally pegged at 100% during the build of the large game project, I suspect the best build time would be achieved by putting all the engine and game code in a single project. That would be a bit of a pain because we would need to maintain different project files (one for the game, one for each library), so probably the small build-time gains wouldn&#8217;t outweight the drawbacks.</p>
<p>Let me try it right now for the heck of it&#8230; Yeah, it&#8217;s a bit faster, but not as much as I expected. Down to 30 seconds from 36 seconds. Definitely not worth it in this case, but I could see how it could make a big difference for some projects.</p>
<p>Actually, I just realized you were probably not suggesting creating one mega project, but simply turning on /MP on all the projects and disabling the project-level paralellism. Trying right now&#8230; 35 seconds. So your hunch was right. It&#8217;s a bit faster. And it would probably be significantly faster if the libraries were larger, but they&#8217;re pretty small. Still, I think I like it better with the /MP switch. It feels more &quot;controlled&quot; somehow to know that the compiler is doing a single library before moving to the next one.</p>
<p>And while I&#8217;m it, let me try the opposite: No /MP switch, but crank up the number of parallel project builds to 4. And the results are&#8230; 33 seconds.</p>
<p>Now, this is not a very good test case, because we have 16 smallish libraries, and one large game project. Still, considering that 30 seconds is probably the best possible paralellization, being at 33 with no extra effort is pretty good.</p>
]]></content:encoded>
	</item>
	<item>
		<title>By: Robin Green</title>
		<link>http://gamesfromwithin.com/the-measure-of-code/comment-page-1#comment-484</link>
		<dc:creator>Robin Green</dc:creator>
		<pubDate>Wed, 30 Nov -0001 00:00:00 +0000</pubDate>
		<guid isPermaLink="false">http://www.gamesfromwithin.dreamhosters.com/?p=447#comment-484</guid>
		<description>We have had a lot of success using the &quot;make&quot; alternatives SCons and Jam. SCons runs under Python, making Windows setup a smidge little trickier, but it does scientifically precise minimal builds by hashing files (including the output .obj files) to see whether they have changed and it needs to recompile or relink them. The upside: you get to specify how to build your project using a real programming language with a lot of cross-platform build tool smarts built in. The downside: It can sometimes not show much speed advantage over Visual Studio.

Jam does much the same thing, relying on timestamps rather than direct hashing, and runs like lightning. Null builds are immediate returns, partial builds are just plain snappy compared to Visual Studio. The upside: speed. Jam is FAST, free, cross platform and has an avid developer community. The build intelligence is built into the Jambase language base so everything is up for grabs. The downside: There are three versions of Jam out there (ftjam, classic Jam and Boost Jam) with little to differentiate them that anyone but the most super advanced user would ever care about (start with ftjam, it understands VC8 better). The Jamfile language is kinda funky and documentation is scattered over the web. Basic use is simple to start with but has subtleties that take time to fully Grok - its&#039; a Prolog-like declarative, Python-like functional, string-list based language. Once you do get it, it&#039;s full steam ahead.

We use SCons on our projects at work, but at home I use Jam and have promised myself never to use Make again. It&#039;s great to be able to list a bunch of .cpp files and ask the build system to &quot;go make a SharedLibrary() out of these&quot;, have it find the interdependencies automatically and have the build script work on multiple platforms without any rewriting on your part.</description>
		<content:encoded><![CDATA[<p>We have had a lot of success using the &#8220;make&#8221; alternatives SCons and Jam. SCons runs under Python, making Windows setup a smidge little trickier, but it does scientifically precise minimal builds by hashing files (including the output .obj files) to see whether they have changed and it needs to recompile or relink them. The upside: you get to specify how to build your project using a real programming language with a lot of cross-platform build tool smarts built in. The downside: It can sometimes not show much speed advantage over Visual Studio.</p>
<p>Jam does much the same thing, relying on timestamps rather than direct hashing, and runs like lightning. Null builds are immediate returns, partial builds are just plain snappy compared to Visual Studio. The upside: speed. Jam is FAST, free, cross platform and has an avid developer community. The build intelligence is built into the Jambase language base so everything is up for grabs. The downside: There are three versions of Jam out there (ftjam, classic Jam and Boost Jam) with little to differentiate them that anyone but the most super advanced user would ever care about (start with ftjam, it understands VC8 better). The Jamfile language is kinda funky and documentation is scattered over the web. Basic use is simple to start with but has subtleties that take time to fully Grok &#8211; its&#8217; a Prolog-like declarative, Python-like functional, string-list based language. Once you do get it, it&#8217;s full steam ahead.</p>
<p>We use SCons on our projects at work, but at home I use Jam and have promised myself never to use Make again. It&#8217;s great to be able to list a bunch of .cpp files and ask the build system to &#8220;go make a SharedLibrary() out of these&#8221;, have it find the interdependencies automatically and have the build script work on multiple platforms without any rewriting on your part.</p>
]]></content:encoded>
	</item>
</channel>
</rss>

