Julia 1.0
I&#x27;m sure this is too late to get much visibility, but I recently looked into using Julia (for my MS thesis) and found it sorely lacking in one major way that I found unforgivable.<p>Their type system is pretty interesting, and allows for some really cool abilities to parameterize things using types. I&#x27;d like to have seen more work done on, effectively, strong typedefs (or whatever $lang wants to call them). However that sort of thing is fairly uncommon so it&#x27;s hard to hold it against them too much.<p>The biggest issue, and one they seem unwilling to really address, is that actually using the type system to do anything cool requires you to rely entirely on documentation which may or may not exist (or be up-to-date).<p>Each type has an entirely implicit interface which must be implemented. There is no syntax to mark which methods must be present for a type. No marker for the method definitions, no block where they must be named, or anything like that. You can&#x27;t even assume you&#x27;ll find all the interface methods defined in a single file because they can appear literally anywhere.<p>Whoever wrote the type has in mind some interface, a minimal set of methods, that <i>must</i> be present for any derived type. There are only two possible ways to determine this. The first is to look to the documentation. Even for the basic types defined by Julia this documentation doesn&#x27;t seem to exist for all types. I don&#x27;t have high hopes for most libraries to provide, and keep up to date, this documentation either. This concern gets even greater when considering the focus is largely on scientific computing.<p>Without up-to-date documentation, the only option is to manually review every file in a library and keep track of the methods defined for the type you&#x27;re interested in. With multiple dispatch, you can&#x27;t even get away with just checking the first parameter either. Then you need to look at the definitions for those methods to narrow your list down to the minimal set required. This is not an easy task.<p>This issue has been brought up before and discussed, but nobody seemed very interested in it. This is a fairly major issue in my view, as it cripples the otherwise very interesting type system. As it stands, it seems to be a fairly complex solution to the issue of getting good compiled code out of a dynamic language. It could be so much more.