Tim, in your implementation you are assuming all possible types for x implement some operation performed inside the 'no do something with x' comment. Just making this assumption explicit allows solving the problem in a type-stable manner. Consider the following:
alias NumberArray union(Array{Int64,1}, etc. could use a macro to iterate over Number subtypes, or be defined in Base. function read_x_in_files(filenames) x::Numberrray for fn in filenames read!(x, fn, "x") # now do something with x end end read_x_in_files(("file1.jld", "file2.jld")) The above solution is just as fast (or faster) than the type-unstable one, while being type stable, statically checkable before compilation. If the type of x actually doesn;t support any needed opertaion the runtime error would be raised in the 'read!' call. In the type-stable implementation it could be raised in the exact place where you are trying to use the unsupported operation, this could be anywhere inside the function. Here you have a version that handles all possible error at runtime: function read_x_in_files(filenames) x::Numberrray for fn in filenames try read!(x, fn, "x") catch typeerror message("skipping file "*fn*" because it contains an incompatible type") continue end # now do something with x end end Doing the same today is harder. Another solultion would be to just keep it type unstable inside a global scoped macro instead of a function, or inside a function tagged as type unstable. Mike, What is so special about Markdown.jl? I know of Markdown parsers implemented in statically typed languages (all 100% type stable) which are small, efficient and flexible. See for e.g. https://github.com/mfp/ocsiblog/blob/more-markdown-compat/simple_markup.ml which uses ~250 LOCs for parsing and another ~50 for rendering to HTML. Its said to be faster than discount which is written in C. Also how compliant is the Markdown.jl implementation? There are many shortcuts you can do to increase performance and code size/simplicity vs fully correct behavior. I know of a few fast parsers which seem type stable, for e.g. Python mistune, here: http://mistune.readthedocs.org/en/latest/ Anyway, the fastest Markdown must be sundown? (what github uses is based on this one) its fully compatible, and type stable, and its 2K lines but in C. I could simply traslate one of those, or even your implementation. I did skimmed it coarsely but didn't find any obvious type instabilities anyway... these can be hard to find even using tools Now I guess I'll just conclude my point like this: Type instability isn't really about speed. It's about reliably being able to modify your program when it gets bigger. At work (a corporate one) I was once promoting the use of Python, and I was always demonstrating how it is fast enough. I presented Numba, Cython, IO bound applications, etc. It took me a long time to understand that what people were really looking for is type-checks. its like an always sync'd documentation. It enables efficient refactoring, it compliments testing. I don't like the terms 'dynamic' and 'static' to describe languages. I much prefer 'interactive' and 'stable typed'. These seem more orthogonal concepts. In fact stable typed languages could still be interactive, and please don't think they are not flexible. We still have multiple dispatch, macros, eval at global scope, etc. I think Julia is very good just as it is now, and it allows for many static checks to be performed, at least way more than other "dynamic" (or "interactive") languages) like Python allow. Just please lets keep type instability to a minimum within the language and standard library. Lets also actively encourage type stability, all within the reasonable of course :) Can we all agree on this?