মরিচা 1.61 প্রোগ্রামিং ভাষা প্রকাশ

সাধারণ-উদ্দেশ্য প্রোগ্রামিং ভাষা Rust 1.61, Mozilla প্রকল্প দ্বারা প্রতিষ্ঠিত কিন্তু এখন স্বাধীন অলাভজনক সংস্থা Rust Foundation-এর পৃষ্ঠপোষকতায় বিকশিত হয়েছে, প্রকাশ করা হয়েছে। ভাষাটি মেমরির নিরাপত্তার উপর দৃষ্টি নিবদ্ধ করে এবং একটি আবর্জনা সংগ্রহকারী এবং রানটাইম ব্যবহার এড়িয়ে উচ্চ কাজের সমান্তরালতা অর্জনের উপায় প্রদান করে (রানটাইমটি স্ট্যান্ডার্ড লাইব্রেরির প্রাথমিক প্রাথমিককরণ এবং রক্ষণাবেক্ষণে হ্রাস করা হয়)।

রাস্টের মেমরি হ্যান্ডলিং পদ্ধতিগুলি পয়েন্টারগুলি পরিচালনা করার সময় বিকাশকারীকে ত্রুটিগুলি থেকে বাঁচায় এবং নিম্ন-স্তরের মেমরি পরিচালনার কারণে উদ্ভূত সমস্যাগুলি থেকে রক্ষা করে, যেমন একটি মেমরি এলাকা মুক্ত হওয়ার পরে অ্যাক্সেস করা, নাল পয়েন্টারগুলিকে ডিরেফারেন্স করা, বাফার ওভাররান ইত্যাদি। লাইব্রেরি বিতরণ, বিল্ড প্রদান এবং নির্ভরতা পরিচালনা করতে, প্রকল্পটি কার্গো প্যাকেজ ম্যানেজার তৈরি করে। লাইব্রেরি হোস্ট করার জন্য crates.io সংগ্রহস্থল সমর্থিত।

রেফারেন্স চেকিং, অবজেক্টের মালিকানার ট্র্যাক রাখা, অবজেক্টের লাইফটাইম (স্কোপ) ট্র্যাক রাখা এবং কোড এক্সিকিউশনের সময় মেমরি অ্যাক্সেসের সঠিকতা মূল্যায়নের মাধ্যমে কম্পাইলের সময় মেমরি নিরাপত্তা প্রদান করা হয়। মরিচা পূর্ণসংখ্যা ওভারফ্লোগুলির বিরুদ্ধে সুরক্ষাও প্রদান করে, ব্যবহারের আগে পরিবর্তনশীল মানগুলির বাধ্যতামূলক প্রাথমিককরণের প্রয়োজন, স্ট্যান্ডার্ড লাইব্রেরিতে ত্রুটিগুলি আরও ভালভাবে পরিচালনা করে, ডিফল্টরূপে অপরিবর্তনীয় রেফারেন্স এবং ভেরিয়েবলের ধারণা প্রয়োগ করে, যৌক্তিক ত্রুটিগুলি হ্রাস করার জন্য শক্তিশালী স্ট্যাটিক টাইপিং অফার করে।

প্রধান উদ্ভাবন:

  • Предоставлена возможность определения собственных кодов возврата из функции main. Изначально функция main в Rust могла возвращать только тип «()» (unit), что всегда указывало на успешный статус завершения, если разработчиком явно не вызвана функция «process::exit(code)». В Rust 1.26 при помощи нестабильного типажа Termination в функции main была предоставлена возможность возвращение значений «Ok» и «Err», соответствующих кодам EXIT_SUCCESS и EXIT_FAILURE в программах на языке Си. В Rust 1.61 типаж Termination переведён в разряд стабильных, а для представления конкретного кода возврата предложен отдельный тип ExitCode, который абстрагирует специфичные для платформы типы возвращаемых значений, предоставляя как предопределённые константы SUCCESS и FAILURE, так и метод From<u8> для возвращения произвольного кода возврата. use std::process::ExitCode; fn main() -> ExitCode { if !check_foo() { return ExitCode::from(42); } ExitCode::SUCCESS }
  • Стабилизированы дополнительные возможности функций, определённых с использованием выражения «const fn», которые могут вызываться не только как обычные функции, но и использоваться в любом контексте вместо констант. Данные функции вычисляются на этапе компиляции, а не в ходе выполнения, поэтому на них накладываются определённые ограничения, такие как возможность чтения только из констант. В новой версии внутри const-функций разрешены базовые операции с указателями на функции (разрешено создание, передача и приведение указателей, но не вызов функции по указателю); ограничения типажей (trait bounds) для обобщённых параметров const-функций, таких как T: Copy; динамически диспетчеризируемые типажи (dyn Trait); типы impl Trait для аргументов и возвращаемых значений функции.
  • Дескрипторы потоков Stdin, Stdout и Stderr в std::io теперь имеют cтатическое время жизни («‘static») при блокировке, что позволяет использовать конструкции вида «let out = std::io::stdout().lock();» с получением дескриптора и выставлением блокировки в одном выражении.
  • API-এর একটি নতুন অংশকে স্থিতিশীল বিভাগে স্থানান্তরিত করা হয়েছে, যার মধ্যে বৈশিষ্ট্যগুলির পদ্ধতি এবং প্রয়োগগুলিকে স্থিতিশীল করা হয়েছে:
    • Pin::static_mut
    • Pin::static_ref
    • Vec::retain_mut
    • VecDeque::retain_mut
    • Write для Cursor<[u8; N]>
    • std::os::unix::net::SocketAddr::from_pathname
    • std::process::ExitCode
    • std::process::Termination
    • std::thread::JoinHandle::is_finished
  • "const" অ্যাট্রিবিউট, যা ধ্রুবকের পরিবর্তে যেকোনো প্রসঙ্গে ব্যবহার করার সম্ভাবনা নির্ধারণ করে, ফাংশনে ব্যবহৃত হয়:
    • <*const T>::offset и <*mut T>::offset
    • <*const T>::wrapping_offset и <*mut T>::wrapping_offset
    • <*const T>::add и <*mut T>::add
    • <*const T>::sub и <*mut T>::sub
    • <*const T>::wrapping_add и <*mut T>::wrapping_add
    • <*const T>::wrapping_sub и <*mut T>::wrapping_sub
    • <[T]>::as_mut_ptr
    • <[T]>::as_ptr_range
    • <[T]>::as_mut_ptr_range

Дополнительно можно отметить статью «Rust: A Critical Retrospective» с обобщением впечатлений о языке Rust после написания на нём 100 тысяч строк кода в процессе разработки микроядерной операционной системы Xous, используемой в прошивках. Из недостатков отмечается трудный для восприятия синтаксис, незавершённость и продолжение развития языка, отсутствие повторяемых сборок, типовые проблемы с доверием к зависимостям в Crates.io, необходимость соблюдения определённой дисциплины для написания безопасного кода. Из возможностей превзошедших ожидания упоминаются средства для рефакторинга кода и переделки «хаков», добавленных при быстром создании прототипов.

উত্স: opennet.ru

একটি মন্তব্য জুড়ুন