
Dmitry
08.07.2017
12:49:08
Есть такое. Пока Мартина главным не назначили они там годами лежали

Denis
08.07.2017
13:01:47
А где смотреть лог их принятия?

Max
08.07.2017
13:07:25
В истории изменения конкретного дипа, там же подписывают принят или нет
Кстати, а принятие DIP равно его внедрению?
Равно его принятию и только. Сейчас все дипы проталкивают разработчики компиляторов — сомневаюсь что если кто-то со стороны придёт с чем-то, никому не интересным, этьо быстро внедрят даже если примут. Это же опенсорс — тебе надо ты и делай.

Google

Dmitry
08.07.2017
13:10:17
Принят = попал в следующий релиз компилятора?

Max
08.07.2017
13:11:04
Принят = будет сделан когда нибудь если в этом будет кто-то __заинтересован__.

Dmitry
08.07.2017
13:11:46
Тоесть это просто идея типа утверждена и все? Патчей нет?
Саму реализацию еще написать надо?

Max
08.07.2017
13:13:01
Я же говорю — если не будет заинтереснованных в этом людей, то самому. Это опенсорс — тут нет ни менеджмента, ни зарплат и прочих мотивационных и организационных регуляторов кроме личной заинтересованности

Dmitry
08.07.2017
13:13:43
Просто я думал каждый дип уже патч включает...

Denis
08.07.2017
13:16:33
Есть простые DIP а если сложные, от этого ещё внедрение зависит

Pavel
09.07.2017
11:30:13
https://pastebin.com/aN1tnuzr господа как такое может быть?
Запускаю ab, 2 запроса в 2 потока. Откуда может выводиться вот таокое Run client 2 ... Run client 2 ... - загадка
Ведь я инкрементирую i++ вне треда и присваиваю в num

Denis
09.07.2017
12:06:31
int i = 1;
immutable int num = i++;
это значит 2
а, постфиксный...

Google

Denis
09.07.2017
12:09:44
Попробуй отделить ++ от присвоения
Если же постфиксный оператор применяется к аргументу функции, то инкремент или декремент значения аргумента необязательно будет выполнен до его передачи в функцию. Дополнительные сведения см. в разделе 1.9.17 стандарта C++.
сложно всё с этим

Pavel
09.07.2017
12:19:15
Я пробовал писать num = i += 1; тогда вообще выводится 3

Denis
09.07.2017
12:22:12
в 2 строки напиши) сначала присвоение потом инкремент, например
однострочники это потенциальные баги

Dmitry
09.07.2017
12:56:59
Мужики, а кто-нибудь пытался библиотеки на дишечке писать?
Я пытался запилить модуль для ёмакса, и как только либу подгружал, он падал на глушняк.

Denis
09.07.2017
13:04:11
А как ты подгружал? У меня почти весь код на ди это библиотеки
у нас же там рантайм надо стартовать
https://github.com/denizzzka/geany_d_binding/blob/master/source/geany/geanyplugin.d#L92 вот пример старта
Кстати, в чём разница между extern и export?

Andrey
09.07.2017
13:38:19
extern в твоем примере это linkage attribute, export - область видимости функции, доступна везде за пределами модуля, вроде так

Denis
09.07.2017
13:43:01
linkage же тоже?

Andrey
09.07.2017
13:44:01
ну фиг знает) а если его убрать, работает?

Denis
09.07.2017
13:44:21
ага, никто нигде в биндингах его и не пишет
видимо export это именно приказ наружу отдать интерфейс, а extern это просто сигнал о том что оно там должно уже быть
Кстати, неделю назад обсуждали тут JSONB - формат окзаался простым. это JSON но правильно отсортированный + имеет первым байтом 1 как маркер что это jsonb. Добавил поддержку в dpq2

Google

Andrey
09.07.2017
13:48:30
а, понял. с export методы будут видимы, если модуль используется как библиотека.
public means that any code within the executable can see the member. It is the default visibility attribute.
export means that any code outside the executable can access the member. export is analogous to exporting definitions from a DLL.

Denis
09.07.2017
13:49:02
Ну да, но чем это отличается от extern как-то не очень понятно
extern говорит что оно там есть, а export что его надо туда поместить
вроде так

Andrey
09.07.2017
13:50:57
extern(С|D|...) это вроде к биндингу относится, calling conversion, которую использовать

Denis
09.07.2017
13:51:38
Кстати да, забыл про этот нюансик

Dmitry
09.07.2017
14:04:20

Denis
09.07.2017
14:04:42
корку запиши и посмотри стек

Dmitry
09.07.2017
14:09:13
Пытался дебаггером ковырять, нихрена не понял и забил. Классный язык, но учебных материалов и туториалов фиг найдёшь. А на чистом С писать никогда не любил. Слишком он низкоуровневый.

Denis
09.07.2017
14:10:15
Алгоритм простой: если что-то падает то берёшь корку и первым делом через GDB смотришь.
$ gdb путь_к_софтине путь_к_корке
bt

Dmitry
09.07.2017
14:10:34
Корка — ядро?

Denis
09.07.2017
14:10:36
В 90% случаев всё сразу становится понятно

Denis
09.07.2017
14:10:39
core dump

Dmitry
09.07.2017
14:25:14
> путь_к_корке
Где она, как правило, располагается?

Pavel
09.07.2017
15:08:08
В общем у меня вроде наступило некоторое просветление, но стало еще непонятнее
num = 1 (7f15d3757008), i = 2
num = 2 (7f15d3757008), i = 3
Run client 2 (7f15d3757008) ... after run 2 (7f15d3757008)
Run client 2 (7f15d3757008) ... after run 2 (7f15d3757008)
Когда цикл идет на вторую итерацию то переменная num почему то лежит по тому же адресу что и первый num. Это нормально?

Denis
09.07.2017
15:38:03
она же вне скоупа не существует

Google

Pavel
09.07.2017
15:53:36
Ну в общем да логично. Но вот почему в тред копируется этот же адрес - непонятно. В мануале написано что для тредов создаются свои локальные копии внешних переменных

Denis
09.07.2017
15:54:01
у тредов своё виртуальное адресное пространство, небось?

Andrey
09.07.2017
15:59:39
с иммутабельностью не связано? кажись иммутабельные переменные шарятся между тредами

Pavel
09.07.2017
16:00:05
import std.stdio, core.thread;
int i = 1;
int num;
void main(string[] args)
{
while (i <=2 ) {
num = i++;
writefln(
"num = %d (@%s), i = %d",
num, &num, i
);
new Thread({
writefln(
"thread num = %d (@%s)",
num, &num
);
}).start();
}
}$ dmd bug.d && ./bug
num = 1 (@7F7C5A817750), i = 2
num = 2 (@7F7C5A817750), i = 3
thread num = 0 (@7F7C59C265D0)
thread num = 0 (@7F7C594255D0)
Магия. num из цикла вообще в тред не попадает.

Denis
09.07.2017
16:00:36
т.е., однажды заиниченная эта переменная не будет меняться не смотря на ++ ?
если бы она была const я бы понял
но immutable...

Andrey
09.07.2017
16:07:46

Admin
ERROR: S client not available

Andrey
09.07.2017
16:08:01
хмм

Denis
09.07.2017
16:08:14
дык а треды же
для тредов она должна тоже быть неизменное, а цикл крутится в это время...

Dmitry
09.07.2017
16:12:21
Как правильно инициализировать рантайм если приспичило написать либу?

Pavel
09.07.2017
16:12:57
Да но не 0 же. Мы сначала заходим в цикл, кладем в num значение, и только потом инициализируем тред со всеми вытекающими. Там не может 0 оказаться.

Andrey
09.07.2017
16:13:39
я сейчас про первый пример, сначала надо с ним разобраться) мне непонятно, почему там адрес у num одинаковый
со вторым вроде понятно, у каждого треда своя копия num

Pavel
09.07.2017
16:14:46

Andrey
09.07.2017
16:15:14
и почему num == 2

Google

Denis
09.07.2017
16:16:17
изначально immutable обещали как нечто, что можно в ROM вкомпилить
но вот строки это указательна immutable
и они создаются на лету. чем это лучше shared получается? кроме того что компилятор не ругется

Andrey
09.07.2017
16:20:15

Dmitry
09.07.2017
16:20:38
В чем фишка? http://forum.dlang.org/thread/ojqbc5$gro$1@digitalmars.com?page=1
Зачем помечать что функция ничего не возвращает?

Denis
09.07.2017
16:21:35
Там они поясняют - оптимизация становится возможна кое-какая
редкая но меткая
SailfishOS не смотрели? Есть там для нас дела?

Dmitry
09.07.2017
16:37:59
Всего лишь?

Denis
09.07.2017
16:38:29
ну там это что-то такое достаточно важное, типа главного цикла ОС
как я понимаю
и его оптимизирвоать имеет смысл

Andrey
09.07.2017
16:43:24

Denis
09.07.2017
16:44:19
читал давным давно
почему же адрес не меняется?
и как оно разруливает ситуацию постоянно плодящихся новых тредов при постоянно создающемся новом значении immutable?

Dmitry
09.07.2017
16:56:36
https://user-images.githubusercontent.com/4272771/27995406-3d16ddbe-64a4-11e7-9d63-87bd80781fb4.png

Denis
09.07.2017
16:58:37
Пятый биндинг Gt?
Ааа, это С++ апи LDC
Жаль что в dub.sdl нельзя компилятор жёстко прописать
А как всякие питоны к Qt биндят?

Oleg
09.07.2017
17:08:04