Meta programming in C#


I've seen a few posts flying round between Ivan (1,2)
and Ayende (1) re: meta programming in C# and the implications of it being a statically typed / pre compiled language...

It's an interesting thought, but I can't help wondering if implementation of a rich meta-programming environment in C# - allowing changes at both a class and instance level at run-time - wouldn't go against the original spirit of the language itself, for me at least I'd be looking for a different language if I yearned for meta programming on a daily basis... one that was built from the ground up with my desires in mind.  Take a moment to consider if C# had been built with meta-programming in mind from the outset, would we have bothered with declarative attributes?... ruby seems to get on fine without them (well at least until you try to integrate ruby with Java or .Net libraries)... and what about interfaces, what's the point of them?

Language spirit is an interesting thing - I don't think it's something intangible (this is science after all), but often it's something that's difficult to put into words, because it's a feeling coming up from a rapid and subconscious judgement call as you work with a language (ah la Blink) - it's also something that's difficult to appreciate until you start sitting down and thinking about writing a programming language of your own (what you haven't? For shame!)... and it builds an immediate appreciation for languages like C# and ruby and there founders - there are lot of difficult decisions, compromises and reasonable defaults that need to be decided on - and a massive amount of jiggling to make sure it all fits well together - so that you can finally identify the essence of the language - and worst of all you're not just having to satisfy your internal subconscious judgement calls, but a large audience in the development community, so that your language will be adopted by people because it feels "right" to them.

I still gravitate towards  programming language pragmatics as a good book for examining the spirit of languages throughout the years and guises - it's definitely a book computer science student's should all be armed with on their first year, though I doubt many will be interested in the nuances of Fortran today.

Now, following up on that - I'd like to contrast meta programming with functional programming... are we in need of meta programming as we move towards a more functional approach by necessity (to reduce the overall complexity of software, and take better advantage of existing/emerging hardware by working at a higher level of abstraction, allowing for judgment to be made on our behalf i.e. about parallelization) and what makes more sense for a language like C#?

Personally I see C# moving more and more towards providing a pleasant bridge language between the imperative world and the purely functional word (weighed in favour of the imperative world, where as F# is weighed in favour of the functional world) ... and as such it makes more sense to me at least to draw inspiration from that domain, then dynamic languages and meta programming... just my opinion of course.

Given the time frames between C# versions - IronRuby should be mature enough by the time c# arrives that it should be a moot concern, and IronPython is already pretty capable in the meta programming stakes as well, if you can hack the whitespace sensitivity.

Funnily enough (and this a bold claim I know :) - but I think the pattern matching support and associated features in F# would prove far more valuable tools for solving many of my day to day problems in C# than meta programming would be, when I take a subjective look at the code I write and the goals it's generally trying to achieve combined with the existing features and practices I've already embraced in C# (IoC/DI) it looks to "click" together in a much more cohesive manor. Thoughts?

Read More

Architecture now next Thursday

Just a quick note that the Architecture chat that was scheduled for this thursday is going to be postponed until Next Thursday (December 6th) because I'm unavailable this week.

I'll post about it and email the user group (for you non-subscribing philistines :) next week to remind you all.

See you all next week!

Read More

Architecture Chat Next Week

I'm not going to be around Thursday next week to host the architecture chat...

There are a couple of options:

  • The show goes on as usual, and someone else can flick me a brief summary.
  • We reschedule for another day (Wednesday or Friday)
  • Have it the following Thursday (December 6)

Let me know what everyones preferences are...


- Alex

Read More

Enterprise Architect Syposium

For those that are interested, there is an Enterprise Architect Symposium being held in Auckland and Wellington at the end of this month (Thursday 29th November in Auckland, and Friday 30th November in Wellington) - click on the image or link above to see a schedule or to register interest.

There are some interesting nuggets there for an architect/analyst, especially around model driven architecture/generation and UI/UX prototyping - with people presenting from Sparx Systems in Australia (the company which develops Enterprise Architect), Catch Limited and a number of business in New Zealand including the North Shore City Council and IAG.

Read More

Sharepoint Hacks - field visibility

I've had a few people trying to use the replacement New/Edit list form hack I posted a  week or  two ago, and struggling to get the correct set of fields to display so I've written a couple of followup wiki entries:

Hopefully these will prove useful for anyone trying to make use of these hacks, and provide enough hints to implement something functional with the code snippets.
Read More