@dlangru

Страница 274 из 719
Oleg
30.09.2017
16:35:44
vibe не труЪ =)

Ибо забагован и тормознут

Stepanos
30.09.2017
16:39:40
:) фиксить надо

Oleg
30.09.2017
16:40:19
:) фиксить надо
Ты пробовал?

Google
Stepanos
30.09.2017
16:40:45
я аноташки еще не осилил

и потоки(

Oleg
30.09.2017
16:41:26
В D или вообще?

Stepanos
30.09.2017
16:42:11
в D, в java знаю потоки

но там фиберлв нет

Oleg
30.09.2017
16:43:35
Не сложная тема, но чтобы именно освоить нужно начать чуть по другому думать

qwerty
01.10.2017
19:08:22
Как на D запустить программу в фоне (демонизировать)

можно без поддержки windows

нашел либу NCrashed под названием daemonize

но она 3 года не поддерживается

Pavel
01.10.2017
19:15:37
Может так же как и на си? Форкнуться пару раз и закрыть входы/выходы

А может эта штука от ncrashed просто работает и не требует поддержки

qwerty
01.10.2017
19:28:06
дело в том, что я не могу найти fork

Google
Andrey
01.10.2017
19:29:00
core.sys.posix.unistd

qwerty
01.10.2017
19:33:43
core.sys.posix.unistd
интересно

в документации нет

но с скомпилировалось

Andrey
01.10.2017
19:34:32
в документации похоже, платформонезависимое только

Oleg
01.10.2017
19:35:09
Там есть разные функции

qwerty
01.10.2017
19:37:24
среди них fork я не нашел. Я думал, что можно запустить процесс через spawnProcess, но потом мне показалось избытычно. Не говоря о том, что у fork есть вполне конкретные особенности, которые пока что не нужны, но в дальнейшем они бы пригодились

Andrey
01.10.2017
19:40:57
ну spawnProcess не поможет, надо ж еще setsid вызвать.

qwerty
01.10.2017
19:42:25
вместо импорта сделал extern (C) int fork();

о_О

и оно работает

Maxim
02.10.2017
04:21:07
ну так стандартная библиотека по умолчанию линкуется же

Dmitry
02.10.2017
05:44:08
Где-то видел примеры как сервис\демона сделать — типа какую обертку в код нужно добавить

Почему следующий код мне мусор выводит: string str = "abc"; string* x_ptr = &str; writeln(x_ptr); writeln(*(x_ptr+1)); Потому что я ссылаюсь по адресу за границами строки?

Ievgenii
02.10.2017
13:33:06
А вот зачем так писать?

Я просто не понимаю...

Dmitry
02.10.2017
13:33:18
да просто интересно

Ievgenii
02.10.2017
13:33:32
Ну так на С++ так гоу писать)

Ну вот зачем так писать?))

Google
Dmitry
02.10.2017
13:34:00
сугубо академические интерес

у меня просто было в планах посмотреть возможность реализации расширеший для ПГ на D. Там этих указателей уйма

Pavel
02.10.2017
13:35:12
"Мусор" - это что имменно ?

Dmitry
02.10.2017
13:35:32


Pavel
02.10.2017
13:35:58
Я вижу что ты создал перменную типа size_t, записал туда адрес строки, а дальше пытаешься это вывести

Andrey
02.10.2017
13:36:11
н7е за границаими строки, а на левый адрес, т.к. x_ptr указатель на указатель

Pavel
02.10.2017
13:36:29
Надо смотреть как работает writeln если ему в аргумент передать указатель. Может он начинает тупо выводить все символы, пока не встретит \0

Dmitry
02.10.2017
13:37:21
Вот так мы случайно не адрес буквы "а" получим? string str = "abc"; writeln(str.ptr+1);

Andrey
02.10.2017
13:38:15
буквы b

Pavel
02.10.2017
13:39:15
Попробуй сконвертировать строку в stringz, и проделать эти адреснеы штуки

Andrey
02.10.2017
13:39:28
нужно работать с str.ptr

Dmitry
02.10.2017
13:40:00
Попробуй сконвертировать строку в stringz, и проделать эти адреснеы штуки
у stirngz не будет размерности? т.е. и всех остальных фишек Дишых строк?

Andrey
02.10.2017
13:40:43
toStringz вернет char*

Dmitry
02.10.2017
13:41:27
так ptr у нас же указатель на размер строки возвращает?

Andrey
02.10.2017
13:41:48
ptr возвращает указатель на первый элемент массива

длина массива лежит в поле length

Dmitry
02.10.2017
13:42:58
а поле length обычно в самом конце находится? допустим если в строке 3 символа, то если я по 4-ому обращусь то?

Andrey
02.10.2017
13:43:15
поле length лежит в слайсе

Pavel
02.10.2017
13:43:28
Да вот тут я не в теме, надо бы смотреть ассемблерный код. Там и видно будет что где лежит.

Google
Dmitry
02.10.2017
13:44:35
поле length лежит в слайсе
слайс же это указатель на начало и конец верно? Или имеется ввиду что у строки есть укзатель на начало и конец в виде отдельных структур?

Pavel
02.10.2017
13:44:39
@DmitryBubnenkov но ввобще касательно string я считаю это вредная практика, так как по сути имплементация строк и слайсов намеренно скрыта от программиста. Если ты будешь опираться на ее внутреннюю структуру, есть опасность что в будущих версиях компилятора это поведение изменят а твой код станет бажным.

Andrey
02.10.2017
13:44:52
это указатель на начало + длина

https://dlang.org/spec/arrays.html#dynamic-arrays

Pavel
02.10.2017
13:45:21
Так что просто кастуй стринг к char * или что-то типа того, получай простые явные строки, и уже с ними работай на уровне си.

Dmitry
02.10.2017
13:45:28
@chebotarevp я полностью согласен, просто я хочу хоть немного память поковырять

Andrey
02.10.2017
13:45:43
просто бери .ptr

Pavel
02.10.2017
13:46:05
Ну да, или лучше это делать с отладчиком. Будешь явно видеть что в какой ячейке лежит

Где-там был сервис который по коду D показывает asm код ? Тут была ссылка.

Andrey
02.10.2017
13:46:44
http://asm.dlang.org/

Admin
ERROR: S client not available

Pavel
02.10.2017
13:46:54
?

Dmitry
02.10.2017
13:49:35
ты взял адрес не строки а адрес слайса
хоть убей не пойму, почему я адрес слайса то взя. я же получается взял адрес первого элемента и к нему +1 сделал

Andrey
02.10.2017
13:50:29
string str = "abc"; string* x_ptr = &str;

str это структура на стеке

внутри нее указатель + длина

ты взял адрес самой структуры

данные строки лежат в другом месте

Dmitry
02.10.2017
13:51:53
а... теперь понял

т.е. чисто технически я могу по адресу указателя который эта структура хранит найти сами данные?

Google
Andrey
02.10.2017
13:54:49
да

Oleg
02.10.2017
13:59:52
и, кстати, в обратном порядке, вроде

первое поле это длина массива (size_t), второе это адрес (ptrdiff_t по идее)

Dmitry
02.10.2017
14:00:47
я вот не совсем понимаю какой тип данных мне нужно использовать, чтобы указатель на букву заработал: string str = "abc"; writeln(*str.ptr); char* x = str.ptr; char* - это же указатель. значит в него мы можем получить адрес

Oleg
02.10.2017
14:01:03
а конструкция &str будет возвращать адрес, указывающий на длину массива

Andrey
02.10.2017
14:01:15
string == immutable(char)[]

Dmitry
02.10.2017
14:01:38
immutable(char)[]* будет указателем?

Oleg
02.10.2017
14:01:44
блин...

будет указателем на строку

Andrey
02.10.2017
14:02:06
юзай const(char)* chr = str.ptr;

Oleg
02.10.2017
14:02:12
а не на символ, который ты пытаешься получить

Dmitry
02.10.2017
14:02:55
а почему на адрес символа то нельзя?

Oleg
02.10.2017
14:03:35
кто сказал что нельзя?

Andrey
02.10.2017
14:03:49
str.ptr имеет тип imutable(char)*

Oleg
02.10.2017
14:03:49
immutable(char)[]* будет указателем?
просто это неправильно

Andrey
02.10.2017
14:05:35
^ такой тип получится после &str;

Dmitry
02.10.2017
14:06:09
а вот сам указатель он как устроен? Просто я не пойму почему мы должны ему тип указывать если это просто адрес

Oleg
02.10.2017
14:06:21
чтобы не наебаться

простите за мой французский

иначе это будет просто число, где непонятно что хранится

ну всмысле адрес

Andrey
02.10.2017
14:06:46
это для адресной арифметики и безопасности

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