Pull to refresh
89
0
Александр Мещеряков@freecoder_xx

Rust разработчик

Send message

1.
> то на подобные вопросы вообще непонятно как искать ответы

Много кто ищет эти ответы, и даже находит, причем весьма интересные. Но большинству людей это не известно, потому что рыть горы философской литературы или вникать в дискуссии современных философских школ - это как нейрохирургия для обывателя. Так что разбираются в философских вопросах - единицы, но вот "пофилософствовать" считает своим долгом чуть ли не каждый.

2. Из 1 вытекает все остальное.

Вы очень правильно задаете вопрос про абстрактное и конкретное. Вообще, не разобравшись в этих категориях досконально и не встав на то или иное мировоззрение не них, крайне тяжело (даже невозможно) понять связь математики с остальным миром.

Лично я придерживаюсь диалектико-материалистического мировоззрения и в его рамках очень развито понимание абстрактного и конкретного.

Упрощенно говоря, признается, что существует "объективная логика" и что абстракции - это сущности первого рода. То есть, наш разум способен отражать абстракции (как и любая другая достаточно гибкая для этого материя), которые сами присущи миру объективно. Любой конкретный предмет, рассматриваемый во всей полноте - есть весь мир в целом, взятый со стороны этого предмета. Но то, что делает его отдельным - так это абстракции, ему соответствующие.

Таким образом, вселенная есть внутренне расчлененное целое, и в этом отношении она противоречива. Любоя абстракция - это есть отдельная сторона конкретного, это то, посредством чего происходит членение целого (конкретного).

Подробнее про абстрактное и конкретное рекомендую работы Ильенкова Диалектическая логика: очерк истории и теории и Диалектика абстрактного и конкретного в научно-теоретическом мышлении.

С этой филосовской позиции все становится просто и очевидно: математика - это логика отношения предельно простых абстракций, которые присущи как некоторые стороны огромному числу отдельных предметов (которые сами, как отдельные - есть достаточно сложные комплексы абстракций) и потому ее законы становятся всеобще применимыми. Действовать по этой логике может любое достаточно гибкое материальное тело, такое как мозг человека, и этот процесс занывается отражением абстрактных сторон действительности.

Противоречивая - сможет )

"Кража у работодателя оплаченного им времени" - вообще-то работник получает зарплату после того, как он выполнил работу или затратил на нее свое время.

Удивительное дело, Санкт-Петербург — мой родной город, но я никогда не чувствовал себя там как дома. Потому что это не город для жизни — это город для тусовок, прогулок и фотографий. Это декорации.

Похоже чел дальше Невского не вылазил, раз такое говорит. Например, новый офис JetBrains расположен в Приморском районе, там возле него спальные кварталы, сплошные многоэтажки, старые советские и новые.

Петербург - хороший город для жизни, советская часть города очень зеленая и просторная. Просто не надо жить в здании Зингера или в Зимнем дворце.

Концепция владения дает и определенное преимущество разработчику: с ней становятся заметнее границы использования данных.

Ведь наш мир «победившего киберпанка», несмотря на актуальность high tech low life и всё более продвинутые гаджеты, оказался совершенно не таким, как представлялось в 1980-е.

Совершенно не таким? А каким же он тогда оказался?

Зато она [Матрица] почти полностью выстроена на образах классических киберпанковых аниме 80-х и 90-х, которым сюжетно и стилистически наследует гораздо больше, чем «Джонни Мнемонику» и «Бегущему по лезвию» вместе взятым.
...
Тот же Ghost in the Shell эстетически и идейно ближе к «Мнемонику» и «Блейдраннеру», чем к своим предшественникам вроде «Акиры» или «Баблгам кризиса».

Но эстетика и стиль "Матрицы" заимствован из "Ghost in the Shell"!

Bat - Rust
Exa - Rust
Lsd - Rust
Delta - Rust
Dust - Rust
Duf - Go
Broot - Rust
Fd - Rust
Ripgrep - Rust
Ag - C
Fzf - Go
Mcfly - Rust
Choose - Rust
Jq - C
Sd - Rust
Cheat - Go
Tldr - JavaScript/Python
Bottom - Rust
Glances - Python
Gtop - JavaScript
Hyperfine - Rust
Gping - Rust
HTTPie - Python
Curlie - Go
Xh - Rust
Zoxide - Rust
Dog - Rust

Похоже Unix переписывается на Rust (:

Смысл в том, чтобы с помощь peek дождаться появления нужных данных в очереди — это ожидание и пихать в select!, а вычитать данные уже после, по факту выполнения ветки после ожидания.

А вот мне интересно, когда Алан писал код


select! {
    line_in = parse_line(&socket) => ...
    line_out = channel.recv() => ...
}

То он чего ждал? Что программа не будет работать так, как написано? select! и нужен для того, чтобы прерывать выполнение фьюч, а он взял и в него засунул parse_line. Код и сделал то, что его попросили: прервал чтение и парсинг, если channel.recv() завершился быстрее. Вместо этого можно было воспользоваться сначала методом peek у TcpStream для ожидания появления данных в очереди без их удаления. Или вообще переписать эту логику с использованием try_read.

Оказывается, под капотом, в стеке вызовов, используется макрос select!

Вот этот оборот — "под капотом" — все только запутывает. Нет там никакого "капота", речь про пользовательский же код, который просто находится выше по стеку вызовов. А то складывается впечатление, будто проблема где-то в недрах tokio.

В статье есть ошибка в коде первого примера: операции read_u32 и read_exact вызываются только на мутируемом объекте (&mut TcpStream), а в статье объект заимствуется неизменяемым (&TcpStream).

Не нравится термин "переключение" — хорошо, можно сказать боле общо: проблема в прерывании. .await явно показывает, в каком месте может возникнуть прерывание фьючи. Без него подобные ошибки будет проще допустить.

У меня такое ощущение, что вы бросились мне отвечать не прочитав исходного сообщения, на которое я ответил. Поэтому ваши вопросы звучат как-то странно.


Извините, а что именно с эти кодом не так?

С ним не так то, что он асинхронный, а не синхронный. А значит в любой момент, где есть .await, может произойти переключение. И хорошо, что .await написан явно, а не заметен под ковер, как предлагает делать автор статьи и поддерживающие его комментаторы.


Как это исправить? Не надо здесь принимать socket по шаренной ссылке (как вариант).

Пишу на Rust в прод уже 3 года как. Полет отличный. Для своих домашних проектов выбор тоже очевиден: только Rust. И да, я в основном пользуюсь Rust как прикладным языком общего назначения, и нахожу для этого в Rust много плюсов.

Как раз .await в этом примере должен был навести Алана на мысли, что с его кодом что-то не так:


let len = socket.read_u32().await?;
let mut line = vec![0; len];
socket.read_exact(&mut line).await?;

Два раза происходит чтение из сокета, причем блок кода выполняется не атомарно, так как в местах вызова .await возможны переключения. Другое дело, если код синхронный:


let len = socket.read_u32()?;
let mut line = vec![0; len];
socket.read_exact(&mut line)?;

Тут все в порядке. И если асинхронный код писать также, то проблема будет просто заметена под ковер еще глубже. Да, это не проблема, если требовать обязательного завершения фьючи, но, как уже писали выше, на кой черт тогда вообще сдалась такая асинхронность.

В детерминированном мире точное предсказание будущего не может вызывать его изменения по определению. В противном случае оно не будет точным предсказанием. Поэтому ситуация, когда предсказание все-таки точное, но событие после него меняется — в принципе невозможна, потому что предсказанное уже учитывает последствия предсказания из прошлого.

Вы проигнорировали мой ответ на ваш пример с лампочкой. Перечитайте пожалуйста его еще раз, но на этот раз действительно сделайте это и подумайте. Я же вам объясню в третий раз.


Можно сделать простенькую схемку: если модель вселенной выдаёт, что лампочка зажжётся, то схемка не будет зажигать лампочку и наоборот.

Вы опять отходите от принципа детерминизма. Если модель предсказывает, что лампочка зажжется, то это означает, что последовательность следующих событий после предсказания приводит к зажжению лампочки. Что бы вы ни делали. Потому что делать вы можете только одно, у вас нет никакого выбора в детерминированном мире, и именно то, что происходит после предсказания — приводит к его осуществлению.


Если вам все еще трудно понять, то посмотрите на всю цепь событий как будто она уже произошла. В детерминированном мире нет разницы между прошлым и будущем, можно на все смотреть как на прошлое. Модель предсказала зажжение лампочки — и лампочка зажглась, и все это давно уже в прошлом и изменить это никак нельзя и никак нельзя выбрать другой вариант.


То есть, когда модель выдает предсказание о будущем, то то будущее, которое она предсказывает, уже учитывает, что в прошлом модель сделала предсказание. Нет никакого альтернативного будущего, в котором наступает предсказываемое события, но при котором в прошлом о нем не было предсказаний. Вы же просто берете и допускаете такую альтернативу, тем самым искусственно внося противоречие в начальные условия (вселенная у вас перестает быть детерминированной при таком допущении), а потом удивляетесь, что у вас получился парадокс — вы его сами создали в своих размышлениях, допустив вариативность.

А как вы представляете в принципе возможной "рассинхронизацию" в синхронном и полностью детерминированном мире? Вот вы опять допускаете какую-то возможность выбора, но по нашим исходным условиям никакого выбора нет. Все "синхронно" и никакой другой вариант не возможен.


Абстрактую литературу, которую вы конкретно не называете, мне прочитать будет очень трудно. Но даже если я к ней и обращусь, то моя полемика тогда будет не с вами, а с авторами этой литературы. Должен ли я воспринимать посыл "к литературе" как ваше нежелание продолжать дискуссию и раскрывать свою собственную позицию?

Information

Rating
Does not participate
Location
Санкт-Петербург, Санкт-Петербург и область, Россия
Registered
Activity