LINUX.ORG.RU

Опубликован почти окончательный драфт генериков в Go

 


0

10

За подробностями в Go-блог (blog.golang.org/why-generics), там есть ссылка на собственно драфт.

Генерики семантически будут наподобие шаблонов C++, т.е. не boxed (как в Java), а value: компилятор будет генерировать копии с конкретными типами.

Синтаксически удалось обойтись введением всего одного нового ключевого слова contract для описания ограничений типа-значения (то есть для создания чего-то вроде метатипов).

В релизе появится всё это не скоро, в Go 2, срок выхода которого неизвестен. Go 1.13 появится на днях, 1.14 — в ноябре, к десятилетию первого публичного бета-релиза.

★★★★
Ответ на: комментарий от yyk

Но как без них?

Я уже много писал об этом. Там для крестов даже пацаны реализовали что-то типа того, что нужно.

Если попроще. Все функции должны быть инлайн(за редкими исключениями). Инлайн, который сейчас используется(даже в си) - это говно. Он прикручен снизу и не даёт необходимого профита уровня языка.

Если у нас в языке будет правильный инлайн, то мы сможем получить из функции полную семантику вызывающего контекста. Т.е. вызова вообще не будет.

Что это даст. Это даст возможность реализовать полноценный статический анализ. Это даст возможность реализовать гетерогенные вычисления в контексте рантайм+компилтайм части. Это даст возможность реализовать нормальную передачу аргументов.

Если проще. То функция будет мета-функцией. Т.е. она инлайн - она может полностью подстраиваться под конкретный вызов.

Давай самый простой кейс. Тебе нужно создать/сконфигурировать что-то. И почти всегда из этой конфигурации можно сгенерировать оптимальный вариацию в компилтайме. Сейчас в лучшем случае ты передашь контекст.

f((config_t){.a = 1, .b = 2}); И это даже в какой-то мере выглядит не как говно, но. Функция должна существовать одна и для всякого набора конфигурации. Конфигурация никак не может сконфигурировать выходные типы, внутренние структуры в компилайтме.

Да, в крестах через жопу ты можешь что-то сделать. Хотя нет, не можешь. Соответственно в нормальных «функциях» ты можешь сделать(условно) f(.a = 1, .b = 2). Это конфигурация создаст логику уникальную для данной конфигурации и вернёт тебе результат, либо сделает что-то ещё.

Точно так же, это даст возможно почти везде выпилить ссылки/указатели и прочее дерьмо. Это, как я уже говорил, даст проводить нормальный статический анализ, причём статический анализ уровня языка.

Мы можем ввести в любой объект компилтайм-часть. И в любом вызове функции изменять её, проверяя любые инварианты. Что-то подобной но в намного более бездарном виде пытаются сделать фп-сектанты.

Там есть некие проблемы. Не вся птушная логика может быть реализована в рамках подобного. Но всегда можно добавить фолбек на птушную вариацию.

Но в любом случае я примерно представляю себе то, как можно некие пту-концепции свести к нормальным. Но это очень большая тема и требует исследований.

Но подобные проблемы существуют и на лоулевеле, т.к. эта модель оптимально ложиться на лоулевел. Птушная модель нет. Чем больше будет развиваться лоулевел - тем более строгую модель вычисления они(вычислители) будут использовать.

RibiKukkan
()
Ответ на: комментарий от RibiKukkan

Ты можешь полноценную статью накатать или хотя бы первую часть из серии статей?

Блог же не проблема завести.

anonymous
()
Ответ на: комментарий от anonymous

Блог же не проблема завести.

Достаточно проблемно. Нужно и завести и написать. И если завести ещё можно, если прям вообще забить на всё, что написать сложно.

Написать нормальный текст, который бы в полной мере объяснял суть идеи/проблемы - долго. Очень долго. А долго нету.

Всё будет. Я занимаюсь тем, что-бы организовать свою жизнь так, что-бы у меня было достаточно времени на подобную деятельность. Я не хочу начинать с каких-то обрывков фраз - не хочу разочаровывать пацанов. Контент должен быть на уровне.

RibiKukkan
()
Ответ на: комментарий от RibiKukkan

Я не хочу начинать с каких-то обрывков фраз - не хочу разочаровывать пацанов. Контент должен быть на уровне.

Пока Вы готовитесь, пацаны уже проведут 100500 конференций, поучая других пацанов.

anonymous
()
Ответ на: комментарий от anonymous

Они уже 100500 провели и от одной очередной ничего не изменится. К тому же, ты хочешь что-бы контент был очередной 100501 ненужной конференцией, которая ни на что не влияет?

RibiKukkan
()
Ответ на: комментарий от RibiKukkan

Я занимаюсь тем, что-бы организовать свою жизнь так, что-бы у меня было достаточно времени на подобную деятельность

Может стоит повременить с лором тогда?

anonymous
()
Ответ на: комментарий от anonymous

Может стоит повременить с лором тогда?

Выше уже ответил. Я либо сижу думаю, либо жру, либо жду пока соберётся. Он не требует какой-то особой умственной деятельности. А писать что-то серьёзное параллельно с основной деятельностью я не могу.

RibiKukkan
()
Ответ на: комментарий от yyk

Ожидал, что он сейчас про Prolog начнёт рассказывать. А он какого-то д€рьма навернул про инлайн кода.

anonymous
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.