The OpenNET Project / Index page

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



"Выпуск  Rust 1.78. Язык Borgo, сочетающий сильные стороны Go и Rust"
Версия для распечатки Пред. тема | След. тема
Форум Разговоры, обсуждение новостей
Исходное сообщение [ Отслеживать ]
Подсказка: Доступны два режима работы форума: "Раскрыть нити" и "Свернуть нити".
. "Выпуск  Rust 1.78. Язык Borgo, сочетающий сильные стороны Go..." –1 +/
Сообщение от Ivan_83 (ok), 03-Май-24, 01:16 
А касательно того фрагмента, так проблема крестов и прочих переусложнённых языков в том, что нужно быть супер гуру чтобы пользоватся ими правильно.
На практике гуру почти не существует и они тоже часто фигачат всякую фигню.

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

Потом я ходил по пути: надо написать свои функции для всего и везде ими пользоватся.
Да, свои memset, memcpy и пр.
Правда быстро выяснилось что они более медленные и утывая сколько там нюансов для оптимизации скорости я сдался :)

Потом были врапперы:
mem_set(void *buf, const size_t size, const uint8_t c);
#define mem_bzero(__buf, __size)    mem_set((__buf), (size_t)(__size), 0x00)
#define zalloc(__size)            calloc(1, (size_t)(__size))
#define zallocarray(__nmemb, __size)    calloc((__nmemb), (size_t)(__size))
#define mem_new(__type)            (__type*)malloc(sizeof(__type))
#define mem_znew(__type)        (__type*)zalloc(sizeof(__type))
#define mallocarray(__nmemb, __size)    reallocarray(NULL, (__nmemb), (size_t)(__size))
Удобно же?

Удобно, и идеологически правильно, и ваще офигенско!
Но только вот постороннему разработчику не до конца понятно что это, те по сути это введение своего диалекта для С.

В итоге я это выкинул, и даже не стал брать bcopy(), bzero() - потому что они уже типа депрекейтед.
Только explicit_bzero() местами воткнул где было похоже что memset() компелятор выкинет.

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


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

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

Оглавление
Выпуск  Rust 1.78. Язык Borgo, сочетающий сильные стороны Go и Rust, opennews, 02-Май-24, 23:21  [смотреть все]
Форумы | Темы | Пред. тема | След. тема



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

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