
Dmitry
07.09.2016
11:01:15
да вот фиг его уже знает. Я просто уже готов уже ко всему)

Макс
07.09.2016
11:01:47
А что такое «ленивый массив»? Нет ведь такой вещи. Есть range, р которых вы тут и говорите. Он умеет возвращать значения по порядку, и он один знает, после какого значения перестать работать. Соответственно, выделить под него нужную память никто не смог бы при всём желании.
Хотя, конечно, можно самому написать враппер, который будет возвращать элементы порциями по 100. Не удивлюсь, если в std такое есть.

Eto
07.09.2016
11:02:41

Google

Eto
07.09.2016
11:02:50

Макс
07.09.2016
11:03:27

Eto
07.09.2016
11:03:37
Могут.
length никто не отменял.

Макс
07.09.2016
11:03:59
ок, пойду заткнусь, всем сорри))

Oleg
07.09.2016
11:05:23
а есть и другие, которые больше операций поддерживают

Eto
07.09.2016
11:06:29
ок, пойду заткнусь, всем сорри))
Лучше вот поизучай:
http://dlang.org/phobos/std_range_primitives.html
С момента «It also provides number of templates that test for various range capabilities».

Макс
07.09.2016
11:07:34
ок

Eto
07.09.2016
11:08:45

Oleg
07.09.2016
11:10:14

Eto
07.09.2016
11:10:28
Это слова Александреску были.

Oleg
07.09.2016
11:10:50
да я и не спорю, что может оно и так, просто пока не понимаю чем плохи

Google

Oleg
07.09.2016
11:11:12
кстати, никто не задумывался о статистике, собираемой с кода?
чтобы компилятор мог собирать статистику об используемых фичах языка, библиотеках, какие конкретно функции более востребованы

Eto
07.09.2016
11:12:24

Oleg
07.09.2016
11:14:05
хотя с другой стороны это может быть внешний инструмент анализа
в любом случае информация была бы полезной, имхо

Eto
07.09.2016
11:14:38
Интересная идея.

Oleg
07.09.2016
11:15:15
такие вещи используются уже лет как 10 в интернетах
но вот насчёт разработки, как-то не натыкался на такие мысли

Dmitry
07.09.2016
11:48:56
Кстати, а никто не сталкивался с тем что процесс убитый по ctrl+с где-то в памяти висеть остается. Подобный выход как-то отдельно надо обрабатывать?
Просто вот щас приложение ко ктрл-с убил и не могу понять, что и где оно повесило и как без перезагрузки системы решить проблему. В диспетчере задач пусто.
Running .\Copy2FTP.exe
Can't connect to FireBird. Error:
Unable to connect to ODBC object: [ODBC Firebird Driver]Error reading data from
the connection.
Дочерние процессы, окончание которых требуется ожидать, отсутствуют.
Нет идей почему может выпадать ошибка:
core.exception.InvalidMemoryOperationError@src\core\exception.d(693): Invalid memory operation
и ни один блок try-catch ее не ловит?
Вот казалось бы обернул все что мог: http://www.everfall.com/paste/id.php?z00kw9yyl8up

Олег
07.09.2016
13:02:11
InvalidMemoryOperationError отнаследован от object.Error, в блоке catch нужно ловить Error

Dmitry
07.09.2016
13:03:14
а...

0x9d8e
07.09.2016
13:07:14
многоточие вводит меня в цикл ожидания события, типа while(last_message.contain("...")) {}
:)

Eto
07.09.2016
13:09:08
Хорошо бы last_message в цикле обновлять. А то вечный цикл получается.

0x9d8e
07.09.2016
13:10:04
а, да
подумал что это в методе contain имплементировано, но это вносило бы непонятки
while(Telegram.getLastMessage().contain("...")) {}

Google

0x9d8e
07.09.2016
13:13:02
в прочем в моей голове похоже первый вариант, ибо я до сих пор неосознанно жду продолжения

Dmitry
07.09.2016
13:13:09
а ты к консольный версии телеграмма пытаешься прицепиться чтобы оттуда парсить лог?

0x9d8e
07.09.2016
13:13:38
нет, это псевдокод отражающий баг в моей голове
увидел "а..." и без конца жду продолжения, так что работать не могу :)

Dmitry
07.09.2016
13:21:43
К теме про ошибку.
У меня код:
catch (Error ee)
{
writeln(ee.info);
writeln("++^^^^^^^^^^^++");
}
выводит только:
core.exception.InvalidMemoryOperationError@src\core\exception.d(693): Invalid memory operation
и не могу понять как больще инфы поймать

Eto
07.09.2016
13:30:43
writeln(ee);?

Anatoly
07.09.2016
13:33:23
я бы задебажил
http://wiki.dlang.org/InvalidMemoryOperationError

Eto
07.09.2016
13:46:10

Dmitry
07.09.2016
13:48:42
InvalidMemoryOperationError явно на моменте с FTP выпадает. Тот глюк с неумершим процессом я так повторить и не смог. Помогла только перезагрузка компа
Фигасе! Вадиму респект http://forum.dlang.org/post/lbilqqcqbojzfqhanjdf@forum.dlang.org

Anatoly
09.09.2016
15:43:16
да, осталось только весь код dlangui переписать и респект...
ну и хоть какие-то модельки-вьюшки прикрутить
ну, то есть переархитектурить

Dmitry
09.09.2016
17:49:33
в плане переписать? там разве плохой код?


Anatoly
09.09.2016
19:13:32
widget надо просто распилить, конструткоры перегружены, сигналы/слоты вперемешку с листнерами + система ивентов, которая не копенсирована листнерами... зачем-то свой собственный язык разметки dml, когда можно было обойтись ямлом, джейсоном или xml, наконец.
class TreeItems : TreeItem ну и виджеты являются наследниками лэйаутов, например, Собствено, если придраться к TreeItem, то он почему-то вообще не виджет, но контейнер
в editors такая-же путаница наследование/включение. Можно было всё сделать миксинами и код не выглядел бы таким громоздким
вот https://github.com/buggins/dlangui/blob/master/src/dlangui/widgets/editors.d#L223
здесь уже сигналы/слоты (параметризация листенром вообще-то немного сбивает), а не лиснеры
и в базовом классе редактора зачем-то
protected void drawLeftPaneLineNumbers(DrawBuf buf, Rect rc, int line)
эта жесть достойна помещения в ресурсы или в статическую область с подгрузкой оттуда:
https://github.com/buggins/dlangui/blob/master/src/dlangui/widgets/editors.d#L520
за такое я бы себе руки отпилил
https://github.com/buggins/dlangui/blob/master/src/dlangui/widgets/editors.d#L1271
Везде передёргивается childById. Id строковый и поиск идёт перебором и сравнением
https://github.com/buggins/dlangui/blob/master/src/dlangui/widgets/widget.d#L1547
ладно, там легко исправить. Сделать хотя бы мапу, а то на перегруженном интерфейсе какой-нибудь проги для внутреннего пользования компании, на банальной смене стиля какого-нибудь текстового поля (например, в случае валидации) это всё будет адово тормозить.
И т.д. Там много всего. Непонятные однобуквенные переменные без описания, Методы с ненужным описанием, пренебрежение производительностью. Некоторые вещи с данными вообще лучше в отдельные потоки выводить, например.
Да, это всё поправимо, можно подчистить, привести к единообразию, НО нет там концепции с модельками и вьюшками, а мне очень надо. Потому что я хочу чтобы были данные и они отображались в разных вьюшках и ничего не падало, например.
Я ковырялся в Qt, там очень много странного кода. Портировать его - просто ад. Биндинг - выход, но расширения будут выглядеть неидеоматично.
JavaFX - гораздо приличнее выглядит и некоторые вещи, которые там реализованы очень извращённо, в ди можно реализовтаь просто и фичи будут на халяву из коробки.
всякие Observable реально можно упростить. Этим я и займусь скоро. Пока тренируюсь на котиках


Pavel
09.09.2016
19:21:13
Видимо когда полет мысли при кодинге то не смотришь особо на стиль и оптимизации) Это вылечивается пулл реквестами и объяснением почему так лучше.

Anatoly
09.09.2016
19:38:37
у Вадима есть огромный опыт, насколько мне известно. Я в курсе про coolreader. Странно было видеть такой код. Видимо, фичи важнее стабильности.
Не вижу смысла поддерживать проект, код которого и заложенные концепции мне в принципе не нравятся.
Это как поддерживать WinAPI, который лучше похоронить или переписать с нуля.

Pavel
09.09.2016
19:44:37
> у Вадима есть огромный опыт, насколько мне известно.
К сожалению или к счастью, сейчас уже индустрия разработки ПО разрослась до таких размеров, что даже опытные разработчики могут не знать каких-то концепций :) Об этом надо написать ему мне кажется, если он идею воспримет, то сам все перепишет. Судя по тому сколько он пишет кода, производительность у него огромная.

Google

Мерлин
10.09.2016
16:46:06
[last news]
Voldemort types – D Wiki

Anatoly
10.09.2016
16:50:16
а я не из вики про это узнал http://p0nce.github.io/d-idioms/
видимо, добавили)

0x9d8e
12.09.2016
11:47:52
https://habrahabr.ru/post/309756/
Полагаю можно будет это и в качестве гуя использовать. При этом никакого js и минимальный расход ресурсов. Под разные платформы пишем разные стили и вуаля.

Dmitry
13.09.2016
07:00:19
Кстати, а автор dini случайно не Max с нашего канала?
Кстати, не сильно ли я много try-catch использую?
http://www.everfall.com/paste/id.php?yct9xui80wn2
Вообще как лучше сделать. По идее если файл конфига не найдет, то продолжать нет смысла. Получается если не найден, то надо кинуть исключение так?
А дадальше как быть? Если экземпляр Конфига в ьain создается? обернуть его создание в try-catch и типа если попали в блок catch то делать return ? Или как лучше то?

Sergey
13.09.2016
08:03:52
Здравствуйте. Дмитрий, про scope знаете?

Dmitry
13.09.2016
08:04:39
да знаю, но видимо не так его пытаюсь применять.

Admin
ERROR: S client not available

Dmitry
13.09.2016
08:06:03
Вот текущий код http://www.everfall.com/paste/id.php?w9b1jb2pvgns
Можно это как-то покороче записать:
`
try config = new Config();
catch(Exception e)
{
writeln(e.msg);
return;
}
`
?

Pavel
13.09.2016
08:28:11
Не понял зачем тебе внутренний try catch
Помести все в один

Dmitry
13.09.2016
08:28:35
ты про этот?
try
{
dbname = ini.getKey("dbname");

Pavel
13.09.2016
08:29:40
Да

Dmitry
13.09.2016
08:31:05
ну просто смотри. глобальный try-catch в ParseConfig смысла не имеет т.к. мне нужно тогда или в блоке catch еще одно исключение кидать или этот блок не делать и в main все обрабатывать

Pavel
13.09.2016
08:31:40
Да, обрабатывай в main
Класс конфига не должен отвечать за вывод ошибок

Dmitry
13.09.2016
08:32:28
тоесть в нем только кидать их?

Google

Pavel
13.09.2016
08:32:50
Он просто кидает исключение куда то наверх в управляющий код. А уже управляющий код должен решить что с этим делать

Dmitry
13.09.2016
08:33:48
а вот как обыграть тут момент, что не смогло получить значение?
dbname = ini.getKey("dbname"); ?
это в доках dini должен быть момент про это?

Pavel
13.09.2016
08:34:36
Наверно, почитай

Dmitry
13.09.2016
08:35:01
вообще правило какое то есть кто должен кидать исключения, а кто ловить?

Pavel
13.09.2016
08:35:07
Я бы сделал у класса 2 метода еще - загрузку значений в память и валидацию
Правило такое что обычно бессмысленно кидать исключение и тут же его ловить
Почему бы тогда не написать ошибку через if просто

Dmitry
13.09.2016
08:38:29
угу понял, пасибо

Pavel
13.09.2016
08:47:57
Насколько я вижу, если что-то пошло не так, то у тебя программа должна прервать работу. А тут получается что ты ловишь внутри класса исключение, пишешь сообщение об ошибке, и дальше программа как ни в чем не бывало продолжает работать, даже не зная что в классе произошла исключительная ситуация.

Anatoly
13.09.2016
08:59:05
наверное, это жаба-вей, когда иключительные ситуации не такие исключительные)
не помню про оверхэд исключений в ди, думаю он больше, чем в жабе

Макс
13.09.2016
08:59:43

Dmitry
13.09.2016
09:34:28
А когда пишут так:
void moveCursorLeft(int n = 1)
это значит 1 — дефолтное значение?
Вообще механизм сдвига курсора (осваиваю ConsoleD) какой?
вот допустим написал я:
foo: 123
теперь мне нужно написать:
foo: 4
мне же просто сделать сдвиг - мало. Мне нужно еще и 23 убрать от старой записи

Anatoly
13.09.2016
09:38:54
там механизм такой, какорй закодировали)
и тебе повезёт, если там не режим вставки)
просто пробелами затрёшь
кстати, спасибо за идею про "режимы". Я как-то и забыл даже, что такое может пригодиться