- 1
- 2
Открытая встреча Национальной рабочей группы по стандартизации C++.
https://youtu.be/FcCymlVAtP8?t=3622
Нашли или выдавили из себя код, который нельзя назвать нормальным, на который без улыбки не взглянешь? Не торопитесь его удалять или рефакторить, — запостите его на говнокод.ру, посмеёмся вместе!
−124
Открытая встреча Национальной рабочей группы по стандартизации C++.
https://youtu.be/FcCymlVAtP8?t=3622
Я тут вам немного ПОКУШАТЬ ПРИНЕС
Они там с этими constespr похоже окончательно двинулись.
Давайте мне constexpr-асмовставки cкорей, и чтоб с гомоиконностью
j123123 28.03.2017 01:48 # −4
А эти убогие плюсокостыли - говно
dxd 28.03.2017 09:32 # −6
j123123 28.03.2017 02:04 # −5
j123123 28.03.2017 02:11 # −3
bormand 28.03.2017 06:49 # −14
j123123 28.03.2017 07:36 # −5
bormand 28.03.2017 19:19 # −15
Antervis 28.03.2017 10:12 # −5
ASD_77 28.03.2017 13:18 # −5
huesto 28.03.2017 13:25 # −14
Antervis 28.03.2017 13:57 # −5
ASD_77 28.03.2017 14:04 # −5
Antervis 28.03.2017 15:24 # −4
ASD_77 28.03.2017 15:53 # −5
roman-kashitsyn 28.03.2017 16:06 # −5
Только если это не специализация шаблонной функции.
For constexpr function templates and constexpr member functions of class templates, at least one specialization must satisfy the abovementioned requirements. Other specializations are still considered as constexpr, even though a call to such a function cannot appear in a constant expression.
-- http://en.cppreference.com/w/cpp/language/constexpr
Antervis 28.03.2017 16:41 # −5
ASD_77 28.03.2017 10:51 # −5
huesto 28.03.2017 11:57 # −15
ASD_77 28.03.2017 12:09 # −5
barop 28.03.2017 12:29 # −14
huesto 28.03.2017 12:45 # −14
bormand 28.03.2017 18:08 # −15
Если на то пошло - то constexpr тоже не добавил ничего нового. Метушня и без него метушилась.
j123123 28.03.2017 19:10 # −5
bormand 28.03.2017 19:11 # −15
j123123 28.03.2017 19:06 # −5
bormand 28.03.2017 19:09 # −14
З.Ы. Причём даже gc писать не надо - линкер справится сам.
j123123 28.03.2017 19:14 # −5
j123123 28.03.2017 19:32 # −6
Ну это если повезет, и метушня в процессе метушения не выжрет всю память
roman-kashitsyn 28.03.2017 12:17 # −6
dxd 28.03.2017 12:20 # −14
roman-kashitsyn 28.03.2017 12:56 # −1
Например, можно написать функцию, которая вычисляет тип из значения, и компилятор сможет вызывать её при во время тайпчекинга.
К примеру, можно написать нормальный printf с компайл-тайм проверками в виде библиотеки, без необходимости вшивать их в компилятор, или проверять в компайл-тайме, что индексы в массивах не выходят за границы. Ещё есть totality checker, который умеет проверять, что функция определена для всех входов и производит конечное кол-во вычислений. Он работает на эвристиках, но в целом довольно умный.
Из-за того, что типы являются значениями, сущностей становится меньше, синтаксис становится более однородным. К примеру, тайпдефы больше не нужны:
Автор языка утверждает, что язык создан для практического использования (к примеру, он энергичный), там починили некоторые хаскелевские фейлы (String = [Char]? really?), но, как всегда, добавили своих (map f (x :: xs) = f x :: map f xs в энергичном языке? srsly?). Из приятного: качество интеграции компилятора с редактором кода (Atom/Emacs) приятно удивила, не припомню такого со времён tuareg-mode для ocaml.
До доказательства теорем в компайл-тайме я ещё не дочитал.
Вот тут есть две бесплатные главы: https://www.manning.com/books/type-driven-development-with-idris
Тут есть запись курса по идрису на русском, содержание по сути идентично тому, что содержится в книге http://compsciclub.ru/courses/idrisprogramming/2017-spring/ (смотреть рекомендую на скорости 1.5x, мужик как-то очень медленно говорит)
Могу отправить MEAP-версию книжки в epub/pdf, если скажешь, куда.
inkanus-gray 28.03.2017 13:18 # −3
2. При конкатенации Vect n elem и Vect m elem получаем Vect (n + m) elem.
Вычисляемые типы? Да я этого джва года ждал.
Кстати, как с этим можно сравнить темплейты и дженерики + вывод типов в C++/C#/Java?
roman-kashitsyn 28.03.2017 13:29 # −1
Жабьи дженерики даже рядом не лежали, они только типами параметризуются. В C# тоже только типами параметризовать можно.
А вот в плюсах можно сносно использовать зависимые типы, правда, в качестве значений может быть ограниченное кол-во сущностей (всяческие целые типы, указатели на члены класса). Основная проблема в том, что это обособленный и очень многословный суб-язык, на котором очень утомительно писать, и который бОльшая часть плюсовиков считает изотерикой.
roman-kashitsyn 28.03.2017 13:40 # −2
Ещё забыл: в плюсах компайл-тайм и рантайм это две разных вселенных, и компилятор может оперировать только тем, что известно в компайл-тайме.
Допустим, мы хотим включить информацию о размере массива в его тип, чтобы проверять, что мы не выходим за границы этого массива. Это всё чудесно, пока тип массива содержит константу, а что если мы читаем массив с диска? В плюсах у нас нет вариантов, нужно выкинуть константу из типа и на этом успокоиться. Well, I've tried.
В Idris есть зависимые пары — функция может возвращать значение, тип которого зависит от того, что случится в рантайме. Например: Тут написано, что функция читает файл с заданным именем и возвращает пару число + массив, размер которого равняется этому числу. Компилятор заставит нас проверять при доступе к массиву, что индекс меньше n.