LINUX.ORG.RU

Языку программирования Rust исполнилось 10 лет

 , ,


1

5

15 мая этого года исполнилось 10 лет с момента выхода первой стабильной версии языка программирования Rust, разрабатываемого Mozilla совместно с сообществом.

Основные итоги за это время:

Попытки собрать истории растового успеха: раз, два.

>>> Официальный сайт

anonymous

Проверено: hobbit ()
Последнее исправление: hobbit (всего исправлений: 4)
Ответ на: комментарий от LightDiver

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

правда, это в треде по расту, но пусть будет так!

sunjob ★★★★★
()
Последнее исправление: sunjob (всего исправлений: 2)
Ответ на: комментарий от sunjob

А идея хрошая. Нашел на степике курс по перлу. Хоть гляну что это на самом деле.

LightDiver ★★★★★
()
Ответ на: комментарий от sunjob

То-то и оно. Поскреби любого перлофоба, обязательно обнаружишь растовщика или того хуже. Не от хорошей жизни и великого ума люди возводят хулу на детище Ларри Уолла, истинно говорю вам.

Smacker ★★★★★
()
Ответ на: комментарий от Smacker

у раста и перла - совершенно разные ниши, как одно следует из другого? (если не сложно, в 3-4х предложениях)

великого ума люди возводят хулу

умные люди - вообще даже не будут задумываться об «навести хулу»

sunjob ★★★★★
()
Последнее исправление: sunjob (всего исправлений: 1)
Ответ на: комментарий от mittorn

Так это скорее проблема генту, которая как раз отсутствует в карго. С генту даже две идентичные системы с одинаковыми юзфлагами и масками ведут себя по разному просто потому, что одну обновил в понедельник, другую во вторник.

altwazar ★★★★★
()
Ответ на: комментарий от sunjob

у раста и перла - совершенно разные ниши, как одно следует из другого? (если не сложно, в 3-4х предложениях)

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

Smacker ★★★★★
()
Ответ на: комментарий от perl5_guy

В Perl-сообществе я видел все эти отмены и хождение строем в стрингах.

А Ларри лично в стрингах на верблюде по конференциям передвигался? Или на всё это усами как товарищ майор шевелил? :)

AP ★★★★★
()
Ответ на: комментарий от sunjob

https://iimg.su/s/16/uzNv34ArksCwgtsYrR14A3d6XZkikuaSynmWNPqQ.png

Вот серьезно?! Курс для нубов вот так вот с ходу предлагаешь выполнить непонятную строку в рабочей системе!

Скажи честно, ты же меня направил в перл злонамеренно?

p.s.

https://iimg.su/s/16/if1XM0MCqIsonDbRx1cE3ucPJOpxqzoXtoEdcxH0.png

Ладно, забавная секта.. Иду дальше.

LightDiver ★★★★★
()
Последнее исправление: LightDiver (всего исправлений: 1)
Ответ на: комментарий от AP

Ларри очень хороший человек. Очень.

As I already mentioned Larry Wall is one of the most interesting figures on the open source/free software arena. The only one with the implicit vow of poverty, kind of open source software monk (or, more correctly, a priest). Unlike most other major figures of open source movement he never tried to commercialize his creation. That actually did not served him all too well when he was diagnosed with cancer.

perl5_guy ★★★★★
()

Создание класса в Rust

В Rust нет «классов» в том смысле, как они реализованы в языках вроде C++ или Java, но есть аналогичная концепция — структуры (struct) и трейты (trait). Вместе они позволяют создавать объекты с данными и методами, как в ООП.

// Определим структуру
struct Person {
    name: String,
    age: u32,
}

// Имплементация методов для структуры
impl Person {
    // Конструктор
    fn new(name: &str, age: u32) -> Self {
        Person {
            name: name.to_string(),
            age,
        }
    }

    // Метод
    fn say_hello(&self) {
        println!("Привет, меня зовут {} и мне {} лет!", self.name, self.age);
    }
}

Использование:

fn main() {
    let person = Person::new("Алиса", 30);
    person.say_hello();
}

Создание класса в C++

Создание класса в C++ — это основа объектно-ориентированного программирования. Вот базовый пример, как создать и использовать класс:

#include <iostream>
#include <string>

// Определение класса
class Person {
private:
    std::string name;
    int age;

public:
    // Конструктор
    Person(std::string n, int a) {
        name = n;
        age = a;
    }

    // Метод для вывода информации
    void introduce() {
        std::cout << "Меня зовут " << name << ", мне " << age << " лет." << std::endl;
    }

    // Сеттер для возраста
    void setAge(int a) {
        age = a;
    }

    // Геттер для возраста
    int getAge() {
        return age;
    }
};

// Главная функция
int main() {
    Person p1("Алексей", 30);
    p1.introduce();

    p1.setAge(31);
    std::cout << "Обновлённый возраст: " << p1.getAge() << std::endl;

    return 0;
}

Не говоря уже про: сеттеры/геттеры, наследование, инкапсуляция, шаблоны и тд.

Так что мой выбор С++

enep ★★★★★
()
Ответ на: комментарий от altwazar

Так если нужно 2 одинаковые системы - они должны использоваться с одинакового среза дерева пакетов. А так очевидно, что там версии разные (да, аналога Cargo.lock нет поскольку в рамках системы он никому не нужен)
Да и в rust cargo.lock не поможет, ведь ты не захочешь сидеть на одних и тех же версиях библиотек вечно

mittorn ★★★★★
()
Последнее исправление: mittorn (всего исправлений: 1)
Ответ на: комментарий от enep

Мне здесь больше всего не понятно, зачем самое ужасное и противное синтаксическое решение из c++ (оператор неймспейса) притащили в rust как есть? Такое ощущение, будто специально пытались создать язык изначально неюзабельным

mittorn ★★★★★
()
Ответ на: комментарий от mittorn

В rust я смотрю много чего из разных языком переташили С++,Pascal? python …

PS: Ну растоманы что с них взять

enep ★★★★★
()
Ответ на: комментарий от enep

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

mittorn ★★★★★
()
Ответ на: комментарий от mittorn

Мне здесь больше всего не понятно, зачем самое ужасное и противное синтаксическое решение из c++ (оператор неймспейса) притащили в rust как есть? Такое ощущение, будто специально пытались создать язык изначально неюзабельным

А в чём «противность» данного решения? Имхо наоборот - убирает всякие костыли в виде префиксов/суффиксов. Какое решение предложили бы вы?

necromant ★★
()
Ответ на: комментарий от LightDiver

Не совсем понял мысль.

Это примерно как в линуксе права доступа на все каталоги и файлы были 777.

Проще говоря в сеттере можно сделать проверку коректного значения возраста и тогда его нельзя будет установить некорректным в отличии от структуры где можно сделать что-то типа person.age=-1;

Ygor ★★★★★
()
Последнее исправление: Ygor (всего исправлений: 2)
Ответ на: комментарий от necromant

:: глаза мозолят. Его реально не удобно читать.
Использовать какой-то другой незадействованный символ, либо же переиспользовать точку наподобие того, как это сделано в java. Так как здесь нет необходимости указывать неймспейс в определении членов класса вне декларации, использование точки скорее всего сохранило бы однозначность (то есть если точка располагается после типа - это неймспейс).
Как я понимаю, два символа в c++ в качестве оператора появились лишь из-за того, что одно : было зарезервировано под метки, а все остальные символы на клавиатуре уже играют какую-то синтаксическую роль. Так как у rust нет задачи совместимости с Си, то в принципе мог использоваться любой другой незадействованный символ

mittorn ★★★★★
()
Последнее исправление: mittorn (всего исправлений: 1)
Ответ на: комментарий от sunjob

Ну вот пример.

Screen - написан GNU и лицензия GNU Tmux - автор написал свою лицензию Zellij - тут уже MIT лицензия.

Хотя не могу понять как можно заработать на подобных утилитах?

Nurmukh ★★★
()
Ответ на: комментарий от mittorn

Так если нужно 2 одинаковые системы - они должны использоваться с одинакового среза дерева пакетов.

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

Тупо было два пакета, А1, Б1. Завтра вышла версия Б2, одну систему обновил. После завтра вышла А2, тоже обновил.

А вторую обновил позже и там сначала обновился до А2, а потом с А2 собрался Б2. Если собрался, иногда чтобы Б2 встал надо ручками откатиться до А1, а после установки обновить до А2.

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

altwazar ★★★★★
()
Ответ на: комментарий от LightDiver

ты же меня направил в перл злонамеренно?

ни в коем разе! я с таким даже не сталкивался (может просто потому, что у меня слака и там «как бы совсем» не как у людей?! :о)

я знакомился с перлом походу выполнения работы (тяжело, но это как-то подстегивало на «подвиги»... и после небольшой ломки, он так зашел, что до сих пор только теплые воспоминания об этом языке). удачи! :о)

sunjob ★★★★★
()
Последнее исправление: sunjob (всего исправлений: 2)
Ответ на: комментарий от altwazar

А вот и нет.
Конечно это не проблема непосредственно Cargo, но были неприятные случаи говорящие об обратном.
Есть некий проект, использующий cargo-ndk. Т.к это билд-тайм зависимость только для конфигурации с android, в зависимсотях его нет и ставится он билд-скриптом в таске, собирающей проект под android.
В проекте явно сказано, что требуется rust такой-то версии. У разраба он работает.
Пытаюсь собрать в своей системе, rust собран из стабильной ветки разумеется - я же не хочу быть бета-тестером новых фич.
Скрипт подтягивает свежий cargo-ndk, если он не установлен. cargo-ndk успешно собирается, начинает запускаться сборка и...
выкидывает runtime-панику говоря что эта версия rust не поддерживается, качайте другую. Решилось конечно явным указанием версии cargo-ndk в билдскрипте.
Да, разраб cargo-ndk зачем-то поставил проверку, выкидывающую runtime-исключение на старых версиях rust. А разраб зависящего от него проекта об этом и не знает т.к у него cargo-ndk уже установился и больше не ставится и не обновляется - всё работает.
На вопрос, зачем он это сделал - он мне сказал чтобы я заплатил если он хочет поддерживать мою конфигурацию (да, бесплатным rust будет только если вы бесплатный бета-тестер)
Никакого комментария к этому требованию там не было.
С cbindgen где-то была похожая пробелма, только уже касалось не версии rust, а каких-то его зависимостей.
В общем, нет, cargo не исключает внимания внешних факторов поскольку сборке зачастую всё равно нужен какой-нибудь внешний тулинг

mittorn ★★★★★
()
Последнее исправление: mittorn (всего исправлений: 1)
Ответ на: комментарий от enep

сеттеры/геттеры, наследование

так и запишем - выбираешь говнокод и сломанную архитектуру

zurg
()
Ответ на: комментарий от Ygor

в отличии от структуры где можно сделать что-то типа person.age=-1;

Вот бы кто-то догадался сделать поля структур приватными по умолчанию… А, да, в расте же так и есть!

unC0Rr ★★★★★
()
Ответ на: комментарий от mittorn

Когда человек тащит библиотеки, не думая о зависимостях, он совершенно не контроллирует, что происходит в его программе.

А когда он велосипед пишет на любой чих, контроль полный. В каждой строчке по багу, зато кОнТрОлЬ!!!11

unC0Rr ★★★★★
()
Ответ на: комментарий от unC0Rr

Вряд ли это помеашает какому-нибудь unsafe-говнокоду их переписать

mittorn ★★★★★
()
Ответ на: комментарий от unC0Rr

@mittorn

Вот бы кто-то догадался сделать поля структур приватными по умолчанию… А, да, в расте же так и есть!

Поздравляю, вас молодые люди, соврамши. https://godbolt.org/z/8cf5cxnGe

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

Ygor ★★★★★
()
Ответ на: комментарий от altwazar

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

MirandaUser2
()
Ответ на: комментарий от mittorn

жесть оно там кода нагенерило…

Да забей, я как тамошнее наследование увидел - здравствуй смесь из с89 и безудержного js - так малость ошалел. Вообщем я не завидую тем, кто этот код будет ревьюировать и как. То есть есть в С++ ты нажал кнопочку на объявлении метода в файле *.hpp в классе и тебя перекинуло в сам метод в *.cpp файлик или просто ниже по текущему файлу, то как по этому навигацию осуществлять я хз.

Ygor ★★★★★
()
Ответ на: комментарий от Somebody

Не знаю, что это…

Один из серии проектов, собиравших научный вычислительный софт. 14-й — кристаллография. Shelx, GSAS, Rietan, TREOR и т.п.

И к чему ваше упоминание…

К тому, чем этот профессор занимался.

question4 ★★★★★
()
Ответ на: комментарий от Ygor

кстати, касательно навигации по коду мне очень понравилась конвертация между camel/snake case в (де)сериализаторах. То есть найти использования идентификатора обычным grep уже не выйдет...

mittorn ★★★★★
()
Ответ на: комментарий от Ygor

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

zurg
()
Ответ на: комментарий от zurg

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

mittorn ★★★★★
()
Ответ на: комментарий от Ygor

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

unC0Rr ★★★★★
()
Ответ на: комментарий от LightDiver

Тебе не понравилось, что в раст то же самое делается проще и короче чтоли?

В каком месте проще? Костыли на структурах и «ехал self через self». Примерно так выглядело ООП в эпоху плейстоцена. А если захочешь наследование, то вовсе жопа отвалится. Лучше не кривляться и писать в процедурном стиле без детсадовских закосов под ООП.

bread
()
Ответ на: комментарий от Nurmukh

Screen - написан GNU

Нет, не написан.

"Screen was originally designed by Oliver Laumann and Carsten Bormann at Technische Universität Berlin and published in 1987.[2][3]

Around 1990, Laumann handed over maintenance of the code to Jürgen Weigert and Michael Schroeder at the University of Erlangen–Nuremberg, who later moved the project to the GNU Project…"

AP ★★★★★
()
Ответ на: комментарий от Ygor

Между публикацией кода скрина и переносом в гну — около восьми лет. Можешь поспорить с этим, я не возражаю. В гну этот проект, заGNUлся, кстати.

AP ★★★★★
()
Ответ на: комментарий от AP

Я серьёзно, оригинальный писатель emacs совсем не Столманн, по этому поводу даже судебное разбирательство было, из которого он вышел сухим из воды.

Ygor ★★★★★
()

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

anc ★★★★★
()
Для того чтобы оставить комментарий войдите или зарегистрируйтесь.