@dlangru

Страница 171 из 719
Oleg
17.05.2017
12:32:29
и опять же нужно ли это? можно явно передать void foo(int delegate(string) bar)

в delegate можно превратить всё

и callable объект и простую функцию

Denis
17.05.2017
12:35:07
Там функция выходит такая, что аргументы эти всегда будут одинаковыми

Google
Denis
17.05.2017
12:35:18
почти всегда

https://github.com/denizzzka/xymodem/blob/master/source/ymodem.d#L7 вот она

сомневаюсь что когда-то появится софтина, у которой будет 10 каналов передачи файлов по ymodem разного типа

Хотелось бы проверять 3 эти шаблонные аргумента на предмет соответствия написанным в первых строках файла алиасам

Oleg
17.05.2017
12:42:09
А какие есть варианты?

Что может сделать код, чтобы использовать функцию с другой сигнатурой?

Denis
17.05.2017
12:44:15
Это же библиотека, вызывающий сможет в этот шаблон любую функцию подставить. Подставит не ту и будет думать что за фигня.

А так по аргументам и возвращаемому значению можно было бы понять то или не то. Примерно как передача делегатов работает

или функций в качетве аргумента.

Oleg
17.05.2017
12:45:27
Тогда зачем через alias? Почему не делегаты?

Denis
17.05.2017
12:46:03
Делегат будет передаваться каждый вызов функции, что излишне в подавляющем большинстве случаев. Так то да, можно и делегатом

Хотелсоь сделать через шаблон почему-то.

Dmitry
17.05.2017
12:48:51
а в Фобосе есть штука для рассчета медианы?

Google
Oleg
17.05.2017
12:52:54
import std.stdio; import std.traits; import std.meta; uint trueBar(string a, uint b) { writeln(a, " ", b); return cast(uint)(a.length + b); } uint false1Bar(string, ulong) { return 1; } uint false2Bar(ulong, string) { return 2; } ubyte false3Bar(string, uint) { return 3; } void foo(alias bar)(uint x) if (isCallable!bar && is(ReturnType!bar == uint) && is(Parameters!bar == AliasSeq!(string, uint))) { writeln(bar("hello", x*2)); } void main() { foo!trueBar(12); //foo!false1Bar(2); //foo!false2Bar(2); //foo!false3Bar(2); }

всё что в блоке ограничения сигнатуры можно запаковать в шаблон, например

Denis
17.05.2017
12:55:39
там для alias уже отдаётся не функция, а нечто вроде ubyte[]()

ладно пофик, переделаю в обычные аргументы. тогда и делегаты можно будет передать (в шаблоны нельзя - на этапе компиляции объект неизвестен)

Oleg
17.05.2017
12:56:13
template isSameCallables(alias A, alias B) { static assert(isCallable!A, "A must be callable"); static assert(isCallable!B, "B must be callable"); enum isSameCallables = is(ReturnType!A == ReturnType!B) && is(Parameters!A == Parameters!B); }

Denis
17.05.2017
12:57:44
если сделать функцию с шаблонным аргументом alias function() попробвоать её посмотреть через pragma(msg, typeid(T)) то будет странное

я не понял как с этим работать

Ned Ogl
17.05.2017
18:36:02
В чем разница между const и immutable?

Denis
17.05.2017
19:11:13
Const позволяет меняться значению выше его передачи в список аргументов функции, immutable вообще не меняется, хоть в ПЗУ прошивай

Pavel
17.05.2017
19:38:48
Насколько я понимаю, можно типа сделать аргумент func(const int i) и тогда в момент передачи значение i зафиксируется в теле функции

но при этом можно передавать разные значения туда

Stepanos
17.05.2017
19:39:31
ет как final у java

чтоб в методе самом не поменялось значение

Oleg
17.05.2017
20:07:15
А вот кстати кто-нибудь знает чем отличаются объявления переменных const и immutable?

Кто-нибудь собирал пакеты для linux (rpm, deb) или установщики под win (nsis или как его там)?

Есть у кого-нибудь опыт такой?

Google
qwerty
18.05.2017
03:48:53
подставите immutable и ничего не скомпилируется

потому что immutable указатели могут быть только на immutable данные

собственно вот https://dpaste.dzfl.pl/eeaabb06af2e

так же не прокатит передача не immutable как immutable аргумент в функцию

Dmitry
18.05.2017
08:26:26
Кстати, аналог GIT уже созрел. Название конечно дурацкое Pijul, но уже для себя пользовать можно. https://pijul.com Вот дока по теории https://jneem.github.io/merging/

я сколько GIT себя не насиловал, так и не научился им нормально пользоваться. Ничего кроме отторжения он у меня не вызвал)

Ievgenii
18.05.2017
08:41:49
Ну не знаю, гит очень удобен

Dmitry
18.05.2017
08:48:20
Пока смотрю. Первое впечатление — нравится то что эта штука в виде одного файла выполнена без зависимостей.

Oleg
18.05.2017
08:59:28
Гит норм

Denis
18.05.2017
08:59:51
+1. Достаточно один раз воспользоваться бинарным поиском хитрого бага

Oleg
18.05.2017
08:59:57
https://dpaste.dzfl.pl/2e804722c42a
Я про объявление именно переменных

Не указателей, не аргументов

qwerty
18.05.2017
09:11:18
у переменных нет отличий

Dmitry
18.05.2017
09:42:18
поигрался с Pijul весьма не плохо для личных проектов. Для чего то большего хз

Oleg
18.05.2017
09:53:01
я вот, наверное ни разу (особенно в личных проектах) не натыкался на какую-то жесть, где можно было бы сказать, что git не вывозит

то, для чего он создан, он делает ок

Denis
18.05.2017
09:54:19
А ещё риск с непроверенным решением потерять часть кода не радует

Google
Dmitry
18.05.2017
09:54:19
ну у меня проекты как правило простые. Для меня git это оверхэд

на работе у нас вообще SVN)

Oleg
18.05.2017
09:55:38
ну что значит оверхед? это же не m$vs

Pavel
18.05.2017
09:55:51
Есть еще fossil

Oleg
18.05.2017
09:56:02
есть ещё hg (mercurial)

Dmitry
18.05.2017
09:56:06
fossil я пробовал — не проникся

Denis
18.05.2017
09:56:09
hg всё

Oleg
18.05.2017
09:56:13
ещё много чего есть

Dmitry
18.05.2017
09:56:25
сейчас эту штуку потыкал. для записать, откатить, очень даже не плохо. Большой плюс — она один файл.

Admin
ERROR: S client not available

Oleg
18.05.2017
09:56:37
в чём плюс то?

Dmitry
18.05.2017
09:56:51
ну не знаю, мне нравится когда софт компактный)

Oleg
18.05.2017
09:56:56
в том что ты на github не сможешь свои личные проекты выливать?

или в том, что ты будешь баги отлавливать ценой своего проекта?

или в том, что это не распостранённая хрень и ответы на вопросы сложно найти будет?

единственное что git нормально не умеет это бинарные файлы

ну и я не знаю какой системой можно нормально бинарные файлы версионировать

Oleg
18.05.2017
10:07:12
ты собирал?

насколько это реально сделать в автоматическом режиме с помощью dub или какого-нибудь инструмента поверх dub?

Google
Oleg
18.05.2017
10:08:23
чтобы минимум конфигураций нужно было бы добавлять

какую вообще информацию нужно добавлять? только пути и файлы необходимые, так?

Maxim
18.05.2017
10:09:17
да ладно, как раз для своих проектиков и надо использовать всякую жесть)

Денис
18.05.2017
10:09:52
Блин. Доступа к билд-машине нет сейчас, но вообще простой башскрипт запускается поверх уже всего собранного. Кроме путей и необходимых зависимостей для rpm вроде ничего не нужно.

Oleg
18.05.2017
10:11:00
пути есть правило в дистрибутиве (что и куда следует класть "по стилю")

а зависимости прописываются в dub

следовательно можно предположить, что сделать такую фичу для dub не является сверх задачей, так?

Денис
18.05.2017
10:12:29
Хм. Если дуб умеет выдавать все эти штуки, то звучит оче просто.

Denis
18.05.2017
13:59:55
Дурацкий вопрос: а у нас простой sleep() или delay() не завезли?

Без тредов и прочего

Dmitry
18.05.2017
14:03:53
неа

Thread.sleep(5.msecs);

Денис
18.05.2017
14:04:12
Denis
18.05.2017
14:04:27
для дебажных целей

уже нашёл ответ

https://dlang.org/phobos/core_thread.html тут оно

Dmitry
18.05.2017
14:05:35
А чем это полно?

Denis
18.05.2017
14:06:13
Ну треды не нужны на самом деле, там стаическая структура, которая уже есть если залинковать

Так что всё ок, работает

Dmitry
18.05.2017
14:52:24
А как проверить было ли установлено значение у переменной? int x; if(x is null) что-то ругается incompatible types for ((x) == (null)): 'int' and 'typeof(null)'

Andrey
18.05.2017
14:56:35
null может быть только у ссылки, вроде.

а тут x == int.init, то есть 0

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