Actually, name just one that has either, even today!
Actually, name just one that has either, even today!
One of the earliest high level languages with powerful concurrency and parallelism APIs are C# and F# (TPL and Parallel/PLINQ, some of which was available back in 2010).
EDIT: Since its 1.0 release in 1996
Java interfaces must be implemented explicitly (they're nominal).
Go interfaces are automatically satisfied by any type that declares matching methods (similar to protocols in other languages) (they're structural).
I'm not sure how significant the nominal vs structural distinction even is. In Go, a struct can implement an interface without declaring it, but the programmer still needs to deliberately write the struct to conform to the definition of the interface, so they're still coupled, just not explicitly [1]. Yes, it is possible to define a new interface which fits existing structs which weren't designed for it - but how common is that? That is, how common is it for two or more structs to have a meaningful overlapping set of methods without being designed to conform to some pre-existing interface?
[1] which is obviously a bad thing
> That notion quickly grew into the idea that value types had behaviors, defined as methods, and that sets of methods could provide interfaces that functions could operate on. Go's interfaces arose pretty much right away.
If you replace Go with Java, this would've accurately described Java ~30 years ago.
> Making interfaces dynamic, with no need to announce ahead of time which types implement them
https://devblogs.microsoft.com/oldnewthing/20191011-00/?p=10...
As the review Chen links discusses, it turns out that M:N threading (i.e. goroutines) and good C compatibility are mutually exclusive. Go went one way, every other language went the other way. The most common alternative is stackless coroutines, which are much more widely implemented than the Go model.
> DO NOT USE FIBERS!
And being for Windows, Delphi had full access to Win32 API.
[1]: https://docwiki.embarcadero.com/RADStudio/Sydney/en/Using_In...
[2]: https://en.wikipedia.org/wiki/History_of_Delphi_(software)#B...
edit: Concurrency, not the language itself. That was mature.
A lot of work went into optimizing Go's GC to be able to cope with concurrency.