F# Scripting, .NET 4.0 and Mixed-mode assemblies

Jomo Fisher—There is a nice F# and DirectX demo that has been floating around for a while now. A recent version can be found here: http://code.msdn.microsoft.com/fsharpsamples/Wiki/View.aspx?title=Home&version=2 One of the recent problems we’ve seen is that, because of the support for side-by-side runtimes, .NET 4.0 has changed the way that it binds to older mixed-mode assemblies….


F# Performance Tweaking

Jomo Fisher—I’ve enjoyed reading the blog series on F# and game development here.  Joh had posted an example of F# of using RK4 and showed some performance numbers comparing F# to C++ and OCaml. Don Syme had been reading too and asked if anyone on the F# team wanted to take a stab to see…


LINQ to SQL Beta2 Performance Numbers and the Dynamic Compilation Pattern

Jomo Fisher–Rico Mariani has been posting about LINQ to SQL perfomance and has finally posted the performance numbers for Beta2: http://blogs.msdn.com/ricom/archive/2007/07/05/dlinq-linq-to-sql-performance-part-4.aspx One of the tricks Rico and Matt Warren used to get this stellar performance was to generate IL at run time. I learned this design pattern from Matt and used it on a completely…


Why Symmetric Multicore is a Dead End for PCs

Jomo Fisher–There are two kinds of programming problems—those that can run in parallel and those that can’t. There’s no special sauce that can turn an inherently serial problem into an efficient parallel algorithm. Today’s top-end desktop has eight cores spread across two processors. All of the cores are identical and they’re each as fast and…


Dealing with Linq’s Immutable Expression Trees

  Jomo Fisher –I recently got a question via my blog that dovetailed nicely with something I’ve been working on: I know that expression trees are (or at least appear to be) immutable – which requires that you rewrite the entire tree if you want a tree that is similar, but not the same as,…


Visitor Revisitted: LINQ, Function Composablity and Chain of Responsibility

Jomo Fisher—Last time, I wrote about constructing an inline visitor using new C# language features. It worked fine for what it did, but it completely falls down when you want to extend existing visitors that you’ve created. What if I wanted to modify the PrintTree delegate to print negative numbers inside parentheses? There’s not a…


Inline Visitor Construction using LINQ

Jomo Fisher—My current job is in the C# team working on LINQ to SQL. Because of nature of programming languages, very few days go by that I don’t deal with syntax trees and the visitor pattern. Occasionally, it would be convenient to create a quick one-off visitor for doing a manipulation on a tree.  It…


Fast Switching with LINQ

Jomo Fisher—I’ve run into a performance problem several times in my career that I’ve never found a truly satisfying answer for until now. The problem can be distilled down to this: Look up a value based on a string key. The set of strings is fixed and no unknown key values can occur. Consider my…


C# 3.0 Expression Trees

IanG gives a brilliant explanation of C# 3.0 expression trees and how they enable efficient queries in DLinq: http://www.interact-sw.co.uk/iangblog/2005/09/30/expressiontrees   This posting is provided “AS IS” with no warranties, and confers no rights.


Creating Custom Aggregate Functions in LINQ

Jomo Fisher—Adriane asks whether it’s possible to create your own aggregate function like Sum, Avg, Count, etc. For object queries, the answer is yes. First, let’s look at the actual implementation of Sum:   public static int Sum(this IEnumerable<int> source) {     int sum = 0;     foreach (int v in source) sum += v;…