
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 вообще не меняется, хоть в ПЗУ прошивай

Ned Ogl
17.05.2017
19:35:47
Не уловил
То есть можно:
const a = 5;
a = 10;
f(a);
?

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 аргумент в функцию

Denis
18.05.2017
03:57:20

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
Не указателей, не аргументов

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 нормально не умеет это бинарные файлы
ну и я не знаю какой системой можно нормально бинарные файлы версионировать

Денис
18.05.2017
10:06:57

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