
Ievgenii
18.05.2017
23:04:27
Нехрен в куче создавать столько объектов
А по всей видимости они там их много создают...

Oleg
18.05.2017
23:05:20
давай уточним: тебя не устраивает vibe или подход использования сборщика?
может быть hunt будет лучше в этом плане?

Google

Ievgenii
18.05.2017
23:06:15
Меня не устраивает, что Вайб сильно засоряет память на элементарном хело ворлд
Что за hunt?

Oleg
18.05.2017
23:06:38
ну типа как vibe, только hunt

Ievgenii
18.05.2017
23:06:56
Дай линк

Oleg
18.05.2017
23:07:02
http://code.dlang.org/packages/hunt
вики огонь ? https://github.com/huntlabs/hunt/wiki
их сайт вроде на этом написан https://www.putao.com/

Ievgenii
18.05.2017
23:14:38
Та, наверное, как будет время - легче и полезнее самому сесть и написать какой-то небольшой...

Oleg
18.05.2017
23:19:35
hello world утечки памяти
больше 4Гб программа на занимает

Ievgenii
18.05.2017
23:21:54
И?

Oleg
18.05.2017
23:22:38
аргументы к тому что не "жирная, а кость широкая"
ну или "не течёт, а алгоритм такой"

Google

Ievgenii
18.05.2017
23:25:25
Так я и говорю, что течёт, этот чертов вайб

Denis
19.05.2017
00:37:43
Пожалуйтесь - пофиксят
А есть у нас такая функция, чтобы прочитать 1 символ из stdin если он есть или сообщить если во входящем stdin пусто?
https://github.com/denizzzka/xymodem/blob/master/integration_test/stdio_sender.d#L26 надо заставить эту маленькую функцию работать
getc видел - работает странно (наверно я чего-то не понимаю)
Нужно максимально тупое решение, т.к. потоки будут перенаправляться в другие программы. Это всё не для юзерского терминала

Dmitry
19.05.2017
04:59:39
Евгений, а ты х64 собирал сборку?
На линукс она по дефолту

Ievgenii
19.05.2017
05:32:17

Denis
19.05.2017
05:37:13
Сейчас попробую
А если читать нечего то что она делает?

Ievgenii
19.05.2017
06:00:37
По идее ждет
Не уверен

Denis
19.05.2017
06:02:53
Ну это ладно. А как делают программы, которые данные из stdin берут? Типа less
или там tail

Ievgenii
19.05.2017
06:06:03
СтдИн - это тако же дескриптор, простой сокет
Читай из него и все
В чем загвоздка?

Denis
19.05.2017
06:06:52
лень трахаться с сокетами, думал всё в одну строку сделать

qwerty
19.05.2017
06:12:16

Google

Andrey
19.05.2017
06:12:59
По идее, надо стдин в неблокирующий режим перевести, но что то не вижу в std. ничего подходящего. в ручную работает через core.sys.posix.fcntl

Denis
19.05.2017
06:17:25
Зачем в неблокирующий?
readln вот есть - читает строку
а мне надо читать до конца буфера
почти тоже самое же, странно что никто не запилил

Ievgenii
19.05.2017
06:19:26
Ты же писал один байт считать хочешь

Denis
19.05.2017
06:19:36
ну это уже крайность.
Мне нужно просто из stdin прочитать бинарные данные
и отвечать на них. Отвечать легко, а вот читать не спотыкаясь об переводы строки - хрен

Ievgenii
19.05.2017
06:20:16
https://dlang.org/phobos/std_stdio.html#.stdin

Denis
19.05.2017
06:21:41
Видел, а дальше? все чтения оттуда - построчные, насколько я понял

Ievgenii
19.05.2017
06:22:30
Бери руки в руки))) и пиши

Denis
19.05.2017
06:22:45
щас через File попробую будто файл читать
правда хз как оно стираться то будет, написанное?
само наверно, seek же не заработает

Ievgenii
19.05.2017
06:26:22
Что стираться???

Denis
19.05.2017
06:28:49
Да туплю я. Вроде сделал, щас проверю
виснет
https://dlang.org/library/std/stdio/file.by_chunk.html О!
идеоматично

Google

Denis
19.05.2017
06:42:44
рррработает

Ievgenii
19.05.2017
06:55:14
))))

Denis
19.05.2017
06:55:49
It does seem wierd but here's what's going on: stdin.eof returns true
*after* eof is hit - but not before (since eof would have to do a read to
check).
Вот в чём затык
http://forum.dlang.org/post/d71prm$2ip5$1@digitaldaemon.com

Ievgenii
19.05.2017
06:58:26
Это посимвольное чтение. Что тут такого?

Denis
19.05.2017
06:58:35
там написано почему оно не работает
пока не попытаешься прочитать символ не узнаешь конец уже или нет, но чтение - блокирующее для сокетов
для потоков

Admin
ERROR: S client not available

Denis
19.05.2017
06:59:17
То есть, если в stdin ничего нет то нельзя узнать EOF уже там или нет
млять, всё равно блокируется

Maxim
19.05.2017
07:31:32
в линуксе можно raw io использовать, например, через curses, если не изменяет память

Denis
19.05.2017
07:32:00
https://gist.github.com/denizzzka/196866a6cd03dad6778b1b3368825eac
хотелсоь бы posix
В этом коде если есть что-то в stdin то оно добавляется в массив
побайтово
а если нет то !stdin.eof не срабатывает, как и 4 строка
Попытка сделать stdin неблокирующим провалилась - это не сокет, а файловый дескриптор

Maxim
19.05.2017
07:35:21
http://stackoverflow.com/questions/448944/c-non-blocking-keyboard-input вот тут про асинхронный ввод в posix пишут)

Google

Andrey
19.05.2017
07:35:33
int c = getchar(); понятно, что блокируется. в нем же ничего нет, пока ты энтер не нажмешь, т.к. по умолчанию в терм инале построчная буферизация. это если ты из терминала читаешь, а не через пайп. если я тебя понял, то терминал переводить в режим, когда он символы вводимые сразу в буфер приложения шлет. но надо ли это)

Denis
19.05.2017
07:37:16
Нажимаю enter, оно читает \n оттуда, и возвращается опять к getchar()
и виснет. Как узнать что данных в буфере больше нет?

Maxim
19.05.2017
07:37:46
никак)

Denis
19.05.2017
07:37:52
Мне не надо асинхронный, что характерно) мне надо прсото знать что в буфере уже пусто

Maxim
19.05.2017
07:37:55
подозреваю, послать в stdio eof

Denis
19.05.2017
07:38:03
или EOT
а как делают Ъ-программы, которые работают с stdin?
тот же tail -f

Ievgenii
19.05.2017
07:38:37
А где tail -f использует stdin?

Denis
19.05.2017
07:38:37
он ничего такого не ожидает чтобы вывести на экран
гоню, ну просто cat
а как работает редактор командной строки? он ведь тоже в терминале единичные нажатия отрабатывает
а если их нет то не виснет
или виснет?

Andrey
19.05.2017
07:41:12
проблема не в stdin, а в том, что в нем ничего нет, пока ты в терминале не введешь символ перевода строки.

Denis
19.05.2017
07:41:40
После того как я его ввожу он считывается и там опять становится пусто
а мне надо с наскока буфер весь считать и дальше идти дела делать, пусть он опять наполняется
причём, сколько байт в буфере я не знаю
буфер ведь где-то есть, мы же не с модемом работаем посимвольным
раз есть буфер значит есть способ узнать его длину текущую

Andrey
19.05.2017
07:46:47
вот ты запустил прогу, он вызвала getc или readf например. они блокируются в ожидании данных. ты пишешь что то в строке - ничего не происходит, потому что буковки в буфере терминала. нажимаешь энтер - терминал отправляет данные в stdin приложения. оно их вычитывает, и снова блокируется, если вызвать getc. или ты о чем?