amarao: (Default)
[personal profile] amarao
Многие вещи в шелле хороши и создают ощущение, что в этой области всё хорошо и правильно. Условный binutils. Маленькие программы с простыми ясными идеями, которыми удобно пользоваться.

Но... Стоит только на секунду задуматься об их изменении, как архаичный autotools ждёт вас. Причём, он ждёт вас почти всюду. От binutils до cpython.

Моё чувство прекрасного страдает при виде m4. При виде поддержки достандартного С (и макросов вокруг этого). При виде невероятного объёма хаков, написанных с софте, у которого модель garbage in - garbage out, и поверх которого пытаются "сохранить инварианты" в более приличном софте.

У меня ощущение, что это революционная ситуация.

Если раньше у нас не было критической массы софта, который бы решал те, низкоуровневые проблемы, которые раньше решал C (т.е. хочешь системно - вот тебе, падаван, m4, automake, и шуруй воевать с ./configure), и особо вариантов не было, то теперь я вижу альтернативы с более адекватным lore. Это и go, и rust, и (может быть?) swift. Хотя ладно, кого я обманываю. Rust. Его красота - не в "borrow-checker'е", как любят описывать неофиты. Его красота в разумности базовых предположений до самого низа. Спускаясь с красот "асинхронного веб-сервера с job-stealing многозадачностью" до скучных вопросов "каким образом бинарник знает какой номер у сисколла для записи в fd" (если вы этот путь проделаете на условной node, вам будет очень печально), так вот, проделав этот путь, не ощущаешь острого диссонанса от "ненадлежащих средств". (Если что, там снизу libc, так что финальный слой у Rust такой же как у всех, но всё над ним - весьма добротно).

Так вот, революция начнёт происходить из-за awk-дисфории при соприкосновении с внутренностями существующих программ.

Я не знаю, сможет ли сообщество выдержать высочайший уровень инженерной продуманности Rust, но пока что от знакомства с его потрошками (и потрошками всего, что рядом) нет того же ощущения, как от доисторического Си.

Date: 2021-05-30 06:08 pm (UTC)
ufm: (Default)
From: [personal profile] ufm
Я уже много лет говорю: Си - это такой хороший ассемблер. И относиться к нему нужно как к ассемблеру. Т.е. писать на нём всё подряд не нужно.

Date: 2021-05-30 07:29 pm (UTC)
ufm: (Default)
From: [personal profile] ufm
А зачем ему (Си) альтернативы? Повторюсь - это хороший ассемблер. Писать на нём нужно то, что обычно пишется на ассемблере.

P.S. Писать куски Линуксового ядра (ты-же про Линуксовое ядро?) на Расте для меня столь-же дикая идея, как писать их на Го. Или ПХП.
Нет, я ничего не имею против написания какого либо абстрактного ядра с нуля на любом языке. Но Линуксовое ядро:
1. Написано на Си.
2. Написано на Си в некоторых местах с эмуляцией C++ при помощи палки и верёвки.
3. Написано на Си с заточками в некоторых местах под конкретный компилятор.
4. Никогда не будет переписано полностью на Расте.
Отсюда у меня возникает простой вопрос - зачем? Вот минусы я для себя - вижу. Мне приходилось ковырятся в потрохах ядра по локоть в крови для поиска/решения конкретных проблем. Раньше мне хватало для этого знания (на уровне читаю со словарём) ассемблера одной платформы и одного языка. Теперь нужно будет знать еще один язык, с синтаксисом еще более птичьим чем у Си.

Печаль.

Date: 2021-05-31 11:02 am (UTC)
From: [personal profile] permeakra
> Повторюсь - это хороший ассемблер.

Это не ассемблер. C - он про структурное программирование, и поэтому некоторые вещи, которые можно сделать в асме, в С сделать нельзя. Его неоднократно пытались даунгрейднуть в честный ассемблер, но популярности эти попытки не снискали.

Date: 2021-05-31 01:36 pm (UTC)
ufm: (Default)
From: [personal profile] ufm
Например?

Date: 2021-05-31 04:33 pm (UTC)
From: [personal profile] permeakra
Например нет прямого управления стеком.

Date: 2021-05-31 06:00 pm (UTC)
ufm: (Default)
From: [personal profile] ufm
Си в своём изначальном виде - это очень-очень близко к ассемблеру.
a = b[i++] компилировалось в 1 машинную операцию на PDP11.
Так-же как a = b[++i]

Впрочем, мы не об этом. У всех компиляторов Си, которые я видел, есть инструкция asm. Это, конечно, читерство. Но как по мне - не большее, чем unsafe в Rust. Так что стеком, при желании, порулить можно.

Date: 2021-06-01 04:00 pm (UTC)
From: [personal profile] permeakra
>Си в своём изначальном виде - это очень-очень близко к ассемблеру.

Говорите уж полностью - не к ассемблеру вообще, а к ассемблеру PDP-11. Архитектура которой с современными имеет довольно мало общего. Разумеется, на современные архитектуры С ложится просто отвратительно.

> У всех компиляторов Си, которые я видел, есть инструкция asm. Это, конечно, читерство. Но как по мне - не большее, чем unsafe в Rust.

только unsafe в Rust работает консистентно между платформами, а asm-вставки платформозависимы.

Date: 2021-05-31 01:04 pm (UTC)
From: [personal profile] permeakra
Линус же вроде благосклонно отзывался о расте ? В отличии от плюсов, о которых он отзывался исключительно матом.

Date: 2021-05-31 01:55 pm (UTC)
ufm: (Default)
From: [personal profile] ufm
Если-бы Линуксовое ядро было не монолитом а микроядром, с выносом чего только можно и нельзя из кернелспейс - я-бы даже не спорил. Есть стандартное API/ABI - и делайте там у себя внутри драйвера что хотите и как хотите. Ну вызовет этот драйвер панику внутри себя, перезавпустится и дальше полетит. А не утащит за собой на тот свет всю систему, как это происходит сейчас.

P.S. Как по мне - Линуксовое ядро вобще не самое лучшее место, куда стоит стремиться. То, что "green threads" и "garbage collection" приходится реализовывать каждому языку внутри себя - явный признак того, что современные ядра (в целом, не только в Линуксе) занимаются какой-то хнёй. Это как если было - "вот вам драйвер блочного устройства, а файлуху уж делайте сами".

Date: 2021-05-31 03:27 pm (UTC)
ufm: (Default)
From: [personal profile] ufm
green threads внутри языка быстрее чем у ОС потому что у ОС их просто нет. Т.е. что угодно - быстрее 0.

ОС может (должно) _назначить_ формат вызова, используемые регистры и всё остальное просто как API.

P.S. Как по мне - ponylang и то интереснее чем rust. Но это так, вкусовщина.

Date: 2021-05-31 06:35 pm (UTC)
ufm: (Default)
From: [personal profile] ufm
Я забыл что в Расте нет нормальных зелёных тредов, а есть только убогий обычный async/await.

Просто я человек испорченный Go/Erlang и привык что оно как минимум M:N и мне не надо руками расставлять yeld() (за исключением случаев, когдя я точно знаю что оно тут нужно и явно принесёт пользу).

И разговор про вызовы/API я вел именно со стороны зелёных тредов.

Profile

amarao: (Default)
amarao

February 2026

S M T W T F S
123456 7
8910111213 14
15161718192021
22232425262728

Most Popular Tags

Page Summary

Style Credit

Expand Cut Tags

No cut tags
Page generated Feb. 25th, 2026 06:27 pm
Powered by Dreamwidth Studios