Hacker News new | ask | show | jobs
by CmonDev 4400 days ago
"Protocols get to play double duty as either concrete types (in which case they denote a reference type you can acquire with as from any supporting type) and as type constraints on type parameters in generic code. This is a delightful convenience Rust stumbled into when designing its trait system and I'm glad to see other languages picking it up. I'm sure it has precedent elsewhere." - C# again.

PS: Apple says "Swift is an innovative new programming language"! Just like everything else they do lately!

3 comments

This is what annoyed me most about the whole Swift presentation. Swift is not in any way shape or form innovative, in terms of language features or design. It is however, another language that aims to be as productive as possible, while still being safe, like Java, C#, Rust, Go etc.

It'd be far more interesting to compare it to them (especially where they have bindings for iOS e.g. Java, C#) in terms of productivity, code maintainability, readability etc, instead of in terms of language features.

Haskell has it for its type classes in the form of existentials[1] too:

  forall a. SomeClass a => a
in Haskell is quite similar to

  &SomeTrait
in Rust.

[1] http://www.haskell.org/haskellwiki/Existential_type

I pretty much only know Java and shell script. Could someone perhaps explain what this "double duty" is? A small example would be really helpful.
// protocol = interface

interface ISample { void Process(); }

ISample sample = new ConcreteSample(); // Duty #1

class GenericSampleProcessor<T> : where T : ISample // Duty #2

{ public void Process(T sample) { sample.Process(); } }

Ah, i see, thanks.

It's the same in Java:

  ISample sample = new ConcreteSample(); // Duty #1

  class GenericSampleProcessor<T extends ISample> // Duty #2
Java got generics in 1.5, released September 2004, and bounded types like this were in that release. C# got generics in 2.0, released in November 2005, and i imagine it had them too. I assume Java lifted this idea from elsewhere. I am really quite surprised that Mr Hoare thinks this is a novel discovery in Rust.