I downloaded and built the latest compiler, which would be this:
Swift version 5.6-dev (LLVM ae102eaadf2d38c, Swift e7342eb87849367)
Target: aarch64-unknown-linux-gnu
I then wrote a simple program , and I wonder if I have forgotten Swift already after a time spent writing C++.
Should this actually be giving an error?
var dict : [AnyHashable: Any]!
dict["asdf" ] = 3
dict[3] = "asdf"
for (key,val) in dict {
print ("\(key) -> \(val)")
}
This produces:
foo/foo.swift:5: Fatal error: Unexpectedly found nil while implicitly unwrapping an Optional value
It took me an untrivial amount of time (more than a few seconds, maybe it's too late here) to spot the error in the original example. And I don't want to derail this thread, but I couldn't help but think that, well, this is a point in favor of "Pre-pitch: remove the implicit initialization of Optional variables" in my book...
Most pitches for removing the implicit Type? initialization leave IUO behavior in place, as the IUO feature is supposed to have this behavior. Otherwise it would be pretty useless.
I think the problem is single-character modifiers. Back in the days of old, I think there was a language that used a lot of them, perhaps APL? They had single characters for intuitive things like sqrt function, and many symbols that people found unintuitive like a triangle symbol.
Coming as I recently am from C++, the precise meaning of the "!" modifier might may have slipped my memory, especially since memory management in C++ is partly DIY.