
qwe
29.01.2017
15:03:08
нет
дебажил dcd
в смысле проект, который дебажил

Google

Oleg
29.01.2017
15:04:22
И что за проблемы были?

qwe
29.01.2017
15:05:00
например приходил не в тот метод когда делал step
и выходил не в тот метод
или мог делать next и попадать в другой метод

Oleg
29.01.2017
15:05:41
Никогда такого поведения не было у меня

qwe
29.01.2017
15:05:54
я думаю, что даже смогу воспроизвести

Сергей
29.01.2017
15:07:46
У меня просто структура простая с union, и простой код
S s1 = {1, 2, 3}
S s2 = s1;
В s2 при просмотре в студии всякий треш типа NAN, или рандлмных значений.
Не на всех брекпоинтах встает
При этом writeln выводит нормальные значения

qwe
29.01.2017
15:15:27

Dmitry
29.01.2017
19:54:47
Кстати, а тут есть те кто Ranges плохо понимает? Или я один такой?) (кому не стыдно напишите)))

Сергей
29.01.2017
20:54:39
Я даже не читал про них :Р

Dmitry
29.01.2017
20:57:54
Сергей, а софт серьезный пишешь какой нить?

Армен
29.01.2017
21:10:59
А кто-то пишет что-то, что реально использует, а не в учебных целях?

Google

Dmitry
30.01.2017
00:58:21
Я по гранту писал парсер данных и геопортал (серверную часть) на старой работе

Evil
30.01.2017
01:47:25
Я пишу всякие извращенские штуки на Ди и сдаю в продакшин?

qwe
30.01.2017
06:17:43
@deviator вроде писал обработку снимков со спутника. Говорит быстро работало. Можно спросить жив ли проект

Армен
30.01.2017
06:24:51
Ясно. А я на винде быстро логику прикидываю на D для консольных вспомогательных утилит, а когда есть доступ к Linux уже пишу на Boost

Oleg
30.01.2017
06:28:39
Тот проект я писал пока службу в армии проходил, как в запас ушёл так и не связался с теми людьми
Может на новой работе чего-нибудь делать буду на D

Dmitry
30.01.2017
06:59:33
Так, а вот тут:
sharedLog = new FileLogger("New_Default_Log_File.log");
мы создаем новый экземпляр логера или не совсем? Просто судя по коду мы свойство устанавливаем

Evil
30.01.2017
07:06:07
https://www.youtube.com/watch?v=_p3RtkwstNk

Dmitry
30.01.2017
07:26:21
Просто я не пойму, почему свойство задается через new и далее имя экземпляра

Oleg
30.01.2017
07:30:01
Во первых не надо путать экземпляр и тип. Ты знаешь что делает new?
Просто я не пойму, почему свойство задается через new и далее имя экземпляра

Dmitry
30.01.2017
07:30:58
создает объект в куче?

Oleg
30.01.2017
07:31:54
Ну
И с чем используется new?
Когда ты пишешь потом тип ты вызываешь конструктор

Dmitry
30.01.2017
07:34:03
с именем класса
получается, что все же экземпляр класса создается?

Oleg
30.01.2017
07:37:08
Может и структуры
Но в любом случае в куче

Dmitry
30.01.2017
07:39:04
получается создается класс и он инициализирует свойство: @property void sharedLog ?

Google

Evil
30.01.2017
07:44:10
Да
В конструкторе

Dmitry
30.01.2017
07:48:29
Тоесть для того, чтобы работало логирование класс создается или явно:
sharedLog = new FileLogger("New_Default_Log_File.log");
или если строки выше нигде нет, то это делается не явно? Т.е. создается просто какой-то дефолтный класс которым log("blablabla") пользуется беря оттуда какие-то данные?

Oleg
30.01.2017
07:55:20

Dmitry
30.01.2017
11:06:38
Олег, получается можно создавать класс без имени? Просто 'new MyClass()'? Точнее не без имени а без явного экземпляра?

Сергей
30.01.2017
11:11:53
new же просто возвращает указатель нужного типа
ты же можешь написать int Fun() { reuturn 10;} и вызвать ее просто Fun() без присвоения. вот тут также

Dmitry
30.01.2017
11:12:55
А в каких случаях он объект создает?

Сергей
30.01.2017
11:13:43
ну New это создание обьекта, он возвращает тебе не объект, а указатель на него

Dmitry
30.01.2017
11:16:20
Var х ew = ...
Создаем переменную х и получаем в нее указатель на созданный объект? Верно?

Сергей
30.01.2017
11:16:49
да

Dmitry
30.01.2017
12:48:16
А кто может привести реальный кейс где полезнее вызов отдельных функций лога, нежели создание экземпляра класса?

Сергей
30.01.2017
13:03:31
я не понимаю, что имеено ты хочешь сделать :)

Dmitry
30.01.2017
13:04:19
просто понять в чем плюс первого и второго варианта. Я просто сижу и методично разбираю язык от и до.

Сергей
30.01.2017
13:11:06
ну а какая задача то ?
Просто вот если ты хочешь делать в коде
new Logger("Some Text Here"); ?
ну мне видится тоько 1 кейс, это когда хочется например писать как в с++
Logger("Log"); и при этом иметь возможность Относледываться от Logger, в D же нет возможности наследоваться от струтур?

Dmitry
30.01.2017
13:12:14
Вроде разобрался. Экземпляр класса полезен именно для наследования и последующего переопределения

Сергей
30.01.2017
13:14:21
мне кажется лучше посмотреть про перегрузку функций для такого, нежели делать new

Eto
30.01.2017
13:20:42

Сергей
30.01.2017
13:23:01
Ну вот мне кажется делать лог new Logger(...) не лучшая идея

Dmitry
30.01.2017
13:25:36
Вопрос про nothrow. А почему этим тегом обрамляются функции. В описании написано, что компилятор не даст бросить из нее исключение. Получается, что программист в какой-то момент может забыть, что из нее исключение нельзя кидать? Или какая тут логика?

Сергей
30.01.2017
13:33:00
ну функция не сможет кинуть/обработать исключкние, да, эзеркейс нужен?

Google

Dmitry
30.01.2017
13:33:43
да нет, уже норм, в голове уложилось
Теперь по поводу is вопрос. Как понимаю есть сразу два is один в компайл тайм работает, второй нет, так? И один на null позволяет проверять, а второй просто совпадают ли типы?

Oleg
30.01.2017
13:50:08
Ну почти, не простое совпадение типов
Там намного сложнее

Сергей
30.01.2017
13:53:35
а как он проверит компил тайм "b is null" если b аргумент функции?

Oleg
30.01.2017
14:17:10
нет, на null проверка только run-time

Dmitry
30.01.2017
14:17:42
а в остальных случаях тот же is проверят тип?

Oleg
30.01.2017
14:17:51
да
но там реально есть мутные штуки, типа pattern-matching

Dmitry
30.01.2017
14:20:27
кстати, а вот как создать кортеж явно указав его тип без слова auto?
auto myTuple = tuple(1, "One");
Или можно только через Alias типа:
alias DicEntry = Tuple!(string, string);

Admin
ERROR: S client not available

Oleg
30.01.2017
14:20:33
https://habrahabr.ru/post/261349/
тут я описывал эту тему

Dmitry
30.01.2017
14:45:03
Так, как я понимаю кортеж у нас шаблонная функция однако ее можно вызывать так:
tuple(1, "One");
В то время как шаблон вызываются так:
auto myTuple = Tuple!(int, string)(42, "Hello");
ок. понятно дело что типы в первых скобках мы можем опустить, но почему с маленькой буквы то?
"Tuple can also be constructed directly by the Tuple template instead of the tuple() function"
что еще за функция и зачем она нужна?

Grigirii
30.01.2017
14:46:28
tuple - функция, а Tuple - тип. tuple нужен как раз чтобы постоянно не писать типы
для функций есть автовыведение типов, а вот для конструктора так нельзя, потому что по аргументам не понять, объект какого типа создавать

Dmitry
30.01.2017
14:52:59
т.е. функция внутри себя тип создаст из аргументов?
А где кроме кортежей такое же поведение есть?

Grigirii
30.01.2017
14:56:06
вообще это очень популярная практика, сейчас найду примеры

Google

Grigirii
30.01.2017
14:56:50
https://dlang.org/phobos/std_typecons.html
почти у всех типов так

Dmitry
30.01.2017
14:57:22
так, а почему Tuple являясь структурой вызывается как шаблонная функция?

Grigirii
30.01.2017
14:57:36
это вызов конструктора
для любой структуры создание объетка происзодит как S(args)

Eto
30.01.2017
14:58:20
Функция оборачивает конструктор.

Grigirii
30.01.2017
14:58:24
если тип шаблонный, то S!(Args)(args)

Dmitry
30.01.2017
15:02:07

Grigirii
30.01.2017
15:02:35
да нет же, восклицательный знак - передача шаблонных аргументов
очередной раз советую почитать что-то базовое перед тем, как задавать вопросы

Dmitry
30.01.2017
15:04:38
так я стараюсь читать...
однако как оказывается слишком дофига знать надо

Армен
30.01.2017
15:08:24

Dmitry
30.01.2017
15:08:37
да читал, и сейчас тоже сижу ее читаю
я ж там даже указан в самом начале как особо занудствующий товарищ)

Сергей
30.01.2017
16:02:31
А по тредам вопрос.
Если память по умолчанию не разделяемая, то какое значение будет у объекта переданного в другой тред?
А a = new A()
a.i++ // i = 1
Если передать указать на a в другой тред и слелать инкремент еще раз
a.i++
i во второй треде будет равен 2?
В первой 1?
Или в обоих 1?

Oleg
30.01.2017
16:21:05
Нельзя такой объект передать
Компилятор не даст
Если структура, то скопирует по возможности

Сергей
30.01.2017
16:24:17
Я не могу сделать?
void Fun(A arg)
{
Arg.i++;
}
A a = new A
Spawn(&Fun, a)
Spawn(&Fun, a)
?
Ясно, передача по ссылке под запретом)