Olzhas
@madgopher запили сваггер под греймворк
Мерль
Roman
как относитесь к implicit конвертации non-const в const например в случае возвращения из функции?
func CreateList(size int) const []string {
newSlice := make([]string, size)
for i := 0; i < size; i++ {
newSlice[i] = "sample text"
}
// newSlice is implicitly converted
// from "[]string" to "const []string"
return newSlice
}
Daniel
ааа, вот чего ты хочешь! не забыть генерацию толкнуть!
это да, это частая проблема
Daniel
и тут-то нам и нагенерят наши коллеги почитать всякого...
Мерль
А генеренный код не надо читать
Мерль
И править
Daniel
как появится "нормальная экосистема" - так придется читать :(
Sergey
Мерль
Кстати это неплохой способ завести типы суммы, не меняя язык
aadz
Roman
я бы даже сказал что кстатиь const в не-const должно быть невозможно и в таком случае implicit cast не-const в const будет, по моему, уместен
aadz
Roman
Daniel
aadz
Например, тупо, функция make([]interface{})
😆или типа того
Daniel
я вот за эксплицитное всегда
aadz
aadz
Причина в том, чето если что-то делается, то не надо делать это по-тихому. Явное гораздо отчетливей, и часто лучше
aadz
Мерль
это как это?!
я знаю один способ - на интерфейсах и тайпсвитче.
Вот это самое, но только под капотом
Ведь, если сделать как я говорю, то нет разницы между линтером и кодогенератором
Сначала он генерирует набор типов обёрток для интерфейса mySumType, а потом проверяет валидность использования: чтобы не вернуть nil вместо mySumType, в type switch должны быть проверены все варианты, либо есть default
Мерль
И тд
Мерль
aadz
aadz
В смысле, слово уже есть, но хочу больше const, короче :)
Roman
Roman
aadz
Ну, уже есть такое ключевое слово. Но хочу, чтобы оно больше было похоже на const из плюсов
Roman
Roman
я там кстати ещё вопрос по поводу констант vs имутабельных символов разобрал только-что: https://github.com/romshark/Go-2-Proposal---Immutability#35-how-are-constants-different-from-immutables
aadz
Кстати, кажется, что по логике Go должно быть не varName const []string), а наоборот - varName []string const) 😄
aadz
Roman
aadz
потому что паники
aadz
или ты тоже экстемист-параноик и все подрят тестируешь, как маньяк какой-то? :)
Roman
потому что паники
я про обратный порядок декларации, т.е. не const []string а []string const, зачем?
Roman
как в таком случае описать const [] const *Object ?
Michael
const [] const * const Object
aadz
Ехал констант через констант
Видит констант в констант констант
Сунул констант констант в констант
Конст за констант констант цап
Vladimir
aadz
Daniel
Daniel
я все же думаю, что const контейнера должен распространяться и на содержимое
Daniel
но!
Daniel
с моей точки зрения const модификатор не типа, но экземпляра
aadz
Ну, вобще-то да. Уж если мы говорим что контейнер не меняется, то это как раз по поводу содержимого и речь
aadz
И вобще, даже при косвенном доступе (любых степеней вложенности) объект, объявленный как конст, или его часть. не может по идее быть lvalue
Daniel
это тут уже было сегодня дважды
Roman
я все же думаю, что const контейнера должен распространяться и на содержимое
да, в этом есть смысл.
если учесть что slice это всего лишь
type slice struct {
p *[n]array
}
тогда поля const object'а должны быть тоже const
type Object struct {
Parent *Object
}
func main() {
const o := &Object{}
o.Parent = &Object{} // Compile-time error
o.NonConstMethod() // Compile-time error
o.Parent.NonConstMethod() // Compile-time error
}
в чём, собственно, есть смысл.
Roman
Wingman
в го же планируют вводить check/handle паттерны?
Daniel
Wingman
чего вы так упарываетесь по "аа мы всё сломаем, нельзя новые кейворды"? чек/хендл сломает в 100500 раз больше, чем какой-нибудь mut :)
Daniel
чек-хендл придумал кокс, и у него серьезные шансы попасть в язык
Daniel
а const придумал Роман (не целиком, но этот конкретный пропозал), и у него шансов мало, разве что он всем вот прям понравится-понравится
Wingman
Ясно :)
Daniel
я вот все же думаю, что начинать надо с комментов-аннотаций, и линтера
aadz
Roman
Wingman
Anonymous
aadz
С чек/хендл хендл может быть только проблема у тех буратин, кто ошибку возвращал не последним значением
Wingman
Wingman
Я могу запросто переменную/функцию сейчас и чек, и хендл назвать
Wingman
И оно сломается
Semyon
я вот конечно не эксперт но в целом имутабельность очень мощная вещь, но выглядит уж очень накрученно по синтаксису
Semyon
И оно сломается
Можно решить явным импортом в начале файла (например)
Roman
я вот все же думаю, что начинать надо с комментов-аннотаций, и линтера
да, в этом есть смысл. Можно с этого начать, правда я Go линтеры ещё не писал, сложно оценить насколько это будет сложно и затратно по времени.
можно добавить эту идею в пропосал как PoC implementation, осталось только придумать стандарт/формат аннотаций, есть по этому поводу идеи?
Daniel
есть
Daniel
к переменным и типам - теги