Я обменивался электронными письмами со знакомым, который был большим поклонником Kotlin, Clojure и Java8, и спросил его, почему бы не Scala. Он предусмотрел множество причин (Scala слишком академичен, слишком много функций, не в первый раз, когда я это слышу, и я думаю, что это очень субъективно) но его самой большой точкой боли было в качестве примера, что ему не нравится язык, на котором он не может понять реализацию основных структур данных, и он привел LinkedList в качестве примера.
Я взглянул на scala.collection.LinkedList
и подсчитал то, что я понимаю или немного понимаю.
- CanBuildFrom - после некоторого усилия я получаю его, типа классов, а не самой длинной записью о самоубийстве в истории [1]
- LinkedListLike - я не помню, где я его читал, но я убедился, что это по уважительной причине.
Но потом я начал смотреть на эти
- GenericTraversableTemplate - теперь я тоже царапаю голову...
- SeqFactory, GenericCompanion - ОК, теперь вы потеряли меня, я начинаю понимать его точку.
Может кто-то, кто это хорошо понимает, объясняет GenericTraversableTemplate
SeqFactory
и GenericCompanion
в контексте LinkedList? Для чего они нужны, какое влияние на конечный пользователь у них есть (например, я уверен, что они там по уважительной причине, в чем причина?)
Есть ли они по практической причине? или это уровень абстракции, который мог бы быть упрощен?
Мне нравятся коллекции Scala, потому что мне не нужно понимать внутренности, чтобы иметь возможность эффективно их использовать. Я не возражаю против сложной реализации, если это помогает мне упростить мое использование. например Я не против платить цену сложной библиотеки, если я получаю возможность писать более чистый более элегантный код, используя его взамен. но он будет уверен, что лучше понять это.
[1] - Является ли библиотека коллекций Scala 2.8 "самой длинной записью о самоубийстве в истории" ?