The OpenNET Project / Index page

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



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

Оглавление

Выпуск языка программирования Rust 1.51, opennews (??), 26-Мрт-21, (0) [смотреть все]

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


151. "Выпуск языка программирования Rust 1.51"  +/
Сообщение от Урри (ok), 26-Мрт-21, 18:47 
> Приблезительно через равный промежуток времени появляется очередная порция подростков
> неосиляторов. Для которых всё сложно и непонятно и оуни начинают велосипедить

Уже довелосипедились. Я выше пример привел из широкоизвестной в узких кругах растолибы substrate:
--cut--
pub struct LightStorage<Block: BlockT> {
  db: Arc<dyn Database<DbHash>>,
  meta: RwLock<Meta<NumberFor<Block>, Block::Hash>>,
  cache: Arc<DbCacheSync<Block>>,
  header_metadata_cache: Arc<HeaderMetadataCache<Block>>,
  #[cfg(not(target_os = "unknown"))]
  io_stats: FrozenForDuration<kvdb::IoStats>,
}
...
fn number(&self, hash: Block::Hash) -> ClientResult<Option<NumberFor<Block>>> {
  if let Some(lookup_key) = block_id_to_lookup_key::<Block>(&*self.db, columns::KEY_LOOKUP, BlockId::Hash(hash))? {
    let number = utils::lookup_key_to_number(&lookup_key)?;
      Ok(Some(number))
  } else {
    Ok(None)
  }
}

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

210. "Выпуск языка программирования Rust 1.51"  +/
Сообщение от Ordu (ok), 26-Мрт-21, 22:47 
И что тут не так?
Ответить | Правка | Наверх | Cообщить модератору

227. "Выпуск языка программирования Rust 1.51"  +/
Сообщение от Аноним (-), 26-Мрт-21, 23:52 
Код слегонца наркоманский и контринтуитивный, а так все хорошо, прекрасная маркиза. Признайся, что ты жрешь чтобы затюнить мозг для работы с такими закорюками? А то даже у лютых игроделов такого нет, они догадываются что это потом еще и майнтайнить надо, при том не факт что тому же человеку...
Ответить | Правка | Наверх | Cообщить модератору

230. "Выпуск языка программирования Rust 1.51"  +/
Сообщение от Ordu (ok), 27-Мрт-21, 00:54 
> Код слегонца наркоманский и контринтуитивный, а так все хорошо, прекрасная маркиза. Признайся,
> что ты жрешь чтобы затюнить мозг для работы с такими закорюками?

Тут всё довольно просто. Если с подсветкой синтаксиса, будет вообще тривиально. У тебя просто глаз непривычен к синтаксису, и поэтому парсинг всего этого требует большого количества усилий. Тренированный глаз выхватывает знакомые блоки, и либо пляшет от них, либо отвергает их как неважные в данный момент. Ну, там, Arc скажем -- это thread-safe reference count. Если мне в данный момент это не важно, то я тут же выделяю оттуда dyn Database<DbHash>, а это значит, что речь про ref counted указатель на объект, реализующий трейт Database, с параметром DbHash, который явно задаёт алгоритм хеширования база данных пользуется. Последнее суждение правда вынесено чисто на основании названия типа, которое я впервые вижу, но... ну и чо? Можно задаться вопросом, зачем тут индирекция через трейт в сочетании с типом-параметром DbHash, но это, возможно, чтобы позволить компилятору выбирать функцию алгоритма хеширования на этапе компиляции, без десятка вложенных virtual вызовов. Впрочем, это уже совсем спекуляции, поскольку я не знаю зачем этот код.

Или в функции -- там же сразу видно, что функция возвращает результат выполнения выражения if let, которое либо находит key и выполняет то что перед else'ом и возвращает результат, либо не находит и возвращает результат выполнения того, что после else'а.

> А то даже у лютых игроделов такого нет, они догадываются что
> это потом еще и майнтайнить надо, при том не факт что
> тому же человеку...

rust отличается как раз тем, что его мейнтейнить довольно просто. Это люди часто отмечают: сложные рефакторинги с растом занимают на удивление мало времени, потому что все твои косяки вылезут на компиляции, тебе не придётся потом как с C/C++ долго отлаживать программу, или ещё как-то вылавливать, что же там в процессе рефакторинга было упущено.

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

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

233. "Выпуск языка программирования Rust 1.51"  +3 +/
Сообщение от Урри (ok), 27-Мрт-21, 01:40 
Вообще-то тут все плохо. Даже более скажу - очень, очень плохо; я за подобный c++ код увольнял людей.

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

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

Вы пока этого не понимаете, судя по вашим комментариям. Так что я вам предложу простую аналогию.
Представьте, что вы сейас читаете макроассемблерный код, где в дополнение к простым инструкциям MOV, ADD, SUB добавлены более сложные VMOVDQU64, VPBROADCASTQ, PINSRQ. "В чем сложности, бро" спросите вы? В том, что с этим кодом может работать (причем обязательно без перерывов) специалист узкого профиля. Прервался - забыл, сиди вспоминай и строй в голове все по новой. Причем познания этого специалиста вообще никак не могут пригодится вне этой области - например, при переходе на arm ассемблер или даже на языки более высокого уровня.

Код выше обладает всеми недостатками примера с ассемблером. Это и многократные вложения, заставляющие каждый раз строить в голове цепочку структур "кто на чем стоял", и акронимы (слава богу попроще чем PINSRQ), и перегруженность спецсимволами, которые в любом языке очень плохая идея, и практическая невозможность сопровождения, когда надо быстро вносить минимальные правки не ломая все и вся.

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

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

Вот как то так.

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

236. "Выпуск языка программирования Rust 1.51"  –3 +/
Сообщение от Ordu (ok), 27-Мрт-21, 02:25 
> Вообще-то тут все плохо. Даже более скажу - очень, очень плохо; я за подобный c++ код увольнял людей.

В C++ этот код не скомпилируется. Это не C++, детка, это раст. Не надо критериями C++ мерять раст. Ты ещё критериями лиспа померяй C++, что получится?

> Представьте, что вы сейас читаете макроассемблерный код, где в дополнение к простым инструкциям MOV, ADD, SUB добавлены более сложные VMOVDQU64, VPBROADCASTQ, PINSRQ. "В чем сложности, бро" спросите вы? В том, что с этим кодом может работать (причем обязательно без перерывов) специалист узкого профиля. Прервался - забыл, сиди вспоминай и строй в голове все по новой. Причем познания этого специалиста вообще никак не могут пригодится вне этой области - например, при переходе на arm ассемблер или даже на языки более высокого уровня.

Я только что прочитал этот код, не зная откуда он, не видя документации к трейту Database, не видя документации к DbHash, не видя документации ко всем остальным типам. Самой большой проблемой было, что я привык читать с подсветкой синтаксиса, поэтому здесь приходилось вглядываться, где там :, отделяющее имя поля от сигнатуры типа, и все эти #[] не подсвечиваются, и поэтому замусоривают поле зрения.

Если тебе нужен пример кода, в котором сам чёрт ногу сломит, то я порекомендую глянуть на генераторы парсеров или, скажем, библиотеки для immediate mode GUI: conrod и особенно egui. Особенно egui отличается пустой и не объясняющей ничего документацией, из которой непонятно как это использовать, разглядывание сорцов тоже ничего не проясняет, обрывки кода в документации непонятно как склеивать и увязывать с остальной логикой... ууу... вот это срань, реально. conrod ещё куда ни шло, к нему хоть примеров можно найти, и разглядывая их вперемешку с документацией и кодом можно сообразить, что к чему. А то что ты цитируешь -- это детский лепет, который у тебя вызывает проблемы по тем же причинам, по которым у меня вызывает проблемы C++: перенос навыков с одного языка на другой не срабатывает и ещё усугубляется схожестью языков.

> Код выше обладает всеми недостатками примера с ассемблером. Это и многократные вложения, заставляющие каждый раз строить в голове цепочку структур "кто на чем стоял", и акронимы (слава богу попроще чем PINSRQ), и перегруженность спецсимволами, которые в любом языке очень плохая идея, и практическая невозможность сопровождения, когда надо быстро вносить минимальные правки не ломая все и вся.

Всё завёртывание там -- это умные указатели. Про Arc я рассказал, а значение RwLock и FrozenForDuration понятно из названия. Единственное, что неясно из кода без чтения документации, это что за Meta такой. И про разумность использования его параметризованным я ничего не могу сказать. Остальное, блин, очевидно при первом прочтении.

> Но вы превращаетесь в кодера - придаток одного конкретного языка (я, например, хорошо владею брейнфаком - помогли ли мне эти знания где-то вовне брейнфака? нет). Придаток, который в ближайшем будущем можно легко заменить на алгоритм кодогенерации (как, например, из c генерируют адекватный джаваскрипт). Придаток, совершенно бесполезный вне границ языка.

Мне похрен. Rust -- это уникальная вещь, мне приходилось эпизодически раньше оказыватся в стане фанатов какого-либо языка, но каждый ненадолго, довольно быстро я начинал видеть в языке фатальные недостатки. Rust'ом я фанатею уже 6 лет, с момента выхода 1.0. И я не хочу знать про другие языки. Я шелл-скрипты сегодня пишу на расте. Однострочники так же набираю в шелле bash, но ежели однострочником не обойтись, я пишу на расте. Мне сегодня не интересны все эти lisp'ы, C, и прочие. Я могу разглядывать другие языки, типа go, но мне неинтересно на них писать.

> У Макконела есть великолепная книга, "Совершенный код".

Я закину её в список чтения. Может как-нибудь почитаю.

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

303. "Выпуск языка программирования Rust 1.51"  +/
Сообщение от Аноним (268), 28-Мрт-21, 12:15 
> Это и многократные вложения, заставляющие каждый раз строить в голове цепочку структур
> "кто на чем стоял", и акронимы (слава богу попроще чем PINSRQ), и перегруженность спецсимволами

Описал C++.

> Код выше обладает всеми недостатками примера с ассемблером.

Ага, понятно.

> я, например, хорошо владею брейнфаком

Судя по Вашим комментариям во всех тредах, где упоминается Rust, только этот язык Вы и осилили, остальные, видимо, слишком сильно от него отличаются, поэтому не получилось.

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

304. "Выпуск языка программирования Rust 1.51"  +/
Сообщение от Аноним (268), 28-Мрт-21, 12:18 
> я за подобный c++ код увольнял людей.

Получается, ты остался без плюсовиков?

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

220. "Выпуск языка программирования Rust 1.51"  +2 +/
Сообщение от Онаним (?), 26-Мрт-21, 23:23 
Мои глаза вытекли, спасибо.
Ответить | Правка | К родителю #151 | Наверх | Cообщить модератору

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

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




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

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