@dlangru

Страница 120 из 719
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 выводит нормальные значения

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") пользуется беря оттуда какие-то данные?

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

Сергей
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
однако как оказывается слишком дофига знать надо
А ты читал книгу Ali Cehrelli ? После нее большинство вопросов отпадает по D

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) ?

Ясно, передача по ссылке под запретом)

Страница 120 из 719