The OpenNET Project / Index page

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

Выпуск языка программирования Rust 1.77

22.03.2024 13:57

Опубликован релиз языка программирования общего назначения Rust 1.77, основанного проектом Mozilla, но ныне развиваемого под покровительством независимой некоммерческой организации Rust Foundation. Язык сфокусирован на безопасной работе с памятью и предоставляет средства для достижения высокого параллелизма выполнения заданий, при этом обходясь без использования сборщика мусора и runtime (runtime сводится к базовой инициализации и сопровождению стандартной библиотеки).

Методы работы с памятью в Rust избавляют разработчика от ошибок при манипулировании указателями и защищают от проблем, возникающих из-за низкоуровневой работы с памятью, таких как обращение к области памяти после её освобождения, разыменование нулевых указателей, выход за границы буфера и т.п. Для распространения библиотек, обеспечения сборки и управления зависимостями проектом развивается пакетный менеджер Cargo. Для размещения библиотек поддерживается репозиторий crates.io.

Безопасная работа с памятью обеспечивается в Rust во время компиляции через проверку ссылок, отслеживание владения объектами, учёт времени жизни объектов (области видимости) и оценку корректности доступа к памяти во время выполнения кода. Rust также предоставляет средства для защиты от целочисленных переполнений, требует обязательной инициализации значений переменных перед использованием, лучше обрабатывает ошибки в стандартной библиотеке, применяет концепцию неизменяемости (immutable) ссылок и переменных по умолчанию, предлагает сильную статическую типизацию для минимизации логических ошибок.

Основные новшества:

  • Добавлена поддержка строк в стиле языка Си (C-string), которые хранятся в памяти с завершающим нулевым символом и ассоциированы с типом "CStr". Си-строки задаются через блоки c"текст" и cr#"текст"#. Предполагается, что поддержка Си-строк упростит написание кода, взаимодействующего с прослойками на языках программирования, в которых применяются завершаемые нулевым байтом строки, и позволит выполнять необходимые проверки на стадии компиляции.
    
       const HELLO: &core::ffi::CStr = c"Hello, world!";
    
  • В асинхронно выполняемых функциях, объявленных при помощи выражения "async fn", разрешено использование рекурсии, т.е. подобные функции теперь могут вызывать сами себя.
    
       async fn fib(n: u32) -> u32 {
          match n {
              0 | 1 => 1,
              _ => Box::pin(fib(n-1)).await + Box::pin(fib(n-2)).await
          }   
       }
    
  • Стабилизирован макрос offset_of!, позволяющий определить байтовое смещение полей структур, перечислений, объединений и кортежей, относительно начала типа. На практике макрос может быть полезен в ситуациях, когда требуется работа на уровне смещения полей при отсутствии экземпляра типа. В частности, функциональность offset_of необходима при разработке низкоуровневых компонентов, таких как драйверы.
    
       use std::mem;
       #[repr(C)]
       struct FieldStruct {
           first: u8,
           second: u16,
           third: u8
       }
       assert_eq!(mem::offset_of!(FieldStruct, first), 0);
       assert_eq!(mem::offset_of!(FieldStruct, second), 2);
       assert_eq!(mem::offset_of!(FieldStruct, third), 4);
    
  • В пакетном менеджере Cargo в профилях релизов по умолчанию включена очистка файлов от отладочных данных (strip = "debuginfo"), если в профиле Cargo явно не включён режим отладки, т.е. если параметр debug = 0.
  • Включена по умолчанию опция "-Zthir-unsafeck=on", обеспечивающая проверку unsafe для промежуточного представления THIR ("Typed High-Level Intermediate Representation").
  • Добавлена lint-проверка static_mut_refs для вывода предупреждения при использовании ссылок на изменяемые статические значения.
  • Реализована возможность применения типажа "From<&[T; N]>" для типа "Cow<[T]>".
    
       fn foo(data: impl Into<Cow<'static, [&'static str]>>) { /* ... */ }
    
       fn main() {
           foo(&["hello", "world"]);
       }
    
  • В компиляторе обеспечено выравнивание 16-байтовых типов i128 и u128 для систем x86.
  • В разряд стабильных переведена новая порция API, в том числе стабилизированы методы и реализации типажей:
  • Реализован третий уровень поддержки для платформ aarch64-unknown-illumos, hexagon-unknown-none-elf, riscv32imafc-esp-espidf и riscv32im-risc0-zkvm-elf. Третий уровень подразумевает базовую поддержку, но без автоматизированного тестирования, публикации официальных сборок и проверки возможности сборки кода.


  1. Главная ссылка к новости (https://blog.rust-lang.org/202...)
  2. OpenNews: Выпуск языка программирования Rust 1.76
  3. OpenNews: Код поддержки кодека VP9 в V4L2 для чипов Hantro и Rockchip переписан на Rust
  4. OpenNews: Выпуск Arti 1.2, официальной реализации Tor на языке Rust
  5. OpenNews: Red Hat представил Nova, драйвер для GPU NVIDIA, написанный на языке Rust
  6. OpenNews: Разработчики FreeBSD обсуждают использование языка Rust в базовой системе
Лицензия: CC BY 3.0
Короткая ссылка: https://opennet.ru/60827-rust
Ключевые слова: rust
При перепечатке указание ссылки на opennet.ru обязательно


Обсуждение (176) Ajax | 1 уровень | Линейный | +/- | Раскрыть всё | RSS
  • 1.3, Аноним (3), 14:08, 22/03/2024 [ответить] [﹢﹢﹢] [ · · · ]  
  • –3 +/
    Больше рекурсий богу рекурсий!
    Обязательно используйте внутри рекурсии транзакцию, а то малоли вдруг.
     
  • 1.4, Аноним (4), 14:08, 22/03/2024 [ответить] [﹢﹢﹢] [ · · · ]  
  • +1 +/
    > Безопасная работа с памятью обеспечивается в Rust во время компиляции через проверку ссылок, отслеживание владения объектами, учёт времени жизни объектов (области видимости) и оценку корректности доступа к памяти во время выполнения кода. Rust также предоставляет средства для защиты от целочисленных переполнений, требует обязательной инициализации значений переменных перед использованием, лучше обрабатывает ошибки в стандартной библиотеке, применяет концепцию неизменяемости (immutable) ссылок и переменных по умолчанию, предлагает сильную статическую типизацию для минимизации логических ошибок.

    Половину этого списка поддерживают другие языки.

     
     
  • 2.7, КО (?), 14:13, 22/03/2024 [^] [^^] [^^^] [ответить]  
  • +5 +/
    Только не по умолчанию да? ЛОЛ
     
     
  • 3.9, Аноним (4), 14:20, 22/03/2024 [^] [^^] [^^^] [ответить]  
  • +3 +/
    > учёт времени жизни объектов (области видимости)
    > требует обязательной инициализации значений переменных перед использованием

    Это база даже для C++ и Python.

     
     
  • 4.36, Аноним (36), 15:09, 22/03/2024 [^] [^^] [^^^] [ответить]  
  • –2 +/
    а где почитать про обязательную инициализацию и с++?
     
     
  • 5.49, Аноним (49), 16:10, 22/03/2024 [^] [^^] [^^^] [ответить]  
  • +10 +/
    Вот тут почитай: -Wall -Wextra -Wpedantic -Werror -Wuninitialized -Werror
     
     
  • 6.180, Аноним (180), 15:34, 23/03/2024 [^] [^^] [^^^] [ответить]  
  • –1 +/
    C++ вообще замечательная штука: из него посредством комбинирования флагов компилятора получается штук сто разных диалектов.
     
     
  • 7.184, Аноним (184), 15:43, 23/03/2024 [^] [^^] [^^^] [ответить]  
  • +2 +/
    > C++ вообще замечательная штука: из него посредством комбинирования флагов компилятора
    > получается штук сто разных диалектов.

    тока на опеннете можно почитать про разные языки лиспы, и диалекты с++ на основе флагов компилятора. За то и любим, ценим. Надеюсь кто-то, перед смертью проекта (желаю долгих лет жизни), сделает архив здешнего паноптикума. Потроллить гуманоидов в 2999 году.

     
  • 6.264, Карлос Сношайтилис (ok), 15:02, 08/04/2024 [^] [^^] [^^^] [ответить]  
  • +/
    Почитал. Связь с "обязательно" и "на уровне языка" не нашёл.
    Ещё варианты есть? Или перестанешь глупо шутковать?
     
  • 5.53, Аноним (53), 16:14, 22/03/2024 [^] [^^] [^^^] [ответить]  
  • +1 +/
    https://gcc.gnu.org/onlinedocs/gcc/Warning-Options.html
     

  • 1.5, Аноним (36), 14:08, 22/03/2024 [ответить] [﹢﹢﹢] [ · · · ]  
  • +/
    > Третий уровень подразумевает базовую поддержку
    > без проверки возможности сборки кода

    🤦

     
     
  • 2.51, Аноним (-), 16:12, 22/03/2024 [^] [^^] [^^^] [ответить]  
  • +2 +/
    Зато безопасно.
     
  • 2.65, Kuromi (ok), 17:06, 22/03/2024 [^] [^^] [^^^] [ответить]  
  • +/
    Классическая Tier-3 поддержка от Мозиллы. Предполагается что с доводкой до ума долбаются интерсанты и местные сопровождающие энтузиасты. Ничего нового.
     
  • 2.81, laindono (ok), 18:31, 22/03/2024 [^] [^^] [^^^] [ответить]  
  • +/
    https://doc.rust-lang.org/nightly/rustc/target-tier-policy.html

    Для Tier 1/2 у тебя есть гарантии оффициальной поддержки. Tier 3 это грубо говоря "всё остальное".

    Логично же, что для какой-нибудь BSD/Haiku/Hurd/Redox поддержка будет на уровне "оно работает в теории, а если нет, то обращайтесь в спортлото". Ибо человек, которые знают, что это такое, хорошо если полторы штуки во всём мире найдётся.

     
     
  • 3.106, Аноним (184), 20:00, 22/03/2024 [^] [^^] [^^^] [ответить]  
  • +4 +/
    > Логично же, что для какой-нибудь BSD/Haiku/Hurd/Redox

    Логично подтасовывать карты. Ставить в один ряд какой-нибудь ресдох и BSD. Или Haiku и iOS ARM64. Или Hurd и Android ARM64.

    Сразу солиднее выглядит. Не словно "мы не осилили", а словно "маргинальщина", нучотакова. Маргинальщина, у которой маркетшара больше чем весь раст фундейшн. :-D

     
     
  • 4.117, laindono (ok), 20:42, 22/03/2024 [^] [^^] [^^^] [ответить]  
  • +1 +/
    aarch64-apple-ios в Tier 2 (обычный 64-битный арм)
    arm64e-apple-ios в Tier 3 (какая-то свежая приблуда от apple, в которую не успели ещё толком)

    Под Redox/BSD/HURD/Haiku разработка ведётся по остаточному принципу или энтузиастами. По сравнению с мажорными платформами (Tier 1 платформы). С другой стороны нет никаких причин, почему ты не можешь пойти и добить поддержку до нужного тебе уровня для нужной тебе платформы.

    По поводу конкретно BSD. 64-битные фряшечка и net вполне себе есть в Tier 2 с поставкой тулчейнов. А вот всякие sparc64-unknown-openbsd понятное дело для всяких энтузиастов.

    > у которой маркетшара больше

    Попадание в определённый тир определяется не тем, сколько оно используется. Требуемые требования я привёл. Читай.

     
  • 3.176, Аноним (176), 15:06, 23/03/2024 [^] [^^] [^^^] [ответить]  
  • +/
    чем тайр 3 отличчается от "не поддерживается вообще"? - и там и там "е6итесь со своими проблемами сами"
     
     
  • 4.178, laindono (ok), 15:21, 23/03/2024 [^] [^^] [^^^] [ответить]  
  • –1 +/
    Тем, что если оно вообще не поддерживается, то этого кода нет в мейнстриме.

     
     
  • 5.188, Аноним (184), 16:11, 23/03/2024 [^] [^^] [^^^] [ответить]  
  • +/
    > Тем, что если оно вообще не поддерживается, то этого кода нет в
    > мейнстриме.

    кода ресдоха или хайку и прочий Tier 3 тоже нет в апстриме раста. Всё что там есть - затычки. Которые даже не гарантируют сборку.

     
     
  • 6.190, laindono (ok), 16:42, 23/03/2024 [^] [^^] [^^^] [ответить]  
  • +/
    Тут есть документация Выше ссылку же кинул Вот что говорится о третьем тире T... большой текст свёрнут, показать
     
     
  • 7.191, Аноним (184), 16:46, 23/03/2024 Скрыто ботом-модератором     [к модератору]
  • +/
     

     ....ответы скрыты (10)

  • 1.6, 111 (??), 14:12, 22/03/2024 [ответить] [﹢﹢﹢] [ · · · ]  
  • +/
    Годный язык.
     
     
  • 2.220, голос из леса (?), 06:33, 25/03/2024 [^] [^^] [^^^] [ответить]  
  • –1 +/
    Там ещё долго до завершения "В разряд стабильных переведена новая порция API..." ?
     

  • 1.18, Вы забыли заполнить поле Name (?), 14:41, 22/03/2024 [ответить] [﹢﹢﹢] [ · · · ]  
  • +2 +/
    Не понимаю какой вектор развития языка? Вот взять лисп - он уже как 50+ лет готов и стабилен к использованию, а тут в каждой новости что-то добавляют, переводят новое апи в разряд стабильных...
     
     
  • 2.27, Аноним (27), 14:56, 22/03/2024 [^] [^^] [^^^] [ответить]  
  • +10 +/
    Лисп уже 50+ готов к использованию, а никто его не использует
     
     
  • 3.102, Вы забыли заполнить поле Name (?), 19:53, 22/03/2024 [^] [^^] [^^^] [ответить]  
  • +/
    Его много кто использует, особенно common-lisp и clojure
     
  • 3.123, вася (??), 21:11, 22/03/2024 [^] [^^] [^^^] [ответить]  
  • +2 +/
    Расскажи это юзерам Автокад,пусть посмеются над тобой.
     
     
  • 4.219, vantoo (ok), 16:23, 24/03/2024 [^] [^^] [^^^] [ответить]  
  • +/
    Или над собой.
     
  • 2.30, Аноним (-), 15:00, 22/03/2024 [^] [^^] [^^^] [ответить]  
  • +6 +/
    Можно еще взять лиспмашину и запустить лисп на ней.
    Но для этого придется грабить музеи))

    Лисп насктолько готов, что аж стал ненужным (кроме совсем маленького кол-ва людей).
    А помню как ему пророчили стать чуть ли не основным ЯП))

     
     
  • 3.103, Вы забыли заполнить поле Name (?), 19:55, 22/03/2024 [^] [^^] [^^^] [ответить]  
  • +1 +/
    Он станет, просто время ещё не пришло. Его передовых идей до сих пор нет во многих сегодняшних язычках.
     
     
  • 4.173, Neon (??), 14:58, 23/03/2024 [^] [^^] [^^^] [ответить]  
  • +/
    Значит эти "передовые идеи" никому не нужны оказались. Ненужны и неудобны
     
     
  • 5.202, Вы забыли заполнить поле Name (?), 19:42, 23/03/2024 [^] [^^] [^^^] [ответить]  
  • +/
    > Значит эти "передовые идеи" никому не нужны оказались. Ненужны и неудобны

    Ты бы ознакомился с ними для начала. Те же нормальные макросы и hot reload сейчас преподносятся как какая-то ультрафича новых язычков.

     
  • 2.42, Аноним (-), 15:48, 22/03/2024 [^] [^^] [^^^] [ответить]  
  • +2 +/
    > Вот взять лисп - он уже как 50+ лет готов и стабилен к использованию

    Лисп стабилен?! Этих лиспов как собак нерезаных, каждый так и норовит свой собственный запилить.

     
     
  • 3.63, Аноним (63), 16:58, 22/03/2024 [^] [^^] [^^^] [ответить]  
  • +2 +/
    Ну, если под лиспами понимать любые языки, использующие s-выражения в качестве синтаксиса, то да. Но тогда встречный вопрос: зачем люди клепают столько языков с си-подобным синтаксисом?
     
     
  • 4.174, Аноним (-), 15:04, 23/03/2024 [^] [^^] [^^^] [ответить]  
  • +/
    > если под лиспами понимать любые языки, использующие s-выражения в качестве синтаксиса

    Есть какие-то другие идеи? common lisp, scheme, elisp, racket, clojure -- это навскидку из сколь-нибудь популярных, и все они называют себя лиспами. У тебя есть какое-то определение которое не включает в список лиспов любые языки, использующие s-выражение в качестве синтаксиса?

     
  • 3.107, Вы забыли заполнить поле Name (?), 20:01, 22/03/2024 [^] [^^] [^^^] [ответить]  
  • +1 +/
    > Лисп стабилен?! Этих лиспов как собак нерезаных,

    Стабилен. У комона и схемы есть стандарт. А раз есть стандарт, то есть и разные реализации.

     
  • 3.113, Аноним (113), 20:22, 22/03/2024 [^] [^^] [^^^] [ответить]  
  • +1 +/
    > Лисп стабилен?! Этих лиспов как собак нерезаных, каждый так и норовит свой собственный запилить.

    Стандарт ANSI X3.226-1994 (Common Lisp) был принят 8 декабря 1994 года и с тех пор не изменялся. Это достаточно стабильно?

     
     
  • 4.154, Аноним (-), 04:59, 23/03/2024 [^] [^^] [^^^] [ответить]  
  • –1 +/
    >Стандарт ANSI X3.226-1994 (Common Lisp) был принят 8 декабря 1994 года и с тех пор не изменялся. Это достаточно стабильно?

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

     
  • 4.187, Аноним (180), 16:01, 23/03/2024 [^] [^^] [^^^] [ответить]  
  • +1 +/
    Через 36 лет после создания языка он был стандартизирован. У Rust ещё время в запасе есть.
     

  • 1.19, cheburnator9000 (ok), 14:46, 22/03/2024 [ответить] [﹢﹢﹢] [ · · · ]  
  • +3 +/
    Как же меня трясет когда я читаю слово "типаж". ухх...
     
     
  • 2.24, Аноним (24), 14:48, 22/03/2024 [^] [^^] [^^^] [ответить]  
  • +2 +/
    А "кортеж"?
     
     
  • 3.38, cheburnator9000 (ok), 15:23, 22/03/2024 [^] [^^] [^^^] [ответить]  
  • +1 +/
    > А "кортеж"?

    То же самое.

     
     
  • 4.171, Аноним (171), 13:13, 23/03/2024 Скрыто ботом-модератором     [к модератору]
  • +/
     
  • 3.162, cheburnator9000 (ok), 09:45, 23/03/2024 [^] [^^] [^^^] [ответить]  
  • +1 +/
    > А "кортеж"?

    А еще слово "фьючерс"...

     
  • 2.47, Пряник (?), 16:08, 22/03/2024 [^] [^^] [^^^] [ответить]  
  • +/
    Trait ещё можно перевести, как черта.
     
     
  • 3.146, Аноним (146), 23:13, 22/03/2024 [^] [^^] [^^^] [ответить]  
  • –1 +/
    Более однозначно "характеристика".
     
  • 2.67, Аноним (-), 17:18, 22/03/2024 [^] [^^] [^^^] [ответить]  
  • +2 +/
    Мне, как представителю театральной интелигенции слово "типаж" очень нравится.
     
  • 2.76, Аноним (76), 17:50, 22/03/2024 [^] [^^] [^^^] [ответить]  
  • +1 +/
    Предлагаю в Rust добавить ключевое слово Freier
     
     
  • 3.160, anodymus (?), 08:02, 23/03/2024 [^] [^^] [^^^] [ответить]  
  • +/
    freirer.push_back();
     

  • 1.28, Аноним (28), 14:59, 22/03/2024 [ответить] [﹢﹢﹢] [ · · · ]  
  • +/
    Тарболы для модулей еще не завезли? Почему нельзя загрузить модули как в Python, Perl?
     
     
  • 2.32, Аноним (-), 15:02, 22/03/2024 [^] [^^] [^^^] [ответить]  
  • +2 +/
    Руки просто не дошли.
    Но ты всегда можешь создать PR и помочь сообществу сделать лучший язык еще лучше.
    Уверен что такой специалист как ты справится быстро.
     
     
  • 3.163, cheburnator9000 (ok), 09:50, 23/03/2024 [^] [^^] [^^^] [ответить]  
  • +1 +/
    > Руки просто не дошли.
    > Но ты всегда можешь создать PR и помочь сообществу сделать лучший язык
    > еще лучше.
    > Уверен что такой специалист как ты справится быстро.

    Когда на твой PR набежит с пол сотни смузихлебов и будут в твой код тыкать палочкой по типа "вот тут нужно написать компактнее, тут можно зафигачить все в лямбды, а тут у тебя ошибка в правописании" и каждый со чувством собственной важности с медалями, дипломами и hello world проектами в github профиле, будет тебе всю душу выносить. Вот тогда ты сразу поймешь почему никто на собственном интузиазме не спешит заниматься подобным, по меньшей мере владельцы проекта могут тебя послать, а затем реализовать твою реализацию по _по своему_.

     
     
  • 4.199, namenotfound (?), 19:07, 23/03/2024 [^] [^^] [^^^] [ответить]  
  • +2 +/
    >написал хрень
    >ткнули, попросили переписать по-человечески
    >"ыыы, смузихлебы!!"

    только на опеннете

     
     
  • 5.210, cheburnator9000 (ok), 04:22, 24/03/2024 [^] [^^] [^^^] [ответить]  
  • –1 +/
    >>написал хрень
    >>ткнули, попросили переписать по-человечески
    >>"ыыы, смузихлебы!!"
    > только на опеннете

    Читай как я написал, а не так как тебе нравится чтобы было написано.

     
  • 4.211, Аноним (113), 04:42, 24/03/2024 [^] [^^] [^^^] [ответить]  
  • +1 +/
    И в чём проблема сделать как просят? Гонор мешает?
     

  • 1.34, Amurzet (ok), 15:05, 22/03/2024 [ответить] [﹢﹢﹢] [ · · · ]  
  • +1 +/
    Прошу знающих объяснить, как на Rust писать GUI. вариантов десятки. Многие выглядят нестабильными (судя по версиям). Хотелось бы (например) бинда к классическим winlib, qt.
     
     
  • 2.40, Аноним (40), 15:46, 22/03/2024 [^] [^^] [^^^] [ответить]  
  • +/
    Я использую egui: https://www.egui.rs/
     
     
  • 3.138, Вы забыли заполнить поле Name (?), 21:59, 22/03/2024 [^] [^^] [^^^] [ответить]  
  • +/
    Шрифты мыльные в браузере в их демках

     
     
  • 4.155, Amurzet (ok), 05:16, 23/03/2024 [^] [^^] [^^^] [ответить]  
  • +/
    В том и дело, конечно egui всплывает первым после изучения. Но оно какое-то визуально "на любителя".
    Но как делать классические приложения, нативно выглядящие с привычным api.

    Разве это не ключевое, на что должны обратить внимание разработчики

     
  • 4.175, Neon (??), 15:05, 23/03/2024 [^] [^^] [^^^] [ответить]  
  • –1 +/
    Шрифты мыльные - капризы, такие капризы
     
     
  • 5.181, Вы забыли заполнить поле Name (?), 15:34, 23/03/2024 [^] [^^] [^^^] [ответить]  
  • +1 +/
    > Шрифты мыльные - капризы, такие капризы

    Ой, про либу на ржавом сказали правду, обиделся? Поплачь, снежинка.

     
  • 5.207, Вы забыли заполнить поле Name (?), 21:27, 23/03/2024 [^] [^^] [^^^] [ответить]  
  • +1 +/
    > Шрифты мыльные - капризы, такие капризы

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

     
  • 2.45, Аноним (-), 15:57, 22/03/2024 [^] [^^] [^^^] [ответить]  
  • +5 +/
    > как на Rust писать GUI

    Никак. Чисто гипотетически я могу предположить, что должны быть в природе качественные бинды к gtk, потому что тот, со своим наколенным ООП, должен хорошо оборачиваться, теоретически. А всё остальное сильно укопалось в прощупывание дизайн-спейса, то есть изучение того, что можно сделать, как сделать, и что в результате получится.

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

     
  • 2.50, Пряник (?), 16:11, 22/03/2024 [^] [^^] [^^^] [ответить]  
  • –3 +/
    С такими вопросами вам лучше сначала без GUI. Вы не осилите слоты и сигналы в Qt.
     
  • 2.198, Андрей (??), 18:42, 23/03/2024 [^] [^^] [^^^] [ответить]  
  • +1 +/
    Из приличного: gtk-rs, Slint. Ещё Tauri если GUI на webview устраивает.
     

  • 1.43, Nicho (ok), 15:53, 22/03/2024 [ответить] [﹢﹢﹢] [ · · · ]  
  • +/
    Народ, какие преимущества будут, если ядро Windows, переведут на Rust?
    И какие преимущества будут, если Firefox тоже переведут на Rust?
     
     
  • 2.183, ptr (ok), 15:41, 23/03/2024 [^] [^^] [^^^] [ответить]  
  • +1 +/
    На время перевода появятся тысячи рабочих мест для разработчиков А так как в яд... большой текст свёрнут, показать
     
     
  • 3.197, fidoman (ok), 18:17, 23/03/2024 [^] [^^] [^^^] [ответить]  
  • +/
    > <указатель на буфер> и <размер буфера>

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

     
     
  • 4.200, ptr (ok), 19:27, 23/03/2024 [^] [^^] [^^^] [ответить]  
  • +/
    Компилятор ядра ничего не знает о приложении. Так же как и компилятор приложения ничего не знает о ядре.
    Один из возможных подходов - это выделение буферов только средствами ядра, а в API указывать не указатель на буфер, а уникальный в системе идентификатор буфера, ранее выделенного ядром, размер и адрес которого ядру заведомо известен. Права доступа приложения к такому буферу тоже должны контролироваться ядром.
     
     
  • 5.231, Аноним (-), 16:37, 25/03/2024 [^] [^^] [^^^] [ответить]  
  • +/
    > Один из возможных подходов - это выделение буферов только средствами ядра

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

     
     
  • 6.262, ptr (ok), 19:00, 28/03/2024 [^] [^^] [^^^] [ответить]  
  • +/
    При чем тут ЛЮБОЙ malloc? Речь только про буфера, которые в большинстве случаев выделяются однократно при старте приложения.
     
  • 2.218, BeLord (ok), 14:55, 24/03/2024 [^] [^^] [^^^] [ответить]  
  • +/
    Никаких, проблема виндов не в языке, а в организации разработки. Если бы они осилили модульность и оптимизации под железо это была бы совершенно другая операционная система, но их модели бизнеса это не надо, поэтому имеем глючный комбайн живущий своей жизнью.
     

  • 1.44, Аноним (44), 15:55, 22/03/2024 [ответить] [﹢﹢﹢] [ · · · ]  
  • +3 +/
    Кто-то из России делал анализ языков, какие-либо тесты реальные может опубликовать о разных ЯП? Агрессивный маркетинг от СГА начинает мне казаться несколько подозрительным. Возможно что он и не настолько производителен как о нем пишут и вполне возможно что он реально не настолько безопасен как об этом пишут. Вроде идея языка понятна, но он по личному мнению просто не удобен по синтаксису. Тот же Golang мне лично кажется более простым и читабельным. А с/с++ не намного менее производителен. Некоторые пишут про zig и исходя из публичной информации он очень близок по производительности к rust, но я о нем вообще ничего не знаю.
     
     
  • 2.56, Аноним (-), 16:17, 22/03/2024 [^] [^^] [^^^] [ответить]  
  • +1 +/
    Зато с икспердным мнением Отсылки к синтаксису -- это палево крайней степени,... большой текст свёрнут, показать
     
     
  • 3.71, Аноним (76), 17:34, 22/03/2024 [^] [^^] [^^^] [ответить]  
  • +6 +/
    Если хочешь быть лояльным, надо избегать разговоров о синтаксисе.
     
  • 3.118, Аноним (118), 20:42, 22/03/2024 [^] [^^] [^^^] [ответить]  
  • –3 +/
    Простой веб-сервер
    '''rust
    extern crate iron;
    #[macro_use] extern crate mime;

    use iron::prelude::*;
    use iron::status;

    fn main() {
      println!("Сервер слушает на http://localhost:3000...");
      Iron::new(get_form).http("localhost:3000").unwarap();
    }

    fn get_form(_request: &mut Request) -> IronResult<Response> {
      let mut response = Response::new();

      response.set_mut(status::Ok);
      response.set_mut(mime!(Text/Html; Charset=Utf8));
      response.set_mut(r#"
        <title>Калькулятор двух чисел</title>
        <form action="/gcd" method="post">
          <input type="text" name="n"/>
          <input type="text" name="n"/>
          <button type="submit">Ну посчитай</button>
        </form>
      "#);
    '''
    Больше всего мне лично синтаксис не нравится.

     
     
  • 4.122, Аноним (122), 21:08, 22/03/2024 [^] [^^] [^^^] [ответить]  
  • +5 +/
    Это не "простой веб-сервер". Твой iron умер 5 лет назад и никем никогда не использовался.
    Более того, extern crate уже давно не нужно использовать.

    Какой-то коммент, застрявший во времени

     
     
  • 5.133, freecoder (ok), 21:47, 22/03/2024 [^] [^^] [^^^] [ответить]  
  • +2 +/
    Вот вам актуальный вариант:


    use std::io;

    use axum::response::{Html, IntoResponse};
    use axum::routing::get;
    use axum::Router;
    use tokio::net::TcpListener;

    #[tokio::main]
    async fn main() -> io::Result<()> {
        let app = Router::new().route("/", get(get_form));
        let listener = TcpListener::bind("0.0.0.0:3000").await?;

        axum::serve(listener, app).await
    }

    async fn get_form() -> impl IntoResponse {
        Html(
            r#"
                <title>Калькулятор двух чисел</title>
                <form action="/gcd" method="post">
                    <input type="text" name="n"/>
                    <input type="text" name="n"/>
                    <button type="submit">Ну посчитай</button>
                </form>
            "#,
        )
    }


     
     
  • 6.135, Аноним (184), 21:52, 22/03/2024 [^] [^^] [^^^] [ответить]  
  • –1 +/
    >[оверквотинг удален]
    >     <input type="text" name="n"/>
    >            
    >     <input type="text" name="n"/>
    >            
    >     <button type="submit">Ну посчитай</button>
    >            
    > </form>
    >         "#,
    >     )
    > }

    добавь сюда Cargo.lock, пожалуйста, плайнтекстом.

     
     
  • 7.136, freecoder (ok), 21:54, 22/03/2024 [^] [^^] [^^^] [ответить]  
  • +1 +/
    > добавь сюда Cargo.lock, пожалуйста, плайнтекстом.

    Зачем?


     
     
  • 8.137, Аноним (184), 21:59, 22/03/2024 [^] [^^] [^^^] [ответить]  
  • –3 +/
    Поржать, господи, что ты серьёзный такой, бро 65377 9685 8255 8255 9... текст свёрнут, показать
     
     
  • 9.189, Sw00p aka Jerom (?), 16:26, 23/03/2024 [^] [^^] [^^^] [ответить]  
  • +/
    ага еще и CoC md ... текст свёрнут, показать
     
  • 3.119, Аноним (119), 20:51, 22/03/2024 [^] [^^] [^^^] [ответить]  
  • +/
    А как тебе проблема с карго? Ну типа такого: https://www.reddit.com/r/rust/comments/pct3mz/adopting_rust_in_an_offline_envi

    > So this is a large topic with no good answers because everyone needs something different out of their dependency management solutions. In general I’d say that using cargo without connecting to crates.io isn’t well supported at the moment.

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

     
     
  • 4.129, Аноним (122), 21:28, 22/03/2024 [^] [^^] [^^^] [ответить]  
  • +2 +/
    1) Можно использовать local path (скачав нужные крейты откуда тебе угодно заранее, естественно)
    2) Можно указывать ссылки до git-репозитория с нужным crate
    3) Можно использовать cargo vendor

    В этом плане Cargo куда более легко поддаётся подобным оффлайн-процессам, чем Gradle/Maven в мире Java. Java собрать без подключения к Интернету крайне проблематично, ближе к невозможному

    Собственно, надо было и искать ссылку не трёхлетней давности, а чуть посвежее
    https://www.reddit.com/r/rust/comments/137hmah/rust_offline/

     
  • 4.130, freecoder (ok), 21:30, 22/03/2024 [^] [^^] [^^^] [ответить]  
  • +1 +/
    Это трёхлетней давности пост. Уже давно cargo поддерживает пользовательские репозитории, и в компаниях их активно используют.
     
  • 4.182, Аноним (-), 15:39, 23/03/2024 [^] [^^] [^^^] [ответить]  
  • +3 +/
    Это чья-то проблема, которая недостаточно описана для того, чтобы начинать думат... большой текст свёрнут, показать
     
  • 2.214, cheburnator9000 (ok), 05:52, 24/03/2024 [^] [^^] [^^^] [ответить]  
  • +/
    Самый производительный веб фреймворк Dragon написан на C++.
     

  • 1.61, Аноним (61), 16:53, 22/03/2024 [ответить] [﹢﹢﹢] [ · · · ]  
  • +/
    Вопрос к знатокам - на расте можно писать веб-сервисы? Есть что то зрелое для этого?
     
     
  • 2.64, Аноним (64), 17:04, 22/03/2024 [^] [^^] [^^^] [ответить]  
  • –2 +/
    > на расте можно писать веб-сервисы?

    Только их и можно - кроме как плеваться в консоль и tcp-порт Раст ни на что не способен.
    У него нет GUI, нет 2D/3D-графики, вобщем нет ничего для написания полноценного пользовательского приложения.

     
     
  • 3.75, laindono (ok), 17:47, 22/03/2024 [^] [^^] [^^^] [ответить]  
  • +1 +/
    > У него нет GUI

    Строго говоря гуй есть, но достаточно сырой (egui/iced и ещё пара-тройка разных вариаций). К маленьким утилиткам есть на чём кнопки прикрутить, но решений уровня GTK/QT ещё не успели написать.

    > нет 2D/3D-графики

    Штук пять либ векторной графики есть. Для кроссплатформенного 3д есть https://github.com/gfx-rs/wgpu. Если нужен игродвиг, то есть https://bevyengine.org/ и целая рассыпуха микродвижков на любой вкус.

     
     
  • 4.151, fumanchez (ok), 04:31, 23/03/2024 [^] [^^] [^^^] [ответить]  
  • +/
    Говоришь как будто GTK (и даже Cairo) это не linux-only маргинальщина, сопоставимая с Qt
     
     
  • 5.179, laindono (ok), 15:26, 23/03/2024 [^] [^^] [^^^] [ответить]  
  • +1 +/
    Я сам по себе linux-only маргинал. Я говорю так, будто меня спросили, а я ответил.
     
  • 3.153, Аноним (-), 04:56, 23/03/2024 [^] [^^] [^^^] [ответить]  
  • +/
    Слушай ты случаем не перепутал тулкиты и сторонныие библиотеки с языком программирования. Или ты умеешь в RAD только окошечки рисовать, да и события на них навешивать? Такие как ты позорят профессию программиста. Вон из профессии!
     
  • 2.72, laindono (ok), 17:37, 22/03/2024 [^] [^^] [^^^] [ответить]  
  • +2 +/
    Попробуй https://actix.rs/ или https://rocket.rs/

    Есть ещё https://github.com/tokio-rs/axum, но за него не скажу ибо не пробовал.

     
  • 2.92, Аноним (-), 19:10, 22/03/2024 [^] [^^] [^^^] [ответить]  
  • +/
    > Вопрос к знатокам - на расте можно писать веб-сервисы?

    можно даже на asm-е

    > Есть что то зрелое для этого?

    asm и C, которые оборачиваешь в расте и везде пишешь, что написано на расте

     
  • 2.97, freecoder (ok), 19:25, 22/03/2024 [^] [^^] [^^^] [ответить]  
  • +1 +/
    И actix-web, и axum работают хорошо. Если нужен gRPC помимо HTTP, то лучше строить на стеке tokio + axum + tonic.
     

  • 1.68, EP45DS3L (?), 17:26, 22/03/2024 [ответить] [﹢﹢﹢] [ · · · ]  
  • +6 +/
    https://ibb.co/ZYfJDwM

    Когда вижу такой синтаксис, моя рука тянется к нагану

     
     
  • 2.78, Аноним (78), 18:24, 22/03/2024 [^] [^^] [^^^] [ответить]  
  • +1 +/
    А как же илитность? С таким синтаксисом, да на тайловом ВМ под вяланд как покажет погроммист своё поделие, так потенция работодателя сразу поймёт -- этот не женат, да и вообще деффками не интересуется. Хороший работник для галеры!
     
  • 2.96, freecoder (ok), 19:22, 22/03/2024 [^] [^^] [^^^] [ответить]  
  • +2 +/
    А какие претензии именно _к_синтаксису_ в данном фрагменте?
     
  • 2.98, Аноним (184), 19:41, 22/03/2024 [^] [^^] [^^^] [ответить]  
  • –2 +/
    > https://ibb.co/ZYfJDwM
    > Когда вижу такой синтаксис, моя рука тянется к нагану

    Не самый плохой пример, кстати. Или вот:




    pub fn read<P: AsRef<Path>>(path: P) -> io::Result<Vec<u8>> {
      fn inner(path: &Path) -> io::Result<Vec<u8>> {
        let mut file = File::open(path)?;
        let mut bytes = Vec::new();
        file.read_to_end(&mut bytes)?;
        Ok(bytes)
      }
      inner(path.as_ref())
    }


    Тоже не самый плохой из возможных :)
    Вырвиглаз в расте обречен из за перегруженной семантики. Тут ничего не поделаешь.

     
     
  • 3.125, freecoder (ok), 21:18, 22/03/2024 [^] [^^] [^^^] [ответить]  
  • +2 +/
    Зачем писать бессмысленные нагромождения синтаксиса? Можно и лаконичнее.


    pub fn read(path: impl AsRef<Path>) -> io::Result<Vec<u8>> {
        let mut bytes = Vec::new();
        File::open(path.as_ref())?.read_to_end(&mut bytes)?;

        Ok(bytes)
    }


     
     
  • 4.131, Аноним (184), 21:45, 22/03/2024 [^] [^^] [^^^] [ответить]  
  • –1 +/
    > Зачем писать бессмысленные нагромождения синтаксиса?

    Не бессмысленное, а чтоб показать влияние семантики.

    > Можно и лаконичнее.

    Можно хоть в однострочник всё запихать. Всё равно вырвиглаз. Со временем можно привыкнуть, но... вырвиглаз.

     
  • 4.217, Вы забыли заполнить поле Name (?), 13:12, 24/03/2024 [^] [^^] [^^^] [ответить]  
  • –1 +/
    > Зачем писать бессмысленные нагромождения синтаксиса? Можно и лаконичнее.
    >

    pub fn read(path: impl AsRef<Path>) -> io::Result<Vec<u8>> {

    >     let mut bytes = Vec::new();
    >     File::open(path.as_ref())?.read_to_end(&mut bytes)?;
    >     Ok(bytes)
    > }

    Как определить какие возможные ошибки может вернуть данная функция? Для этого надо в код File::open и read_to_end смотреть?

    Почему ошибки аллокации в Vew::new никак не обрабатываются? Считается нормной просто запаниковать и упасть?

     
     
  • 5.225, Аноним (-), 12:12, 25/03/2024 [^] [^^] [^^^] [ответить]  
  • +/
    > Как определить какие возможные ошибки может вернуть данная функция?

    Посмотреть на возвращаемое значение и увидеть там не Result, а io::Result; хлопнуть себя ладонью по лбу и сказать "аааа, это ж та обёртка над Result, которая Result<T, io::Error>".

    Если это неочевидно, но интересно, то я бы рекомендовал не вопросы по форумам задавать, а пойти и почитать Rust Book.

    > Почему ошибки аллокации в Vew::new никак не обрабатываются? Считается нормной просто запаниковать и упасть?

    Да.

     
     
  • 6.227, Вы забыли заполнить поле Name (?), 13:25, 25/03/2024 [^] [^^] [^^^] [ответить]  
  • +/
    >> Как определить какие возможные ошибки может вернуть данная функция?
    > Посмотреть на возвращаемое значение и увидеть там не Result, а io::Result; хлопнуть
    > себя ладонью по лбу и сказать "аааа, это ж та обёртка
    > над Result, которая Result<T, io::Error>".

    А если бы там кроме io::Error были бы другие, например от сторонней либы, что тогда писать?

    >> Почему ошибки аллокации в Vew::new никак не обрабатываются? Считается нормной просто запаниковать и упасть?
    > Да.

    Кек. Нормально для системного языка.

     
     
  • 7.233, Аноним (-), 18:45, 25/03/2024 [^] [^^] [^^^] [ответить]  
  • +/
    > А если бы там кроме io::Error были бы другие, например от сторонней либы, что тогда писать?

    То есть, если функция генерирует ошибки разного типа, и их все хочется возвращать?

    Есть разные подходы. Либо ты садишься и создаёшь свой тип ошибок, который включает все, либо берёшь anyhow и оставляешь эту задачу ему. anyhow конструирует типы ошибок в динамике, то есть ты получаешь vtables, аллокации памяти из кучи и все прочие неотъемлимые ООП гнусности.

    > Нормально для системного языка.

    Да. Бывают исключения, но это де факто статистическая норма.

     
     
  • 8.235, Вы забыли заполнить поле Name (?), 22:47, 25/03/2024 [^] [^^] [^^^] [ответить]  
  • +/
    Ну кажется нормальная задача Вот функция работает с io разбирает какой-то фор... текст свёрнут, показать
     
     
  • 9.254, freecoder (ok), 10:16, 27/03/2024 [^] [^^] [^^^] [ответить]  
  • +/
    Допустим, внутри функции генерируется ошибка типа E и другая ошибка типа U Чему... текст свёрнут, показать
     
     
  • 10.261, Вы забыли заполнить поле Name (?), 22:49, 27/03/2024 [^] [^^] [^^^] [ответить]  
  • +/
    https ziglang org documentation master Merging-Error-Sets Мне вот интересно к... текст свёрнут, показать
     
     
  • 11.263, Карлос Сношайтилис (ok), 21:21, 31/03/2024 [^] [^^] [^^^] [ответить]  
  • +/
    А мне вот непонятно, как сделано в зиге По твоей ссылке там джойн одинаковых ти... текст свёрнут, показать
     
  • 8.236, Вы забыли заполнить поле Name (?), 22:49, 25/03/2024 [^] [^^] [^^^] [ответить]  
  • +1 +/
    https lkml org lkml 2021 4 14 1099 ... текст свёрнут, показать
     
     
  • 9.256, freecoder (ok), 10:30, 27/03/2024 [^] [^^] [^^^] [ответить]  
  • +/
    Это было 3 года назад ... текст свёрнут, показать
     
     
  • 10.260, Вы забыли заполнить поле Name (?), 22:47, 27/03/2024 [^] [^^] [^^^] [ответить]  
  • +/
    А что изменилось ... текст свёрнут, показать
     
  • 7.255, freecoder (ok), 10:25, 27/03/2024 [^] [^^] [^^^] [ответить]  
  • +/
    > Кек. Нормально для системного языка.

    Так-то Rust не является специализированным языком для системного программирования, скорее это язык общего назначения, допускающий применение в системном программировании. Проблема с паниками при аллокации - со временем решается в языке. В случае с 'Vec', если вам нужно обработать ошибку аллокации, используйте метод 'try_reserve'.

     
  • 2.99, Вы забыли (-), 19:50, 22/03/2024 [^] [^^] [^^^] [ответить]  
  • +/
    > https://ibb.co/ZYfJDwM
    > Когда вижу такой синтаксис, моя рука тянется к нагану

    Просто прими факт что ты неосилятор.
    Или это уже старческая деменция.
    Или просто уровень дундучности превышает средний по населению.

    Народ как-то осваивает последние С++, а там синтаксис ИМХО посложнее растовского
    constexpr auto do(std::string_view param) noexcept -> std::string;

     
     
  • 3.101, Аноним (101), 19:52, 22/03/2024 [^] [^^] [^^^] [ответить]  
  • –1 +/
    >constexpr auto do(std::string_view param) noexcept -> std::string;

    а что не так, что именно тут выглядит сложным?

     
     
  • 4.110, Вы забыли (-), 20:09, 22/03/2024 [^] [^^] [^^^] [ответить]  
  • +5 +/
    А что в растовском коде сложного?)
    Мне растовский код понятен, хотя я прочитал всего одну книжку и написал пару мелких утилит.
     
     
  • 5.172, Аноним (-), 14:19, 23/03/2024 [^] [^^] [^^^] [ответить]  
  • –2 +/
    Ты не правильно составил своё предложение, вот так надо: "Я прочитал всего одну книжку и написал пару мелких утилит, поэтому мне растовский код понятен".
     
  • 2.115, Вы забыли заполнить поле Name (?), 20:24, 22/03/2024 [^] [^^] [^^^] [ответить]  
  • +5 +/
    > https://ibb.co/ZYfJDwM
    > Когда вижу такой синтаксис, моя рука тянется к нагану

    Ты впервые pattern matching увидел что ли? Я тебя разочарую, но в других языках он почти также выглядит, даже в питоне.

     
     
  • 3.147, Аноним (-), 23:22, 22/03/2024 [^] [^^] [^^^] [ответить]  
  • –3 +/
    > Ты впервые pattern matching увидел что ли?

    Тише! Тише!
    Не пугаю любителей дыряшки такими сложными терминами.
    Они застряли где-то в 80-90х, нужно немного подождать пока они эволюционируют)))

     
     
  • 4.164, Вы забыли заполнить поле Name (?), 10:00, 23/03/2024 [^] [^^] [^^^] [ответить]  
  • +3 +/
    В середине 80х, а тем более 90х уже были ocaml, erlang, так что ты ерунду сказал.
     
     
  • 5.185, Аноним (180), 15:49, 23/03/2024 [^] [^^] [^^^] [ответить]  
  • +/
    В середине 80-х в СНГ только Turbo C был ворованный (впрочем, все писали на паскале), а в 90-х начали появляться нормальные книжки по C++. Ну о чём вы, какой ocaml, какой erlang.
     
     
  • 6.201, Вы забыли заполнить поле Name (?), 19:40, 23/03/2024 [^] [^^] [^^^] [ответить]  
  • +1 +/
    > Ну о чём вы, какой ocaml, какой erlang.

    Рекомендую посмотреть год создания этих языков. В них есть pattern matching.

     
     
  • 7.204, Аноним (204), 20:42, 23/03/2024 [^] [^^] [^^^] [ответить]  
  • +/
    Рекомендую ещё раз перечитать мой комментарий. У наших тогда были паскаль, сишечка и что-то краем уха про smalltalk слышали (но никто не видел). Оттуда и растут ноги обожествления ассемблера и сишечки — больше просто ни черта и не было.
     
     
  • 8.206, Вы забыли заполнить поле Name (?), 21:20, 23/03/2024 [^] [^^] [^^^] [ответить]  
  • +1 +/
    Ты за всех говоришь Книга Автоматическая обработка данных Язык лисп и его реа... текст свёрнут, показать
     
     
  • 9.215, Аноним (204), 11:44, 24/03/2024 [^] [^^] [^^^] [ответить]  
  • –2 +/
    Узок был круг этих людей, страшно далеки они были от народа ... текст свёрнут, показать
     
  • 6.221, n00by (ok), 11:45, 25/03/2024 [^] [^^] [^^^] [ответить]  
  • +/
    "Паттерн-матчинг" в СССР появился в 1966-м году, когда Турчин В.Ф. создал на основа нормальных алгорифмов Маркова язык Рефал.

    А "в 90-х начали появляться нормальные книжки по C++" это пёрл из разряда "пытались писать ядро Linux на плюсах" или "STL означает стандард либрари". Язык стандартизован в 1998-м, а STL это первые буквы фамилий Степанов и Ли.

     
     
  • 7.228, Вы забыли заполнить поле Name (?), 13:39, 25/03/2024 [^] [^^] [^^^] [ответить]  
  • +/
    >а STL это первые буквы фамилий Степанов и Ли

    Почему Степнову выделили 2 буквы, а Ли всего одну?

     
     
  • 8.239, n00by (ok), 10:06, 26/03/2024 [^] [^^] [^^^] [ответить]  
  • +/
    Потому что эксперты не умеют искать тривиальные ответы самостоятельно Я вернул... текст свёрнут, показать
     
     
  • 9.241, Вы забыли заполнить поле Name (?), 10:11, 26/03/2024 [^] [^^] [^^^] [ответить]  
  • +/
    И как это отвечает на вопрос ... текст свёрнут, показать
     
     
  • 10.242, n00by (ok), 10:15, 26/03/2024 [^] [^^] [^^^] [ответить]  
  • +/
    gt оверквотинг удален Это объясняет, почему эксперт спроецировал свой опыт и н... текст свёрнут, показать
     
     
  • 11.244, Вы забыли заполнить поле Name (?), 11:12, 26/03/2024 [^] [^^] [^^^] [ответить]  
  • +2 +/
    gt оверквотинг удален Душно стало, надо проветрить ... текст свёрнут, показать
     
     
  • 12.246, n00by (ok), 11:55, 26/03/2024 [^] [^^] [^^^] [ответить]  
  • –2 +/
    gt оверквотинг удален Сочувствую Советую воспользоваться опытом подводников -... текст свёрнут, показать
     
  • 7.253, Аноним (253), 03:50, 27/03/2024 [^] [^^] [^^^] [ответить]  
  • +/
    Почему тебя так STL волнует? Месяц назад ты зачем-то повторил эту фразу в ответ на рассуждения Страуструпа о стандартной библиотеке в 1988.

    В принципе под STL имеют в виду то оригинальную библиотеку Степанова, то соответствующую часть стандартной библиотеки, то её целиком (жаловаться в Майкрософт, не сюда, это он так делает).

    Ну и отдавая дань твоему умению лезть в бутылку, надо на "STL (что значит "Степанов и Ли")" возразить, что это Standard Template Library, ведь именно это написано в названии, а другое не написано и, следовательно, не существует.

     
     
  • 8.258, n00by (ok), 11:33, 27/03/2024 [^] [^^] [^^^] [ответить]  
  • +/
    Потому что так себя ведёт воображаемый я в твоём маня-мирке Да Охотно верю, но... большой текст свёрнут, показать
     
  • 4.193, Аноним (-), 17:03, 23/03/2024 [^] [^^] [^^^] [ответить]  
  • +2 +/
    Паттерн матчинг растёт из 70х. В C++ перегрузка операторов явно под влиянием тех идей, только как обычно в C++ через известное место и с полной потерей исходной задумки.
     
     
  • 5.222, n00by (ok), 11:51, 25/03/2024 [^] [^^] [^^^] [ответить]  
  • +/
    Перегрузка не имеет отношения к паттерн-матчингу, поскольку она времени трансляции, а сопоставление с образцом происходит во время исполнения. Но когда в голове каша из темплейтов, генериков, шаблонов и образцов, и не то можно нафантазировать.
     
     
  • 6.234, Аноним (-), 18:47, 25/03/2024 [^] [^^] [^^^] [ответить]  
  • +/
    Совершенно верно, перегрузка -- это паттерн-матчин компайл-тайма. Причём нисколько не деструктурирующий, и вообще непонятно зачем это было запиливать. Обычная стауструповая позиция "у них есть, значит и у меня будет".
     
     
  • 7.240, n00by (ok), 10:10, 26/03/2024 [^] [^^] [^^^] [ответить]  
  • +/
    "Сигнатура функции" - это про тип функции, а не про значения её аргументов.
     
  • 2.186, Аноним (180), 15:49, 23/03/2024 [^] [^^] [^^^] [ответить]  
  • +/
    Вам в соседнюю новость про COBOL.
     
  • 2.223, n00by (ok), 11:54, 25/03/2024 [^] [^^] [^^^] [ответить]  
  • +/
    > https://ibb.co/ZYfJDwM
    > Когда вижу такой синтаксис, моя рука тянется к нагану

    Правильно тянется. Я не знаю Rust, но в коде всё понятно. Не понятно, однако, зачем же стреляться?

     

     ....большая нить свёрнута, показать (44)

  • 1.100, Аноним (76), 19:52, 22/03/2024 [ответить] [﹢﹢﹢] [ · · · ]  
  • –2 +/
    CHERI-расширения системы команд и компиляторы с поддержкой CHERI решат проблемы дыряшек https://riscv.org/blog/2024/03/securing-software-execution-with-cheri-on-a-cod
    Занудный Rust становится ненужен. Выходы будут блокироваться во время исплнения.
     
     
  • 2.194, Аноним (-), 17:09, 23/03/2024 [^] [^^] [^^^] [ответить]  
  • +1 +/
    Рантайм проверки указателей? Где-то мы это уже видели. Заменим дыры на сегфолты. Многообещающе.
     

  • 1.126, Аноним (126), 21:22, 22/03/2024 [ответить] [﹢﹢﹢] [ · · · ]  
  • +/
    все проблемы программирования сводятся к тому что кодер забыл освободить память?
     
     
  • 2.128, freecoder (ok), 21:24, 22/03/2024 [^] [^^] [^^^] [ответить]  
  • –1 +/
    Не все. Ваш Кэп.
     
  • 2.152, fumanchez (ok), 04:34, 23/03/2024 [^] [^^] [^^^] [ответить]  
  • +/
    проблема в том, чтобы найти где же он забыл ее освободить
     
  • 2.156, Аноним (156), 05:37, 23/03/2024 [^] [^^] [^^^] [ответить]  
  • +/
    Не только. Часть из них бы просто не возникала если бы авторы дыряшки в свое время додумались до простой вещи: когда ты пишешь в коде что-то вроде int *x; то эта штука автоматом инициализировалась бы NULL и финты ушами в стиле "объявил указатель, забыл присвоить ему конкретный адрес и теперь через него читаю или пишу по рандомному адресу ибо фиг знает что в нем" не проходили бы.
     
     
  • 3.157, qwe (??), 07:19, 23/03/2024 [^] [^^] [^^^] [ответить]  
  • +/
    Это хорошо, пока указатель валяется на стеке, где память уже выделена. В ином случае инициализация указателя NULL-ом спровоцирует выделение памяти аллокатором и оптимизация с отложенным выделением памяти едет лесом.
     
     
  • 4.158, Аноним (156), 07:30, 23/03/2024 [^] [^^] [^^^] [ответить]  
  • +/
    Оптимизация сегфолтом после записи в рандомное место адресного пространства процесса сильно лучше? Особенно с учетом того, что это место может быть разным при каждом запуске.
     
     
  • 5.192, qwe (??), 17:01, 23/03/2024 [^] [^^] [^^^] [ответить]  
  • –1 +/
    Сильно лучше - это культура написания кода и покрытие его тестами. Да и предупреждения компилятора не стоит игнорировать.
     
     
  • 6.203, Аноним (156), 20:34, 23/03/2024 [^] [^^] [^^^] [ответить]  
  • +1 +/
    Сильно лучше - это не предупреждения компилятора, а отказ компилировать кривой код. Rust так умеет в ряде случаев, дыряшка нет.
     
     
  • 7.205, Аноним (184), 20:48, 23/03/2024 [^] [^^] [^^^] [ответить]  
  • +/
    > Сильно лучше - это не предупреждения компилятора, а отказ компилировать кривой код.
    > Rust так умеет в ряде случаев, дыряшка нет.

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

    Вот пример, CVE-2021-26952 (Use of Uninitialized Resource) на расте. Тот самый UB дыряшки но в растишке. Заводи "вывсёврёти", жду. Почему отказался компилировать код? Он же "кривой"!

     
     
  • 8.229, Аноним (-), 16:10, 25/03/2024 [^] [^^] [^^^] [ответить]  
  • +/
    Никто не врет Ну кроме того, что ты совсем чуть-чуть не понимаешь что происх... текст свёрнут, показать
     
     
  • 9.238, Аноним (184), 05:43, 26/03/2024 [^] [^^] [^^^] [ответить]  
  • +/
    лол, сколько апломба, а потом взял и обделался смотри далее а почему может не... большой текст свёрнут, показать
     
  • 7.209, qwe (??), 00:14, 24/03/2024 [^] [^^] [^^^] [ответить]  
  • –2 +/
    Открой для себя опцию -wError и все предупреждения компилятора волшебным образом станут ошибками. С другой стороны, если у тебя дыры в голове, то тебе и раст вряд ли поможет.
     
  • 4.224, n00by (ok), 12:08, 25/03/2024 [^] [^^] [^^^] [ответить]  
  • +/
    > Это хорошо, пока указатель валяется на стеке, где память уже выделена. В
    > ином случае инициализация указателя NULL-ом спровоцирует выделение памяти аллокатором
    > и оптимизация с отложенным выделением памяти едет лесом.

    Это заблуждение. В каком "ином случае"? Если указатель в регистре, нечего аллоцировать. Если он на куче - то память под него уже выделена.

     
     
  • 5.237, qwe (??), 04:40, 26/03/2024 [^] [^^] [^^^] [ответить]  
  • +/
    Аллокатор памяти может быть любой, возможно и самописный. Например в результате системного вызова аллокатор не будет выделять вынимать память из пула свободных блоков, лишь зарезервирует виртуальное адресное пространство, а память будет реально выделена лишь по требованию (попытка чтения или записи по адресу блока). Такое поведение может быть удобно при обработке больших массивов данных с произвольным доступом. Массив указателей может использоваться в каком-нибудь дереве. В случае принудительной инициализации указателей значением NULL в резервированном адресном пространстве, ядро выделит всю запрашиваемую память разом, даже если та память вообще не будет использована.
     
     
  • 6.243, n00by (ok), 10:24, 26/03/2024 [^] [^^] [^^^] [ответить]  
  • +/
    Начиная с какого-то размера блоков malloc() и calloc() примерно так и работают в Linux, страницы резервируются в адресном пространстве процесса, но коммитятся ядром при попытке доступа. При этом ядро обнуляет их содержимое. Если там хранится указатель, он будет обнулён, то есть как раз "эта штука автоматом инициализировалась бы NULL".
     
     
  • 7.251, qwe (??), 17:35, 26/03/2024 [^] [^^] [^^^] [ответить]  
  • +/
    Осталось объяснить компилятору когда нужно явное обнуление указателя в коде, а когда оно не требуется, мало того - вредно. В любом случае за подобные инициативы придется расплачиваться производительностью. Кто не умеет или не хочет управлять памятью, могут использовать раст или другой язык с автоматическим подсчетом ссылок. Там плату уже взяли.
     
  • 2.159, Аноним (156), 07:36, 23/03/2024 [^] [^^] [^^^] [ответить]  
  • +2 +/
    Представляешь, ее можно несколько раз освободить. Дыряшка легко позволяет бахнуть на указатель сколько угодно free() хоть подряд, хоть по очереди даже если после первого освобождения новое значение указателю не присваивали.
     
  • 2.212, Аноним (113), 04:53, 24/03/2024 [^] [^^] [^^^] [ответить]  
  • +/
    Почти. В оригинале было так: There are only two hard things in Computer Science: cache invalidation and naming things. Потом ещё много шуток придумали, типа «… and off-by-one errors» и подобного. Но суть не меняется: эффективное управление памятью — весьма и весьма сложная штука.
     

  • 1.165, Аноним123 (?), 10:03, 23/03/2024 [ответить] [﹢﹢﹢] [ · · · ]  
  • +2 +/
    >const HELLO: &core::ffi::CStr = c"Hello, world!";

    На сколько же это неудобно

    Почему бы не:
    auto HELLO = c"Hello, world!";

     
     
  • 2.168, Аноним (-), 11:11, 23/03/2024 Скрыто ботом-модератором     [к модератору]
  • –1 +/
     
  • 2.177, Аноним (-), 15:12, 23/03/2024 [^] [^^] [^^^] [ответить]  
  • +1 +/
    Потому что const требует обязательного указания типа. Логику этого я не совсем понимаю, но думаю что есть причины.

    Но ты можешь написать:

        let hello = c"Hello, world!";

    Судя по описанию фичи это должно сработать. Но это будет не константа, а immutable переменная. Константу компилятор может заменять значением, как ему хочется, всякие там constexpr считать из неё, а вот immutable переменная -- это всё же переменная, хоть она и неизменная.

     
     
  • 3.195, Аноним (-), 17:31, 23/03/2024 [^] [^^] [^^^] [ответить]  
  • +/
    А чем отличается немутабельная переменная let a, от константы - const? Ведь и ту, и другую сущность нельзя изменять.
     
     
  • 4.196, Аноним (184), 18:16, 23/03/2024 [^] [^^] [^^^] [ответить]  
  • +1 +/
    > А чем отличается немутабельная переменная let a, от константы - const? Ведь
    > и ту, и другую сущность нельзя изменять.

    простите, а вы точно цппшник? как _не_растоман спрашиваю.

     
     
  • 5.226, n00by (ok), 12:18, 25/03/2024 [^] [^^] [^^^] [ответить]  
  • +/
    >> А чем отличается немутабельная переменная let a, от константы - const? Ведь
    >> и ту, и другую сущность нельзя изменять.
    > простите, а вы точно цппшник? как _не_растоман спрашиваю.

    Так он и спрашивает, чем отличаются. Немутабельная переменная в "цпп" это что? const и extern linkage? Оно не нужно здесь.

    Или вместо указателя на секцию данных получится аллокация всего массива на стеке

    {
      const char hello[] = {"Hello, world!"};
    }

    ?

     
     
  • 6.232, Аноним (-), 17:11, 25/03/2024 [^] [^^] [^^^] [ответить]  
  • +/
    Когда я упоминал выше разницу между immutable variable и constant я, кажется, вс... большой текст свёрнут, показать
     
     
  • 7.245, n00by (ok), 11:46, 26/03/2024 [^] [^^] [^^^] [ответить]  
  • +/
    Скорее, я не достаточно подробно написал, что такое external linkage и не упомян... большой текст свёрнут, показать
     
     
  • 8.249, Аноним (-), 14:41, 26/03/2024 [^] [^^] [^^^] [ответить]  
  • +/
    Не совсем const int my_constant может быть операндом операции взятия адреса, и ... большой текст свёрнут, показать
     
     
  • 9.252, n00by (ok), 20:20, 26/03/2024 [^] [^^] [^^^] [ответить]  
  • +/
    Я не просто так пишу про static Наверное, ещё и область видимости стоило бы доб... большой текст свёрнут, показать
     
     
  • 10.257, Аноним (-), 11:30, 27/03/2024 [^] [^^] [^^^] [ответить]  
  • +/
    Ну, как бы это сказать Мне приходилось брать адрес от литерала, например, ты мо... большой текст свёрнут, показать
     
     
  • 11.259, n00by (ok), 18:32, 27/03/2024 [^] [^^] [^^^] [ответить]  
  • +1 +/
    В таком виде с типом int не сработает, адрес можно брать у lvalue, но не у rvalu... большой текст свёрнут, показать
     
  • 8.250, Аноним (-), 14:47, 26/03/2024 [^] [^^] [^^^] [ответить]  
  • +/
    Не совсем const int my_constant может быть операндом операции взятия адреса, и ... большой текст свёрнут, показать
     
  • 4.213, Аноним (113), 05:04, 24/03/2024 [^] [^^] [^^^] [ответить]  
  • +2 +/
    Если коротко, то у них разная семантика и жизненный цикл.
     
  • 3.216, Facemaker (?), 12:24, 24/03/2024 [^] [^^] [^^^] [ответить]  
  • +/
    >const требует обязательного указания типа. Логику этого я не совсем понимаю, но думаю что есть причины

    Одно из неявных правил, которого придерживаются разработчики языка: "выведение типа — локально". Константы (как и функции) могут быть объявлены на уровне модуля.

     

     Добавить комментарий
    Имя:
    E-Mail:
    Текст:



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

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