
Oleg
09.11.2016
11:28:55
Расскажите кто как пробовал формальную верификацию делать?
Ну всмысле отлавливать хитрые ошибки на этапе компиляции
static if выглядит круто для оптимизаций, а static assert может както рассчитать границы чисел, обнуляемость..?
Короче что нибудь крутое

Google

Oleg
09.11.2016
11:31:07
В силу того что видимо D не дает доступа к AST то велосипедство в этом плане ограничено
Пока выглядит перспективной затея в инлайн тесты прогонять

Sergey
09.11.2016
11:37:17
я вот все никак не пойму, а чем контракты-то хуже. Да, проверка не на этапе компиляции, но она работает)
я прикладной программист, поэтому сразу говорю, что, скорее всего, чего-то не понимаю

Oleg
09.11.2016
14:31:13
Требования в системном программировании повыше чем в прикладном

Sergey
09.11.2016
14:33:28
это понятно) но можно какой-то пример, где контракты D не справляются с задачей?

Pavel
09.11.2016
14:36:58

Sergey
09.11.2016
14:39:45
ну, я лично одновременно согласен с этим утверждением, и одновременно нет. Просто все зависит от того, к чему конкретно эти требования)
но если говорить о верификации во время компиляции, то подумал и понял, в каких случаях контракты не подходят. Ничего особенного. Просто до этого не приходилось задумвываться на эту тему)

Pavel
09.11.2016
14:46:46
Традиционно считается что системные программисты гораздо глубже шарят в программировании чем прикладные, а прикладные только типа дергают системные процедуры для своих программ.
Но вот верно ли это для случая когда прикладной программист пишет софт виртуальной реальности, или автопилот для автомобиля - не уверен.

0x9d8e
09.11.2016
14:47:45
По-моему дело просто в разных предметных областях

Pavel
09.11.2016
14:49:20
По сути у операционной системы предметная область не такая уж хитрая (за десятки лет тема изъезжена) - там страницы памяти, сборщик мусора, процесс, поток, низкоуровневое IO для оборудования.

Google

Pavel
09.11.2016
14:49:45
А у автопилота? Да там черт знает что, модели реальности, распознавание образов с адской математикой и т.д.

0x9d8e
09.11.2016
14:50:05
Ну и от системного софта по дефолту ожидается надёжность и быстродействие т.к. неизвестно что там будет поверх. А в прикладном обычно известно ответственное ли это приложение или фигня до которой никому дела нет.

Oleg
09.11.2016
14:54:28
Вы о чем)
Меня волнуют библиотеки, игровые движки и ядра/драйверы операционок
На кой ляд там контракты?
Итак багов хватает везде. Лучше иметь компайл тайм верификацию чем не иметь. Во вторую очередь бонусы к скорости.
Так D умеет что-то подобное?

Oleg
09.11.2016
15:01:20
а rust умеет?

Oleg
09.11.2016
15:02:01
А нуллабилити?

Oleg
09.11.2016
15:02:34
либо я не знаю как это делается

Oleg
09.11.2016
15:02:58
а rust умеет?
Да в расте нихрена еще не ратоботает, куда не плюнь ставь ночную сборку

Oleg
09.11.2016
15:03:39
я к тому что эта задача вообще решаема?

Oleg
09.11.2016
15:04:16

Oleg
09.11.2016
15:04:55

Oleg
09.11.2016
15:05:05
Но не знаю решаемо ли в самом D

Oleg
09.11.2016
15:05:08
всё что известно в ct можно проверить
а аналитические вычисления возможных проблем это дело такое... шаманское...

Google

Oleg
09.11.2016
15:05:52
и может быть только warning'ами должно выводиться
и в rt он не будет принимать 0
но на этапе компиляции не известно будет что за значения могут быть переданы в эту переменную

Grigirii
09.11.2016
15:09:08
для ссылочных типов от нула избавиться сложно, для тех, кто имеет значение, есть Nullable
а лучше свой Nullable через алгебраический тип, чтобы ничто кроме try не могло его разрулить. 100% защита от непроверки на ноль
и такого в D можно много
ограничения на диапазон инта недавно обсуждали на форуме, скоро будет нормальная реализация в стд

Oleg
09.11.2016
15:11:18

Grigirii
09.11.2016
15:11:40
там есть вариант полного ct, но очень негибко и неудобно
можно найти тему на форуме и почитать, что там будет

Oleg
09.11.2016
15:12:05
auto a = MyInt!10?

Grigirii
09.11.2016
15:12:43
в принципе ничто не мешает сделать такой инт, Int!(from,to), у которого все арифметические действия будут возвращять новый тип Int с новыми предельными границами
int!(0,100) + int!(0,100) = int!(0,200);
http://forum.dlang.org/thread/npicb6$1idd$1@digitalmars.com

Oleg
09.11.2016
15:26:59
Океуч, нужно экспериментировать
void doSomething(const float[16] m0) const pure
{
// ...
}
Что в данном случае делает const перед телом функции? Делает все локальные переменные неизменяемыми?

qwe
10.11.2016
13:55:24
это отдельный метод? Или метод класса?

Google

Oleg
10.11.2016
13:55:59
Я этот семпл видел как метод класса

qwe
10.11.2016
13:56:20
Кстати, Вам, возможно интересно будет https://forum.dlang.org/post/drqdrobcoaanenocycgp@forum.dlang.org
если метод класса, то скорей всего const делает то же самое, что в C++

Max
10.11.2016
13:57:08
Запрещает изменять поля класса

Oleg
10.11.2016
14:06:33

Dmitry
11.11.2016
09:06:57
а сейчас существуют какие-нибуть сайты по dlang на русском?

Oleg
11.11.2016
09:08:53
http://wiki.dlang.org/Reading_the_documentation_%28in_Russian%29

Dmitry
11.11.2016
09:09:49
ага, это видел

Admin
ERROR: S client not available

Dmitry
11.11.2016
09:10:06
помнится был форум на dlang.ru - он сдох?

Oleg
11.11.2016
09:10:27
это к @DmitryBubnenkov вопросы)

Dmitry
11.11.2016
09:11:05
его домен?

Dmitry
11.11.2016
09:11:07
Да блин есть проблемка немножко. Щас тупо времени нет что то делать с сайтом
Да мой

Pavel
11.11.2016
09:11:29
он еще вроде на asp.net написан. То есть сложно поддерживать

Dmitry
11.11.2016
09:11:31
Просто непонятно что нужно. Форум или что более актуально?

Oleg
11.11.2016
09:12:02
1 сек

Pavel
11.11.2016
09:12:08
Да нужна какая-то смесь соцсети, форума и QA доски и ленты новостей

Oleg
11.11.2016
09:12:16
сейчас ещё сайтик скину

Dmitry
11.11.2016
09:12:18
@chebotarevp сложно для кого?

Google

Pavel
11.11.2016
09:12:59
Насколько я помню по рассказам, там движок написал какой-то человек. То есть движок самописный, поддерживать и дорабатывать некому.

Oleg
11.11.2016
09:13:01
http://lhs-blog.info/

Dmitry
11.11.2016
09:14:26
Именно так. Я вкладывал деньги в создание крутой cms но проект провалился
Цмс была на шарпе
Во многом причиной провала является интерпрайзность продуктов МС

Dmitry
11.11.2016
09:15:42
сайт/форум как раз этой цмс и был?

Dmitry
11.11.2016
09:15:53
Именно
Могу если интересно поднять на посмотреть как оно было

Dmitry
11.11.2016
09:28:12
спасибо, я уже видел его
просто давно не следил за dlang comunity
что-нибуть еще полезное написано на этом языке? (кроме переключалки раскладки)

Oleg
11.11.2016
09:29:53
http://dlang.org/orgs-using-d.html

Dmitry
11.11.2016
09:30:06
о, пасиб

Oleg
11.11.2016
09:30:44
http://code.dlang.org/


0x9d8e
11.11.2016
18:19:39
Отрефакторил код, в логику которого регуларно какие-то изменеия вносились и он стал просто жутким и вообще непонятно что делающим, да ещё и с багами. Код переписал, баги поправил, получился класс, с экземплярами которого можно творить какую-то инопланетянскую арифметику (здесь считаем, что все "числа" больше нуля [но это не обязательно], а все эти выражения истинны, += и - здесь работают ожидаемо в отличие от +):
a + b <= (a += b));
c = a + b; c >= a && c >= b;
Вот реальный кейс, который очень нужен был от этой ерунды:
c = a + b;
d = c - a;
d <= b; //При этом чаще именно меньше и нужна именно разность
return b - d;
Сумма двух значений может оказаться обычной суммой, а может большим из этих двух значений. Как определяется когда происходит так, а когда сяк? Ну например за счёт чудес с приватными полями. Но не только. Ещё сумма двух значений может оказаться чем-то таким:
c = a + b;
c > a && c > b && c < (a += b);
Но это-то как произошло? А вот "квантовая спутанность" сработала: где-то есть ещё d, e, f, g, etc. и в сумму С вместо B попал Y. И таких чудес ещё полно.
Похоже на квантовую механику или просто баги со сбежавшими указателями, но это точное отражение простой и понятной (менеджерам) бизнес-логики (и это не бред типа "купи два получи три") и работает оно как надо.


Армен
12.11.2016
07:07:44
привет всем! кто знает, почему не собирается такой код?
ref Fraction opUnary(string op)() {
if(op == "++")
{
this.num += this.den;
return this;
}
if(op == "--")
{
this.num -= this.den;
return this;
}
if(op == "+")
{
return this;
}
if(op == "-")
{
this.num = -this.num;
return this;
}
}
}
выдает Warning: statement is not reachable на 2 последних if. Если сделать их else if - всё работает


Oleg
12.11.2016
17:17:04
Отрефакторил код, в логику которого регуларно какие-то изменеия вносились и он стал просто жутким и вообще непонятно что делающим, да ещё и с багами. Код переписал, баги поправил, получился класс, с экземплярами которого можно творить какую-то инопланетянскую арифметику (здесь считаем, что все "числа" больше нуля [но это не обязательно], а все эти выражения истинны, += и - здесь работают ожидаемо в отличие от +):
a + b <= (a += b));
c = a + b; c >= a && c >= b;
Вот реальный кейс, который очень нужен был от этой ерунды:
c = a + b;
d = c - a;
d <= b; //При этом чаще именно меньше и нужна именно разность
return b - d;
Сумма двух значений может оказаться обычной суммой, а может большим из этих двух значений. Как определяется когда происходит так, а когда сяк? Ну например за счёт чудес с приватными полями. Но не только. Ещё сумма двух значений может оказаться чем-то таким:
c = a + b;
c > a && c > b && c < (a += b);
Но это-то как произошло? А вот "квантовая спутанность" сработала: где-то есть ещё d, e, f, g, etc. и в сумму С вместо B попал Y. И таких чудес ещё полно.
Похоже на квантовую механику или просто баги со сбежавшими указателями, но это точное отражение простой и понятной (менеджерам) бизнес-логики (и это не бред типа "купи два получи три") и работает оно как надо.
Впечатляет. Т.е. проблема со сбежавшими указателями решилась путем оборачивания значений в классы (вместо использования указателей)?
Читал про higher kinded types в Rust и показалось что в D такое повсеместно используется и никто не придает этому особое значение. Написать бы блог пост на эту тему, и можно откусить часть аудитории впечатлительных растаманов :)


Pavel
12.11.2016
17:31:08
Да у ди есть такое, то что например в го пиарится как мегафича, в д просто между делом реализовано и всем норм :)