
خبرفوری

آهنگیفای

TrueCaller

Notcoin Community

Whale Chanel

Proxy MTProto | پروکسی

iRo Proxy | پروکسی

Findo Lucky

My Proxy | مای پروکسی

خبرفوری

آهنگیفای

TrueCaller

Notcoin Community

Whale Chanel

Proxy MTProto | پروکسی

iRo Proxy | پروکسی

Findo Lucky

My Proxy | مای پروکسی

خبرفوری

آهنگیفای

TrueCaller

Блог*
Блог со звёздочкой.
Много репостов, немножко программирования.
Небольшое прикольное комьюнити: @decltype_chat_ptr_t
Автор: @insert_reference_here
Много репостов, немножко программирования.
Небольшое прикольное комьюнити: @decltype_chat_ptr_t
Автор: @insert_reference_here
Рейтинг TGlist
0
0
ТипПублічний
Верифікація
Не верифікованийДовіреність
Не надійнийРозташуванняРосія
МоваІнша
Дата створення каналуЛют 08, 2025
Додано до TGlist
Квіт 10, 2024Прикріплена група![Чат* ([не]большое [не] хорни [анимешное] комьюнити)](/_next/image?url=https%3A%2F%2Fstatic-storm.tglist.com%2Fda1b354b28a3cd215fbc5731e8fd06cb%2Fb98a6e53-9a38-44ab-9a56-7d2290691f09.jpg%3Fw%3D48%26h%3D48&w=96&q=75)
![Чат* ([не]большое [не] хорни [анимешное] комьюнити)](/_next/image?url=https%3A%2F%2Fstatic-storm.tglist.com%2Fda1b354b28a3cd215fbc5731e8fd06cb%2Fb98a6e53-9a38-44ab-9a56-7d2290691f09.jpg%3Fw%3D48%26h%3D48&w=96&q=75)
Чат* ([не]большое [не] хорни [анимешное] комьюнити)
270
Рекорди
08.02.202523:59
1.8K
Підписників03.09.202423:59
0
Індекс цитування08.02.202517:13
639
Охоплення 1 допису28.02.202523:59
64
Охоп рекл. допису07.02.202517:13
7.94%
ER06.02.202516:09
34.18%
ERR07.02.202516:21
#suckassstory
(link)
Гектор Мартин (Hector Martin), ведущий разработчик Asahi Linux, снял с себя полномочия мейнтейнера поддержки железа ARM и Apple
(link)
I no longer have any faith left in the kernel development process or community management approach.
Apple/ARM platform development will continue downstream. If I feel like sending some patches upstream in the future myself for whatever subtree I may, or I may not. Anyone who feels like fighting the upstreaming fight themselves is welcome to do so.
Гектор Мартин (Hector Martin), ведущий разработчик Asahi Linux, снял с себя полномочия мейнтейнера поддержки железа ARM и Apple


30.01.202518:39


07.02.202521:40
A perfectly reasonable development workflow
(часть треда с патчами в drm_sched от Asahi Lina (которые по итогу не приняли))
(часть треда с патчами в drm_sched от Asahi Lina (которые по итогу не приняли))
07.02.202517:32
#prog #rustlib #article
parser combinators with nom 8 are here!
(восьмая мажорная версия — это прям дофига для Rust-библиотек)
Geoffroy Couprie рассказывает о новой архитектуре nom. В этой версии он позаимствовал из chumsky подход к архитектуре парсеров. Про этот подход ещё в 2022 году писал Niko Matsakis в статье Many modes: a GAT pattern, которая демонстрировала, как GAT могут пригодиться в реальных библиотеках, и таким образом обосновывала необходимость иметь GAT в языке.
В nom 8 парсером является то, что реализует трейт Parser. Вот как выглядит его определение за вычетом методов с реализацией по умолчанию:
Параметр
Трейт Mode является ключом к новым возможностям. Реализации этого трейта позволяют абстрагироваться над "выходом парсера, имеющего отношение к T":
Для чего всё это нужно? Дело в том, что в nom есть комбинаторы, которые используют переданный аргументом парсер, но при этом не используют то, что этот парсер выдаёт в качестве результата. В качестве примера таких комбинаторов можно назвать preceded и delimited. Если конструирование значения является дорогим (скажем, это условный separated_list0, который собирает результаты разбора под-парсеров в вектор), то запускать парсер только ради того, чтобы отбросить его значение, будет довольно расточительно.
В самом nom определены два типа, которые реализовывают
Так как ошибка парсера тоже может дорого конструироваться, тип
Как вы могли заметить, у
Новый подход позволяет написать ветвление по
parser combinators with nom 8 are here!
(восьмая мажорная версия — это прям дофига для Rust-библиотек)
Geoffroy Couprie рассказывает о новой архитектуре nom. В этой версии он позаимствовал из chumsky подход к архитектуре парсеров. Про этот подход ещё в 2022 году писал Niko Matsakis в статье Many modes: a GAT pattern, которая демонстрировала, как GAT могут пригодиться в реальных библиотеках, и таким образом обосновывала необходимость иметь GAT в языке.
В nom 8 парсером является то, что реализует трейт Parser. Вот как выглядит его определение за вычетом методов с реализацией по умолчанию:
trait Parser
Параметр
OM
реализует трейт OutputMode, реализации которого являются фактически type-level конфигом парсера:trait OutputMode {
Трейт Mode является ключом к новым возможностям. Реализации этого трейта позволяют абстрагироваться над "выходом парсера, имеющего отношение к T":
trait Mode {
Для чего всё это нужно? Дело в том, что в nom есть комбинаторы, которые используют переданный аргументом парсер, но при этом не используют то, что этот парсер выдаёт в качестве результата. В качестве примера таких комбинаторов можно назвать preceded и delimited. Если конструирование значения является дорогим (скажем, это условный separated_list0, который собирает результаты разбора под-парсеров в вектор), то запускать парсер только ради того, чтобы отбросить его значение, будет довольно расточительно.
В самом nom определены два типа, которые реализовывают
Mode
: Emit и Check. Emit
реализовывает Mode
с type Output = T
, то есть парсер работает, как обычно. Check
же реализовывает Mode
с type Output = ()
, то есть парсер работает, но отбрасывает результаты. Именно такое поведение годится для комбинаторов, которым не нужен результат под-парсера. Так как конечный парсер имеет методы, обобщённые по параметру OM
, реализующему OutputMode
, парсер не может сконструировать результат напрямую, а вынужден использовать для этого методы Mode
, определённые на OM::Output
. В случае Emit
эти методы просто применяют переданные функции к аргументам, а для Check
эти методы просто дропают переданные функции и возвращают ()
.Так как ошибка парсера тоже может дорого конструироваться, тип
OutputMode::Error
по аналогичным причинам также реализует Mode
. Это нужно, например, для opt, который делает парсер опциональным и по понятным причинам отбрасывает и разобранный результат, и ошибку.Как вы могли заметить, у
OutputMode
также есть параметр Incomplete
, реализующий трейт IsStreaming. Он отвечает за то, является ли недостаточный вход фатальной ошибкой или же одним из вариантов ошибки, от которой можно восстановиться. Раньше почти каждый базовый комбинатор nom существовал в двух версиях: streaming и complete. Это было нежелательно по нескольким причинам, главная из которых — разные сорта парсеров очень легко перепутать при написании своих парсеров и потом долго ловить непонятные ошибки. Ещё одним нежелательным следствием этого подхода стало, очевидно, дублирование кода. Разные версии этих парсеров по разному обрабатывали неполный вход, но за вычетом этого аспекта логика там была одинаковая.Новый подход позволяет написать ветвление по
OM::IsIstreaming::is_streaming()
и обработать оба варианта в одной функции, естественным образом собирая разные варианты реагирования на ошибку неполного входа в одном месте. Так как в nom оба типа, реализующих IsStreaming
— Streaming и Complete — в соответствующих методах просто возвращают true
и false
соответственно, компилятор может увидеть ветвление по константному значению и просто убрать одну из веток, избежав генерации ненужного кода.04.02.202519:00
Нашел золото: перевод слова "Нет" на офисный булшит.
Избранное (жизненное):
- Interesting idea, let's explore that next quarter
- What problem are we trying to solve?
- Let’s gather more data before moving forward
- Let’s keep this in mind for future consideration
Избранное (жизненное):
- Interesting idea, let's explore that next quarter
- What problem are we trying to solve?
- Let’s gather more data before moving forward
- Let’s keep this in mind for future consideration
Переслав з:
Install Wizard

06.02.202521:52
https://stackoverflow.com/questions/39863255/repz-ret-why-all-the-hassle
Процессорная архитектура - это магия. Без шуток.
(речь в вопросе о том, что в сгенерированном компилятором коде (и не только) нередко можно встретить вместо обычной инструкции
Процессорная архитектура - это магия. Без шуток.
(речь в вопросе о том, что в сгенерированном компилятором коде (и не только) нередко можно встретить вместо обычной инструкции
RET
(возврат из функции) бессмысленно выглядящую конструкцию REPZ RET
(REPZ
повторяет инструкцию после неё определённое кол-во раз и актуальна только для работы со строками; для RET
она, очевидно, ничего не делает, это всё равно, что написать while(true) { return; }
)

06.02.202523:09
Bait and switch
07.02.202517:32
Из чуть менее важных новостей: nom ориентирован больше на написание парсеров для машинно-читаемых форматов, где в приоритете быстродействие. Для написания парсеров конфигов и языков программирования больше нужны другие вещи, которые в библиотеке для написания парсеров общего назначения не очень уместны. С релизом nom 8 также появился новый крейт nom-language, в котором в дальнейшем и будет добавляться код под такие нужды.
В настоящий момент там две вещи.
(Если вы задаётесь вопросом, что там делает
В настоящий момент там две вещи.
VerboseError
собирает все ошибки дерева парсеров и потому больше подходит для диагностирования ошибок в человеко-читаемом формате. Функция precedence позволяет разбирать выражения, учитывая приоритеты операторов, без их кодирования в грамматике:// пачка импортов, которые не имеет смысла показывать
(Если вы задаётесь вопросом, что там делает
fail
: этот аргумент функции precedence
описывает, как парсить постфиксные выражения. В этой грамматике постфиксных операторов нет, поэтому попытка распарсить что-то, как постфиксное выражение, должно всегда завершаться ошибкой)03.02.202516:08
Шаман и Мизулина поцеловались. Теперь официально можно сказать, что они могут трансформироваться в сушество по имени Шизулина.
#mems
#mems
31.01.202516:31
#prog #rust #rustlib
embed_it — макрос, который позволяет включить в бинарь целую директорию ресурсов и потом обращаться к вложенным директориям и файлам по именам, причём как по статическим (в виде геттеров с теми же именами, что и файлы), так и по рантаймовым. Посмотрите пример в README.
embed_it — макрос, который позволяет включить в бинарь целую директорию ресурсов и потом обращаться к вложенным директориям и файлам по именам, причём как по статическим (в виде геттеров с теми же именами, что и файлы), так и по рантаймовым. Посмотрите пример в README.
Переслав з:
Технологический Болт Генона

01.02.202513:47
Ждём, когда запустят DoomPDF в LinuxPDF
Представлен проект LinuxPDF — Linux в PDF в браузере
https://habr.com/ru/news/878542/
GitHub
https://github.com/ading2210/linuxpdf
Demo
https://linux.doompdf.dev/linux.pdf
Он же в прошлом году запускал DOOM на POS-терминале
https://t.me/tech_b0lt_Genona/4308
А недавно в PDF
https://github.com/ading2210/doompdf
Разработчик под ником ading2210 представил проект LinuxPDF — Linux в PDF в браузере. Проект открывается только в браузерах на базе Chromium, использующих движок PDFium. Код написан на C и опубликован на GitHub по лицензией GNU General Public License v3.0.
«Это Linux, работающий внутри PDF‑файла через эмулятор RISC‑V, основанный на TinyEMU», — пояснил автор решения.
. . .
Полная спецификация для JS в PDF была реализована только Adobe Acrobat, и она содержит некоторые нелепые вещи, такие как возможность выполнять 3D-рендеринг, делать HTTP-запросы и обнаруживать каждый монитор, подключенный к системе пользователя. Однако в Chromium и других браузерах была реализована только крошечная часть этого API из-за очевидных проблем безопасности. Благодаря этому мы можем выполнять любые вычисления, которые захотим, просто с очень ограниченным вводом-выводом.
Код C можно скомпилировать для запуска в PDF с использованием старой версии Emscripten, которая нацелена на asm.js вместо WebAssembly. С его помощью я могу скомпилировать модифицированную версию эмулятора TinyEMU RISC-V в asm.js, который можно запустить в PDF. Для ввода и вывода я повторно использовал тот же код отображения, который я использовал для DoomPDF. Он работает, используя отдельное текстовое поле для каждой строки пикселей на экране, содержимое которого задаётся различными символами ASCII. Для ввода есть виртуальная клавиатура, реализованная с кучей кнопок, и текстовое поле, в котором вы можете ввести текст, чтобы отправить нажатия клавиш в виртуальную машину.
Самая большая проблема здесь связана с производительностью эмулятора. Например, ядру Linux требуется около 30-60 секунд для загрузки в PDF, что более чем в 100 раз медленнее, чем обычно. К сожалению, нет способа исправить это, поскольку версия V8, которую использует движок PDF Chrome, имеет отключённый JIT-компилятор, что разрушает его производительность.
Для корневой файловой системы возможны как 64-, так и 32-битные версии. По умолчанию используется 32-битная система buildroot (которая была предварительно собрана и взята из оригинальных примеров TinyEMU), а также 64-битная система Alpine Linux. Однако 64-битный эмулятор примерно в два раза медленнее, поэтому обычно он не используется.
Представлен проект LinuxPDF — Linux в PDF в браузере
https://habr.com/ru/news/878542/
GitHub
https://github.com/ading2210/linuxpdf
Demo
https://linux.doompdf.dev/linux.pdf
Он же в прошлом году запускал DOOM на POS-терминале
https://t.me/tech_b0lt_Genona/4308
А недавно в PDF
https://github.com/ading2210/doompdf
Увійдіть, щоб розблокувати більше функціональності.