The Curious Engineer

All blogs / C# / .NET

Fabulous adventures in coding

ericlippert.com

Eric Lippert's blog

C# / .NETCompilersMathGeneralEngineering blogs

Posts
717 from 30 Aug 2003 to 3 Sep 2026
Posting
now and then (3 in the last year)
Kind
personal blog
Feed
https://ericlippert.com/feed/

2026 2

  1. The book is done!
  2. A few minutes with Hanselman

2025 2

  1. Book early-access discount code
  2. I’m writing another book!

2023 8

  1. Bean Machine Retrospective, part 9
  2. Bean Machine Retrospective, part 8
  3. Bean Machine Retrospective, part 7
  4. The names of birds, part 4
  5. The names of birds, part 3
  6. The names of birds, part 2
  7. The names of birds, part 1
  8. Bean Machine Retrospective, part 6

2022 7

  1. Bean Machine Retrospective, part 5
  2. I want toast
  3. Bean Machine Retrospective, part 4
  4. Bean Machine Retrospective, part 3
  5. Bean Machine Retrospective, part 2
  6. Bean Machine Retrospective, part 1
  7. A long expected update

2021 2

  1. Life, part 38
  2. Hey now, you’re an all-star

2020 54

  1. Backyard birds of Seattle
  2. The VSTO startup sequence
  3. Life, part 37
  4. Life, part 36
  5. Introducing Bean Machine
  6. Life, part 35
  7. Life, part 34
  8. Installing windows
  9. Implementing a full fence
  10. Life, part 33
  11. Approximate results may vary
  12. Life, part 32
  13. Socially distant abbreviated summer vacation
  14. Life, part 31
  15. Life, part 30
  16. Life, part 29
  17. Life, part 28
  18. Life, part 27
  19. Life, part 26
  20. Life, part 25
  21. Life, part 24
  22. Comet NEOWISE
  23. Life, part 23
  24. Life, part 22
  25. Life, part 21
  26. Life, part 20
  27. Life, part 19
  28. Life, part 18
  29. Life, part 17
  30. Life, part 16
  31. Life, part 15
  32. Life, part 14
  33. Police brutality in Seattle
  34. Life, part 13
  35. Life, part 12
  36. Life, part 11
  37. Life, part 10
  38. Life, part 9
  39. Life, part 8
  40. Life, part 7
  41. Life, part 6
  42. Life, part 5
  43. Life, part 4
  44. Life, part 3
  45. Life, part 2
  46. Life, part 1
  47. Report thy feat unto Lord British
  48. New grad vs senior dev
  49. Bandits, victims and idiots
  50. Working from home
  51. Passing awaited tasks
  52. Hundred year mistakes
  53. Building a fake company
  54. A Picard Easter egg

2019 64

  1. Work and success
  2. Fixing Random, bonus episode 3
  3. Fixing Random, bonus episode 2: pigeons and the noisy-or distribution
  4. Summer vacation 2019 part four
  5. Summer vacation 2019 part three
  6. Summer vacation 2019 part two
  7. Summer vacation 2019 part 1
  8. Fixing Random, part 40 of 40
  9. Fixing Random, part 39
  10. Fixing Random, part 38
  11. Fixing Random, part 37
  12. Fixing Random, part 36
  13. Fixing Random, part 35
  14. Fixing Random, part 34
  15. Fixing Random, part 33
  16. Porting old posts, part 4
  17. Fixing Random, part 32
  18. Fixing Random, part 31
  19. Applying machine learning to coding itself
  20. Fixing Random, part 30
  21. Fixing Random, part 29
  22. Fixing Random, part 28
  23. Fixing Random, part 27
  24. Porting old posts, part 3
  25. Fixing Random, part 26
  26. Fixing Random, part 25
  27. Fixing Random, part 24
  28. Fixing Random, part 23
  29. Fixing Random, part 22
  30. Porting old posts, part 2
  31. Fixing Random, part 21
  32. Porting old posts, part 1
  33. Fixing Random, part 20
  34. Fixing Random, part 19
  35. Fixing Random, part 18
  36. Fixing Random, bonus episode 1
  37. Fixing Random, part 17
  38. Fixing Random, part 16
  39. Fixing Random, part 15
  40. So long, MSDN blog
  41. Fixing Random, part 14
  42. Fixing Random, part 13
  43. Fixing Random, part 12
  44. Fixing Random, part 11
  45. Fixing Random, part 10
  46. Fixing Random, part 9
  47. Fixing Random, part 8
  48. Fixing Random, part 7
  49. Fixing Random, part 6
  50. Fixing Random, part 5
  51. Exhausting vs exhaustive
  52. Fixing Random, part 4
  53. Fixing Random, part 3
  54. Fixing Random, part 2
  55. Fixing Random, part 1
  56. An interesting list structure, part 3
  57. An interesting list structure, part 2
  58. An interesting list structure, part 1
  59. Indexer error cases
  60. Dual numbers, part 4
  61. Dual numbers, part 3
  62. Dual numbers, part 2
  63. Dual numbers, part 1
  64. Accessibility of nested classes

2018 15

  1. Removing a recursion in Python, part 2
  2. Removing a recursion in Python, part 1
  3. Adventures in podcasting
  4. A dynamic definite assignment puzzle, part 2
  5. Not so fabulous adventures in banking
  6. A dynamic definite assignment puzzle
  7. Anti-unification, part 6
  8. Anti-unification, part 5
  9. Anti-unification, part 4
  10. Anti-unification, part 3
  11. Anti-unification, part 2
  12. Anti-unification, part 1
  13. Unification, part 2
  14. Unification, part 1
  15. That was a long break

2017 21

  1. Excessive explanation, part twenty-four
  2. Excessive explanation, part twenty-three
  3. Excessive explanation, part twenty-two
  4. Excessive explanation, part twenty-one
  5. Happy anniversary Visual Studio!
  6. Excessive explanation, part twenty
  7. Excessive explanation, part nineteen
  8. Excessive explanation, part eighteen
  9. The chess mystery, solved
  10. Why should I be worried about dying?
  11. Excessive explanation, part seventeen
  12. Excessive explanation, part sixteen
  13. Excessive explanation, part fifteen
  14. Excessive explanation, part fourteen
  15. Excessive explanation, part thirteen
  16. Real Americans
  17. Excessive explanation, part twelve
  18. Excessive explanation, part eleven
  19. Excessive explanation, part ten
  20. Excessive explanation, part nine
  21. Excessive explanation, part eight

2016 59

  1. Excessive explanation, part seven
  2. Excessive explanation, part six
  3. Excessive explanation, part five
  4. Another spicy interview
  5. Excessive explanation, part four
  6. Excessive explanation, part three
  7. Impactfulness
  8. I’m on fire!
  9. Excessive explanation, part two
  10. Excessive explanation, part one
  11. Shaft room, again
  12. Ladder room
  13. Coal mine
  14. Gas room
  15. Shaft room
  16. Bat room
  17. Mine entrance
  18. Slide room
  19. Winding passage
  20. Drafty cave
  21. Twisting passage
  22. Mirror room
  23. Hades
  24. Entrance to Hades
  25. Windy cave
  26. White Cliffs Beach
  27. Frigid River, in the magic boat
  28. Dam base
  29. Reservoir North
  30. Reservoir
  31. Maintenance room
  32. Dam
  33. Reservoir south
  34. Studio
  35. Sandy cave
  36. Aragain falls
  37. End of rainbow
  38. Canyon view
  39. Another troll room
  40. Forest edge
  41. Altar
  42. Egyptian room
  43. Temple
  44. Dome room
  45. Round room
  46. Troll room
  47. Cellar
  48. Attic
  49. Living room
  50. Kitchen
  51. Behind house
  52. Up a tree
  53. Like me, on Facebook
  54. Forest path
  55. North of house
  56. West of house
  57. Functional style follow-up
  58. Space oddity
  59. Functional programming for beginners

2015 37

  1. The dedoublifier, part four
  2. The dedoublifier, part three
  3. The dedoublifier, part two
  4. The dedoublifier, part one
  5. Monitor madness, part two
  6. Monitor madness, part one
  7. Logical implication
  8. When would you use & on a bool?
  9. Optimizing associative operations
  10. Inferring from “is”, part two
  11. It’s still essential
  12. Inferring from “is”, part one
  13. Casts and type parameters do not mix
  14. Nullable comparisons are weird
  15. Nature photography
  16. Bottom ten list
  17. One from the road
  18. Interviewing candidates
  19. It’s not magic
  20. Writing code on whiteboards is hard
  21. Ask me anything!
  22. A different copy-paste error
  23. When everything you know is wrong, part two
  24. When everything you know is wrong, part one
  25. Wizards and warriors, part five
  26. Flat-pack sawhorses
  27. Wizards and warriors, part four
  28. Wizards and warriors, part three
  29. Wizards and warriors, part two
  30. Wizards and warriors, part one
  31. DRY out your policies
  32. Long division, part two
  33. Defying gravity
  34. Interview with dev.life
  35. What is the unchecked keyword good for? Part two
  36. What is the unchecked keyword good for? Part one
  37. Too many hobbies

2014 69

  1. Nostalgia, horror, and a very old bug
  2. Traffic light UX
  3. Graph traversal, part four
  4. Graph traversal, part three
  5. Graph traversal, part two
  6. Graph traversal, part one
  7. Producing combinations, part five
  8. Eclipse viewing in Seattle
  9. Producing combinations, part four
  10. Producing combinations, part three
  11. Producing combinations, part two
  12. Producing combinations, part one
  13. Confusing errors for a confusing feature, part three
  14. ATBG: Better than nothing
  15. Confusing errors for a confusing feature, part two
  16. Confusing errors for a confusing feature, part one
  17. ATBG: randomness
  18. Internal or public?
  19. Melting aluminum
  20. Comment commentary
  21. ATBG: Ontogeny, phylogeny and virtual methods
  22. What is up with transparent identifiers? Part two
  23. What is up with transparent identifiers? Part one
  24. Casting: making a green sand mold
  25. Short questions
  26. Analyzing test code
  27. Copy-paste defects
  28. Analysis vs code review
  29. Avoiding C# defects talk Tuesday
  30. ATBG: Delegates and structural identity
  31. Real world async/await defects
  32. London and Budapest
  33. ATBG: Why do enumerators avoid a bounds check?
  34. Funniest Hungarian joke ever
  35. ATBG: Why does my enumerator not advance?
  36. When should I write a property?
  37. What are the fundamental rules of pointers?
  38. ATBG: Why does my code not crash?
  39. Lowering in language design, part two
  40. Moving this blog
  41. Lowering in language design, part one
  42. Random programming
  43. Volcanoes and fried foods (rerun)
  44. ATBG: Warnings vs errors
  45. Heartbleed and static analysis
  46. Standard and Daylight are different
  47. ATBG: Why UTF-16?
  48. Speaking in Los Angeles Monday
  49. C# and VB are open sourced
  50. Reordering optimizations
  51. Find a simpler problem
  52. ATBG: Chinese edition
  53. Can I skip the lock when reading an integer?
  54. High Performance Windows Store Apps
  55. Living with unchecked exceptions, part two
  56. How to debug small programs
  57. Living with unchecked exceptions
  58. Even more video
  59. ATBG: How do exceptions interact with the “using” statement?
  60. Friday fun with Ogden Nash
  61. Math is hard; let’s go shopping
  62. ATBG: How does a lock work?
  63. Past, present, future
  64. Questions from Tuesday’s talk
  65. Live and in person
  66. More video
  67. ATBG: inconsistent equality
  68. Ship it!
  69. What is “duck typing”?

2013 113

  1. Closer is better
  2. Um, no
  3. How much bias is introduced by the remainder technique?
  4. Fighting blind
  5. ATBG: method type inference with multiple interfaces
  6. What I did on my long weekend
  7. The Thien baffle
  8. The A-star interviews
  9. The new Seattle office
  10. ATBG: non-nullable reference types
  11. Coverity analysis and FXCOP
  12. A practical use of multiplicative inverses
  13. Math from scratch, part thirteen: multiplicative inverses
  14. ATBG: de facto and de jure reachability
  15. Math from scratch, part twelve: Euclid and Bézout
  16. Math from scratch, part eleven: integer division
  17. Math from scratch, part ten: integer comparisons
  18. ATBG: null coalescing precedence
  19. Math from scratch, part nine: integer arithmetic
  20. Math from scratch, part eight: integers
  21. Math from scratch, part seven: division and remainder
  22. Happy blogoversary
  23. ATBG: interfaces and increments
  24. Math from scratch, part six: comparisons
  25. Math from scratch, part five: natural subtraction
  26. Testers wanted
  27. How to learn a new programming language
  28. Math from scratch, part four: natural multiplication
  29. ATBG meets math from scratch
  30. Math from scratch, part three: natural addition
  31. Math from scratch, part two: zero and one
  32. Math from scratch, part one
  33. ATBG: Reflection and default parameters
  34. Verbatim identifiers
  35. Higgledy piggledy
  36. ATBG: guess the type
  37. Benchmarking mistakes, part four
  38. ATBG: string extensions and const fields
  39. A contravariance conundrum
  40. What is the type of the null literal?
  41. Why does a foreach loop silently insert an “explicit” conversion?
  42. Why not allow double/decimal implicit conversions?
  43. Ask the Bug Guys
  44. Why are generic constraints not inherited?
  45. Benchmarking mistakes, part three
  46. The psychology of C# analysis
  47. The answer to the string concatenation puzzle
  48. A string concatenation puzzle
  49. String concatenation behind the scenes, part two
  50. A strange rainbow
  51. String concatenation behind the scenes, part one
  52. What’s the difference? sizeof and Marshal.SizeOf
  53. Construction destruction
  54. An integer division identity
  55. What the meaning of is is
  56. Why so fabulous?
  57. The mystery of the inserted method
  58. Benchmarking mistakes, part two
  59. What is lexical scoping?
  60. Quality assurance fail
  61. Spot the defect: rounding, part two
  62. Benchmarking mistakes, part one
  63. Spot the defect: rounding
  64. I have a mysterious fifth sense (rerun)
  65. Producing permutations, part seven
  66. Producing permutations, part six
  67. Mmm, curry
  68. Producing permutations, part five
  69. Producing permutations, part four
  70. Producing permutations, part three
  71. Producing permutations, part two
  72. Producing permutations, part one
  73. That’s a big transistor
  74. Building a tabletop coilgun
  75. Thumbs up
  76. What does the langversion switch do?
  77. Monads, part thirteen
  78. Monads, part twelve
  79. Monads, part eleven
  80. Monads, part ten
  81. Monads, part nine
  82. Keeping it sharp
  83. Monads, part eight
  84. Monads, part seven
  85. Monads, part six
  86. Whidbey Island and bagel mathematics (rerun)
  87. Monads, part five
  88. Monads, part four
  89. Monads, part three
  90. Monads, part two
  91. Monads, part one
  92. Static constructors, part four
  93. Static constructors, part three
  94. Free beer!
  95. Static constructors, part two
  96. Digital pain (rerun)
  97. Static constructors, part one
  98. The view from Columbia Center
  99. The no-lock deadlock
  100. Defect spotting, part two
  101. Defect spotting at the HUB
  102. Integer division that rounds up
  103. Five-dollar words for programmers: elision
  104. Nullable micro-optimizations, part eight
  105. Hummingbird PSA
  106. Nullable micro-optimizations, part seven
  107. Nullable micro-optimizations, part six
  108. First day
  109. The postmodern gumballs (rerun)
  110. Nullable micro-optimization, part five
  111. It’s still essential!
  112. Nullable micro-optimization, part four
  113. Nullable micro-optimization, part three

2012 60

  1. Nullable micro-optimization, part two
  2. Nullable micro-optimizations, part one
  3. Which is faster?
  4. My Kauai vacation
  5. Taking responsibility
  6. Why are braces required in try-catch-finally?
  7. Fabulous adventures
  8. Why is deriving a public class from an internal class illegal?
  9. Dynamic contagion, part two
  10. Dynamic contagion, part one
  11. A method group of one
  12. Is C# a strongly typed or a weakly typed language?
  13. High altitude
  14. Does not compute
  15. How do we ensure that method type inference terminates?
  16. Mistakes were made, part three
  17. Big boxes
  18. Static analysis of “is”
  19. Reduction and oxidization
  20. Mistakes were made, part two
  21. Mistakes were made, part one
  22. Royale With Cheese, plus, dividing temperatures
  23. An “is” operator puzzle, part two
  24. An “is” operator puzzle, part one
  25. Mizzou castable refractory instructions
  26. Wackiness ensues
  27. Out parameters and LINQ do not mix
  28. That’s a big anvil
  29. What If The Crucible Fails?
  30. Refractory cement
  31. How hot will the exterior get?
  32. Avoid Galvanized Metals
  33. Furnace Design Considerations
  34. Should C# warn on null dereference?
  35. Safety Third
  36. Fabulous Adventures In Casting
  37. When is a cast not a cast?
  38. The best advice I ever got
  39. Foolish consistency is foolish
  40. Eric rambles on about C#, again
  41. Implementation-defined behaviour
  42. Persistence, façades and Roslyn’s red-green trees
  43. Past performance is no guarantee of future results
  44. Guid guide, part three
  45. Guid guide, part two
  46. Guid guide, part one
  47. Null is not false, part three
  48. A brief digression
  49. Null is not false, part two
  50. Null is not false, part one
  51. Why not automatically infer constraints?
  52. Why are local variables definitely assigned in unreachable statements?
  53. The solution to the simple puzzle
  54. A simple puzzle
  55. Generating random non-uniform data in C#
  56. Bad metaphors
  57. What is late binding?
  58. What’s the difference between a trenchcoat and a duster?
  59. What is the defining characteristic of a local variable?
  60. Every public change is a breaking change

2011 36

  1. Shadowcasting, part three
  2. Shadowcasting, part two
  3. Shadowcasting, part one
  4. A C# reading list
  5. Keep it secret, keep it safe
  6. Inheritance and representation
  7. What is this thing you call a “type”? Part Two
  8. What is this thing you call a “type”? Part one
  9. The curious property revealed
  10. What curious property does this string have?
  11. Following the pattern
  12. Ref returns and ref locals
  13. Atomicity, volatility and immutability are different, part three
  14. Atomicity, volatility and immutability are different, part two
  15. Atomicity, volatility and immutability are different, part one
  16. Read-only and threadsafe are different
  17. Optional argument corner cases, part four
  18. Optional argument corner cases, part three
  19. Optional argument corner cases, part two
  20. Optional argument corner cases, part one
  21. Maybe there’s something wrong with the universe, but probably not
  22. Implementing the virtual method pattern in C#, part three
  23. Implementing the virtual method pattern in C#, part two
  24. Implementing the virtual method pattern in C#, part one
  25. To box or not to box
  26. Guidelines and rules for GetHashCode
  27. Never say never, part two
  28. Never say never, part one
  29. Looking inside a double
  30. What would Feynman do?
  31. Strange but legal
  32. Curiouser and curiouser
  33. Bad comparisons, part four
  34. Bad comparisons, part three
  35. Bad comparisons, part two
  36. Bad comparisons, part one

2010 11

  1. Why are anonymous types generic?
  2. Debunking another myth about value types
  3. No backtracking, part two
  4. No backtracking, part one
  5. The Truth About Value Types
  6. Is is as or is as is?
  7. Computing a Cartesian product with LINQ
  8. Don’t repeat yourself; consts are already static
  9. Knights, knaves, protected and internal
  10. Socks, birthdays and hash collisions
  11. Continuing to an outer loop

2009 25

  1. What’s the difference between covariance and assignment compatibility?
  2. Closing over the loop variable considered harmful, part two
  3. Closing over the loop variable considered harmful, part one
  4. Simple names are not so simple, part two
  5. Simple names are not so simple, part one
  6. Begging the question
  7. What’s the difference between “as” and cast operators?
  8. String interning and String.Empty
  9. What’s the difference between conditional compilation and the Conditional attribute?
  10. What’s the difference? fixed versus fixed
  11. Arrays of arrays
  12. Four switch oddities
  13. Precedence vs order redux
  14. Color Color
  15. Alas, Smith and Jones
  16. foreach vs ForEach
  17. Reserved and contextual keywords
  18. The Stack Is An Implementation Detail, Part Two
  19. The Stack Is An Implementation Detail, Part One
  20. Restating the problem
  21. Locks and exceptions do not mix
  22. Representation and identity
  23. References are not addresses
  24. Long division
  25. Why no var on fields?

2008 11

  1. Vexing exceptions
  2. Precedence vs associativity vs order
  3. Mutating readonly structs
  4. Covariance and Contravariance, Part 11: To infinity, but not beyond
  5. How to not get a question answered
  6. Why Do Initializers Run In The Opposite Order As Constructors? Part Two
  7. Why Do Initializers Run In The Opposite Order As Constructors? Part One
  8. Immutability in C# Part Eleven: A working double-ended queue
  9. Immutability in C# Part Ten: A double-ended queue
  10. Immutability in C# Part Nine: Academic? Plus my AVL tree implementation
  11. Immutability in C# Part Eight: Even More On Binary Trees

2007 16

  1. Immutability in C# Part Seven: More on Binary Trees
  2. Immutability in C# Part Six: A Simple Binary Tree
  3. Immutability in C# Part Five: LOLZ!
  4. Immutability in C# Part Four: An Immutable Queue
  5. Immutability in C# Part Three: A Covariant Immutable Stack
  6. Immutability in C# Part Two: A Simple Immutable Stack
  7. Immutability in C# Part One: Kinds of Immutability
  8. Covariance and Contravariance in C#, Part 3: Method Group Conversion Variance
  9. Covariance and Contravariance in C#, Part 2: Array Covariance
  10. Covariance and contravariance in C#, part 1
  11. Packet Gnomes
  12. C++ and the pit of despair
  13. An inheritance puzzle, part two
  14. An inheritance puzzle, part one
  15. Why are overloaded operators always static in C#?
  16. Chained user-defined explicit conversions in C#

2006 3

  1. A face made for email, part three
  2. Odious ambiguous overloads, part two
  3. Odious ambiguous overloads, part one

2005 12

  1. Five-Dollar Words for Programmers, Part One: Idempotence
  2. Floating Point Arithmetic, Part One
  3. 250% of What, Exactly?
  4. High-Dimensional Spaces Are Counterintuitive, Part Five
  5. High-Dimensional Spaces Are Counterintuitive, Part Four
  6. High-Dimensional Spaces Are Counterintuitive, Part Three
  7. High-Dimensional Spaces Are Counterintuitive, Part Two
  8. High-Dimensional Spaces Are Counterintuitive, Part One
  9. You Want Salt With That? Part Four: Challenge-Response
  10. You Want Salt With That? Part Three: Salt The Hash
  11. You Want Salt With That? Part Two: We Need A Hash
  12. You Want Salt With That? Part One: Security vs Obscurity

2004 3

  1. The attribute of manliness
  2. What I did on my summer vacation
  3. Customer service is not rocket science

2003 87

  1. Multi-cast delegates the evil way
  2. The JScript Type System Part Eight: The Last Blog Entry About Arrays, I Promise
  3. A grammatical aside
  4. Six out of ten ain’t bad
  5. Speeding can slow you down
  6. Experience required
  7. The JScript Type System Part Seven: Yeah, you’ve probably guessed that I wrote the array stuff
  8. Thin to my chagrin
  9. The JScript Type System, Part Six: Even more on arrays in JScript .NET
  10. The JScript Type System, Part Five: More On Arrays In JScript .NET
  11. The JScript Type System, Part Four: JScript .NET Arrays
  12. The JScript Type System, Part Three: If It Walks Like A Duck…
  13. The JScript Type System, Part Two: Prototypes and constructors
  14. What is the Matrix?
  15. The JScript Type System, part one
  16. Eval is evil, part two
  17. A parable
  18. Eval is evil, part one
  19. Functions are not frames
  20. Global State On Servers Considered Harmful
  21. How many Microsoft employees does it take to change a lightbulb?
  22. JScript Goes All To Pieces
  23. The Most Boring Story Ever
  24. Compatibility vs. Performance
  25. Michael’s Security Blog is online
  26. Attention passengers: Flight 0703 is also known as Flight 451
  27. Making Sense of HRESULTS
  28. Constant Folding and Partial Evaluation
  29. I’m not stringing you along, honest
  30. The Malware of Ultimate Destruction
  31. How Bad Is Good Enough?
  32. Long jumps considered way more harmful than exceptions
  33. VBScript : VB :: ping-pong : volleyball
  34. Dead Trees vs. Bits
  35. I Take Exception To That
  36. Designing JScript .NET
  37. Digging A Security Hole All The Way To China
  38. Wrox is dead, long live Wrox
  39. It Never Leaks But It Pours
  40. What Everyone Should Know About Character Encoding
  41. How Do I Script A Non-Default Dispatch?
  42. Why is there no #include?
  43. WSC vs WSH
  44. Why Can’t I Create The WScript Object?
  45. Spot the defect!
  46. I can’t make my script do nothing!
  47. Eric’s Blog for January 279th, 2003
  48. “With” considered harmful
  49. Let’s Get Explicit!
  50. For-in Revisited
  51. A Little More on Nothing
  52. A Whole Lot Of Nothing
  53. In, Out, In-Out, Make Up Your Mind Already
  54. What could numeric rounding possibly have to do with MS-DOS?
  55. Bankers’ Rounding
  56. More on Certificates and Trust Decisions
  57. Evil Security Twin Powers… Activate!
  58. I’m a traveling man, don’t tie me down
  59. Error messages considered harmful
  60. They call me “LoadPicture Lippert”
  61. Hi, I’m Eric and I’ll be your software developer this evening
  62. JScript eval redux, and some spec diving
  63. Running Me Ragged
  64. “For Each” vs. “for in”
  65. JScript and VBScript Arrays
  66. Why does VBScript have Execute, ExecuteGlobal and Eval?
  67. Arrrrr! Cap’n Eric be learnin’ about threadin’ the harrrrd way
  68. Hard Core Denotational Semantics
  69. Why is it a bad idea to put script objects in Session scope?
  70. How does Active Server Pages use the script engines?
  71. What are threading models, and what threading model do the script engines use?
  72. How Do The Script Garbage Collectors Work?
  73. What are closures?
  74. Are JScript strings passed by reference?
  75. Why do the script engines not cache dispatch identifiers?
  76. What Are “Anonymous Functions” In JScript?
  77. Are JScript strings passed by value or by reference?
  78. Smart pointers are too smart
  79. Eric’s Complete Guide to VT_DATE
  80. Bad Hungarian
  81. What are the VBScript semantics for object members?
  82. More on ByVal and ByRef
  83. Cannot use parentheses when calling a Sub
  84. Why does JavaScript have rounding errors?
  85. What’s up with Hungarian Notation?
  86. Eric’s complete guide to BSTR semantics
  87. Fabulous Adventures!