Fabulous Adventures In Coding
Eric Lippert's Erstwhile Blog
Immutability in C# Part Four: An Immutable Queue
An immutable queue is a bit trickier than an immutable stack, but we’re tough, we can handle...
Author: Eric Lippert Date: 12/10/2007
Immutability in C# Part Two: A Simple Immutable Stack
Let’s start with something simple: an immutable stack. Now, immediately I hear the objection:...
Author: Eric Lippert Date: 12/04/2007
Immutability in C# Part One: Kinds of Immutability
I said in an earlier post that I believe that immutable objects are the way of the future in C#. I...
Author: Eric Lippert Date: 11/13/2007
Covariance and Contravariance in C#, Part Ten: Dealing With Ambiguity
OK, I wasn’t quite done. One more variance post! Smart people: suppose we made...
Author: Eric Lippert Date: 11/09/2007
A Couple Links
Just two unrelated links today. First, Raymond's post today reminded me of one of my favourite lines...
Author: Eric Lippert Date: 11/07/2007
C# 3.0 Return Type Inference Does Not Work On Method Groups
UPDATE: A lot of people have linked to this article which is somewhat out of date now. This article...
Author: Eric Lippert Date: 11/05/2007
Covariance and Contravariance in C#, Part Nine: Breaking Changes
Today in the last entry in my ongoing saga of covariance and contravariance I’ll discuss what...
Author: Eric Lippert Date: 11/02/2007
Covariance and Contravariance in C#, Part Eight: Syntax Options
As I discussed last time, were we to introduce interface and delegate variance in a hypothetical...
Author: Eric Lippert Date: 10/31/2007
Covariance and Contravariance in C#, Part Six: Interface Variance
Over the last few posts I’ve discussed how it is possible to treat a delegate as contravariant...
Author: Eric Lippert Date: 10/26/2007
Covariance and Contravariance In C#, Part Five: Higher Order Functions Hurt My Brain
Last time I discussed how we could in a hypothetical future version of C# allow delegate types to be...
Author: Eric Lippert Date: 10/24/2007
Covariance and Contravariance in C#, Part Four: Real Delegate Variance
In the last two posts I discussed the two kinds of variance that C# already has -- array covariance...
Author: Eric Lippert Date: 10/22/2007
Covariance and Contravariance in C#, Part Three: Method Group Conversion Variance
Last time I discussed how array covariance is broken in C# (and Java, and a number of other...
Author: Eric Lippert Date: 10/19/2007
Covariance and Contravariance in C#, Part Two: Array Covariance
C# implements variance in two ways. Today, the broken way. Ever since C# 1.0, arrays where the...
Author: Eric Lippert Date: 10/17/2007
Covariance and Contravariance in C#, Part One
I have been wanting for a long time to do a series of articles about covariance and contravariance...
Author: Eric Lippert Date: 10/16/2007
Path Finding Using A* in C# 3.0, Part Four
Finally we are ready to translate our pseudocode into C# 3.0. What do we need to make the algorithm...
Author: Eric Lippert Date: 10/10/2007
Path Finding Using A* in C# 3.0, Part Two
In order to implement the A* algorithm in C# 3.0 I am going to need to implement some custom data...
Author: Eric Lippert Date: 10/04/2007
Psychic Debugging, Part Two
A number of readers have the mysterious fifth sense which gives them the ability to deduce that the...
Author: Eric Lippert Date: 09/06/2007
Psychic Debugging, Part One
Here is a compiler bug report I got the other day. The user is trying to write a unit test for a...
Author: Eric Lippert Date: 09/05/2007
Future Breaking Changes, Part Three
As I said earlier, we hate causing breaking changes in our product, the C# compiler, because they...
Author: Eric Lippert Date: 09/04/2007
Future Breaking Changes, Part Two
Last time I mentioned that one of the subtleties of programming language design is weighing the...
Author: Eric Lippert Date: 08/31/2007
Future Breaking Changes, Part One
We on the C# team hate making breaking changes. As my colleague Neal called out in his article on...
Author: Eric Lippert Date: 08/30/2007
Talking About The Weather, Part One
No technology today; just talking about the weather. I love talking about the weather. I mentioned...
Author: Eric Lippert Date: 08/02/2007
An Inheritance Puzzle, Part Two
Today, the answer to Friday's puzzle. It prints "Int32". But why? Some readers hypothesized that M...
Author: Eric Lippert Date: 07/30/2007
An Inheritance Puzzle, Part One
Once more I have returned from my ancestral homeland, after some weeks of sun, rain, storms, wind,...
Author: Eric Lippert Date: 07/27/2007
What exactly does 'lifted' mean?
(Note: all type placeholders S, T, U that I mention in this article are non-nullable value types.) I...
Author: Eric Lippert Date: 06/27/2007
Inside or Outside?
Here's a question I was asked recently which I got wrong. This is why I always encourage...
Author: Eric Lippert Date: 06/25/2007
Calling static methods on type parameters is illegal, part three
There were lots of good comments on my previous entries in this series. I want to address some of...
Author: Eric Lippert Date: 06/21/2007
Calling static methods on type parameters is illegal, part one
A developer passed along a question from a customer to our internal mailing list for C# questions...
Author: Eric Lippert Date: 06/14/2007
Bad Names
Over the past year and a half of working on the C# compiler we’ve refactored a lot of crufty...
Author: Eric Lippert Date: 06/12/2007
FYI: C# and VB Closures are per-scope
This post assumes that you understand how closures are implemented in C#. They're implemented in...
Author: Eric Lippert Date: 06/06/2007
Should we produce warnings for unused/uninitialized internal fields?
You may have noticed as you've been developing C# applications that if you have an internal field of...
Author: Eric Lippert Date: 05/15/2007
Why are overloaded operators always static in C#?
A language design question was posted to the Microsoft internal C# discussion group this morning:...
Author: Eric Lippert Date: 05/14/2007
Even More Conversion Trivia, Part Two
Reader Barry Kelly came up with the solution I was thinking of for my trivia question yesterday. If...
Author: Eric Lippert Date: 05/01/2007
Even More Conversion Trivia
I learn something new about C# every day. This is a subtle and tricky language. Pop quiz: foo is of...
Author: Eric Lippert Date: 04/30/2007
Write-only variables considered harmful? Or beneficial?
I haven't forgotten that I promised to describe one more place where we insert an explicit...
Author: Eric Lippert Date: 04/23/2007
Chained user-defined explicit conversions in C#, Part Three
Jeroen Frijters knew the answer to my challenge of last time: how is it that Foo foo = new Foo();...
Author: Eric Lippert Date: 04/20/2007
Chained user-defined explicit conversions in C#, Part Two
Reader Larry Lard asks a follow-up question regarding the subject of Monday’s blog entry. Why...
Author: Eric Lippert Date: 04/18/2007
Chained user-defined explicit conversions in C#
Reader Niall asked me why the following code compiles but produces an exception at runtime: class...
Author: Eric Lippert Date: 04/16/2007
News flash: Instances of anonymous types will be immutable
I've been meaning to write a blog post about a recent design change that we've made here on the C#...
Author: Eric Lippert Date: 04/13/2007
Practice thinking like a compiler tester, part three
Yesterday I posed a slightly harder version of the puzzle I posted the day before. Reader Steve...
Author: Eric Lippert Date: 04/12/2007