<?xml version='1.0' encoding='UTF-8'?><?xml-stylesheet href="http://www.blogger.com/styles/atom.css" type="text/css"?><feed xmlns='http://www.w3.org/2005/Atom' xmlns:openSearch='http://a9.com/-/spec/opensearchrss/1.0/' xmlns:georss='http://www.georss.org/georss' xmlns:gd='http://schemas.google.com/g/2005' xmlns:thr='http://purl.org/syndication/thread/1.0'><id>tag:blogger.com,1999:blog-9582144</id><updated>2011-10-20T08:13:29.606-07:00</updated><title type='text'>Al's Game Programming Blog</title><subtitle type='html'>This blog is a repository of the brain dumps of an obsessive video games programmer. He only learns by making mistakes. Please help by telling him why he is wrong.</subtitle><link rel='http://schemas.google.com/g/2005#feed' type='application/atom+xml' href='http://alpatrick.blogspot.com/feeds/posts/default'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/9582144/posts/default?max-results=100'/><link rel='alternate' type='text/html' href='http://alpatrick.blogspot.com/'/><link rel='hub' href='http://pubsubhubbub.appspot.com/'/><author><name>Alastair Patrick</name><uri>http://www.blogger.com/profile/08547818719982201304</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><generator version='7.00' uri='http://www.blogger.com'>Blogger</generator><openSearch:totalResults>52</openSearch:totalResults><openSearch:startIndex>1</openSearch:startIndex><openSearch:itemsPerPage>100</openSearch:itemsPerPage><entry><id>tag:blogger.com,1999:blog-9582144.post-1876095970456544053</id><published>2008-01-22T17:13:00.000-08:00</published><updated>2008-01-22T17:16:13.606-08:00</updated><title type='text'>new blog</title><summary type='text'>Well it's been almost 2 years since I posted on this blog. I've been busy! I intend to start posting again on my new blog. There are some articles already there. Take a look!</summary><link rel='replies' type='application/atom+xml' href='http://alpatrick.blogspot.com/feeds/1876095970456544053/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=9582144&amp;postID=1876095970456544053' title='20 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/9582144/posts/default/1876095970456544053'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/9582144/posts/default/1876095970456544053'/><link rel='alternate' type='text/html' href='http://alpatrick.blogspot.com/2008/01/new-blog.html' title='new blog'/><author><name>Alastair Patrick</name><uri>http://www.blogger.com/profile/08547818719982201304</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>20</thr:total></entry><entry><id>tag:blogger.com,1999:blog-9582144.post-113917523144257921</id><published>2006-02-05T13:18:00.000-08:00</published><updated>2006-02-05T19:22:08.770-08:00</updated><title type='text'>Tim Sweeney gives a presentation at POPL 2006</title><summary type='text'>Last month, Tim Sweeney of Epic Games (developers of the Unreal engine) gave a presentation titled, "The Next Mainstream Programming Language: A Game Developer's Perspective". Although I did not attend the POPL 2006 conference, I found reading the slides interesting. They can be opened with Open Office if you don't have Microsoft Powerpoint.On the opening slide, he argues that the programming </summary><link rel='replies' type='application/atom+xml' href='http://alpatrick.blogspot.com/feeds/113917523144257921/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=9582144&amp;postID=113917523144257921' title='15 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/9582144/posts/default/113917523144257921'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/9582144/posts/default/113917523144257921'/><link rel='alternate' type='text/html' href='http://alpatrick.blogspot.com/2006/02/tim-sweeney-gives-presentation-at-popl.html' title='Tim Sweeney gives a presentation at POPL 2006'/><author><name>Alastair Patrick</name><uri>http://www.blogger.com/profile/08547818719982201304</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>15</thr:total></entry><entry><id>tag:blogger.com,1999:blog-9582144.post-113193716491067702</id><published>2005-11-13T18:33:00.000-08:00</published><updated>2005-11-13T18:59:24.930-08:00</updated><title type='text'>How const is const?</title><summary type='text'>Here is some straightforward C++ code:int a[5];The variable "a" is declared as being an array of 5 integers. This code is equivalent:const int n = 5;int a[n];The variable "n" is a compile-time constant and can be used interchangeably with the constant 5. The address of a global variable is also a compile-time constant. Therefore, this is valid C++ as well:int b;const int n = reinterpret_cast&lt;int&gt;</summary><link rel='replies' type='application/atom+xml' href='http://alpatrick.blogspot.com/feeds/113193716491067702/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=9582144&amp;postID=113193716491067702' title='9 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/9582144/posts/default/113193716491067702'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/9582144/posts/default/113193716491067702'/><link rel='alternate' type='text/html' href='http://alpatrick.blogspot.com/2005/11/how-const-is-const.html' title='How const is const?'/><author><name>Alastair Patrick</name><uri>http://www.blogger.com/profile/08547818719982201304</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>9</thr:total></entry><entry><id>tag:blogger.com,1999:blog-9582144.post-112769069981662676</id><published>2005-09-25T16:12:00.000-07:00</published><updated>2005-09-25T19:06:59.876-07:00</updated><title type='text'>Using Python to drive Google Desktop Search</title><summary type='text'>If you haven't tried Google Desktop Search yet I suggest you install it immediately. It extends the Google search engine to your hard drive so you can use it to search your files, emails, etc. I find it really useful for searching through source code. It's much faster than Visual Studio or Explorer's search because it uses some kind of clever keyword index.This weekend I decided to learn Python. </summary><link rel='replies' type='application/atom+xml' href='http://alpatrick.blogspot.com/feeds/112769069981662676/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=9582144&amp;postID=112769069981662676' title='6 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/9582144/posts/default/112769069981662676'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/9582144/posts/default/112769069981662676'/><link rel='alternate' type='text/html' href='http://alpatrick.blogspot.com/2005/09/using-python-to-drive-google-desktop.html' title='Using Python to drive Google Desktop Search'/><author><name>Alastair Patrick</name><uri>http://www.blogger.com/profile/08547818719982201304</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>6</thr:total></entry><entry><id>tag:blogger.com,1999:blog-9582144.post-111190936912806902</id><published>2005-03-26T23:33:00.000-08:00</published><updated>2005-03-26T23:42:49.130-08:00</updated><title type='text'>Virtual sizeof</title><summary type='text'>Do you ever wish you could do this:class Base{}; class Derived: public Base{  int x;}; Base *p = new Derived; size_t s = sizeof(*p); // s is sizeof(Derived)Of course it doesn't work because s becomes the size of Base rather than Derived. What you really want is a kind of "virtual sizeof". This is what I came up with:class Base{public:  virtual size_t Size() const = 0;}; class Derived: public Base</summary><link rel='replies' type='application/atom+xml' href='http://alpatrick.blogspot.com/feeds/111190936912806902/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=9582144&amp;postID=111190936912806902' title='4 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/9582144/posts/default/111190936912806902'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/9582144/posts/default/111190936912806902'/><link rel='alternate' type='text/html' href='http://alpatrick.blogspot.com/2005/03/virtual-sizeof.html' title='Virtual sizeof'/><author><name>Alastair Patrick</name><uri>http://www.blogger.com/profile/08547818719982201304</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>4</thr:total></entry><entry><id>tag:blogger.com,1999:blog-9582144.post-111190801307458297</id><published>2005-03-26T22:50:00.000-08:00</published><updated>2005-03-27T17:15:37.830-08:00</updated><title type='text'>I'm not dead</title><summary type='text'>It's been 3 weeks since my last post. I'm not dead. I've been busy working on various projects. None of them are in a state that I can post anything concrete. Last week I learned two scripting languages: Ruby and Lua. The first thing I noticed was how much more productive I was using a scripting language than C# or C++. I think it was mostly the dynamic typing and certain language features like </summary><link rel='replies' type='application/atom+xml' href='http://alpatrick.blogspot.com/feeds/111190801307458297/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=9582144&amp;postID=111190801307458297' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/9582144/posts/default/111190801307458297'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/9582144/posts/default/111190801307458297'/><link rel='alternate' type='text/html' href='http://alpatrick.blogspot.com/2005/03/im-not-dead.html' title='I&apos;m not dead'/><author><name>Alastair Patrick</name><uri>http://www.blogger.com/profile/08547818719982201304</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-9582144.post-111008058128997024</id><published>2005-03-05T19:23:00.000-08:00</published><updated>2005-03-05T23:20:19.640-08:00</updated><title type='text'>CDL prototype working</title><summary type='text'>I just got my prototype CDL metacompiler working. It can compile the CDL class definition I posted previously and it outputs all the automatically generated schema and C++ serialization code. It's not even close to being production ready but I have taken it far enough to satisfy myself that it would be feasible for a game project. It was pretty straightforward to get working: just 18 hours.I </summary><link rel='replies' type='application/atom+xml' href='http://alpatrick.blogspot.com/feeds/111008058128997024/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=9582144&amp;postID=111008058128997024' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/9582144/posts/default/111008058128997024'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/9582144/posts/default/111008058128997024'/><link rel='alternate' type='text/html' href='http://alpatrick.blogspot.com/2005/03/cdl-prototype-working.html' title='CDL prototype working'/><author><name>Alastair Patrick</name><uri>http://www.blogger.com/profile/08547818719982201304</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-9582144.post-110956093023073981</id><published>2005-02-27T18:52:00.000-08:00</published><updated>2005-02-27T21:01:50.790-08:00</updated><title type='text'>Other applications for CDL</title><summary type='text'>My main justification for CDL to this point has been as a tool to automatically generate a schema from an annotated C++ class definition, together with additional automatically generated C++ code to support the binding of objects to binary data cooked with the schema. As I see things, the only viable alternative (using C++ at least) is to automatically generate C++ code from a hand-written schema</summary><link rel='replies' type='application/atom+xml' href='http://alpatrick.blogspot.com/feeds/110956093023073981/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=9582144&amp;postID=110956093023073981' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/9582144/posts/default/110956093023073981'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/9582144/posts/default/110956093023073981'/><link rel='alternate' type='text/html' href='http://alpatrick.blogspot.com/2005/02/other-applications-for-cdl.html' title='Other applications for CDL'/><author><name>Alastair Patrick</name><uri>http://www.blogger.com/profile/08547818719982201304</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-9582144.post-110953163020083319</id><published>2005-02-27T10:38:00.000-08:00</published><updated>2005-02-27T11:59:47.056-08:00</updated><title type='text'>Another CDL example</title><summary type='text'>This is another example of CDL. I am posting it in response to Noel Llopis' comment on another thread. This is intended to demonstrate how CDL could allow the structure of the schema to differ from that of the member variables.// Orientation.cdl// Hand written annotated classCDL class Orientation{public:   Orientation(): x(0), y(0), z(0), w(1) {}   // Public API uses Euler angles  float GetX() </summary><link rel='replies' type='application/atom+xml' href='http://alpatrick.blogspot.com/feeds/110953163020083319/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=9582144&amp;postID=110953163020083319' title='2 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/9582144/posts/default/110953163020083319'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/9582144/posts/default/110953163020083319'/><link rel='alternate' type='text/html' href='http://alpatrick.blogspot.com/2005/02/another-cdl-example.html' title='Another CDL example'/><author><name>Alastair Patrick</name><uri>http://www.blogger.com/profile/08547818719982201304</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>2</thr:total></entry><entry><id>tag:blogger.com,1999:blog-9582144.post-110895275515841905</id><published>2005-02-20T17:58:00.000-08:00</published><updated>2005-02-20T18:25:55.163-08:00</updated><title type='text'>Puma C++ transformation library</title><summary type='text'>Today I looked at Puma. Puma is a library for applying transformations to C++ programs. It can do C++ lexical analysis, parsing and semantic analysis. The library provides an API for examining and modifying C++ abstract syntax trees. To support program transformation, it also allows a modified syntax tree to be "unparsed" back into C++ source code, which can then be compiled using a C++ </summary><link rel='replies' type='application/atom+xml' href='http://alpatrick.blogspot.com/feeds/110895275515841905/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=9582144&amp;postID=110895275515841905' title='17 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/9582144/posts/default/110895275515841905'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/9582144/posts/default/110895275515841905'/><link rel='alternate' type='text/html' href='http://alpatrick.blogspot.com/2005/02/puma-c-transformation-library.html' title='Puma C++ transformation library'/><author><name>Alastair Patrick</name><uri>http://www.blogger.com/profile/08547818719982201304</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>17</thr:total></entry><entry><id>tag:blogger.com,1999:blog-9582144.post-110853493393184976</id><published>2005-02-15T22:00:00.000-08:00</published><updated>2005-02-16T22:35:57.360-08:00</updated><title type='text'>Schema from program or program from schema?</title><summary type='text'>One of the goals of my C++ metaprogramming system is that it should be possible to generate a schema for game data directly from an annotated C++ program. This schema is important because it decouples the game engine from the tools that are used to process the game's data.There seem to be three options here. The first option is the one I am currently investigating and also the motivation for my C</summary><link rel='replies' type='application/atom+xml' href='http://alpatrick.blogspot.com/feeds/110853493393184976/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=9582144&amp;postID=110853493393184976' title='7 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/9582144/posts/default/110853493393184976'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/9582144/posts/default/110853493393184976'/><link rel='alternate' type='text/html' href='http://alpatrick.blogspot.com/2005/02/schema-from-program-or-program-from.html' title='Schema from program or program from schema?'/><author><name>Alastair Patrick</name><uri>http://www.blogger.com/profile/08547818719982201304</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>7</thr:total></entry><entry><id>tag:blogger.com,1999:blog-9582144.post-110850168973395662</id><published>2005-02-15T13:07:00.000-08:00</published><updated>2005-02-15T23:43:31.290-08:00</updated><title type='text'>artefaktur C++ framework</title><summary type='text'>I found this existing C++ framework that supports reflection. Like my metaprogramming idea, this uses a C++ preprocessor to parse metadata out of C++ class definitions. I believe it focuses on using reflection to exploit metadata. I want to continue down the metaprogramming route. I think it fits better with C++.I also investigated C++0x. This is an attempt to standardize the next version of C++.</summary><link rel='replies' type='application/atom+xml' href='http://alpatrick.blogspot.com/feeds/110850168973395662/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=9582144&amp;postID=110850168973395662' title='2 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/9582144/posts/default/110850168973395662'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/9582144/posts/default/110850168973395662'/><link rel='alternate' type='text/html' href='http://alpatrick.blogspot.com/2005/02/artefaktur-c-framework.html' title='artefaktur C++ framework'/><author><name>Alastair Patrick</name><uri>http://www.blogger.com/profile/08547818719982201304</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>2</thr:total></entry><entry><id>tag:blogger.com,1999:blog-9582144.post-110832863803046648</id><published>2005-02-13T12:55:00.000-08:00</published><updated>2005-02-13T15:10:56.780-08:00</updated><title type='text'>CDL use cases</title><summary type='text'>These are some use cases for my C++ metaprogramming framework. First some CDL:// Texture.h#ifndef GUARD_Texture_H#define GUARD_Texture_H #include "Object.h" // physical dependency on base class #include "StringPtr.h" // no physical dependency on referenced classes#include "ArrayPtr.h"#include "MipMapPtr.h" CDL class Texture: public Object{public:   PROPERTY    Ptr&lt;String&gt; GetName() const;    void</summary><link rel='replies' type='application/atom+xml' href='http://alpatrick.blogspot.com/feeds/110832863803046648/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=9582144&amp;postID=110832863803046648' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/9582144/posts/default/110832863803046648'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/9582144/posts/default/110832863803046648'/><link rel='alternate' type='text/html' href='http://alpatrick.blogspot.com/2005/02/cdl-use-cases.html' title='CDL use cases'/><author><name>Alastair Patrick</name><uri>http://www.blogger.com/profile/08547818719982201304</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-9582144.post-110832386504315194</id><published>2005-02-13T11:14:00.000-08:00</published><updated>2005-02-13T15:17:07.650-08:00</updated><title type='text'>C++ metaprogramming framework</title><summary type='text'>In my previous post, I considered some ways of exploiting reflection in a C++ program. Specifically, I proposed the use of a C++ data definition language (DDL) from which metadata could be extracted in order to support reflection. In retrospect, I think the choice of the term DDL was a mistake. C++ classes are not just data after all. From now on I will use the term class definition language (CDL</summary><link rel='replies' type='application/atom+xml' href='http://alpatrick.blogspot.com/feeds/110832386504315194/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=9582144&amp;postID=110832386504315194' title='6 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/9582144/posts/default/110832386504315194'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/9582144/posts/default/110832386504315194'/><link rel='alternate' type='text/html' href='http://alpatrick.blogspot.com/2005/02/c-metaprogramming-framework.html' title='C++ metaprogramming framework'/><author><name>Alastair Patrick</name><uri>http://www.blogger.com/profile/08547818719982201304</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>6</thr:total></entry><entry><id>tag:blogger.com,1999:blog-9582144.post-110711335810322887</id><published>2005-01-30T10:21:00.000-08:00</published><updated>2005-01-30T13:47:02.376-08:00</updated><title type='text'>C++ data definition language</title><summary type='text'>In a previous post, I said I would consider some alternative ways of taking advantage of the benefits of C# (primarily reflection) on game console platforms. Two approaches spring to mind.The first approach is to use an existing interpreted language with reflection support, such as Python. An interpreted language is appealing because, if the interpreter, debugger and other tools can be easily </summary><link rel='replies' type='application/atom+xml' href='http://alpatrick.blogspot.com/feeds/110711335810322887/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=9582144&amp;postID=110711335810322887' title='4 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/9582144/posts/default/110711335810322887'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/9582144/posts/default/110711335810322887'/><link rel='alternate' type='text/html' href='http://alpatrick.blogspot.com/2005/01/c-data-definition-language.html' title='C++ data definition language'/><author><name>Alastair Patrick</name><uri>http://www.blogger.com/profile/08547818719982201304</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>4</thr:total></entry><entry><id>tag:blogger.com,1999:blog-9582144.post-110703432661603923</id><published>2005-01-29T13:27:00.000-08:00</published><updated>2005-01-29T15:29:02.590-08:00</updated><title type='text'>Contact details</title><summary type='text'>In light of recent industry events, should anyone want to contact me directly over the next few weeks, I can be emailed at "apatrick at mail dot com".</summary><link rel='replies' type='application/atom+xml' href='http://alpatrick.blogspot.com/feeds/110703432661603923/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=9582144&amp;postID=110703432661603923' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/9582144/posts/default/110703432661603923'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/9582144/posts/default/110703432661603923'/><link rel='alternate' type='text/html' href='http://alpatrick.blogspot.com/2005/01/contact-details.html' title='Contact details'/><author><name>Alastair Patrick</name><uri>http://www.blogger.com/profile/08547818719982201304</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-9582144.post-110644670690864516</id><published>2005-01-22T15:31:00.000-08:00</published><updated>2005-01-22T18:18:26.906-08:00</updated><title type='text'>First experience of test driven development</title><summary type='text'>I have been meaning to try Test Driven Development (TDD) for some time now. Until now I had been putting it off, mostly because I thought it would take quite a long time to learn and because I thought it would be a long time before I really "got it" and started seeing any real benefits. Having just written my first program using TDD, I am pleased to report that my learning time was almost nil and</summary><link rel='replies' type='application/atom+xml' href='http://alpatrick.blogspot.com/feeds/110644670690864516/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=9582144&amp;postID=110644670690864516' title='3 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/9582144/posts/default/110644670690864516'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/9582144/posts/default/110644670690864516'/><link rel='alternate' type='text/html' href='http://alpatrick.blogspot.com/2005/01/first-experience-of-test-driven.html' title='First experience of test driven development'/><author><name>Alastair Patrick</name><uri>http://www.blogger.com/profile/08547818719982201304</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>3</thr:total></entry><entry><id>tag:blogger.com,1999:blog-9582144.post-110592679641613663</id><published>2005-01-16T16:41:00.000-08:00</published><updated>2005-01-16T18:09:56.196-08:00</updated><title type='text'>Review of the benefits of C# for games programming</title><summary type='text'>I have just about reached the limits of what I can hope to achieve with my C# to C++ translator project. There is so much more I would like to do but it is getting to the stage where I cannot make significant progress in weekend time alone. I'm also extremely busy at work and have little energy left. Maybe I'll pick up where I left off in a few months.I did pretty well in the time available I </summary><link rel='replies' type='application/atom+xml' href='http://alpatrick.blogspot.com/feeds/110592679641613663/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=9582144&amp;postID=110592679641613663' title='5 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/9582144/posts/default/110592679641613663'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/9582144/posts/default/110592679641613663'/><link rel='alternate' type='text/html' href='http://alpatrick.blogspot.com/2005/01/review-of-benefits-of-c-for-games.html' title='Review of the benefits of C# for games programming'/><author><name>Alastair Patrick</name><uri>http://www.blogger.com/profile/08547818719982201304</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>5</thr:total></entry><entry><id>tag:blogger.com,1999:blog-9582144.post-110592140761218109</id><published>2005-01-16T15:32:00.000-08:00</published><updated>2005-01-16T16:23:27.613-08:00</updated><title type='text'>Code coverage analysis</title><summary type='text'>Code coverage analysis is a way of verifying that every code path in a program is exercised at least once by a collection of test cases. Consider this simplified example:public class MathUtils{  public static int Sign(int x)  {    if (x&lt;0)    {      return -1;    }    else if (x&gt;0)    {      return 1;    }    else    {      return 0;    }  }}[TestFixture]class TestMathUtils</summary><link rel='replies' type='application/atom+xml' href='http://alpatrick.blogspot.com/feeds/110592140761218109/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=9582144&amp;postID=110592140761218109' title='7 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/9582144/posts/default/110592140761218109'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/9582144/posts/default/110592140761218109'/><link rel='alternate' type='text/html' href='http://alpatrick.blogspot.com/2005/01/code-coverage-analysis.html' title='Code coverage analysis'/><author><name>Alastair Patrick</name><uri>http://www.blogger.com/profile/08547818719982201304</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>7</thr:total></entry><entry><id>tag:blogger.com,1999:blog-9582144.post-110582991255775354</id><published>2005-01-15T14:52:00.000-08:00</published><updated>2005-01-15T15:51:20.806-08:00</updated><title type='text'>Mono class library licensing terms</title><summary type='text'>I just checked out the licensing terms of the Mono .NET class library. This is Mono's implementation of classes like System.String, System.Collections.ArrayList, etc. It is just C# source code so, using my C# to C++ translator, I will be able to translate it to C++ just like any other C# program.It is under the very unrestrictive MIT license. Specifically, it is allowable to use it in </summary><link rel='replies' type='application/atom+xml' href='http://alpatrick.blogspot.com/feeds/110582991255775354/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=9582144&amp;postID=110582991255775354' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/9582144/posts/default/110582991255775354'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/9582144/posts/default/110582991255775354'/><link rel='alternate' type='text/html' href='http://alpatrick.blogspot.com/2005/01/mono-class-library-licensing-terms.html' title='Mono class library licensing terms'/><author><name>Alastair Patrick</name><uri>http://www.blogger.com/profile/08547818719982201304</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-9582144.post-110582575659081311</id><published>2005-01-15T13:03:00.000-08:00</published><updated>2005-01-15T18:19:29.880-08:00</updated><title type='text'>C# memory manager for video games console platform</title><summary type='text'>In a previous post I described a fully automatic memory manager that was guaranteed not to leak memory. It was based on reference counting, weak references and compile time analysis. I plan to use this in the runtime for my C# to C++ translator. Now in this post I will look into a possible allocation strategy.When designing a memory manager, there is an important trade-off to be made between </summary><link rel='replies' type='application/atom+xml' href='http://alpatrick.blogspot.com/feeds/110582575659081311/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=9582144&amp;postID=110582575659081311' title='3 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/9582144/posts/default/110582575659081311'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/9582144/posts/default/110582575659081311'/><link rel='alternate' type='text/html' href='http://alpatrick.blogspot.com/2005/01/c-memory-manager-for-video-games.html' title='C# memory manager for video games console platform'/><author><name>Alastair Patrick</name><uri>http://www.blogger.com/profile/08547818719982201304</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>3</thr:total></entry><entry><id>tag:blogger.com,1999:blog-9582144.post-110523769684331797</id><published>2005-01-08T17:19:00.000-08:00</published><updated>2005-01-08T18:59:04.930-08:00</updated><title type='text'>Prototype pattern using reflection</title><summary type='text'>The prototype pattern is one of the originals described by the "Gang of Four" in their book "Design Patterns". The idea is that a class contains a virtual method that is overridden in each derived class to create a clone. Given a prototype object, it is then possible to create as many clones as needed by invoking the clone method.An application of this pattern in video games would be to </summary><link rel='replies' type='application/atom+xml' href='http://alpatrick.blogspot.com/feeds/110523769684331797/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=9582144&amp;postID=110523769684331797' title='7 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/9582144/posts/default/110523769684331797'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/9582144/posts/default/110523769684331797'/><link rel='alternate' type='text/html' href='http://alpatrick.blogspot.com/2005/01/prototype-pattern-using-reflection.html' title='Prototype pattern using reflection'/><author><name>Alastair Patrick</name><uri>http://www.blogger.com/profile/08547818719982201304</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>7</thr:total></entry><entry><id>tag:blogger.com,1999:blog-9582144.post-110522084174266516</id><published>2005-01-08T11:58:00.000-08:00</published><updated>2005-01-10T08:30:06.066-08:00</updated><title type='text'>Automatically detect all memory leaks at compile time?</title><summary type='text'>Yesterday at work I spent a couple of hours tracking down a troublesome memory leak. Memory leaks are my third least favorite kind of bug (race conditions and dangling pointers are worse). They are also annoying because it is next to impossible to write unit tests that verify memory does not leak. If I refactor some code, how am I to know if I have introduced a memory leak? This leads me to my </summary><link rel='replies' type='application/atom+xml' href='http://alpatrick.blogspot.com/feeds/110522084174266516/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=9582144&amp;postID=110522084174266516' title='2 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/9582144/posts/default/110522084174266516'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/9582144/posts/default/110522084174266516'/><link rel='alternate' type='text/html' href='http://alpatrick.blogspot.com/2005/01/automatically-detect-all-memory-leaks.html' title='Automatically detect all memory leaks at compile time?'/><author><name>Alastair Patrick</name><uri>http://www.blogger.com/profile/08547818719982201304</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>2</thr:total></entry><entry><id>tag:blogger.com,1999:blog-9582144.post-110490125262735292</id><published>2005-01-04T20:19:00.000-08:00</published><updated>2005-01-05T07:51:33.596-08:00</updated><title type='text'>Improving code turnaround time</title><summary type='text'>I have been using refactoring, as described in Martin Fowler's excellent book, for a couple of years now and found that it has improved my productivity and the quality of my code considerably. One of the basic requirements of refactoring is that you must be do it incrementally. That is, after each individual change, you must build and test your code, ideally using automated tests. I will call the</summary><link rel='replies' type='application/atom+xml' href='http://alpatrick.blogspot.com/feeds/110490125262735292/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=9582144&amp;postID=110490125262735292' title='5 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/9582144/posts/default/110490125262735292'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/9582144/posts/default/110490125262735292'/><link rel='alternate' type='text/html' href='http://alpatrick.blogspot.com/2005/01/improving-code-turnaround-time.html' title='Improving code turnaround time'/><author><name>Alastair Patrick</name><uri>http://www.blogger.com/profile/08547818719982201304</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>5</thr:total></entry><entry><id>tag:blogger.com,1999:blog-9582144.post-110465347034144539</id><published>2005-01-01T23:42:00.000-08:00</published><updated>2005-01-02T00:13:55.230-08:00</updated><title type='text'>Diagnostics traces</title><summary type='text'>Here is a common and useful debugging technique:void foo(int a, double b){  printf("Enters %s/%d foo(%d, %f)", __FILE__, __LINE__, a, b);  // do stuff  printf("Exits %s/%d foo(%d, %f)", __FILE__, __LINE__, a, b);}Sometimes we need a picture of what the program is doing that cannot be determined by using debugging techniques like breakpoints or stepping through code. For example, we might </summary><link rel='replies' type='application/atom+xml' href='http://alpatrick.blogspot.com/feeds/110465347034144539/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=9582144&amp;postID=110465347034144539' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/9582144/posts/default/110465347034144539'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/9582144/posts/default/110465347034144539'/><link rel='alternate' type='text/html' href='http://alpatrick.blogspot.com/2005/01/diagnostics-traces.html' title='Diagnostics traces'/><author><name>Alastair Patrick</name><uri>http://www.blogger.com/profile/08547818719982201304</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-9582144.post-110462869443817078</id><published>2005-01-01T16:59:00.000-08:00</published><updated>2005-01-01T19:38:30.493-08:00</updated><title type='text'>Euclid's algorithm</title><summary type='text'>Today I worked on making the code generated by my translator a little less verbose. My strategy was to try and reconstruct the original C# expressions by analyzing the stack operations carried out by the IL assembly. This turned out to be quite straightforward.  The main complication was aliasing. Unlike Java byte-code, MSIL byte-code permits variables to be aliased. I worked around this by only </summary><link rel='replies' type='application/atom+xml' href='http://alpatrick.blogspot.com/feeds/110462869443817078/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=9582144&amp;postID=110462869443817078' title='2 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/9582144/posts/default/110462869443817078'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/9582144/posts/default/110462869443817078'/><link rel='alternate' type='text/html' href='http://alpatrick.blogspot.com/2005/01/euclids-algorithm.html' title='Euclid&apos;s algorithm'/><author><name>Alastair Patrick</name><uri>http://www.blogger.com/profile/08547818719982201304</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>2</thr:total></entry><entry><id>tag:blogger.com,1999:blog-9582144.post-110455934012193308</id><published>2004-12-31T21:27:00.000-08:00</published><updated>2004-12-31T23:56:50.716-08:00</updated><title type='text'>Java or C#?</title><summary type='text'>Now that I have successfully implemented prototype translators from both Java and C# to C++ (see my previous post), I have some thoughts on what would make a good language to use in combination with C++ for higher level game code. I am not proposing the replacement of C++. C++ is an excellent language for all kinds of games related problems.Rather, I am proposing using reflection oriented </summary><link rel='replies' type='application/atom+xml' href='http://alpatrick.blogspot.com/feeds/110455934012193308/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=9582144&amp;postID=110455934012193308' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/9582144/posts/default/110455934012193308'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/9582144/posts/default/110455934012193308'/><link rel='alternate' type='text/html' href='http://alpatrick.blogspot.com/2004/12/java-or-c.html' title='Java or C#?'/><author><name>Alastair Patrick</name><uri>http://www.blogger.com/profile/08547818719982201304</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-9582144.post-110454724902827774</id><published>2004-12-31T18:28:00.000-08:00</published><updated>2004-12-31T18:40:49.026-08:00</updated><title type='text'>It lives!</title><summary type='text'>I finally got my C# to C++ translator doing something useful! It's still early days but I successfully translated a C# program into C++. The C# program was this:class Program{    static void Main(string[] args)    {        for (int i = 0; i != 10; ++i)        {            Console.WriteLine("Hello world!");        }    }}I compiled this with the Microsoft C# compiler, which generated </summary><link rel='replies' type='application/atom+xml' href='http://alpatrick.blogspot.com/feeds/110454724902827774/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=9582144&amp;postID=110454724902827774' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/9582144/posts/default/110454724902827774'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/9582144/posts/default/110454724902827774'/><link rel='alternate' type='text/html' href='http://alpatrick.blogspot.com/2004/12/it-lives.html' title='It lives!'/><author><name>Alastair Patrick</name><uri>http://www.blogger.com/profile/08547818719982201304</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-9582144.post-110453730960279827</id><published>2004-12-31T15:13:00.000-08:00</published><updated>2004-12-31T15:55:09.603-08:00</updated><title type='text'>Garbage collection for robust game code</title><summary type='text'>In this port, I considered the performance issues associated with garbage collection in game code. I came to the conclusion that it was inappropriate for use during gameplay because it would burn a considerable amount of CPU time and make the frame rate stutter. I also thought that it might be useful for detecting memory leaks during development. Now I think it might actually have wider </summary><link rel='replies' type='application/atom+xml' href='http://alpatrick.blogspot.com/feeds/110453730960279827/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=9582144&amp;postID=110453730960279827' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/9582144/posts/default/110453730960279827'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/9582144/posts/default/110453730960279827'/><link rel='alternate' type='text/html' href='http://alpatrick.blogspot.com/2004/12/garbage-collection-for-robust-game.html' title='Garbage collection for robust game code'/><author><name>Alastair Patrick</name><uri>http://www.blogger.com/profile/08547818719982201304</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-9582144.post-110429735485213198</id><published>2004-12-28T19:55:00.000-08:00</published><updated>2004-12-28T22:24:50.273-08:00</updated><title type='text'>The key benefit of C# for game code</title><summary type='text'>I am a little unsatisfied with the answer I gave to a comment on my previous post. It was somewhat abstract and hand-wavy. So I thought a concrete example might be a good idea.The reason I am writing a C# to C++ translator prototype is because there is one feature missing from C++ that I think would be extremely beneficial for game development. That feature is the ability for a program to </summary><link rel='replies' type='application/atom+xml' href='http://alpatrick.blogspot.com/feeds/110429735485213198/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=9582144&amp;postID=110429735485213198' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/9582144/posts/default/110429735485213198'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/9582144/posts/default/110429735485213198'/><link rel='alternate' type='text/html' href='http://alpatrick.blogspot.com/2004/12/key-benefit-of-c-for-game-code.html' title='The key benefit of C# for game code'/><author><name>Alastair Patrick</name><uri>http://www.blogger.com/profile/08547818719982201304</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-9582144.post-110403879979182860</id><published>2004-12-25T21:07:00.000-08:00</published><updated>2004-12-25T21:56:04.250-08:00</updated><title type='text'>.NET disassembler</title><summary type='text'>I made a lot of progress on my C# to C++ translator today. I have written a simple disassembler that loads the EXE and PDB for a .NET assembly and outputs all the interesting metadata, debug information (C# source line numbers and variable names) and IL assembly using the new .NET 2.0 reflection API. It was surprisingly easy, only 300 lines of code. All I need to do now is modify it to output C++</summary><link rel='replies' type='application/atom+xml' href='http://alpatrick.blogspot.com/feeds/110403879979182860/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=9582144&amp;postID=110403879979182860' title='6 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/9582144/posts/default/110403879979182860'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/9582144/posts/default/110403879979182860'/><link rel='alternate' type='text/html' href='http://alpatrick.blogspot.com/2004/12/net-disassembler.html' title='.NET disassembler'/><author><name>Alastair Patrick</name><uri>http://www.blogger.com/profile/08547818719982201304</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>6</thr:total></entry><entry><id>tag:blogger.com,1999:blog-9582144.post-110394843406705071</id><published>2004-12-24T20:10:00.000-08:00</published><updated>2004-12-24T20:20:34.066-08:00</updated><title type='text'>Powerpoint in powerpoint</title><summary type='text'>This blog post made me laugh. If you have ever had the misfortune of sitting through a poor powerpoint presentation, you will understand. The author presents the failings of powerpoint as a written form using the very form that he ridicules. Hilariously circular. But he does such a good job, I can only conclude that it is not the form itself at fault but its users.</summary><link rel='replies' type='application/atom+xml' href='http://alpatrick.blogspot.com/feeds/110394843406705071/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=9582144&amp;postID=110394843406705071' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/9582144/posts/default/110394843406705071'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/9582144/posts/default/110394843406705071'/><link rel='alternate' type='text/html' href='http://alpatrick.blogspot.com/2004/12/powerpoint-in-powerpoint.html' title='Powerpoint in powerpoint'/><author><name>Alastair Patrick</name><uri>http://www.blogger.com/profile/08547818719982201304</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-9582144.post-110392083474204306</id><published>2004-12-24T11:51:00.000-08:00</published><updated>2004-12-24T12:44:02.360-08:00</updated><title type='text'>Atom, RSS, feeds and feed aggregators</title><summary type='text'>What do these funny words mean?Last week I heard mention of the word "feed" in the context of the Internet in two different conversations. My brain, being trained to look out for this sort of thing, advised me that I should probably investigate further. I was pleasantly surprised to discover that the Internet continues to evolve in new and interesting ways.A feed is a simple thing. Most sites</summary><link rel='replies' type='application/atom+xml' href='http://alpatrick.blogspot.com/feeds/110392083474204306/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=9582144&amp;postID=110392083474204306' title='4 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/9582144/posts/default/110392083474204306'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/9582144/posts/default/110392083474204306'/><link rel='alternate' type='text/html' href='http://alpatrick.blogspot.com/2004/12/atom-rss-feeds-and-feed-aggregators.html' title='Atom, RSS, feeds and feed aggregators'/><author><name>Alastair Patrick</name><uri>http://www.blogger.com/profile/08547818719982201304</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>4</thr:total></entry><entry><id>tag:blogger.com,1999:blog-9582144.post-110384030879420445</id><published>2004-12-23T13:59:00.000-08:00</published><updated>2004-12-23T16:58:12.993-08:00</updated><title type='text'>C# 2.0 to C++ translator</title><summary type='text'>Generics are just one of the many new features of C# 2.0. Other notable additions are anonymous methods and iterators. C# has always had language features without direct C++ equivalents. But these latest additions, and the possibility of subtle differences between the semantics of C# generics and C++ templates, are giving me second thoughts about generating C++ by traversing a C# syntax tree. For</summary><link rel='replies' type='application/atom+xml' href='http://alpatrick.blogspot.com/feeds/110384030879420445/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=9582144&amp;postID=110384030879420445' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/9582144/posts/default/110384030879420445'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/9582144/posts/default/110384030879420445'/><link rel='alternate' type='text/html' href='http://alpatrick.blogspot.com/2004/12/c-20-to-c-translator.html' title='C# 2.0 to C++ translator'/><author><name>Alastair Patrick</name><uri>http://www.blogger.com/profile/08547818719982201304</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-9582144.post-110351439087108741</id><published>2004-12-19T19:36:00.000-08:00</published><updated>2004-12-23T13:21:14.666-08:00</updated><title type='text'>Visitor pattern through runtime code generation</title><summary type='text'>I admit this is a little silly. It could be described as overkill for implementing the visitor pattern. However, I thought it might be fun try out some of the .NET framework's runtime code generation facilities. Specifically, I found out how to instantiate generic methods by binding their generic parameters at runtime. Try and do that in C++!This implementation is based on the previous one, </summary><link rel='replies' type='application/atom+xml' href='http://alpatrick.blogspot.com/feeds/110351439087108741/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=9582144&amp;postID=110351439087108741' title='5 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/9582144/posts/default/110351439087108741'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/9582144/posts/default/110351439087108741'/><link rel='alternate' type='text/html' href='http://alpatrick.blogspot.com/2004/12/visitor-pattern-through-runtime-code.html' title='Visitor pattern through runtime code generation'/><author><name>Alastair Patrick</name><uri>http://www.blogger.com/profile/08547818719982201304</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>5</thr:total></entry><entry><id>tag:blogger.com,1999:blog-9582144.post-110350026611811196</id><published>2004-12-19T15:44:00.000-08:00</published><updated>2004-12-19T16:13:44.840-08:00</updated><title type='text'>Visitor pattern using reflection</title><summary type='text'>As I said in this post, I think reflection is one of the most powerful features of languages like Java and C#. By using reflection, I can eliminate all of the redundancy from the my simple implementation of the visitor pattern. Admittedly, there might be some performance issues if I make heavy use of it.Notice that there is absolutey no code needed in the modem classes to support their visitors</summary><link rel='replies' type='application/atom+xml' href='http://alpatrick.blogspot.com/feeds/110350026611811196/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=9582144&amp;postID=110350026611811196' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/9582144/posts/default/110350026611811196'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/9582144/posts/default/110350026611811196'/><link rel='alternate' type='text/html' href='http://alpatrick.blogspot.com/2004/12/visitor-pattern-using-reflection.html' title='Visitor pattern using reflection'/><author><name>Alastair Patrick</name><uri>http://www.blogger.com/profile/08547818719982201304</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-9582144.post-110349531502913938</id><published>2004-12-19T13:43:00.000-08:00</published><updated>2004-12-19T17:46:57.740-08:00</updated><title type='text'>Revisiting the Visitor pattern</title><summary type='text'>The visitor pattern is a very useful technique. I intend to use it for implementing the various passes over the C# abstract syntax tree (AST) that my C# to C++ translator will need to make.One of the key benefits of the visitor pattern is that it gives you the effect of injecting new virtual functions into a class hierarchy without actually having to modify those classes. The big win for me is </summary><link rel='replies' type='application/atom+xml' href='http://alpatrick.blogspot.com/feeds/110349531502913938/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=9582144&amp;postID=110349531502913938' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/9582144/posts/default/110349531502913938'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/9582144/posts/default/110349531502913938'/><link rel='alternate' type='text/html' href='http://alpatrick.blogspot.com/2004/12/revisiting-visitor-pattern.html' title='Revisiting the Visitor pattern'/><author><name>Alastair Patrick</name><uri>http://www.blogger.com/profile/08547818719982201304</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-9582144.post-110340403767513695</id><published>2004-12-18T13:34:00.000-08:00</published><updated>2004-12-18T14:53:08.243-08:00</updated><title type='text'>C# to C++ translator</title><summary type='text'>I've had this idea running around my brain for a couple of years now. As you may have guessed from previous posts, I am not the world's biggest fan of C++. That has not always been the case. Let's start from the beginning...Some time ago (oh boy I can't quite remember exactly how long but I think it was about 13 years ago) I started to learn C++. Before that I had been using C. Then in a </summary><link rel='replies' type='application/atom+xml' href='http://alpatrick.blogspot.com/feeds/110340403767513695/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=9582144&amp;postID=110340403767513695' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/9582144/posts/default/110340403767513695'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/9582144/posts/default/110340403767513695'/><link rel='alternate' type='text/html' href='http://alpatrick.blogspot.com/2004/12/c-to-c-translator.html' title='C# to C++ translator'/><author><name>Alastair Patrick</name><uri>http://www.blogger.com/profile/08547818719982201304</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-9582144.post-110340051207403699</id><published>2004-12-18T11:47:00.000-08:00</published><updated>2004-12-18T12:29:35.576-08:00</updated><title type='text'>Other games industry blogs</title><summary type='text'>I discovered this games industry blog. In addition to being interesting in its own right, it is also cool because it links to lots of other industry blogs.One thing I notice is very few of my fellow game developer bloggers are programmers. Well, I am going to do my best to change that! Expect more posts on the technical aspects of games development in the future.I also need to think about why</summary><link rel='replies' type='application/atom+xml' href='http://alpatrick.blogspot.com/feeds/110340051207403699/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=9582144&amp;postID=110340051207403699' title='2 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/9582144/posts/default/110340051207403699'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/9582144/posts/default/110340051207403699'/><link rel='alternate' type='text/html' href='http://alpatrick.blogspot.com/2004/12/other-games-industry-blogs.html' title='Other games industry blogs'/><author><name>Alastair Patrick</name><uri>http://www.blogger.com/profile/08547818719982201304</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>2</thr:total></entry><entry><id>tag:blogger.com,1999:blog-9582144.post-110326031873904676</id><published>2004-12-16T21:10:00.000-08:00</published><updated>2004-12-16T21:11:58.740-08:00</updated><title type='text'>Progress bars and why they are awful</title><summary type='text'>The most interesting thing I can say about progress bars is that they start on the left and finish (eventually) on the right.</summary><link rel='replies' type='application/atom+xml' href='http://alpatrick.blogspot.com/feeds/110326031873904676/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=9582144&amp;postID=110326031873904676' title='2 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/9582144/posts/default/110326031873904676'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/9582144/posts/default/110326031873904676'/><link rel='alternate' type='text/html' href='http://alpatrick.blogspot.com/2004/12/progress-bars-and-why-they-are-awful.html' title='Progress bars and why they are awful'/><author><name>Alastair Patrick</name><uri>http://www.blogger.com/profile/08547818719982201304</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>2</thr:total></entry><entry><id>tag:blogger.com,1999:blog-9582144.post-110325905857598975</id><published>2004-12-16T20:32:00.000-08:00</published><updated>2004-12-17T12:08:58.213-08:00</updated><title type='text'>Brief analysis of "Salutation to the dawn"</title><summary type='text'>I posted this poem recently. I have been thinking about what it means to me.It focuses on a single day: "Look to this Day". Or alternatively, the time between "For Yesterday is but a Dream" and "Tomorrow is only a Vision".The metaphor, "For it is Life", means that life and today are the same. This is true in the sense that we experience life in the present. As we experience life, we are </summary><link rel='replies' type='application/atom+xml' href='http://alpatrick.blogspot.com/feeds/110325905857598975/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=9582144&amp;postID=110325905857598975' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/9582144/posts/default/110325905857598975'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/9582144/posts/default/110325905857598975'/><link rel='alternate' type='text/html' href='http://alpatrick.blogspot.com/2004/12/brief-analysis-of-salutation-to-dawn.html' title='Brief analysis of &quot;Salutation to the dawn&quot;'/><author><name>Alastair Patrick</name><uri>http://www.blogger.com/profile/08547818719982201304</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-9582144.post-110304436370985781</id><published>2004-12-14T13:57:00.000-08:00</published><updated>2004-12-14T20:15:24.593-08:00</updated><title type='text'>What is failure?</title><summary type='text'>What does failure mean? A recent experience at work taught me that failure means different things to different people.Some people have a natural curiosity. They delight in discovering new things: in learning. They have no fixed goal, or at least, with every success or failure, their goals change. They are motivated simply by the desire to solve problems and to improve themselves and those </summary><link rel='replies' type='application/atom+xml' href='http://alpatrick.blogspot.com/feeds/110304436370985781/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=9582144&amp;postID=110304436370985781' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/9582144/posts/default/110304436370985781'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/9582144/posts/default/110304436370985781'/><link rel='alternate' type='text/html' href='http://alpatrick.blogspot.com/2004/12/what-is-failure.html' title='What is failure?'/><author><name>Alastair Patrick</name><uri>http://www.blogger.com/profile/08547818719982201304</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-9582144.post-110305876416696906</id><published>2004-12-14T13:10:00.000-08:00</published><updated>2004-12-14T13:14:49.390-08:00</updated><title type='text'>A poem I liked</title><summary type='text'>Salutation to the DawnListen to the Exhortation of the Dawn!Look to this Day!For it is Life,The very Life of Life.In its brief course lie allThe verities and realitiesOf your Existence;The Bliss of Growth,The Glory of Action,The Splendor of Beauty;For Yesterday is but a Dream,And Tomorrow is only a Vision;But Today well lived makes everyYesterday a Dream of Happiness,And every </summary><link rel='replies' type='application/atom+xml' href='http://alpatrick.blogspot.com/feeds/110305876416696906/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=9582144&amp;postID=110305876416696906' title='2 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/9582144/posts/default/110305876416696906'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/9582144/posts/default/110305876416696906'/><link rel='alternate' type='text/html' href='http://alpatrick.blogspot.com/2004/12/poem-i-liked.html' title='A poem I liked'/><author><name>Alastair Patrick</name><uri>http://www.blogger.com/profile/08547818719982201304</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>2</thr:total></entry><entry><id>tag:blogger.com,1999:blog-9582144.post-110292393176011770</id><published>2004-12-12T23:31:00.000-08:00</published><updated>2004-12-13T00:07:00.640-08:00</updated><title type='text'>Hypocrisy</title><summary type='text'>Yesterday I said that "if it's not C++ then it must be a scripting language" was a false dichotomy. I think I am guilty of a false dichotomy, actually a "false trichotomy". I have been thinking in terms of "C++ and higher level languages". Of course it follows that there should be languages that are lower level than C++. So I am categorizing languages in terms of being C++, being lower level or </summary><link rel='replies' type='application/atom+xml' href='http://alpatrick.blogspot.com/feeds/110292393176011770/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=9582144&amp;postID=110292393176011770' title='4 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/9582144/posts/default/110292393176011770'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/9582144/posts/default/110292393176011770'/><link rel='alternate' type='text/html' href='http://alpatrick.blogspot.com/2004/12/hypocrisy.html' title='Hypocrisy'/><author><name>Alastair Patrick</name><uri>http://www.blogger.com/profile/08547818719982201304</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>4</thr:total></entry><entry><id>tag:blogger.com,1999:blog-9582144.post-110291470963606323</id><published>2004-12-12T21:06:00.000-08:00</published><updated>2004-12-12T23:22:48.266-08:00</updated><title type='text'>Critique of C++</title><summary type='text'>I read this critique of C++. I agree with some of it. I don't think anyone would argue that C++ is perfect. C++ has its problems. And this critique digs deep into every aspect of C++ that might be considered as a failing. However, it was very negative and the author is clearly a highly biased Eiffel advocate so I didn't take it terribly seriously.</summary><link rel='replies' type='application/atom+xml' href='http://alpatrick.blogspot.com/feeds/110291470963606323/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=9582144&amp;postID=110291470963606323' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/9582144/posts/default/110291470963606323'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/9582144/posts/default/110291470963606323'/><link rel='alternate' type='text/html' href='http://alpatrick.blogspot.com/2004/12/critique-of-c.html' title='Critique of C++'/><author><name>Alastair Patrick</name><uri>http://www.blogger.com/profile/08547818719982201304</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-9582144.post-110291237691322040</id><published>2004-12-12T19:55:00.000-08:00</published><updated>2004-12-12T23:31:22.463-08:00</updated><title type='text'>Introspection kicks ass</title><summary type='text'>Roughly 5 years ago I experienced an epiphany. Until that point I had been using C++ for a few years and I was quite confident that although other languages, like Java, had some advantages over C++, they were pretty minor and the better performance of the resulting code made C++ the best language for my problem (writing games). The advantages of Java, as I viewed them then, were essentially these</summary><link rel='replies' type='application/atom+xml' href='http://alpatrick.blogspot.com/feeds/110291237691322040/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=9582144&amp;postID=110291237691322040' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/9582144/posts/default/110291237691322040'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/9582144/posts/default/110291237691322040'/><link rel='alternate' type='text/html' href='http://alpatrick.blogspot.com/2004/12/introspection-kicks-ass.html' title='Introspection kicks ass'/><author><name>Alastair Patrick</name><uri>http://www.blogger.com/profile/08547818719982201304</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-9582144.post-110290654826494876</id><published>2004-12-12T18:22:00.000-08:00</published><updated>2004-12-12T19:26:08.450-08:00</updated><title type='text'>Reinventing the wheel</title><summary type='text'>In thinking about using other languages in games, I can't help but consider inventing a new language tailor made for the higher level aspects of game development. This is exactly what Tim Sweeney did with UnrealScript for the Unreal engine. I have worked on a title that used the Unreal engine and it certainly improved programmer productivity for that project. But what worked for Epic might not </summary><link rel='replies' type='application/atom+xml' href='http://alpatrick.blogspot.com/feeds/110290654826494876/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=9582144&amp;postID=110290654826494876' title='3 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/9582144/posts/default/110290654826494876'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/9582144/posts/default/110290654826494876'/><link rel='alternate' type='text/html' href='http://alpatrick.blogspot.com/2004/12/reinventing-wheel.html' title='Reinventing the wheel'/><author><name>Alastair Patrick</name><uri>http://www.blogger.com/profile/08547818719982201304</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>3</thr:total></entry><entry><id>tag:blogger.com,1999:blog-9582144.post-110290197092295396</id><published>2004-12-12T17:19:00.000-08:00</published><updated>2004-12-12T21:16:43.726-08:00</updated><title type='text'>An empirical comparison of C, C++, Java, Perl, Python, Rexx, and Tcl</title><summary type='text'>If only it was that easy. But, in his paper, this fellow has attempted just that. It's really quite interesting but flawed. I don't want to spoil it for you but what basically happens is he specifies a simple problem and has 80 different programmers independently solve it using whatever language they want. Then he collates the results and analyzes them in terms of programmer productivity, program</summary><link rel='replies' type='application/atom+xml' href='http://alpatrick.blogspot.com/feeds/110290197092295396/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=9582144&amp;postID=110290197092295396' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/9582144/posts/default/110290197092295396'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/9582144/posts/default/110290197092295396'/><link rel='alternate' type='text/html' href='http://alpatrick.blogspot.com/2004/12/empirical-comparison-of-c-c-java-perl.html' title='An empirical comparison of C, C++, Java, Perl, Python, Rexx, and Tcl'/><author><name>Alastair Patrick</name><uri>http://www.blogger.com/profile/08547818719982201304</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-9582144.post-110289209652602478</id><published>2004-12-11T14:24:00.000-08:00</published><updated>2004-12-12T21:37:19.976-08:00</updated><title type='text'>Scripting and false dichotomy</title><summary type='text'>I read this article about scripting languages for games and I thought there was some useful content and some not so useful. Specifically, I found the the comparison of Lua, Ruby and Python quite interesting. But I don't think the author's experience of some of the other languages, or understanding of their problem domain, is insufficient to include them in the comparison.When discussing the </summary><link rel='replies' type='application/atom+xml' href='http://alpatrick.blogspot.com/feeds/110289209652602478/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=9582144&amp;postID=110289209652602478' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/9582144/posts/default/110289209652602478'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/9582144/posts/default/110289209652602478'/><link rel='alternate' type='text/html' href='http://alpatrick.blogspot.com/2004/12/scripting-and-false-dichotomy.html' title='Scripting and false dichotomy'/><author><name>Alastair Patrick</name><uri>http://www.blogger.com/profile/08547818719982201304</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-9582144.post-110289721629829911</id><published>2004-12-05T16:01:00.000-08:00</published><updated>2004-12-12T17:48:00.536-08:00</updated><title type='text'>The state of the art</title><summary type='text'>Before delving too deeply into the potential possibilities of using higher-level languages in games, I'm going to attempt to analyze what the current state of the art is in this area. I'm not going to consider the exceptions like Humongous or Naughty Dog. I'm going to try and focus on which languages the majority of teams are using and where they are applying them. Obviously every team is going </summary><link rel='replies' type='application/atom+xml' href='http://alpatrick.blogspot.com/feeds/110289721629829911/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=9582144&amp;postID=110289721629829911' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/9582144/posts/default/110289721629829911'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/9582144/posts/default/110289721629829911'/><link rel='alternate' type='text/html' href='http://alpatrick.blogspot.com/2004/12/state-of-art.html' title='The state of the art'/><author><name>Alastair Patrick</name><uri>http://www.blogger.com/profile/08547818719982201304</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-9582144.post-110288892321051485</id><published>2004-12-01T12:12:00.000-08:00</published><updated>2004-12-12T19:16:37.566-08:00</updated><title type='text'>Languages and there uses in video games</title><summary type='text'>The more I think about it, the more I think the time is right to start using higher-level languages for games. As an industry, we predominantly use C/C++ as our primary programming language. It is also common to see a scripting languages, such as Lua, used as a mechanism to allow technical designers to customize the behavior of game objects. But these are, on the whole, treated as second class </summary><link rel='replies' type='application/atom+xml' href='http://alpatrick.blogspot.com/feeds/110288892321051485/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=9582144&amp;postID=110288892321051485' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/9582144/posts/default/110288892321051485'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/9582144/posts/default/110288892321051485'/><link rel='alternate' type='text/html' href='http://alpatrick.blogspot.com/2004/12/languages-and-there-uses-in-video.html' title='Languages and there uses in video games'/><author><name>Alastair Patrick</name><uri>http://www.blogger.com/profile/08547818719982201304</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-9582144.post-110288704111460276</id><published>2004-12-01T12:03:00.000-08:00</published><updated>2004-12-12T19:17:01.006-08:00</updated><title type='text'>So I created a blog</title><summary type='text'>That is all.</summary><link rel='replies' type='application/atom+xml' href='http://alpatrick.blogspot.com/feeds/110288704111460276/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=9582144&amp;postID=110288704111460276' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/9582144/posts/default/110288704111460276'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/9582144/posts/default/110288704111460276'/><link rel='alternate' type='text/html' href='http://alpatrick.blogspot.com/2004/12/so-i-created-blog.html' title='So I created a blog'/><author><name>Alastair Patrick</name><uri>http://www.blogger.com/profile/08547818719982201304</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry></feed>
