LINUX.ORG.RU

Rust 1.34

 ,


3

8

Вышел релиз 1.34 языка системного программирования Rust, развиваемого проектом Mozilla.

Ключевое-долгожданное:

  • Начиная с этого выпуска, Cargo может поддерживать альтернативные реестры. (Эти реестры сосуществуют с crates.io, так что вы можете писать программы, которые зависят и от crates.io и от вашего реестра.)
  • Трейты TryFrom и TryInto были стабилизированы для поддержки ошибок при преобразовании типов.

>>> Полный анонс



Проверено: Shaman007 ()
Последнее исправление: Shaman007 (всего исправлений: 1)

Ответ на: комментарий от Deleted

Ахах, на что я по твоему обиделся?

На то, что вас сочли неадекватом.

А еще в упор не вижу ошибки с лайфтаймами.

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

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

А, нет, они и твои тоже. Это же ты вроде код написал, но я так далеко не смотрел.

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

Я покажу.

Жду не дождусь.

Я не про твои ошибки.

Тогда про что?

Про то, что вы не видите проблемы в этом коде? https://godbolt.org/z/cZFTj8 Ну *птыть, поменяйте clang на clang-8.0.0 или на gcc. Или попробуйте использовать clang с -Werror с какой-нибудь более-менее серьезной С++ной библиотекой, вроде Asio или RapidJSON. Точка зрения переменится, уверяю.

Но царь код не пишет, поэтому живет в волшебном мире распоследних версий clang-а (или gcc, он их меняет по необходимости) и в сторонних разработках не нуждается.

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

Ну про parametric expression, например.

anonymous
()

А мне нравится раст. Сам пишу на плюсах. Растовский компилятор часто уберегает от ошибок, довольно хороший вывод ошибок компиляции, компилятор предлагает исправление этих самых ошибок, документация у языка тоже неплохая, писать тоже есть где: IDEA, vscode и любой текстовый редактор к которому можно прикруть racer. Чего то большого на расте не писал, только пару cli программ и tcp сервер, может если копнуть глубже там и раскрывается неудобство раста, но пока не почувствовал

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

А мне нравится раст.

Сам пишу на плюсах.

А на раст-то писал что-то серьезное? А то тут не один человек говорил, что нравился раст в теории, но на практике не зашел.

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

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

Проект на 50000 LOC, arm, 8MB ROM, 64MB RAM. Неудобств пока не почувствовал.

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

Ссылка есть на код? Какие преимущества над крестами?

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

Цитирую удаленное сообщение:

Что то там про пример ошибок раста

Да, точно, спасибо. Я не уточнил (не специально), что очень полезно когда раст подсказывает как пофиксить ошибку связанную с особенностями языка, аля sized-type. Ошибоками освобождения памяти я не страдаю, поэтому одна из кллер фич отпадает. Там еще что то писали про гонки данных в многопоточных программах, но так как потоками особо не балуюсь, то сказать сказать мне нечего.

Рекомендации обновить шланг, установить нормальную ide и заняться делом

Да за совет спасибо. Я уже второй раз задумываюсь: «А зачем мне этот раст, когда у меня есть C++»

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

Приведи уже пример. Мне это ничего не говорит.

Это что-то типа такого: https://i.imgur.com/zt7x2bC.png ?

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

Нет там никакой фичи. Там тупо всё копируется и миллиарды ограничений.

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

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

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

Да за совет спасибо.

У тебя явно неверное представление. Ты не видел нормальную ide, не видел нормальный компилятор, не видел нормальные кресты.

Вот когда у тебя будет адекватные представление - ты уже и делай выбор. А то ты сравниваешь какой-то говнокодинг на крестах 80х годов под маздайкой в блокноте и раст.

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

А в том примере на расте была речь про лайфтаймы, которые раст автоматически «неправильно» проставил, а ругался в другом месте.

Все он правильно проставил, просто кто-то не знает, как работает lifetime elision в Rust. Времена жизни выводятся синтаксически из сигнатуры функции только, а не на основе семантики ее внутренностей. Для fn get(&self) -> &i32 у аргумента и результата будет одинаковый лайфтайм вне зависимости от логики работы самой функции. Ваша претензия к языку состоит в том, что у вас не получается сразу программировать на нем не изучив его основы.

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

«А зачем мне этот раст, когда у меня есть C++»

А зачем тебе этот С++, когда у тебя есть Rust не задумывался?

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

Какие возможности есть у C++, которых нет у Rust, кроме возможности изощрённо прострелить себе ногу?

Какие библиотеки есть у C++, которые нельзя вызывать из Rust?

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

Какие возможности есть у C++, которых нет у Rust

Так это растеры должны сказать что такого в Rust что бы отказываться от уже существующего языка. Ну а на твой вопрос ответить легко, ахах, достаточно открыть краткие списки новых вещей в стандартах, можно в принципе начать с CFront, так как у него были классы, а у Rust их нету %)

Какие библиотеки есть у C++, которые нельзя вызывать из Rust?

Дык все что на плюсах, как ты шаблоны конвертировать будешь? А если еще расширения компилятора используются...

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

Какие возможности есть у C++, которых нет у Rust

Так это растеры должны сказать что такого в Rust что бы отказываться от уже существующего языка. Ну а на твой вопрос ответить легко, ахах, достаточно открыть краткие списки новых вещей в стандартах, можно в принципе начать с CFront, так как у него были классы, а у Rust их нету %)

Только до новых стандартов еще дожить надо, надо и дожить до реализации нового стандарта в компиляторах. В том же расте Networking, Modules сейчас идут уже изкаропки. Ну и опять же таки в расте в сейф коде нет UB

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

Только до новых стандартов еще дожить надо

Я про существующие.

В том же расте Networking

И в чем смысл? У C++ есть сокеты беркли, Boost::Asio. Ну а еще C++ может использовать всю мощь платформы, а не какой то огрызок из std::

Modules сейчас идут уже изкаропки

Какие преимущества они дают?

Ну и опять же таки в расте в сейф коде нет UB

Конечно же есть! Хотя в некоторых местах там просто проверки добавили, рунтайм боунд чекер к примеру, но так и в C++ можно сделать, никаких проблем.

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

У C++ есть сокеты

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

Ну и опять же таки в расте в сейф коде нет UB

Конечно же есть! Хотя в некоторых местах там просто проверки добавили, рунтайм боунд чекер к примеру, но так и в C++ можно сделать, никаких проблем.

А можно пример?

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

только сокеты низкоуровневые

А что тебе надо? Ну возьми библиотеку какую нибудь.

В расте я могу взять тот же TcpStream из std

Ахах, ты че рофлишь? Во первых это примитив, во вторых TcpStream это какой то мусор ненужный и ограниченный. Ничего писать ненад дополнительно кстати

// rust
socket.shutdown(std::net::Shutdown::Both);
// C/C++
shutdown(fd, SHUT_RDWR);
Раст просто копирует зачем то базовый функционал, только в C/C++ ты можешь взять и заюзать платформозависимые штучки для удобства, скорости, а в расте нет, ты ограничен этим идиотством TcpStream. Раст не дает тут ничего, он только забирает возможности, лол.

А можно пример?

Читай это тред с 3-4 страницы.

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

socket.shutdown(std::net::Shutdown::Both);

Обычно делают так:

// rust
use std::net::Shutdown;
socket.shutdown(Shutdown::Both);

Ничего писать ненад дополнительно кстати
// C/C++
shutdown(fd, SHUT_RDWR);

Может прозвучать субъективно, но мне понятно, что делает код именно по первому куску из раста

Читай это тред с 3-4 страницы.

Я могу за это время сделать дела и по полезнее.

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

Поставь reuseport на TcpListener. Заюзай sendfile() на сокет...

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

Networking в standard library в С++?

В C++23 наверное будет, и будет реально нормальная сеть, а не эта хрень из раста.

А libc и в Rust есть

Вот это достижение! В PHP вроде тоже есть.

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

Обычно делают так:

Не суть.

Может прозвучать субъективно, но мне понятно, что делает код именно по первому куску из раста

Мне с первого взгляда вообще мало что понятно было бы, надо документацию читать.

Я могу за это время сделать дела и по полезнее.

Очень за тебя рад!

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

и будет реально нормальная сеть

Для стандартной библиотеки конечно же.

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

Не суть.

Прикол в том что в раст неймспейс практически всегда остается в чистоте, если конечно не делать std::*, в то время когда те же макросы его загрязняют

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

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

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

У плюсов инструменты для поиска ошибок сейчас более продвинутые чем у rust, так что да, кажется.

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

При том что сравнивать их возможности глупо?

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

только в C/C++ ты можешь взять и заюзать платформозависимые штучки

shutdown(fd, SHUT_RDWR);

C/C++ пока ещё не настолько мощны, чтобы в них самозарождались платформозависимые штучки. Так что или libc или внешние библиотеки. Приведена функция из libc.

Внешние библиотеки с удобным доступом к платформо-специфичным штукам есть и для Rust (nix, net2 и другие).

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

C/C++ пока ещё не настолько мощны, чтобы в них самозарождались платформозависимые штучки

Но на них написаны эти штучки, а раст их заюзать просто так не может.

Так что или libc или внешние библиотеки.

syscall же еще.

Приведена функция из libc.

Кхм, ну почти.

Внешние библиотеки с удобным доступом к платформо-специфичным штукам есть и для Rust

А нужны ли эти кривые вечно отстающие прослойки без преимуществ раста?

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

Но на них написаны эти штучки, а раст их заюзать просто так не может.

Плюсы (за пределами extern «C») и так никто заюзать не может кроме плюсов и, немного, D. Достаточно вменямемые биндинги для C библиотек можно сделать bindgen'ом. Конечно, мешает то, что типизированных констант в C фактически нет, и поэтому используются дефайны, ну и макросы вместо generic functions.

syscall же еще.

Для сисколлов есть макрос ioctl из nix, или можно libc::ioctl использовать, или ассемблерную вставку написать.

А нужны ли эти кривые вечно отстающие прослойки без преимуществ раста?

То, что я привёл - это с преимуществами раста. Биндинги обычно обозначаются <somelibrary>-sys.

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

Плюсы (за пределами extern «C») и так никто заюзать не может кроме плюсов

Да, однако использовать эти библиотеки можно, если пишешь на плюсах.

Достаточно вменямемые биндинги для C библиотек можно сделать bindgen'ом

Простые библиотеки разве что.

То, что я привёл - это с преимуществами раста.

Так их нету ж.

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

Плюсы (за пределами extern «C») и так никто заюзать не может кроме плюсов и, немного, D.

И эта поддержка плюсов в D растет и улучшается почти с каждым релизом.

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

Ну и зачем тогда это замечательное достижение ставить в плюс C++?

Достижение С/С++ в том, что оно это создало, для него эта нативно. Она ниболее логично, она наиболее быстро, она наиболее понятно, предсказуемо и надёжно.

Раст же - это попросту скриптуха с биндингами, очередное пхп. Оно ничего не может и не сможет. Вернее нет, сможет - воровать С/С++-рантайм и код.

Если ты хочешь написать хоть что-то, кроме мусора, никакой раст и прочее пхп тебе не поможет. Это аксиома.

anonymous
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.