
Eto
06.10.2017
10:10:04
Там теперь тоже бардак. :)

Dmitry
06.10.2017
10:25:18
возвращаясь к обсуждению вот этого участка кода. Но тут же каждый отдельный блок catch исключение дальше прокидывает уровнем выше т.е. может два блока тут не лишние? Типа может обработка будет выше еще?

Maxim
06.10.2017
10:28:03
ну, почти наверняка обработка будет выше, иначе приложение упадет с unhandled exception

Evil
06.10.2017
10:28:13

Google

Maxim
06.10.2017
10:30:32
ну так вот, если ArgumentException наследуется от Exception, то в данном конкретном случае нет никакого смысла же его ловить отдельно

Dmitry
06.10.2017
10:35:51
т.е. throw будет просто типа Exception ?

Maxim
06.10.2017
10:41:20
а throw; в шарпе просто пробрасывает дальше исключение или строго меняет его тип на то, что в catch указано?

Dmitry
06.10.2017
10:42:14
Да мне по Ди больше интересно, я в книжке главу про исключения правлю
Если вам все равно какого типа произошла ошибка т.к. вы все равно не можете ее никак обработать, но нет смысла ловить исключения разного типа. Будет достаточно только базового. Рассмотрим пример плохого кода.
Пример:
try
{
}
catch (MySQLException e)
{
writeln(e.msg);
throw;
}
catch(Exception e)
{
writeln(e.msg);
throw;
}

Maxim
06.10.2017
10:49:42
если ты не можешь никак обработать исключение, то в принципе нет никакого смысла его ловить)
catch(Exception e)
{
writeln(e.msg);
throw;
}
такое не прокатит, в D нужно явно указывать, какое исключение бросаешь

Oleg
06.10.2017
11:30:48
А то получится что в начале книги компилятор один и код работает а в конце другой и не работает

Dmitry
06.10.2017
11:31:47
хорошо

Oleg
06.10.2017
11:35:23
Ну или ближе к концу
Чтобы актуально было

Google

Dmitry
06.10.2017
11:37:07
хорошо. Через 5 минут сайт поднимется с последними исправления. Поправил исключение и введение.

Oleg
06.10.2017
12:18:51
а кто-нибудь в курсе sqlite асинхронно умеет?

Dmitry
06.10.2017
12:24:20
Вроде бы нет...
Но это не 100%
Но по идее она однопоточная вся

Oleg
06.10.2017
12:50:18
печаль-беда
доступ к usb-флешке с базой совсем не радует

qwerty
06.10.2017
13:41:30
SQLite supports three different threading modes:
Single-thread. In this mode, all mutexes are disabled and SQLite is unsafe to use in more than a single thread at once.
Multi-thread. In this mode, SQLite can be safely used by multiple threads provided that no single database connection is used simultaneously in two or more threads.
Serialized. In serialized mode, SQLite can be safely used by multiple threads with no restriction.
https://sqlite.org/threadsafe.html

Dmitry
06.10.2017
13:43:16
т.е. из двух потоков туда можно писать нормально?
Просто я читал все предостерегали так делать

qwerty
06.10.2017
13:44:10
оф. документацию надо было читать

Oleg
06.10.2017
14:11:15
Нет вроде функции аля step, которая вернула бы управление немедленно
А потом можно было бы проверить исполнилась она или нет
Если только в отдельном потоке работу с базой запускать и делать асинхронный интерфейс

Dmitry
06.10.2017
14:44:36
на сколько данное утверждение верно для Ди?
"Task берется из пула потоков (следовательно накладных расходов по созданию практически нет), а Thread - поток создается сам (с накладными расходами, но большей свободой, например - дать имя)."

Andrey
06.10.2017
14:46:59
таск не берется а отдается одному из потоков

Dmitry
06.10.2017
14:51:21
тоесть никакого пула потоков нет?
для файберов есть аналог пула или они создаются налету. как понимаю им пул не нужен никакой

Google

Oleg
06.10.2017
15:09:42

Andrey
06.10.2017
15:09:43
рекомендуется к прочтению) https://dlang.org/phobos/std_parallelism.html и https://dlang.org/phobos/core_thread.html

Dmitry
06.10.2017
15:10:47
Я не совсем понимаю зачем для файберов пул. Для потокоа понятно — нужно создать копию контекста процесса (могу криво выражать мысли) но у них то зачем. Они же просто функции который умеют yield делать

Andrey
06.10.2017
15:19:07
для тасков есть пул
https://dlang.org/phobos/std_parallelism.html#.TaskPool

Dmitry
06.10.2017
15:49:30
Я кстати http://dlang.ru/faq еще дополнил. Есть еще идеи что туда добавить?

Oleg
06.10.2017
16:44:44
Зачем включен calypso в конце faq без пояснения вообще?
Это достаточно спорный проект, он то жив, то мёртв...
И я не нашел на какой версии он базируется

Dmitry
06.10.2017
16:48:27
Ок помечу про это

Oleg
06.10.2017
16:52:09

Dmitry
06.10.2017
16:52:43
я про calypso

Oleg
06.10.2017
16:55:07
Я понял, что про него, не понял сам мессадж предпоследний)
Я всмысле не то что бы туда добавить
Я про то что зачем давать ссылку на экспериментальный проект?
Либо пояснить, что мол так и так, не для production пока или вообще, лучше убрать в другой раздел
Если говорить о повышении популярности языка новых пользователей нужно проводить по пути наименьших косяков
Писать про то что D ок для встраиваемого софта неправильно именно с этой точки зрения

Dmitry
06.10.2017
16:59:04
а что мешает ему эту роль играть? Ну кроме того что LDC еще староват

Oleg
06.10.2017
17:01:01
Человек, думая, что сейчас так быстро и красиво напишет прошивку для какого-нибудь stm32 столкнется с достаточно серьёзными препятствиями, по сравнению с другими языками и будет чувствовать себя обманутым или просто расстроится так, что не будет смотреть на язык для других задач

Google

Oleg
06.10.2017
17:02:08
Даже на rpi2 есть странные проблемы, которые элементарно уже не в моей компетенции
Любой другой человек столкнувшись с подобным при знакомстве с языком решил бы больше D не использовать
Заинтересовать нужно путём объяснения что сейчас выиграет человек при использовании, но это должно быть железобетонным иначе сильно ударит по репутации языка
А так получается только хвальба и замалчивание проблем. На пропаганду смахивает, что тоже может отталкивать.

Admin
ERROR: S client not available

Oleg
06.10.2017
17:13:36
нет ограничений в 64МБ ПЗУ и 16МБ ОЗУ, что явно подразумевает тема embedded
embedded можно, но сложно, так как ещё нужно заменять рантайм

Dmitry
06.10.2017
17:21:14
понял, спасибо, а вот все эти пулы поково и файберов. Там смысл в чем. Как я понимаю просто создание потока операция трудозатратная очень и поток это фактически копия контекста новая так?

Oleg
06.10.2017
17:22:31
не то что бы копия, а отдельный контекст
да и файбер по сути тоже самое, только в пространстве пользователя и меньше данных
а поток это объект ядра системы и все манипуляции с ним требуют преключения между пользовательским режимом и режимом ядра

Dmitry
06.10.2017
17:23:28
а контекст это просто копия состояния процессора?

Oleg
06.10.2017
17:23:41
нет, не совсем
значения регистров + ещё информация
у файбера это стек
у потока может быть какая-то информация, необходимая ядру

Dmitry
06.10.2017
17:24:59
стек это уже то что в оперативной памяти хранится?

Oleg
06.10.2017
17:24:59
кстати разные ОС могут по разному проводить границу между потоком и процессом

Google

Oleg
06.10.2017
17:25:07
да
но для файбера его нужно сохранить
ну всмысле отдельно

Dmitry
06.10.2017
17:25:38
у потока может быть два стека? Или только один. Или это как позвоночник получается — не больше одного

Oleg
06.10.2017
17:25:38
чтобы переключиться на другой
вроде как только один
и для потока, вроде, не нужно сохранять его состояние при переключении, потому что адресация пересчитывается, когда поток выполняется

Dmitry
06.10.2017
17:26:22
но компилятор знает какие регистры файбер заюзал, чтобы их сохранить так?

Oleg
06.10.2017
17:26:29
все сохраняет
которые вообще используются
есть даже баг по этому поводу
что не сохраняется и не выставляется какой-то флаг ошибки мат. операций
и вроде только он

Dmitry
06.10.2017
17:27:49
сохраняет все используемые или тупо вообще все которые есть?
т.е. допусти eax ebx использовались, а ecx нет. В итоге сохранятся только первые два, так?

Oleg
06.10.2017
17:28:22
вроде все полностью, до которых дотягиваются руки ассемблера из пользовательского режима
говорю же, должны сохраняться все полностью
иначе были бы магические баги