@dlangru

Страница 592 из 719
Andrey
05.06.2018
15:16:54
скрипты должны уметь шебанг, - Ди может?..
зачем ему уметь? rdmd вроде компилит и запускает? или dub-ом. В скрипт ставишь #!/usr/.../rdmd blabla и все

Oleg
05.06.2018
15:17:15
сейчас проверил, shebang и с rdmd и с dub отлично работает

Pavel
05.06.2018
15:17:56
зачем ему уметь? rdmd вроде компилит и запускает? или dub-ом. В скрипт ставишь #!/usr/.../rdmd blabla и все
Использовать скрипты в составе других скриптов ничего не зная об их потребностях.

Andrey
05.06.2018
15:18:49
не понял) шебангом execve рулит. что указано в шебанге, то и запустит

Google
Oleg
05.06.2018
15:19:41
не понял) шебангом execve рулит. что указано в шебанге, то и запустит
так вот запускаемая программа должна уметь без параметров отрабатывать, просто с файлом на входе

rdmd file.d dub file2.d

Andrey
05.06.2018
15:20:29
ну тогда хз. а двойное тире он не понимает?

Pavel
05.06.2018
15:23:50
не понял) шебангом execve рулит. что указано в шебанге, то и запустит
А интерпретатор должен считать # коментарием

Andrey
05.06.2018
15:24:15
```#!/usr/sh

не

#!/bin/sh exec dub -- $@ или как там

Oleg
05.06.2018
15:25:27
#!/bin/sh exec dub -- $@ или как там
вроде шебанг так не умеет

Andrey
05.06.2018
15:25:40
это в разных строчках

Oleg
05.06.2018
15:26:03
ну и в разных файлах тогда

Andrey
05.06.2018
15:27:21
я не читал начало темы, видимо не понимаю, что надо)

Oleg
05.06.2018
15:27:27
#!/usr/bin/dub /+ dub.sdl: name "shedub" dependency "serialport" version="2.1.4" +/ import std.stdio; import std.algorithm; import serialport; void main(string[] args) { SerialPort.listAvailable .filter!(a=>a.startsWith(args[1])) .each!writeln; } всё в одном файле

Google
Andrey
05.06.2018
15:27:35
а, вот оно что

Oleg
05.06.2018
15:28:13
просто chmod +x file и можно запускать path/to/file

без указания dub

Andrey
05.06.2018
15:30:21
понял. т.е аргументы не умеет обрабатывать?

Oleg
05.06.2018
15:30:52
понял. т.е аргументы не умеет обрабатывать?
в dub не передать компилятор, да а сам скрипт нормально получает аргументы

в примере что я привёл можно сделать так ./shedub /dev/pts

и он выведет все серийные порты, имя которых начинается с /dev/pts

и /dev/ptsWTF и /dev/pts/7

вот только args[0] не информативен совсем: ../../../../tmp/.dub/build/shedub-~master/application-debug-linux.posix-x86_64-dmd_2079-4E9741FAB3A0DF891D405A201E4DEF70/shedub

Andrey
05.06.2018
15:50:47
название, которое ps выводит, можно. сейчас потрейсил perl под линуксом $0 = "foo", он prctl юзает

Dmitry
05.06.2018
16:49:59
Await-async за пределами веба вообще полезны?

Dark
05.06.2018
16:50:52
Ну почти

Dmitry
05.06.2018
16:52:03
Я правильно понимаю что функции помеченные как авайт-асинк выполняются по очереди? В каком то главном потоке

Pavel
05.06.2018
16:52:47
Dmitry
05.06.2018
16:52:49
Кстати, а rdmd очень медленный? Ну порядок хотя бы примерно.

Google
Dark
05.06.2018
16:52:52
В V8 натуральный eventloop

Dmitry
05.06.2018
16:54:28
В V8 натуральный eventloop
Который все в одном потоке молотит. Но сколько времени на функцию отдается?

Dark
05.06.2018
16:55:09
(Но могу ошибаться)

Dmitry
05.06.2018
16:55:48
Тоесть кривая функция все повесит?

Dark
05.06.2018
16:56:30
Тоесть кривая функция все повесит?
while(true);? Весь поток? Да. Весь браузер? Не обязательно

Dmitry
05.06.2018
16:56:33
И выход долгая и мучительная отладка?

Pavel
05.06.2018
16:57:05
И выход долгая и мучительная отладка?
Отладка многопоточных приложений еще более долгая и мучительная

Dmitry
05.06.2018
17:00:11
В weka кстати на потоки забили на сколько я знаю. Логика такая что возни много тем более на распределенных системах

Pavel
05.06.2018
17:03:05
Да

Pavel
05.06.2018
17:04:09
С потоками возни много.. с GC тоже возни много... Компиляторы под разные платформы поддерживают разные фичи... Вот и переходят люди на python/php/javascript ;)

Dmitry
05.06.2018
17:05:09
Это просто оболочка над dmd
Разве он не на лету все интерпритирует?

Oleg
05.06.2018
17:32:40
по какой причине std.socket.Socket.receive может возвращать Socket.ERROR? схема такая: с одной стороны создаю TcpSocket, назовём M, делаю connect, пишу туда с другой стороны создаю TcpSocket, назовём S, делаю bind и с помощью accept получаю ещё сокет C так вот при чтении из C всё норм, но когда я пытаюсь писать в C на стороне M я получаю ошибку при receive

или receive нужно вообще всегда после select делать? даже в неблокирующем режиме?

Pavel
05.06.2018
17:37:18
https://dlang.org/phobos/std_socket.html#.Socket.ERROR

Получи текст ошибки и поймешь что ему не нравится

Google
Oleg
05.06.2018
17:40:16
getErrorText -> "Success"

Pavel
05.06.2018
17:41:25
Хмм тогда возможно это и правда успех!

А данные то при этом читаются?

Oleg
05.06.2018
17:41:43
нет

Pavel
05.06.2018
17:41:48
Тогда неуспех

Oleg
05.06.2018
17:41:55
ну а как бы они читались?

receive по сути -1 возвращает

Denis
05.06.2018
17:42:32
Функция возвращает число считанных байтов или -1 в случае ошибки. Следует отметить, что нулевое значение не является ошибкой. Оно сигнализирует об отсутствии записанных в сокет процессом-поставщиком данных.

Pavel
05.06.2018
17:42:33
Просто в линуксе неблокирующий сокет тоже возвращает -1 как в случае ошибки, так и в случае когда все в порядке и просто в сокете закончились данные для чтения

Admin
ERROR: S client not available

Oleg
05.06.2018
17:42:59
блять

Oleg
05.06.2018
17:43:09
второй день с этоим сижу

Pavel
05.06.2018
17:43:25
ваще пушка, а как понять ошибка или нет?
по выставленному значению в переменной errno

Если errno == EAGAIN значит этот вернутый -1 не ошибка и все в порядке.

Denis
05.06.2018
17:44:43
точно, есть в мане

костыли-костылики

Pavel
05.06.2018
17:45:22
В мире где нет исключений и множественных возвращаемых значений это единственно возможный вариант

Ну можно конечно возвращать еще структуру но это будет медленнее видимо

Google
Pavel
05.06.2018
17:45:50
второй день с этоим сижу
Запости MVP, может где чего не так создаешь

Denis
05.06.2018
17:46:13
не единственный
единственный при условии что нельзя ломать совместимость со старыми recv

а так могли бы в аргументе статус возвращать ещё

Pavel
05.06.2018
17:46:53
minimum viable product )

Oleg
05.06.2018
17:47:11
оке

Pavel
05.06.2018
17:47:31
а так могли бы в аргументе статус возвращать ещё
Это же еще целый адрес на стек класть при вызове функции, будет тяжеко. А так - все функции знают что можно записать в общую переменную errno

Denis
05.06.2018
17:48:26
хотел написать длинный ответ но передумал

оба правы)

Pavel
05.06.2018
17:49:03
Я хорошенько пописав на betterC даже нашел такую логику удобной и понятной )

Поэтому сишники молодцы

Pavel
05.06.2018
17:49:48
?

Oleg
05.06.2018
17:51:20
Я хорошенько пописав на betterC даже нашел такую логику удобной и понятной )
кстати, аналогичная работа с неблокирующим чтением из файла (ком-порта), при этом тоже выставляется errno и если EAGAIN, то всё ок вот только не думал, что с сокетами тоже самое

и вот вопрос — это кроссплатформенная тема для сокетов?

Pavel
05.06.2018
17:52:19
В целом для POSIX систем да

То есть linux/bsd/mac работают так, только значения констант могут различаться.

Насчет винды не знаю, у нее там свой мир

Dark
05.06.2018
17:55:03
Судя по всему не особо у них совместимо там

В подсистеме сокеты изначально не работали

Oleg
05.06.2018
17:55:32
std то кроссплатформенный должен быть

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