Почему карты в Go являются встроенным типом?
По той же причине, что и строки: это важная структура данных, обеспечивающая отличную реализацию с синтаксической поддержкой, делающая программирование более приятным. Создатели Go считают, что реализация карт в Go достаточно сильная, чтобы служить для подавляющего большинства применений. Если конкретное приложение может извлечь выгоду из пользовательской реализации, тогда есть смысл написать такую реализацию, но это будет не так удобно синтаксически; это кажется разумным компромиссом.
Почему карты не допускают использование срезов в качестве ключей?
Для просмотра карты требуется оператор равенства, который срезы не реализуют. Они не реализуют равенство, потому что равенство плохо определено для таких типов; есть несколько соображений, касающихся поверхностного и глубокого сравнения, сравнения указателя и значения, как работать с рекурсивными типами и так далее. У разработчиков Go была возможность вернуться к этой проблеме - и реализовать равенство для срезов, что сделало бы недействительными какие-либо существующие программы - но без четкого представления о том, что равенство срезов должно означать, было проще его пока оставить.
В Go 1, в отличие от предыдущих релизов, равенство определено для структур и массивов, поэтому такие типы могут быть использованы в качестве ключей карты. У срезов, однако, все еще нет определения равенства.
Почему карты, срезы и каналы ссылаются, в то время как массивы являются значениями?
По этой теме есть длинная история. Сначала, карты и каналы были синтаксически указателями, и было невозможно объявить или использовать экземпляр без указателя. Также создатели Go боролись с тем, как должны работать массивы. В конце концов было решено, что строгое разделение указателей и значений сделало язык труднее в использовании. Изменение этих типов, чтобы они действовали как ссылки на связанные, совместно используемые структуры данных разрешило эти проблемы. Это изменение добавило прискорбную сложность языку, но оказало большое влияние на удобство использования: Go стал более продуктивным, удобным языком, когда он был представлен.
Читайте также:
Комментариев нет:
Отправить комментарий