The OpenNET Project / Index page

[ новости /+++ | форум | теги | ]



Вариант для распечатки  
Пред. тема | След. тема 
Форум Разговоры, обсуждение новостей
Режим отображения отдельной подветви беседы [ Отслеживать ]

Оглавление

Вторая редакция патчей для ядра Linux с поддержкой языка Rust, opennews (?), 05-Июл-21, (0) [смотреть все]

Сообщения [Сортировка по времени | RSS]


31. "Вторая редакция патчей для ядра Linux с поддержкой языка Rus..."  –3 +/
Сообщение от Аноним (31), 06-Июл-21, 00:54 
Не подскажите, как на rust с си переписать парсер? Парсер на си использует __attribute__((packed))-структуры, и раскладывает их по отображённым в память страницам. Только слишком много приходится писать кода обвязки, проверяющего выходы за границы отображённой области.

Опасаюсь, что я где-то пропустил проверку. Хочу, чтобы компилятор сам написал эти проверки в нужных местах за меня.

Ответить | Правка | Наверх | Cообщить модератору

73. "Вторая редакция патчей для ядра Linux с поддержкой языка Rus..."  +4 +/
Сообщение от Аноним (68), 06-Июл-21, 02:50 
О каком парсере идет речь? Ты хочешь отобразить область данных на структуру как это делает C?
Есть макрос #[repr(C)] расположит поля структуры строго по сишному, а для копирования данных
в структуру на манер сишного memcpy есть два пути или использовать unsafe или использовать std::io::Write сейчас синтаксис не вспомню, но &struct.write(&source) вполне нормально отработает.
Нужно только не забыть указать макрос #[Deserializable], но что бы не страдать этой фигней можно использоват крейт bytes или bincode.

В любом случае да вы правы обвязки больше выходит, но она позволяет сделать ваши действия платформонезависимыми на LittleEndian и BigEndian и при разных упаковках и правилах переполнения.

Это все цена за безопастность и переносимость.

Ответить | Правка | Наверх | Cообщить модератору

82. "Вторая редакция патчей для ядра Linux с поддержкой языка Rus..."  +1 +/
Сообщение от Ordu (ok), 06-Июл-21, 03:08 
> О каком парсере идет речь?

Ни о каком. Тролль же. Он раста в глаза не видел, только маркетинговые листовки читал. По его писанине видно.

Ответить | Правка | Наверх | Cообщить модератору

87. "Вторая редакция патчей для ядра Linux с поддержкой языка Rus..."  +/
Сообщение от Ordu (ok), 06-Июл-21, 03:20 
А, и да. Если __attribute__((packed)), то repr(C) будет мало, надо repr(C,packed). Хотя я б рекомендовал взгуглить на тему крейтов, заточенных под описание бинарных данных -- я навскидку не помню, но там было что-то, позволяющее чётко описывать бинарное представление каждого поля, что в целом даёт более полноценное решение, нежели C'шные структуры. Например, ты можешь после mmap'а файла, прозрачно работать с big-endian данными, даже если не знаешь, на машине с каким endianness'ом будет запускаться твой код. Это, понятно, можно применять и для ffi, чтобы описывать произвольные C'шные структуры в памяти, и работать потом с ними in-place.
Ответить | Правка | К родителю #73 | Наверх | Cообщить модератору

112. "Вторая редакция патчей для ядра Linux с поддержкой языка Rus..."  +2 +/
Сообщение от Аноним (-), 06-Июл-21, 08:21 
На little endian машине раст сам обработает big endian битовые поля (пакеты из сетевого интерфейса) , а погромист об этом и не будет знать? Это прям магия раст!!! Хотя больше похоже на нос Буратино
Ответить | Правка | Наверх | Cообщить модератору

298. "Вторая редакция патчей для ядра Linux с поддержкой языка Rus..."  –1 +/
Сообщение от Ordu (ok), 06-Июл-21, 18:57 
Ты читать умеешь? Я же написал: крейт. Это что-то типа библиотеки. При чём здесь "раст сам обработает"?
Ответить | Правка | Наверх | Cообщить модератору

338. "Вторая редакция патчей для ядра Linux с поддержкой языка Rus..."  +/
Сообщение от Аноним (192), 06-Июл-21, 23:38 
> Только слишком много приходится писать кода обвязки, проверяющего выходы за границы отображённой области.

Именно от этого Rust и избавляет.

Просто взять, и написать парсер с нуля по исходным условиям задачи.

> Опасаюсь, что я где-то пропустил проверку. Хочу, чтобы компилятор сам написал эти проверки в нужных местах за меня.

Вот он сам и напишет - если вы не будете использовать unsafe и "обвязки", то не надо будет и  "опасаться". В парсере то это все зачем?

Ответить | Правка | К родителю #31 | Наверх | Cообщить модератору

Архив | Удалить

Рекомендовать для помещения в FAQ | Индекс форумов | Темы | Пред. тема | След. тема




Партнёры:
PostgresPro
Inferno Solutions
Hosting by Hoster.ru
Хостинг:

Закладки на сайте
Проследить за страницей
Created 1996-2024 by Maxim Chirkov
Добавить, Поддержать, Вебмастеру