4 ms·
> privileges parts of the standard library It really doesn't. Maps and channels are not part of the stdlib. They're part of the language, but not the library.
by TheDong 8y ago
> privileges parts of the standard library
It really doesn't. Maps and channels are not part of the stdlib. They're part of the language, but not the library.
Similarly, range is part of the language, not the stdlib.
If the stdlib was privileged, "container/*" in it would be generic, but it's not.
- quotemstr 8y agoAll right, but my point stands. Maps and channels should be part of stdlib, and they should rely on primitives available to user code too.
- tptacek 8y agoMaps and channels are not part of the standard library. How you know that is, you can replace the entire standard library, using none of it, and still be programming in Go with maps and channels.
- coldtea 8y agoParent wrote "should be" not "are".
- thefounder 8y agoSuch primitives would bring a lot of complexity which is something Go tried to avoid. Consider that make, map, chan etc are just language features/specs just like int64, string, func, main etc
- quotemstr 8y agoWhy should string be fundamental?
- tptacek 8y agoNobody said it "should" be. It simply is, in Go, the language we're discussing. If you nerdsnipe an HN thread with an argument that there's no difference between a language, its runtime, and its standard library, people are going to pile on to point out that's not true.
- sagichmal 8y agoCould, sure. Should? I think you are asserting facts that are not in evidence.
- uryga 8y agoI'm a bit confused, and I'd like to understand your position better. I can see why arrays, structs/tuples, or [tagged] unions are usually primitives – they sort of express different fundamental layouts of data in memory, so they need support from the runtime/compiler. In the case of Go, channels also make sense as a primitive – as I understand it, `select` requires scheduler support. But higher level data structures like lists, sets, maps etc. are all implemented using those primitives under the hood. So, especially in a "systems language", I would sort of expect them to just be libraries in the stdlib, not language features[1]. But if you think otherwise (or see a gap in my reasoning) I'd love to hear why! [1] Except maybe some syntactic sugar for list/dict/set literals.
- TheDong 8y ago> But higher level data structures like lists, sets, maps etc. are all implemented using those primitives under the hood In Go you don't have generics as a primitive with which to build those things. As a result, you don't have the building blocks for anyone to build a usable data structure unless it's baked into the core of the language.
- uryga 8y agoI'm aware of that, and I read the generics proposal linked. I commented here because I wanted to respond to this: > Should [be just libraries]? I think you are asserting facts that are not in evidence. I tried to describe why I feel that go's collections should be libraries and not builtins, and hopefully understand why GP seemed like they were questioning that idea.
- sagichmal 8y ago"Should" implies some normative assignment of value. > But higher level data structures like lists, sets, maps etc. are all implemented using those primitives under the hood. So, especially in a "systems language", I would sort of expect them to just be libraries in the stdlib, not language features[1]. Maybe! But if those higher order structures are closer to language features than libraries -- and, specifically to this conversation, if they leverage parts of the runtime that aren't available to mere mortals -- is it a strictly worse outcome? I don't know. Some evidence might suggest yes. But I think it's at best arguable.