> On Jan 6, 2016, at 10:30 AM, Don Wills <don.wi...@portablesoftware.com> wrote:
> 
> The cost of !, ? and ?? everywhere in the language is a huge coding and 
> maintenance inconvenience for the programmer error condition referencing a 
> variable that contains the value null.

It’s not so much about null, as it is about whether a variable definitely 
contains a value or not. (You can have optionals for non-pointer types like 
ints.) It’s not what you’re used to. Some Mac/iOS programmers have been 
complaining because the bindings to Cocoa APIs were suboptimal and exposed a 
lot of optionals where they didn’t need to.

Basically this argument is like a JavaScript or Python programmer looking at 
Java or C# and complaining that static typing adds a huge coding and 
maintenance inconvenience with all those type declarations and casts. No, not 
really, and it has a ton of benefits to safety; it’s just not what they’re used 
to.

> The fact that you claim Ints are primitives and Loïc Lecrenier in an email 
> three minutes prior writes "Swift does not have primitives, but I consider 
> that a plus..."  Which is it?

I’m not sure what Loïc meant; maybe he can explain. Ints are primitives in that 
they are basically the same as ints in C or C++. They’re inline values of 1 to 
8 bytes size that can be stored on the stack or inside structs/classes. I 
believe there’s some transparent boxing that goes on if you cast an int type to 
an Any value, but it’s more common to use generics for this.

Note that an Array<Int> is vastly more efficient than the Java equivalent, 
because the generated code will store the int values directly instead of boxing 
them up as objects. That is, a Swift Array<Int> is comparable in implementation 
and performance to a C++ std::vector<int> or a C int[].

> Swift doesn't have exceptions?  What are the "throws" clause on funcs and the 
> try and throw statements?

Please read the book! Swift error handling is syntactic sugar around the 
practice of having a function return a flag value on failure (false / nil / 0 / 
etc) combined with an ‘out’ parameter that will store an error object 
describing the failure. There is no stack unwinding going on.

 This convention has been used for a long time in the Cocoa frameworks and 
Swift basically bakes it into the language syntax, with some improvements. I 
think it’s an excellent compromise — the typical try/catch exception mechanism 
is very flexible but makes exceptions very expensive to throw and bloats the 
code to add all the metadata tables to handle recovery.

> I come from the perspective of 45 years of experience in dozens of 
> programming languages.  Swift seems to be trying to be everything to 
> everybody - a bridge from Obj-C, functional, imperative, procedural, 
> object-oriented with a somewhat Java and C-like syntax.

*Shrug* If we’re comparing, I’ve got about 38 years’ experience if you count 
Tiny BASIC as a language. I don’t see Swift as having a kitchen-sink approach 
at all; keep in mind that it’s designed by people with a lot of experience 
designing and implementing languages that are heavily used for very pragmatic 
application and system programming.

I don’t know if you’ve been following the field of statically-compiled 
languages, but there’s been a lot of innovation recently after a long drought. 
Look at Rust and Go, for example. Both are subject to the same objections you 
made above. I just see it as language designers learning from the past and 
adopting new techniques that prove valuable.

Anyway, if there’s one thing I can leave you with, it’s: Read The Fine Manual. 
Swift came equipped from day one with a very well-written book that explains 
the language quite well. I don’t think you’ve read it, or if you did, it was 
much too quickly, because you’ve missed some fundamental points. There’s 
nothing wrong with skimming, but it doesn’t give you the authority to dismiss a 
language outright or make pronouncements about why it’s broken.

—Jens
_______________________________________________
swift-users mailing list
swift-users@swift.org
https://lists.swift.org/mailman/listinfo/swift-users

Reply via email to