The OpenNET Project / Index page

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



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

Оглавление

Выпуск Rust 1.79. Создан консорциум для разработки высоконадёжных систем на Rust, opennews (??), 13-Июн-24, (0) [смотреть все]

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


82. "Выпуск Rust 1.79. Создан консорциум для разработки высоконад..."  –1 +/
Сообщение от Пользователь (?), 14-Июн-24, 09:01 
То что максимально странный синтаксис.
Поди разберись что это: словарь, массив или вообще что-то другое

Уж лучше Swift от Apple, он хотя бы выглядит красиво и дает тебе все те же плюшки с безопасностью

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

103. "Выпуск Rust 1.79. Создан консорциум для разработки высоконад..."  +/
Сообщение от Аноним (-), 14-Июн-24, 10:05 
Разве свифт это не ARC ?
Я понимаю, что даже в objc можно было писать всякие autorelispool, а в свифте обмазываться UnsafeRawPointer, MemoryLayout...
Но зачем?
Ответить | Правка | Наверх | Cообщить модератору

122. "Выпуск Rust 1.79. Создан консорциум для разработки высоконад..."  +2 +/
Сообщение от freecoder (ok), 14-Июн-24, 11:28 
Фигурные скобки обозначают блок, квадратные скобки - массив, срез или доступ по индексу. Так понятнее?
Ответить | Правка | К родителю #82 | Наверх | Cообщить модератору

302. "Выпуск Rust 1.79. Создан консорциум для разработки высоконад..."  +2 +/
Сообщение от Аноним (302), 14-Июн-24, 23:42 
> Фигурные скобки обозначают блок, квадратные скобки - массив, срез или доступ по
> индексу. Так понятнее?

И какой логический смысл блока { None }; в типа-массиве? Если это интуитивно - то для кого? Ящеры не палятся?

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

393. "Выпуск Rust 1.79. Создан консорциум для разработки высоконад..."  +1 +/
Сообщение от _kp (ok), 15-Июн-24, 17:37 
Там и в let смысла нет. Начали б с const и не меньше употребляли разные нехорошие вешества.
Если язык спроектирован грамотно, то в общих случаях синтаксис ясный и лаконичный.

Кстати, в Swift синтаксис хороший, сам язык только узкоспециализированный.

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

403. "Выпуск Rust 1.79. Создан консорциум для разработки высоконад..."  +2 +/
Сообщение от Аноним (-), 15-Июн-24, 21:19 
> Там и в let смысла нет.

Я тоже не понимаю чего они паскальское := не стырили. Оскорбляло меньшинства своим видом?

> Начали б с const и не меньше употребляли разные нехорошие вешества.

Ну до них и try_* дошел только сильно опосля. И вот оказалось что если пчелы против меда, тогда потом в улье жрать нечего. А системный яп не могет в системные задачи. И пришлось городить такие вот костыли. Вот уже почти совсем, закостылили, стабильной версией собирается - вчера закомитили, сегодня ночью отрелизились, проверяйте стабильность :))). Поэтому дрова на этом всем и болтаются в режиме эксперимента - тулчейн телепают на каждую фигню.

> Если язык спроектирован грамотно, то в общих случаях синтаксис ясный и лаконичный.

Это ж мозила делала, откуда у них грамотные проектировщики? Они всех нормальных девов в тот момент уже ушли. Так что идея хорошая, но реализация - от хипстеров с горящими глазами. А эти в архитектуру ессно не умеют, даже если б им и хотелось.

> Кстати, в Swift синтаксис хороший, сам язык только узкоспециализированный.

Ну, мне он ни в 3.14, ни в красну аpмию...

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

431. "Выпуск Rust 1.79. Создан консорциум для разработки высоконад..."  +1 +/
Сообщение от freecoder (ok), 16-Июн-24, 13:49 
> Там и в let смысла нет. Начали б с const

Если бы начали с const, то это было бы объявление константы foo. Так можно, но семантика приведённого выше выражения в другом: само foo не является константой, константным является только выражение, результат вычисления которого определяет значение элементов объявляемого массива.

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

438. "Выпуск Rust 1.79. Создан консорциум для разработки высоконад..."  +/
Сообщение от _kp (ok), 16-Июн-24, 16:44 
Вспомнилось..
Где деньги?
Я всё объясню.
Нет, объяснить я и сам могу что угодно. Где деньги?
;)
Ответить | Правка | Наверх | Cообщить модератору

493. "Выпуск Rust 1.79. Создан консорциум для разработки высоконад..."  +/
Сообщение от freecoder (ok), 17-Июн-24, 15:09 
Вы ломитесь в открытую дверь: константы объявлять в Rust можно, но упомянутый пример не об этом. Он об использовании выражений как констант.
Ответить | Правка | Наверх | Cообщить модератору

512. "Выпуск Rust 1.79. Создан консорциум для разработки высоконад..."  +1 +/
Сообщение от _kp (ok), 18-Июн-24, 00:09 
Я больше про неопределенный артикль - let.
Если есть "const", то смысловая польза от "let", как от сиволов валюты в perl/php. Просто засиоают ис0одник, в угоду примитивизму компиляторов/интерпретаторов.


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

518. "Выпуск Rust 1.79. Создан консорциум для разработки высоконад..."  +/
Сообщение от freecoder (ok), 18-Июн-24, 09:38 
> Я больше про неопределенный артикль - let.
> Если есть "const", то смысловая польза от "let", как от сиволов валюты
> в perl/php. Просто засиоают ис0одник, в угоду примитивизму компиляторов/интерпретаторов.


const FOO: [i32; 5] = [1, 2, 3, 4, 5];

Вот вам определение константы. Где вы тут let видите?
Ответить | Правка | Наверх | Cообщить модератору

432. "Выпуск Rust 1.79. Создан консорциум для разработки высоконад..."  +1 +/
Сообщение от freecoder (ok), 16-Июн-24, 13:56 
> И какой логический смысл блока { None }; в типа-массиве?

Данный конкретный пример - искусственный, для иллюстрации, как в принципе можно делать. В реальном коде конечно там будет не None, а выражение, результат вычисления которого может быть использован в константном контексте.

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

510. "Выпуск Rust 1.79. Создан консорциум для разработки высоконад..."  +/
Сообщение от Аноним (-), 17-Июн-24, 23:32 
>> И какой логический смысл блока { None }; в типа-массиве?
> Данный конкретный пример - искусственный, для иллюстрации, как в принципе можно делать.

А, понятно, сбили автомобилем вертолет - но системы ПВО все же не продаете. Чисто ради эффектов. Только вот в случае яп большой вопрос фича ли это. Если можно хреначить такой бред - ну его и будут хреначить. И с майнтенансом такого кода, очевидно, начнутся проблемы.

> В реальном коде конечно там будет не None, а выражение, результат
> вычисления которого может быть использован в константном контексте.

Так то это может и не есть плохо. Но как-то ректально уж очень. Про KISS и "не умножайте сущности без необходимости" они явно не слышали и не только вступили на путь плюсеров, но и кажись составили достойную конкуренцию в борьбе за первое место на тему неочевидных конструкций и кривого синтаксиса.

Может, им стоило бы волевым усилием сделать какой-нибудь хруст-2.0 где все будет менее ректально?

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

516. "Выпуск Rust 1.79. Создан консорциум для разработки высоконад..."  +/
Сообщение от freecoder (ok), 18-Июн-24, 09:29 
> кажись составили достойную конкуренцию в борьбе за первое место на тему
> неочевидных конструкций и кривого синтаксиса.

Конструкция более чем очевидна и логична в рамках синтаксиса и семантики Rust. Просто вы не знаете языка, поэтому вам не очевидно.

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

527. "Выпуск Rust 1.79. Создан консорциум для разработки высоконад..."  +/
Сообщение от Аноним (-), 19-Июн-24, 05:41 
> Конструкция более чем очевидна и логична в рамках синтаксиса и семантики Rust.
> Просто вы не знаете языка, поэтому вам не очевидно.

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

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

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

306. "Выпуск Rust 1.79. Создан консорциум для разработки высоконад..."  +1 +/
Сообщение от Аноним (-), 14-Июн-24, 23:57 
> Фигурные скобки обозначают блок, квадратные скобки - массив, срез или доступ по
> индексу. Так понятнее?

И какой логический смысл блока { None }; в типа-массиве? Если это интуитивно - то для кого? Ящеры не палятся?

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

430. "Выпуск Rust 1.79. Создан консорциум для разработки высоконад..."  +1 +/
Сообщение от freecoder (ok), 16-Июн-24, 13:43 
> И какой логический смысл блока { None }; в типа-массиве?

Блок в котором одна инструкция, причём так как после неё нет точи с запятой, то результата вычисления выражения этой инструкции будет возвращаемым значением блока. Это один из базовыв примитивов в Rust, который используется повсеместно. Примерчик вам для понимания:


let sum = {
    let a = 1;
    let b = 2;
    a + b
};

Подробнее - в статье: https://habr.com/ru/articles/532660

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

439. "Выпуск Rust 1.79. Создан консорциум для разработки высоконад..."  –1 +/
Сообщение от Ноним (?), 16-Июн-24, 17:13 
Это было еще в C. И в разы проще.
Ответить | Правка | Наверх | Cообщить модератору

457. "Выпуск Rust 1.79. Создан консорциум для разработки высоконад..."  +1 +/
Сообщение от Прохожий (??), 17-Июн-24, 02:29 
Вы, наверное, и продемонстрировать сможете, как это же В РАЗЫ проще на Си?
Ответить | Правка | Наверх | Cообщить модератору

477. "Выпуск Rust 1.79. Создан консорциум для разработки высоконад..."  +/
Сообщение от Аноним (-), 17-Июн-24, 09:59 
> Вы, наверное, и продемонстрировать сможете, как это же В РАЗЫ проще на Си?

На си ты все же обломаешься написать как у гражданиина freecoder в хабре:


fn foo<'a, T: FromStr, I: IntoIterator<Item = T>, F: Fn(T) -> bool>(
    self: &'a Self,
    first: T,
    callable: F,
    iter: I,
) -> Result<&'a T, T::Err> {
    // ...
}

Интуитивненько, да? Тут и тяжеловесный плюсер то - поднапряжется уже, не, к ТАКОМУ даже он непривычный. Теперь попробуйте без поллитра понять что вообще эта конструкция за зверь.

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

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

483. "Выпуск Rust 1.79. Создан консорциум для разработки высоконад..."  +/
Сообщение от Аноним (483), 17-Июн-24, 11:04 
Чел, ты чем смотришь? Вот же в новости написано...

Твой код можно переписать в это:
fn foo<T: FromStr, I: IntoIterator<Item = T>>(&self, _first: T, _callable: impl Fn(T) -> bool, _iter: I) -> _MyResult<T>

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

491. "Выпуск Rust 1.79. Создан консорциум для разработки высоконад..."  +/
Сообщение от freecoder (ok), 17-Июн-24, 14:31 
> Интуитивненько, да? Тут и тяжеловесный плюсер то - поднапряжется уже, не, к
> ТАКОМУ даже он непривычный. Теперь попробуйте без поллитра понять что вообще
> эта конструкция за зверь.

Вы саму статью-то читали, особенно в том месте, откуда вы выдрали этот код? Похоже, что нет. Потому цитирую:

Хорошо, допустим, каждый из элементов синтаксиса относительно неплох, но как они сочетаются все вместе? Разве их комбинация не превращает Rust-код в нечитаемое месиво из спецсимволов? Например:


fn foo<'a, T: FromStr, I: IntoIterator<Item = T>, F: Fn(T) -> bool>(
    self: &'a Self,
    first: T,
    callable: F,
    iter: I,
) -> Result<&'a T, T::Err> {
    // ...
}

На самом деле это действительно большая проблема. Сигнатуры обобщенных функций с заданными ограничениями, видимо, самые перегруженные синтаксисом элементы языка Rust. И чтобы справиться с ними, Rust предлагает различные синтаксические улучшения и особый сахар, который помогает лучше упорядочить ограничения и скрыть из виду те аспекты, которые и так достаточно очевидны:


fn foo<T, I>(&self, first: T, callable: impl Fn(T) -> bool, iter: I) -> MyResult<T>
where
    T: FromStr,
    I: IntoIterator<Item = T>,
{
    // ...
}

Сигнатура метода foo уже не выглядит настолько страшно, как в исходном варианте. Она не идеальна, но сравнивая с тем, что было, все же заметен явный прогресс в улучшении читаемости. Видно, что алиасы, автовывод времен жизни, сахар для указания self, impl Trait в позиции аргумента, блок where и прочее, введены в язык не случайно и они сильно упрощают чтение действительно сложных мест, с непростой семантикой.

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

515. "Выпуск Rust 1.79. Создан консорциум для разработки высоконад..."  +/
Сообщение от Аноним (-), 18-Июн-24, 01:56 
> На самом деле это действительно большая проблема. Сигнатуры обобщенных функций с заданными
> ограничениями, видимо, самые перегруженные синтаксисом элементы языка Rust. И чтобы справиться
> с ними, Rust предлагает различные синтаксические улучшения и особый сахар,

...но не дает никаких гарантий что конкретный кодер в конкретном проекте будет юзать именно то, именно так, поэтому всегда будет риск отхватить на вход - вот такой чудо-код от очередного write-only поймавшего волну. Да, вон тот тип в 2 ночи, на пике возможностей - еще и не так завернет. Теперь попробуйте это майнтайнить.

> Сигнатура метода foo уже не выглядит настолько страшно, как в исходном варианте.

Ну, по сравнению с первым вариантом это улучшение. Хотя как по мне - это на уровне забористых плюсов примерно. Т.е. в целом я вообще видеть ТАКОЙ код - не хочу.

...однако никто и ничто не гарантирует что в энном проекте не будет вон то. И тогда можно будет охренеть эти инопланетные каракули декодировать.

> Она не идеальна, но сравнивая с тем, что было, все же
> заметен явный прогресс в улучшении читаемости.

На мой вкус - им бы норм архитекта нанять и сделать синтаксис 2.0. Зарубив на корню вон те страшилища. Это конечно будет кидалово, но пока на этом не сильно много важного софта и это еше терпимо будет. Реально нужное поправят. А вечно майнтайнить те ужастики - ну вот нет. Они умрут от своего веса и 0 майнтайнеров на такой код.

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

Хороший ЯП должен делать сложные вещи - неудобными. Потому что цель - вовсе не дать програмеру повыражовыаться с заподвыподвертом. Код видите ли должны другие майнтайнить потом. Иначе это сдохнет как только програмеру надоест его проект. И уж вроде корпы должны бы такой аспект понимать, но не, даже с 3 директорами от корп фэйл. Парадокс прямо.

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

517. "Выпуск Rust 1.79. Создан консорциум для разработки высоконад..."  +/
Сообщение от freecoder (ok), 18-Июн-24, 09:35 
> Теперь попробуйте это майнтайнить.

Переписываешь как надо - и спокойно дальше майнтайнишь. Или в чём должен майнтейниг заключаться?

> На мой вкус - им бы норм архитекта нанять и сделать синтаксис
> 2.0. Зарубив на корню вон те страшилища. Это конечно будет кидалово,
> но пока на этом не сильно много важного софта и это
> еше терпимо будет. Реально нужное поправят. А вечно майнтайнить те ужастики
> - ну вот нет. Они умрут от своего веса и 0
> майнтайнеров на такой код.

Напишите пример, как именно вы хотите, чтобы выглядел такой код, с такой же семантикой. У вас же к синтаксису претензии, правильно? Предложите лучший синтаксис для лучшего выражения того же.

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

528. "Выпуск Rust 1.79. Создан консорциум для разработки высоконад..."  +/
Сообщение от Аноним (-), 19-Июн-24, 05:49 
> Переписываешь как надо - и спокойно дальше майнтайнишь. Или в чём должен
> майнтейниг заключаться?

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

2) Убить дофига времени на переписывание и проверки что нигде факап не вышел. Рефакторы весьма багоопасная тема. И уж точно существенный рефактор кода - это не майнтенанс. Странно что вы это не знаете.

> Напишите пример, как именно вы хотите, чтобы выглядел такой код, с такой
> же семантикой. У вас же к синтаксису претензии, правильно? Предложите лучший
> синтаксис для лучшего выражения того же.

Го блин за образец возьмите :). Можно сманив прям тех же тушек. А половину абстракций вероятно надо будет просто выкинуть к хренам. И черт с ними с концепциями и прочей функциональщиной. Не надо это все в реальных проектах, только майнтенанс делает непотребным.

Хотя конечно можно в это как следует вляпаться и посмотреть как до корпов это допрет - и тогда они кинут вас куда жестке, объявив deprecated когда у вас полжизни на это завязана сдуру уже. Вон там нетчики прикольно кипишуют, реакт :)) осваиваьт собираются. А зачем тогда тот мусор учили? А, чтобы ща списать дофига знаний в /dev/null? И обратно на уровнеь джуна? Отличные перспективы.

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

530. "Выпуск Rust 1.79. Создан консорциум для разработки высоконад..."  +/
Сообщение от freecoder (ok), 19-Июн-24, 08:42 
> Такие конструкции с такой записью это делают мягко говоря не быстрым
> и не простым занятием.

Те улучшения плохо написанного кода, о которых шла речь выше - чисто синтаксические, они автоматически проверяются компилятором. Невозможно ничего сломать, просто перенося impl Trait в позицию аргумента или вынося ограничения в блок where, или вводя свой новый алиас для типа. В этом прелесть строгой типизации в Rust: подобные вещи проверяются компилятором автоматически, поэтому рефакторить код на расте очень легко.

> Го блин за образец возьмите :). Можно сманив прям тех же тушек.
> А половину абстракций вероятно надо будет просто выкинуть к хренам.

Вот именно. Что с той же семантикой такое на Go вообще не получится записать. А абстракции выкинуть и в Rust можно, если они вам не нужны.

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

570. "Выпуск Rust 1.79. Создан консорциум для разработки высоконад..."  +/
Сообщение от Аноним (-), 25-Июн-24, 12:22 
> прелесть строгой типизации в Rust: подобные вещи проверяются компилятором автоматически,
> поэтому рефакторить код на расте очень легко.

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

> Вот именно. Что с той же семантикой такое на Go вообще не
> получится записать. А абстракции выкинуть и в Rust можно, если они
> вам не нужны.

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

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

480. "Выпуск Rust 1.79. Создан консорциум для разработки высоконад..."  +/
Сообщение от n00by (ok), 17-Июн-24, 10:33 
> Вы, наверное, и продемонстрировать сможете, как это же В РАЗЫ проще на
> Си?

Если без return, то так:

#include <stdio.h>
int main(void)
{
    int a, b;
    printf("%i", (a = 1, b = 2, a + b));
}

А если вспомнить, откуда вырос синтаксис Rust, то так:

let sum =
  let a = 1 in
  let b = 2 in
  a + b
;;

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

490. "Выпуск Rust 1.79. Создан консорциум для разработки высоконад..."  –1 +/
Сообщение от freecoder (ok), 17-Июн-24, 14:24 
>> Вы, наверное, и продемонстрировать сможете, как это же В РАЗЫ проще на Си?
> Если без return, то так:
> #include <stdio.h>
> int main(void)
> {
>     int a, b;
>     printf("%i", (a = 1, b = 2, a + b));
> }

Код не эквивалентный, так как здесь a и b объявлены во внешнем пространстве имён.

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

495. "Выпуск Rust 1.79. Создан консорциум для разработки высоконад..."  +/
Сообщение от n00by (ok), 17-Июн-24, 15:54 
>>> Вы, наверное, и продемонстрировать сможете, как это же В РАЗЫ проще на Си?
>> Если без return, то так:
>> #include <stdio.h>
>> int main(void)
>> {
>>     int a, b;
>>     printf("%i", (a = 1, b = 2, a + b));
>> }
> Код не эквивалентный, так как здесь a и b объявлены во внешнем
> пространстве имён.

Удивительно, но в Си не пространств имён.

Если имелась ввиду "область видимости", то она ограничена {  } функции main - за её пределами никто не видит, в отличие от такого:

int a, b;

int main(void)
{
}    

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

504. "Выпуск Rust 1.79. Создан консорциум для разработки высоконад..."  +/
Сообщение от freecoder (ok), 17-Июн-24, 18:14 
Да, область видимости. В вашем Си-коде и в моём Rust-примере имена переменных по разному видны (объявленное внутри блока в Rust не будет видимо вне его). Так что это разные примеры.
Ответить | Правка | Наверх | Cообщить модератору

521. "Выпуск Rust 1.79. Создан консорциум для разработки высоконад..."  +/
Сообщение от n00by (ok), 18-Июн-24, 12:28 
> Да, область видимости. В вашем Си-коде и в моём Rust-примере имена переменных
> по разному видны (объявленное внутри блока в Rust не будет видимо
> вне его). Так что это разные примеры.

Разные разве что языки. Объявленные внутри main a и b не видны за её пределами. Если не понятен был намёк "если без retuen", то вот императивная запись:

int sum() {
  int a = 1;
  int b = 2;
  return a + b;
}

В моём примере на OCaml, который очень похож на Rust

let sum =
  let a = 1 in
  let b = 2 in
  a + b
;;

и потому его пришлось выкинуть в ответе для удобства парирования, это вообще не переменные, а чистые функции. Если Rust возвращает значение без императивного return, значит это и там - функция (неудачное её имя -- отдельная тема, но вопрос "что она суммирует" проще замять для ясности).  

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

539. "Выпуск Rust 1.79. Создан консорциум для разработки высоконад..."  +/
Сообщение от freecoder (ok), 21-Июн-24, 09:52 
В Rust можно сделать функцию:

fn sum() -> i32 {
    let a = 1;
    let b = 2;
    a + b    
}

sum();


замыкание

let sum = || {
    let a = 1;
    let b = 2;
    a + b
};

sum();


и блок:

let sum = {
    let a = 1;
    let b = 2;
    a + b
};

В отличии от функций и замыканий, блок не принимает аргументов, в блоке нельзя сделать в произвольном месте return и вычисляется блок в том месте, где он определяется, возвращая при этом значение последнего выражения, вычисленного внутри него.
Ответить | Правка | К родителю #521 | Наверх | Cообщить модератору

541. "Выпуск Rust 1.79. Создан консорциум для разработки высоконад..."  +/
Сообщение от n00by (ok), 22-Июн-24, 18:06 
Похоже, все три не принимают аргументов. И будут вычислены на этапе трансляции, "возвращая при этом значение последнего выражения, вычисленного внутри него".
Ответить | Правка | К родителю #539 | Наверх | Cообщить модератору

558. "Выпуск Rust 1.79. Создан консорциум для разработки высоконад..."  +/
Сообщение от freecoder (ok), 23-Июн-24, 11:54 
> Похоже, все три не принимают аргументов. И будут вычислены на этапе трансляции,
> "возвращая при этом значение последнего выражения, вычисленного внутри него".

Приведены варианты функции и замыкание с пустым списком аргументов, у блока аргументов нет в принципе. В функции и замыкании можно в произвольном месте сделать return, в блоке - нельзя. Функцию можно несколько раз вызвать из разных мест, блок - нельзя: он вычисляется только в месте создания.

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

560. "Выпуск Rust 1.79. Создан консорциум для разработки высоконад..."  +/
Сообщение от n00by (ok), 24-Июн-24, 19:54 
>> Похоже, все три не принимают аргументов. И будут вычислены на этапе трансляции,
>> "возвращая при этом значение последнего выражения, вычисленного внутри него".
> Приведены варианты функции и замыкание с пустым списком аргументов, у блока аргументов
> нет в принципе. В функции и замыкании можно в произвольном месте
> сделать return, в блоке - нельзя. Функцию можно несколько раз вызвать
> из разных мест, блок - нельзя: он вычисляется только в месте
> создания.

Всё это очень любопытно, одна беда: замыкание и есть функция, и даже "константная переменная" есть функция (не принимающая аргументов и чистая). В функциональных языках так. Rust, как я понял, функциональный, но очень не хочет, что бы про него так думали - по сложившемуся мнению, они далеки от "железа".

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

563. "Выпуск Rust 1.79. Создан консорциум для разработки высоконад..."  +/
Сообщение от freecoder (ok), 25-Июн-24, 10:25 
Rust - императивный язык с zero-cost абстракциями, которые, в том числе, взяты из функциональных языков. От действительно функциональных языков, таких как Haskell, Rust довольно далёк. Тем не менее, он находит способ реализации некоторых полезных функциональных абстракций в императивном подходе. В этом качестве он делает то же, что делал C++ в своё время с ООП.
Ответить | Правка | К родителю #560 | Наверх | Cообщить модератору

566. "Выпуск Rust 1.79. Создан консорциум для разработки высоконад..."  –1 +/
Сообщение от n00by (ok), 25-Июн-24, 11:20 
> Rust - императивный язык

Из приведённых примеров (в частности - отсутствие императивного оператора return для возврата результата функции) видно, что Rust прежде всего функциональный язык, а потом уже всё остальное.

> с zero-cost абстракциями, которые, в том числе, взяты
> из функциональных языков. От действительно функциональных языков, таких как Haskell, Rust
> довольно далёк.

Отсутствие ленивости не делает Rust далёким от своего предка - OCaml.

> Тем не менее, он находит способ реализации некоторых полезных
> функциональных абстракций в императивном подходе. В этом качестве он делает то
> же, что делал C++ в своё время с ООП.

А что C++ делает с ООП, когда там нет базового - методов? Первая общепринятая библиотека - STL - это попытка привнести функциональный стиль в императивный язык.

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

571. "Выпуск Rust 1.79. Создан консорциум для разработки высоконад..."  +/
Сообщение от Аноним (-), 25-Июн-24, 12:25 
> Из приведённых примеров (в частности - отсутствие императивного оператора return для возврата
> результата функции) видно, что Rust прежде всего функциональный язык, а потом
> уже всё остальное.

Как я понимаю вместо этого сигналом служит отсутствие ; после энного выражения.

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

572. "Выпуск Rust 1.79. Создан консорциум для разработки высоконад..."  +/
Сообщение от freecoder (ok), 25-Июн-24, 15:37 
> Как я понимаю вместо этого сигналом служит отсутствие ; после энного выражения.

Я выше уже писал, что из функций в Rust можно в любом месте сделать return. Но у человека похоже что-то с головой: он придумывает себе свой собственный Rust, без return, чисто функциональный, с блоками-макросами и отсутствием сопоставления с образцом в let.

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

574. "Выпуск Rust 1.79. Создан консорциум для разработки высоконад..."  +/
Сообщение от n00by (ok), 25-Июн-24, 18:16 
>> Как я понимаю вместо этого сигналом служит отсутствие ; после энного выражения.
> Я выше уже писал, что из функций в Rust можно в любом
> месте сделать return. Но у человека похоже что-то с головой: он
> придумывает себе свой собственный Rust, без return, чисто функциональный,

Сейчас мы узнаем, кто же это человек, придумывающий "чисто функциональный" Rust.

Цитирую себя: Rust прежде всего функциональный язык, а потом уже всё остальное.

Цитирую freecoder-а: _чисто_ функциональный.

Да, что-то у него с головой.

> с блоками-макросами
> и отсутствием сопоставления с образцом в let.

Опять что-то с головой? Чем же надо было читать "с точки зрения Си программиста _похоже_"?

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

576. "Выпуск Rust 1.79. Создан консорциум для разработки высоконад..."  +/
Сообщение от freecoder (ok), 25-Июн-24, 21:10 
> Цитирую себя: Rust прежде всего функциональный язык, а потом уже всё остальное.

Rust прежде всего императивный язык, а потом уже всё остальное.


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

577. "Выпуск Rust 1.79. Создан консорциум для разработки высоконад..."  +/
Сообщение от n00by (ok), 26-Июн-24, 08:46 
>>> Rust ... чисто функциональный,
>> Цитирую себя: Rust прежде всего функциональный язык, а потом уже всё остальное.
> Rust прежде всего императивный язык, а потом уже всё остальное.

Прежде всего, произошла попытка приписать мне ложный тезис, на основании чего делать заявления про голову. Голова, как мы выяснили, собственная. Что же делать оппоненту, пойманному на передёргивании? Выкинуть контекст и попытаться устроить спор, да.

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

580. "Выпуск Rust 1.79. Создан консорциум для разработки высоконад..."  +/
Сообщение от freecoder (ok), 26-Июн-24, 11:45 
Так императивный или функциональный Rust прежде всего? В зависимости от вашего ответа будет понятно, есть у вас проблемы с головой, или нет.
Ответить | Правка | К родителю #577 | Наверх | Cообщить модератору

582. "Выпуск Rust 1.79. Создан консорциум для разработки высоконад..."  +/
Сообщение от n00by (ok), 26-Июн-24, 15:01 
> Так императивный или функциональный Rust прежде всего? В зависимости от вашего ответа
> будет понятно, есть у вас проблемы с головой, или нет.

Так ты доктор? Программируешь на Rust на досуге? Я было решил, что-то понимаешь в нём.

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

584. "Выпуск Rust 1.79. Создан консорциум для разработки высоконад..."  +/
Сообщение от freecoder (ok), 27-Июн-24, 10:19 
Rust - не то, что вам кажется. Вместо досужих домыслов о нём просто прочтите документацию.
Ответить | Правка | К родителю #582 | Наверх | Cообщить модератору

588. "Выпуск Rust 1.79. Создан консорциум для разработки высоконад..."  +/
Сообщение от n00by (ok), 27-Июн-24, 12:47 
Понял, не буду читать досужие домыслы. Тем более, каким языком является Rust, мне в своё время красиво объяснил Ordu. Как раз в ответ на "отсутствие return как характерный признак ФЯ". Объяснил так, что с ним не поспоришь. И со мной при этом не спорил. Жаль, что специалистов того уровня по языку здесь давно не видно
Ответить | Правка | К родителю #584 | Наверх | Cообщить модератору

590. "Выпуск Rust 1.79. Создан консорциум для разработки высоконад..."  +/
Сообщение от freecoder (ok), 29-Июн-24, 22:23 
И ссылки вы конечно же приводить не будете.
Ответить | Правка | К родителю #588 | Наверх | Cообщить модератору

585. "Выпуск Rust 1.79. Создан консорциум для разработки высоконад..."  +/
Сообщение от freecoder (ok), 27-Июн-24, 10:32 
> Прежде всего, произошла попытка приписать мне ложный тезис, на основании чего делать
> заявления про голову.

Чем же надо было читать: "Но у человека _похоже_ что-то с головой"?

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

587. "Выпуск Rust 1.79. Создан консорциум для разработки высоконад..."  +/
Сообщение от n00by (ok), 27-Июн-24, 12:43 
>> Прежде всего, произошла попытка приписать мне ложный тезис, на основании чего делать
>> заявления про голову.
> Чем же надо было читать: "Но у человека _похоже_ что-то с головой"?

Вот и подумай, чем ты читал и зачем на ровном месте развязал спор. Разве только для того, что бы я показал тебе зеркало?

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

573. "Выпуск Rust 1.79. Создан консорциум для разработки высоконад..."  +/
Сообщение от n00by (ok), 25-Июн-24, 18:12 
>> Из приведённых примеров (в частности - отсутствие императивного оператора return для возврата
>> результата функции) видно, что Rust прежде всего функциональный язык, а потом
>> уже всё остальное.
> Как я понимаю вместо этого сигналом служит отсутствие ; после энного выражения.

Понимать надо, что return это императив, т.е указание "верни". Нет императива, есть значение, как в школьной записи функции f(x) = 2x - похоже, что язык не императивный, а функциональный.

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

575. "Выпуск Rust 1.79. Создан консорциум для разработки высоконад..."  +/
Сообщение от freecoder (ok), 25-Июн-24, 21:09 

fn foo(a: i32) -> bool {
    if a < 0 {
        return false;
    }
    // ...
    true
}

К Rust'у это не относится, в нём return есть.
Ответить | Правка | К родителю #573 | Наверх | Cообщить модератору

578. "Выпуск Rust 1.79. Создан консорциум для разработки высоконад..."  +/
Сообщение от n00by (ok), 26-Июн-24, 08:48 
>
 
> fn foo(a: i32) -> bool {
>     if a < 0 {
>         return false;
>     }
>     // ...
>     true
> }
>

> К Rust'у это не относится, в нём return есть.

Не вижу return перед true, в основной "точке выхода". Таким образом указанный мной характерный признак остаётся в силе. Но за пример спасибо - видна нелепость синтаксиса, когда вместо скобочек можно быть оставить ключевое слово из OCaml.

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

579. "Выпуск Rust 1.79. Создан консорциум для разработки высоконад..."  +/
Сообщение от freecoder (ok), 26-Июн-24, 11:43 
> Таким образом указанный
> мной характерный признак остаётся в силе.

Какой признак?

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

581. "Выпуск Rust 1.79. Создан консорциум для разработки высоконад..."  +/
Сообщение от n00by (ok), 26-Июн-24, 15:01 
>> Таким образом указанный
>> мной характерный признак остаётся в силе.
> Какой признак?

Перечитай моё предыдущее сообщение в той его части, что ты столь старательно удалил при цитировании.

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

583. "Выпуск Rust 1.79. Создан консорциум для разработки высоконад..."  +/
Сообщение от freecoder (ok), 27-Июн-24, 10:02 
Вы можете прямо ответить на вопрос или нет?

fn foo(a: i32) -> bool {
    if a < 0 {
        return false;
    }
    // ...
    true
}

Это то же самое, что

fn foo(a: i32) -> bool {
    if a < 0 {
        return false;
    }
    // ...
    return true;
}

И то, и то - корректный код на Rust. Так о каких признаках шла речь?
Ответить | Правка | К родителю #581 | Наверх | Cообщить модератору

586. "Выпуск Rust 1.79. Создан консорциум для разработки высоконад..."  +/
Сообщение от n00by (ok), 27-Июн-24, 12:41 
> Вы можете прямо ответить на вопрос или нет?

Я не вижу вопроса.

>[оверквотинг удален]
> Это то же самое, что
>

 
> fn foo(a: i32) -> bool {
>     if a < 0 {
>         return false;
>     }
>     // ...
>     return true;
> }
>

Сахарок, что бы не рвало шаблон императивщикам.

Ещё раз: пока ты будешь удалять из моих сообщений данные мной ответы, и спрашивать повторно, я буду поступать с тобой точно так же.

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

591. "Выпуск Rust 1.79. Создан консорциум для разработки высоконад..."  +/
Сообщение от freecoder (ok), 29-Июн-24, 22:44 
> Ещё раз: пока ты будешь удалять из моих сообщений данные мной ответы

Я не модератор, поэтому удалять ваши ответы из ваших сообщений физически не могу. Но вам я сочувствую, у вас то в Rust'е придумывают свой паттерн-матчинг, не такой, какой у вас в голове, теперь ещё и ваши сообщения не такие, как вы их писали... Жаль, но проблема у вас прогрессирует.


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

592. "Выпуск Rust 1.79. Создан консорциум для разработки высоконад..."  +/
Сообщение от freecoder (ok), 29-Июн-24, 22:52 
> Сахарок, что бы не рвало шаблон императивщикам.

А может чтобы "не рвало шаблон" функциональщикам?
Тело функции в Rust - это блок, завёрнутый в return. Например, тело такой функции:


fn add(a: usize) -> usize {
    let b = a + 1;
    b
}

По-сути является следующим:

// argument_0 is the actual first argument passed from the caller
let a: usize = argument_0;
return {
    let b = a + 1;
    b
};

https://doc.rust-lang.org/reference/items/functions.html#fun...
Ответить | Правка | К родителю #586 | Наверх | Cообщить модератору

409. "Выпуск Rust 1.79. Создан консорциум для разработки высоконад..."  +/
Сообщение от Аноним (407), 15-Июн-24, 22:33 
> Фигурные скобки обозначают блок, квадратные скобки - массив, срез или доступ по индексу. Так понятнее?

Приз за сложную шутку

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

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

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




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

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