
Денис
22.07.2016
09:40:55
Элемент хранит ссылку на следующий и предыдущий элемент
А в слисте только на следующий

Dmitry
22.07.2016
09:43:24
как я понял контейнеры только для деревьев и списков
для остального они мало нужны?

Google

Денис
22.07.2016
09:43:53
Ну там красно-черное дерево - рбтрии, 2 вида списков, какой-то аналог массива
В принципе для большинства задач - этих контейнеров достаточно
Хэшмэпы в D встроенные
Вот всякой экзотики вроде kd-tree нет, но когда такие штуки нужны - проще самому реализацию написать

Oleg
22.07.2016
09:47:19
это не для деревьев
это деревья "для"
по использованию немного отличается от массивов, но по сути почти массив

Денис
22.07.2016
09:48:11
А еще бинарную кучу забыл

Oleg
22.07.2016
09:48:23
вместо массива ты можешь выбрать "дерево для хранения данных"
rbtree не подразумевает работу с графами, оно является определённым видом, но не для работы с ними

Dmitry
22.07.2016
09:49:56
Ок, примерно понял. Еще такой момент. Вот запущен таск. В какой-то момент он io делает. В этот момент что происходит? Он джет результатов io или ОС его перещелкивает на другой таск?
Я что-то понять не могу. А почему у меня foreach не обходит структуру.
Пишет: source\app.d(135,2): Error: invalid foreach aggregate mds, define opApply(), range primitives, or use .tupleof
-
foreach (md; mds)
{
}
Структура объявлена так:
struct MyData
{
string coordinatesStr; // as simple string
string episodeDate; // from RSM
string jpgPath;
}

Google

Денис
23.07.2016
15:06:40

Dmitry
23.07.2016
15:06:58
struct MyData
{
string coordinatesStr; // as simple string
string episodeDate; // from RSM
string jpgPath;
}
MyData [] mds;
объявляю до main
вот сам код http://www.everfall.com/paste/id.php?clzd2aszoav3
о все, кажется разобрался. Я в функцию передавал:
void DB(MyData mds)
а надо
void DB(MyData [] mds)

Max
23.07.2016
18:53:46
ref Mydata[] mds
Иначе будешь каждый раз впустую копировать массив

Dmitry
23.07.2016
19:05:32
А, понял, спасибо
А кто в математике шарит?
Не подскажите что в данном месте за int npol может приниматься?
http://stackoverflow.com/questions/924171/geo-fencing-point-inside-outside-polygon/6786279#6786279

Игорь
24.07.2016
03:38:52
Количество вершин в полигоне. Для обхода массивов с координатами этих вершин xp и yp. И кажется мне, что работать так будет только если вершины записаны в порядке обхода их по или против часовой стрелки, но не в случайном порядке, хотя могу ошибаться.

Oleg
24.07.2016
14:18:28
ref Mydata[] mds
Нет, копируются только адрес начала и размер, сами элементы как по ссылке

Dmitry
24.07.2016
14:19:56
Олег, а не мог бы объяснить почему? Если ref написать что будет?

Max
24.07.2016
14:19:58
Ты с плюсами точно не спутал? Я точно знаю что копируются ибо сам на это однажды напоролся

Oleg
24.07.2016
14:21:31
foreach( ref a; arr)
Так надо
А сигнатура функции будет копировать только два значения
Адрес и длину
Если писать ref в сигнатуре, то можно их изменить
Всмысле адрес
Можно новый массив присвоить

Google

Max
24.07.2016
14:24:36
http://ideone.com/88Sc95
Таки весь копируется

Oleg
24.07.2016
14:26:13
Только статические массивы копируются

Dmitry
24.07.2016
14:27:16
Олег? Точно? Просто я тоже про это не слышал нигде. Думал всегда надо ref писать если к данным нужно как к ссылке обратиться

Oleg
24.07.2016
14:27:27
Динамические сами по себе это размер и адрес
Вы сейчас очень просто это можете проверить) но я в этом уверен
Передача динамического массива как в С

Dmitry
24.07.2016
14:28:18
Зачем тогда
foreach( ref a; arr)
чем будет отличаться от просто:
foreach(a; arr)

Oleg
24.07.2016
14:28:29
Это foreach
Это совсем другое

Max
24.07.2016
14:29:09

Oleg
24.07.2016
14:30:23
Видимо мы недопонимаем друг друга) Вечерком с компа зайду и скину пример

qwe
24.07.2016
14:54:29
Добрый день! Все пользуются консольным gdb для debug-a или кто-то что-то другое предпочитает. Можете написать? Никак не могу с gdb совладать

Макс
24.07.2016
14:55:03
Вообще ничем не пользуюсь.

qwe
24.07.2016
14:55:43
pragma и writeln?

Макс
24.07.2016
14:55:53
ага)

qwe
24.07.2016
14:56:17
okay

Dmitry
24.07.2016
15:05:12
pragma что делает?

Макс
24.07.2016
15:05:48
Думаю, речь была о pragma(msg, выражение).
Выводит результат выражения в компайл-тайме.

Google

Макс
24.07.2016
15:06:33
Можно выводить кастомные сообщения после static assert(0) и вообще грабить корованы.

Dmitry
24.07.2016
15:06:36
а чем это может быть полезно?

Макс
24.07.2016
15:07:07
ну, проверить что какой-то шаблон работает как задумано, что правильный код генерится для миксина и т.п.

Dmitry
24.07.2016
15:08:05
следующий вопрос - где mixin полезен. Если можно какой-то простой пример. А то его регулярно встречаю, а суть не понимаю


Макс
24.07.2016
15:08:40
ты про тот mixin, который mixin("Строка")? а то есть ещё template mixin, он совсем про другое
mixin("строка") тупо включает строку как кусок исходника.
например, mixin("i = 5") соответствует i=5. в таком виде смысла никакого, но строка может быть собрана по кусочкам во время компиляции, поэтому можно, например, в зависимости от параметров шаблона использовать разные поля или по-разному называть переменные.
например, можно на ходу написать и затем mixin-ом включить в код геттер для какого-то поля
таким образом с помощью этого mixin'а и ещё того, другого template mixin'а можно сделать автогенерилку комплектов «приватное поле + геттер + сеттер», которую можно будет потом вызывать в одну строчку:
mixin create_property!("first_name");
mixin create_property!("last_name");
...
(тут mixin — это тот другой mixin)
(предполагается, что внутри объявления того другого mixin я генерю код, используя для этого mixin("строка"))

Admin
ERROR: S client not available

Макс
24.07.2016
15:15:57
объясняю как бог, мля(
помогите кто-нибудь ?

qwe
24.07.2016
15:20:24
@DmitryBubnenkov Вы на Python не программировали?

Dmitry
24.07.2016
15:20:54
давай лучше не ты) я на нем очень мало писал и то только в процедурном стиле без ООП

qwe
24.07.2016
15:21:07
eval там видел?

Dmitry
24.07.2016
15:21:45
честно — нет) D фактически первый и наверно единственны язык на котором я что то могу писать внятное
кстати, а можно с помощью mixin вставить в бинарик текстовую строку а-ля ini а потом сделать чтобы exe сам себя патчил? Ну чисто теоретически?

qwe
24.07.2016
15:22:52
можно, но не надо так делать)

Макс
24.07.2016
15:23:32
есть компайл-таймовые библиотеки-парсеры разных форматов, включая INI, если ты об этом. т.е. теоретически да, можно для унификации держать внутри кода тот же формат конфига, что будешь класть потом снаружи

Google

Dmitry
24.07.2016
15:24:04
а пропатчить в самом бинарике его сложно?

Макс
24.07.2016
15:24:31
но мне больше такой подход по душе (правда, ещё не пробовал в деле эту либу): https://github.com/stefan-brus/inid
объявляешь голую структуру, а она загружает одноимённые данные из файла. я сам похожий велосипед у себя изобрёл, а потом увидел это))

qwe
24.07.2016
15:24:45
смотри, на самом деле вот простое практическое практическое задание. Тебе надо посчитать результат арифметического выражения. Например 2+2. И при том выражение в приложение ты передаешь строкой. И mixin просто примет эту строки и выдаст результат

Макс
24.07.2016
15:24:45
уверен, что как раз на миксинах всё и сделано
странный пример. если 2+2 известно на этапе компиляции, то чего его в уме не посчитать-то. а если оно приходит в рантайме, то миксина уже нет ?

qwe
24.07.2016
15:25:56
елы палы(

Макс
24.07.2016
15:26:17
зато так можно написать довольно тупой консольный калькулятор на rdmd ?
собственно, назвать его можно... rdmd ?

Dmitry
24.07.2016
15:27:03
inid получается для того чтобы слепок конфига сделать имеющегося?
и засунуть его в бинарик с тем чтобы когда надо восстановить?

Макс
24.07.2016
15:29:13
Смотри, если интересно, вот мой костыль подобного плана: https://gitlab.com/maaaks/ongra/blob/master/ongra/config.d
Я объявил структуры с нужными мне полями, нужных мне типов. А затем (внизу файла) в статических foreach'ах все поля обошёл и для каждого сгенерировал mixin'ом строку, которая загружает значение из одноимённой строчки в INI-файле. (Для парсинга INI я тут стороннуюю библиотеку использую, она создаёт объект IniLikeFile.)
плюс в том, что я не пишу вручную сто унылых строк по типу
config.host = ini["host"].to!string;
config.port = ini["port"].to!ushort;
config.scheme = ini["scheme"].to!string;
D сам генерит D-код за меня.

Dmitry
24.07.2016
15:30:33
mixin получается сугубо для compile time?

Макс
24.07.2016
15:30:46
да

Dmitry
24.07.2016
15:34:18
так погоди, я не просеку. Если тебе в экзешнике копия конфига нужна, то почему бы его просто не замиксинить (сделать его импорт через миксин)

Макс
24.07.2016
15:34:38
а у тебя конфиг что, на D написан?

Dmitry
24.07.2016
15:35:20
тоесть импортировать текстовый файл просто так нельзя?

Макс
24.07.2016
15:35:25
не ну если ты про мой случай, то мне конфиг хочется парсить в рантайме, без перекомпиляции. поэтому и нужно генерить такой конвертер пустого в порожнее, который руками писать влом)
можно

Dmitry
24.07.2016
15:35:35
я думал можно что-то типа mixing(import foo.txt) или как то так

Макс
24.07.2016
15:36:25
ты про это? http://dlang.org/spec/expression.html#ImportExpression

Dmitry
24.07.2016
15:36:26
А тоесть чтобы в зависимости от значений конфига в коде решения какие-то прнимать? Я слабо представляю реальный кейс
да про это походу