
Dmitry
28.04.2017
17:03:39
Что из себя эти алгебраические типы представляют?

Oleg
28.04.2017
17:03:43
В любом случае одно из двух
Ну судя по названию числа и перечисления

Dmitry
28.04.2017
17:12:55
перечисления это набор возможных типов?

Google

Олег
28.04.2017
17:17:49
об этом тут https://dlang.org/spec/float.html говорится

Oleg
30.04.2017
12:18:12
Ребят, а кто-нибудь на arm пишет?
Имеется ввиду на d, конечно

Dmitry
30.04.2017
13:20:03
Олег, помнишь ты ссылку давал на предрелизную доку. Тогда вроде как тема была, что компилятор как библиотека. Походу это не так. Вот ответ в теме http://forum.dlang.org/post/oe4ie0$m6u$1@digitalmars.com

Oleg
30.04.2017
13:50:39
Беда(

Dmitry
02.05.2017
07:46:18
кстати, а как такое может быть, чтобы writefln выполнение проги прерывал?

Evil
02.05.2017
08:01:18
Мужики, такая тема есть. Кто что ведает?
@Lord_Evil помнишь я делал аудит Intel MEI и назвал его бэкдором?
https://semiaccurate.com/2017/05/01/remote-security-exploit-2008-intel-platforms/
Сегодня подтвердили
Ну вот пишут что для эксплоита нужно чтобы был открыт порт 16992 или 16993 и на сервере была запущена виндовая local manageability service
вот же https://downloadmirror.intel.com/26755/eng/INTEL-SA-00075%20Detection%20Guide-Rev%201.0.pdf
ну судя по вемсу для сетевой атаки нужна служба и порт
для локальной надо чтоб был поставлен какой-то интеловский интерфейс

Google

Evil
02.05.2017
08:01:18
я проверил три коробки наугад,, сообщил начальству, больше меня это не ебет

Oleg
02.05.2017
09:41:50

Dmitry
02.05.2017
09:55:17
if(!point[2].hasValue || !point[3].hasValue || !point[4].hasValue)
данное условие корректно записано?
"если в элементе два пусто или в элементе 3 пусто или в элементе 4 пусто"
о как. оказалось что проверять есть ли значение через hasValue т.к. если ничего не прилетело, то там будет null и условие будет истино

Evil
02.05.2017
10:11:28

Oleg
02.05.2017
10:14:30
да вроде ничем, виндовая же фигня (прога от Intel с дыркой)

Dmitry
02.05.2017
10:52:19
как оно умудряется этот блок кода выполнять?
Тут же написано, что если _не нул_, то напечатать на экран

Oleg
02.05.2017
10:55:05
так ты же тип проверяешь
может тип "строка" а значение то может быть нул

Dmitry
02.05.2017
10:56:33
понял, тогда получается так надо:
if(point[3].hasValue)
и снова не работает:
@deviator а ты уверен что тут под типом понимается именно это? просто на следующем коде оно в качестве типа null выводит

Oleg
02.05.2017
11:08:42
Хз
Я с variant не работал вообще
@DmitryBubnenkov ты объясни что ты хочешь сделать

Dmitry
02.05.2017
11:51:23
я у lat и lon поменял типы со string на double и теперь у меня код падает если в БД в ответе есть null
Вот только что тему создал: http://stackoverflow.com/questions/43737136/how-to-chack-variant-for-null

Google

Oleg
02.05.2017
11:53:09
просто null это тоже ведь значение

Dmitry
02.05.2017
11:53:43
а как быть то?

Oleg
02.05.2017
11:55:28
import std.stdio;
import std.variant;
void main()
{
Variant a;
a = null;
writeln(a.hasValue);
writeln(a.type);
writeln(a.type is null);
writeln(a.type == typeid(typeof(null)));
writeln(a.coerce!string);
}
выводит
true
typeof(null)
false
true
null
может использовать проверку a.type == typeid(typeof(null))
а вообще, наверное, можно сразу пробовать взять double

Dmitry
02.05.2017
11:57:44
writeln(a.type is null);
выводит же
false
верно?
значит должна работать вот такая проверка:
if(point[3].type !is null)
верно?

Oleg
02.05.2017
11:58:56
нет
не такая проверка

Dmitry
02.05.2017
11:59:23
сейчас попробую как ты сказал

Oleg
02.05.2017
11:59:26
стой
import std.stdio;
import std.variant;
double getDouble(Variant a)
{
if (auto ret=a.peek!double)
return *ret;
return double.nan;
}
void main()
{
Variant a = null;
Variant b = 3.14;
writeln(a.getDouble);
writeln(b.getDouble);
}
вот так попробуй

Dmitry
02.05.2017
11:59:42
сейчас

Oleg
02.05.2017
12:00:43
если передаваемая переменная содержит что-то, что не double (string, typeof(null) или ещё что-то), то вернётся double.nan

Dmitry
02.05.2017
12:06:43
@deviator у меня заработал вариант:
if(point[3].type != typeid(typeof(null)))
я наверно пока его оставлю. Вообще странно как-то. По идее null не должен быть по .hasValue равен true

Oleg
02.05.2017
12:07:03
с чего это?

Dmitry
02.05.2017
12:07:43
http://stackoverflow.com/questions/17783929/c-sharp-hasvalue-vs-null
ну вот тут вроде бы оно именно так работает

Oleg
02.05.2017
12:07:44
hasValue в Variant это индикатор, что что-то записанно
а то что значение null это уже другой разговор

Google

Dmitry
02.05.2017
12:10:23
погоди, я никак в толк не возьму. в данном случае прилетает null и null хранится имеенно как значение т.е. поэтому .hasValue на нем всегда true
т.е. в других случаях проверка на наличие значение давала бы false если бы мы работали не с типом Variant?
Кто знает как в других языках подобная проверка реадизуется? В том же C#
просто все варианты немного на хаки похожи...

Oleg
02.05.2017
12:35:51
вообще в языках со статической типизацией вся вот эта ерунда с Variant и чем-то похожим будет через библиотеки сделана

Dmitry
03.05.2017
05:36:23
Олег, в плане? Типа каждая либа по своему это должна обрабатывать?

Oleg
03.05.2017
07:32:21
Ну да

Dmitry
03.05.2017
07:33:18
а не проще ли в язык добавить, чтобы хоть какая-то унификация была

Admin
ERROR: S client not available

Oleg
03.05.2017
07:33:18
Хотя вот ещё пример: в js есть undefined и есть null

Dmitry
03.05.2017
07:33:30
ну в JS вообще жесть...

Oleg
03.05.2017
07:34:02

Dmitry
03.05.2017
07:34:26
Нет, чтобы в самом Ди были методы которые позволяли бы подобную проверку провести однотипно
мля... здец какой-то. 32-битная сборка опять после нескольких часов работы упала, а 64-битная обрабатывает запросы к БД PostgreSQL в 15 раз медленее
использую вот этот драйвер https://github.com/pszturmaj/ddb
собирал в режиме:
dub --build=release --arch=x86_64

Oleg
03.05.2017
09:16:13

Dmitry
03.05.2017
09:16:27
потому что его на форуме посоветовали
сказали самый хороший

Oleg
03.05.2017
09:17:31
оке
смотрю разрабатывают его много людей и вроде видные участники сообщества

Google

Dmitry
03.05.2017
09:19:39
вот отписал https://github.com/pszturmaj/ddb/issues/68
мля... у меня проблема с линковкой в 32-битном режиме самоушла. Помнишь ту ошибку которую я лечил сборкой в режиме релиза. Причем даже мыслей нет почему т.к. код тот же самый практически. Единственное — может зависимости обновились в какой-то момент, но там по сути только вайб мог

Oleg
03.05.2017
09:25:42

Dmitry
03.05.2017
09:25:50
нет

Oleg
03.05.2017
09:25:59
хм

Dmitry
03.05.2017
09:26:49
как вариант он как-то мог подцепить Windows SDK про который мне кто-то говорил. Как замену VS
но я не помню чтобы еще раз компилятор переставлял... хотя может такое и было...

qwerty
03.05.2017
11:45:45
Замечал несколько раз жалобы, что в D нет pattern matching. Признаюсь честно, что не очень понимаю, что это такое, но насколько понял, в Rust он реализован идеально.
Там он нужен для инициализации переменных (и как switch), которая зависит от чего-то. Так как в Rust нельзя объявить переменную без присвоения значения в безопасном коде, там pattern matching нужен как воздух.
Посмотрев на примеры кода из учебника Rust, я написал небольшой шаблон, который делает вроде то же самое.
Вопрос: все несколько сложнее, чем мне кажется или в D можно реализовать pattern matching своими силами?
http://vpaste.net/qBMj6
Важный недостаток, что не lazy. Но я набросал код, чтоб понять можно или нет такое сделать в D.

Dmitry
03.05.2017
11:52:37
Вальтер писал что в начале нужно алгебраические типы (кажется) реализовать полностью. Я точно не помню формулировку, но эта тема уже поднималась
так что походу все не так просто
можешь гуглом по форуму поискать

Grigirii
03.05.2017
11:55:44
D не очень требуется pattern matching, он неплохо выкручивается через красивые лямбды:
https://dlang.org/phobos/std_variant.html#.visit
я такое даже на С++ использовал для своих типов, очень удобно и читабельно

Dmitry
03.05.2017
11:58:07
Григорий, а ты с Вариантом плотно работал? Можешь предложить красивый способ проверки что в нем null. Пока что единственный вариант через указатели, щас ссылку дам
http://stackoverflow.com/questions/43737136/how-to-check-variant-for-null

Grigirii
03.05.2017
12:00:21
плотно не работал, может стоит посмотреть в сторону b.type == typeid(void), если null не работает


Max
03.05.2017
13:11:22
Замечал несколько раз жалобы, что в D нет pattern matching. Признаюсь честно, что не очень понимаю, что это такое, но насколько понял, в Rust он реализован идеально.
Там он нужен для инициализации переменных (и как switch), которая зависит от чего-то. Так как в Rust нельзя объявить переменную без присвоения значения в безопасном коде, там pattern matching нужен как воздух.
Посмотрев на примеры кода из учебника Rust, я написал небольшой шаблон, который делает вроде то же самое.
Вопрос: все несколько сложнее, чем мне кажется или в D можно реализовать pattern matching своими силами?
http://vpaste.net/qBMj6
Важный недостаток, что не lazy. Но я набросал код, чтоб понять можно или нет такое сделать в D.
В расте он нужен как воздух вообще всей системе типов (там все пользовательские типы — tagged unions, загугли что это такое и станет понятнее суть пма), а не только для раскрытия кортежей, а вот в д он как и адт в языке не нужен и будет ни к селу ни к городу рядом с динамическим ООП.


Dmitry
03.05.2017
13:14:58
Как я понимаю паттерн матчинг это switch на стероидах и там можно очень красиво все проверять в отличие от того же switch'a

qwerty
03.05.2017
13:19:17