
Макс
24.07.2016
15:41:23
например, пишешь ты шаблонизатор. чтобы значения переменных в HTML подставлял. хочешь, чтобы в исходниках у тебя лежал такой файл:
<h1>{{ title }}</h1>
А при импорте в код получалось, как будто там написано такое:
return "<h1>" ~ data.title ~ "</h1>";
Сначала делаешь import("template.html"), как по предыдущей ссылке, да. А затем с помощью кодогенерации на миксинах делаешь какой захочешь код, заменяя одно на другое. Получается, что ты можешь под свои нужды изобрести мини-язычок и часть файлов писать на нём, а не на D, а потом своими миксинами в D его конвертировать уже во время компиляции. Красота же.
пример условен, конечно, вряд ли шаблонизатор будет именно такой код генерировать. тебе там как-то по-другому захочется

Dmitry
24.07.2016
15:45:41
а... понял
пасибо

Google

Макс
24.07.2016
15:45:52
https://github.com/PhilippeSigaud/Pegged/
Вон есть библиотека-генератор парсеров грамматик, у неё свой язык, и она, читая описания языков на нём в компайл-тайме, сочиняет необходимые структуры и функции для парсинга. Язык внутри языка!

Dmitry
24.07.2016
15:48:39
так, а inid значит где полезен?

Макс
24.07.2016
15:50:01
ты у себя в приложении хранишь какой-то центральный конфиг? например
class Config {
string user;
string password;
uint fontSize;
}
если да и если ты хочешь из INI с такой же структурой автоматически заполнять этот класс значениями, а не писать вручную загрузку каждого поля, то вот он и пригодится
но я, повторюсь, его не юзал, только пример прочитал)

Dmitry
24.07.2016
15:51:54
а... короче почти тоже самое что ты написал так?

Макс
24.07.2016
15:53:37
да, я изобрёл такой же костыль вроде

Dmitry
24.07.2016
15:58:15
Так, а чтобы мне из самого простого написать для практики чтобы фишку compile time пhосечь? А то я явно кучу фишек не догоняю

Макс
24.07.2016
15:58:47
напиши свой собственный костыль наподобие моего Config ?
и несложно, и выкинуть не жалко ?
ну или не знаю
ты шаблоны какие-то писал? можно доработать, может быть

Dmitry
24.07.2016
16:01:32
нет не писал :( вообще

Макс
24.07.2016
16:01:53
ну вот геттеры-сеттеры напиши

Google

Dmitry
24.07.2016
16:02:15
геттеры-сеттеры это же Шарповсая штука в Ди вроде бы их нет?

Макс
24.07.2016
16:03:31
чтобы ты писал:
mixin property!(int, "id");
А оно само генерировало:
private int _id;
int get_id() { return _id; }
void set_id(int id) { _id = id; }
ну геттер и сеттер — слова общие. да, я слышал что в C# для них какие-то удобства сделаны. вот и ты себе удобство маленькое соорудишь.
и миксины заюзаешь на деле
причём и те и другие))

Dmitry
24.07.2016
16:04:59
а...
геттеры и сеттеры это просто поля класса?

Макс
24.07.2016
16:05:59
методы
для доступа к полям

Dmitry
24.07.2016
16:07:19
а зачем специальные методы для доступа нужны?
Я до этого когда писал просто к полям обращался
без методов

Макс
24.07.2016
16:07:40
тут незачем. да, я опять надуманный пример выдал(
нужны обычно, чтобы какие-то побочные действия гарантированно выполнялись при каждом доступе. скажем, логировать. но это опять надуманный бред
хм, тогда не знаю

Dmitry
24.07.2016
16:09:46
А ты на шарпе пишешь? Зачем их там юзаешь?

Макс
24.07.2016
16:09:53
неа

Dmitry
24.07.2016
16:31:11
Так, а все же к теме экзешник патчить. Я понимаю что это тупорный вариант, но на сколько он сложный? Просто хочется попробовать
и так же минусы интересны которые это может вызывать

Макс
24.07.2016
16:31:53
я вообще не понял, что ты хочешь

Dmitry
24.07.2016
16:33:52
Чnобы не выносить данные в конфиг. А чтобы сделать exe который патчит сам себя.

Google

Мерлин
24.07.2016
16:35:33

Dmitry
24.07.2016
16:35:48
Просто теоретически интересно.

Макс
24.07.2016
16:35:57
подозреваю, что это вопрос не про D, а про работу с Windows-специфичными ресурсами. и никакая кодогенерация уже не поможет, ты ведь хочешь магически перезагружать данные _после_ компиляции

Dmitry
24.07.2016
16:36:00
Чтобы был один exe куда всю вшито

Мерлин
24.07.2016
16:36:06
Ну можно например в конец приклеивать
Есть такая штука как встраваемые ресурсы
Но там обычно read only

Dmitry
24.07.2016
16:36:41
Патчинг активного процесса возможен?

Мерлин
24.07.2016
16:37:26

Макс
24.07.2016
16:37:34
что есть патчинг? что ты хочешь чтобы произошло?

Dmitry
24.07.2016
16:37:52
я имею ввиду когда софтина запущена, она сможет сама свой exe пропатчить? Или это невозможно?
Я хочу значение поля бинарика поменять

Макс
24.07.2016
16:39:39
наверное, да, но к этому моменту языка D у тебя уже нет, а есть бинарный код. я про него не знаю. и, честно говоря, не понимаю зачем знать

Dmitry
24.07.2016
16:40:19
ок пасибо)

Денис
24.07.2016
17:20:10
Вопрос товарищи
Шаблонизирую функцию
Как мне проверить является ли шаблон класса T - массивом
и если является, то получить тип того, из чего этот массив

Макс
24.07.2016
17:21:37
либо в std.traits найти подходящую штуку типа isArray!T, наверняка будет

qwe
24.07.2016
17:21:47
? хороший вопрос

Денис
24.07.2016
17:22:32

Google

Макс
24.07.2016
17:23:39
либо в условной сигнатуре использовать трейт compiles, например:
void foo(T)(T t) if (__traits(compiles, (new T)[0])) {}
наверное, я перемудрил))

Денис
24.07.2016
17:31:44

Макс
24.07.2016
17:31:49
ну а исходный тип, наверное, получить через какой-нибудь typeof(T.init[0])

Денис
24.07.2016
17:32:01
там есть

Макс
24.07.2016
17:32:01
(написал наугад, сильно не вдумывался)

Денис
24.07.2016
17:32:07
ForeachType
Тоже в трейтсах

Admin
ERROR: S client not available

Макс
24.07.2016
17:32:17
о, точно, круто
Ну, в принципе, я почти угадал принцип работы) Только они там по-честному запускают foreach, а не берут [0].
https://github.com/dlang/phobos/blob/master/std/traits.d#L6200

Игорь
25.07.2016
08:28:22
Уже давно сижу на этой конфе, но вот решил признаться. Сижу только для того что бы понять "а нафига мне D" :) Нравится мне питон за скорость разработки, C за скорость исполнения кода. Но что мне даст D я понять не могу. Есть в нем что-нибудь особенное, ради чего стоит изучить?

Макс
25.07.2016
08:32:01
Метапрограммирование же. Всё, чего так не хватало в C++. Но, возможно, я из другого типа людей, мне даже питон при всех его объективных плюсах не очень нравится из-за того, что нет компиляции и соответствующих проверок. И вот когда мы исключаем питон и т.п. по этому признаку, то самым гибким из оставшихся (и известных мне) становится D. А на скорость выполнения мне в моих пет-проектах до некоторой степени плевать просто, не сравнивал по этому параметру.

Игорь
25.07.2016
08:34:13
Да... с питоном таже беда, то что могло быть выявлено еще на этапе компиляции потом долго и нудно ловишь в виде бага. Как бы не в обиду питону, это со всем скриптовыми языками беда.

Макс
25.07.2016
08:34:25
Я бы не отказался от языка с синтаксисом Python, в который по мере возможности впихнуты возможности D! ассёрт без лишних скобок это хорошо)

Игорь
25.07.2016
08:35:35
NIM пробовал, по синтаксису похоже. Но как-то совсем уж сыроват.

Max
25.07.2016
09:33:39
В ниме всё же многовато лишнего, и он куда сложнее чем кажется. Мне из косящих под скрипты больше всего понравился crystal.
Ди нравится как плюсы без легаси

Мерлин
25.07.2016
09:36:44
Go жи

Oleg
25.07.2016
09:36:55

Google

Max
25.07.2016
09:37:03
Он слишком убогий :(

Мерлин
25.07.2016
09:37:05

Oleg
25.07.2016
09:37:21

Мерлин
25.07.2016
09:37:33

Oleg
25.07.2016
09:37:51

Мерлин
25.07.2016
09:38:47
На нем ты пишешь байтолапшу, и это прекрасно

Max
25.07.2016
09:40:03
Там уже можно написать коллекцию без кастов всего к интерфейсу написать хотя бы контейнер?

Мерлин
25.07.2016
09:40:14
С помощью кодогенерации

Max
25.07.2016
09:40:56
О, сишечка, привет

Oleg
25.07.2016
09:41:15

Игорь
25.07.2016
09:41:26
На go я не пойду даже не потому, что он мне сам по себе не нравится, но и потому, что поддержка от "корпорации добра", уже наелся полной ложкой от них, достаточно.

Мерлин
25.07.2016
09:41:26

Max
25.07.2016
09:42:20

Мерлин
25.07.2016
09:43:15

Макс
25.07.2016
09:44:05
Щито? Комментарии влияют на код?? По-моему, даже PHPшники, когда обсуждали ввод такой фичи, сомневались, не знаю, правда, чем кончилось

Мерлин
25.07.2016
09:44:54

Макс
25.07.2016
09:45:43
типа type hints в питоне? # type: int

Мерлин
25.07.2016
09:48:43
типа type hints в питоне? # type: int
Неа
Там строгая типизация
Просто нет дженериков, частично их заменяет механизм интерфейсов, а частично - кодогенерация, которую используют скажем для того, чтобы сгенерировать строго типизированную коллекцию

Oleg
25.07.2016
10:12:07
Ну тогда наверное норм