1.3, Аноним (3), 14:08, 22/03/2024 [ответить] [﹢﹢﹢] [ · · · ]
| –3 +/– |
Больше рекурсий богу рекурсий!
Обязательно используйте внутри рекурсии транзакцию, а то малоли вдруг.
| |
1.4, Аноним (4), 14:08, 22/03/2024 [ответить] [﹢﹢﹢] [ · · · ]
| +1 +/– |
> Безопасная работа с памятью обеспечивается в Rust во время компиляции через проверку ссылок, отслеживание владения объектами, учёт времени жизни объектов (области видимости) и оценку корректности доступа к памяти во время выполнения кода. Rust также предоставляет средства для защиты от целочисленных переполнений, требует обязательной инициализации значений переменных перед использованием, лучше обрабатывает ошибки в стандартной библиотеке, применяет концепцию неизменяемости (immutable) ссылок и переменных по умолчанию, предлагает сильную статическую типизацию для минимизации логических ошибок.
Половину этого списка поддерживают другие языки.
| |
|
|
3.9, Аноним (4), 14:20, 22/03/2024 [^] [^^] [^^^] [ответить]
| +3 +/– |
> учёт времени жизни объектов (области видимости)
> требует обязательной инициализации значений переменных перед использованием
Это база даже для C++ и Python.
| |
|
|
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 году.
| |
|
|
|
|
|
|
1.5, Аноним (36), 14:08, 22/03/2024 [ответить] [﹢﹢﹢] [ · · · ]
| +/– |
> Третий уровень подразумевает базовую поддержку
> без проверки возможности сборки кода
🤦
| |
|
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 тоже нет в апстриме раста. Всё что там есть - затычки. Которые даже не гарантируют сборку.
| |
|
|
|
|
1.18, Вы забыли заполнить поле Name (?), 14:41, 22/03/2024 [ответить] [﹢﹢﹢] [ · · · ]
| +2 +/– |
Не понимаю какой вектор развития языка? Вот взять лисп - он уже как 50+ лет готов и стабилен к использованию, а тут в каждой новости что-то добавляют, переводят новое апи в разряд стабильных...
| |
|
2.27, Аноним (27), 14:56, 22/03/2024 [^] [^^] [^^^] [ответить]
| +10 +/– |
Лисп уже 50+ готов к использованию, а никто его не использует
| |
2.30, Аноним (-), 15:00, 22/03/2024 [^] [^^] [^^^] [ответить]
| +6 +/– |
Можно еще взять лиспмашину и запустить лисп на ней.
Но для этого придется грабить музеи))
Лисп насктолько готов, что аж стал ненужным (кроме совсем маленького кол-ва людей).
А помню как ему пророчили стать чуть ли не основным ЯП))
| |
|
|
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.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 ещё время в запасе есть.
| |
|
|
|
|
2.67, Аноним (-), 17:18, 22/03/2024 [^] [^^] [^^^] [ответить]
| +2 +/– |
Мне, как представителю театральной интелигенции слово "типаж" очень нравится.
| |
|
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 +/– |
>>написал хрень
>>ткнули, попросили переписать по-человечески
>>"ыыы, смузихлебы!!"
> только на опеннете
Читай как я написал, а не так как тебе нравится чтобы было написано.
| |
|
|
|
|
1.34, Amurzet (ok), 15:05, 22/03/2024 [ответить] [﹢﹢﹢] [ · · · ]
| +1 +/– |
Прошу знающих объяснить, как на Rust писать GUI. вариантов десятки. Многие выглядят нестабильными (судя по версиям). Хотелось бы (например) бинда к классическим winlib, qt.
| |
|
|
|
4.155, Amurzet (ok), 05:16, 23/03/2024 [^] [^^] [^^^] [ответить]
| +/– |
В том и дело, конечно egui всплывает первым после изучения. Но оно какое-то визуально "на любителя".
Но как делать классические приложения, нативно выглядящие с привычным api.
Разве это не ключевое, на что должны обратить внимание разработчики
| |
|
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, пожалуйста, плайнтекстом.
| |
|
|
|
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 +/– | Это чья-то проблема, которая недостаточно описана для того, чтобы начинать думат... большой текст свёрнут, показать | |
|
|
|
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.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.
| |
|
|
2.78, Аноним (78), 18:24, 22/03/2024 [^] [^^] [^^^] [ответить]
| +1 +/– |
А как же илитность? С таким синтаксисом, да на тайловом ВМ под вяланд как покажет погроммист своё поделие, так потенция работодателя сразу поймёт -- этот не женат, да и вообще деффками не интересуется. Хороший работник для галеры!
| |
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, аллокации памяти из кучи и все прочие неотъемлимые ООП гнусности.
> Нормально для системного языка.
Да. Бывают исключения, но это де факто статистическая норма.
| |
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 +/– |
Ты не правильно составил своё предложение, вот так надо: "Я прочитал всего одну книжку и написал пару мелких утилит, поэтому мне растовский код понятен".
| |
|
|
|
|
3.147, Аноним (-), 23:22, 22/03/2024 [^] [^^] [^^^] [ответить]
| –3 +/– |
> Ты впервые pattern matching увидел что ли?
Тише! Тише!
Не пугаю любителей дыряшки такими сложными терминами.
Они застряли где-то в 80-90х, нужно немного подождать пока они эволюционируют)))
| |
|
|
5.185, Аноним (180), 15:49, 23/03/2024 [^] [^^] [^^^] [ответить]
| +/– |
В середине 80-х в СНГ только Turbo C был ворованный (впрочем, все писали на паскале), а в 90-х начали появляться нормальные книжки по C++. Ну о чём вы, какой ocaml, какой erlang.
| |
|
|
7.204, Аноним (204), 20:42, 23/03/2024 [^] [^^] [^^^] [ответить]
| +/– |
Рекомендую ещё раз перечитать мой комментарий. У наших тогда были паскаль, сишечка и что-то краем уха про smalltalk слышали (но никто не видел). Оттуда и растут ноги обожествления ассемблера и сишечки — больше просто ни черта и не было.
| |
|
6.221, n00by (ok), 11:45, 25/03/2024 [^] [^^] [^^^] [ответить]
| +/– |
"Паттерн-матчинг" в СССР появился в 1966-м году, когда Турчин В.Ф. создал на основа нормальных алгорифмов Маркова язык Рефал.
А "в 90-х начали появляться нормальные книжки по C++" это пёрл из разряда "пытались писать ядро Linux на плюсах" или "STL означает стандард либрари". Язык стандартизован в 1998-м, а STL это первые буквы фамилий Степанов и Ли.
| |
|
|
8.239, n00by (ok), 10:06, 26/03/2024 [^] [^^] [^^^] [ответить] | +/– | Потому что эксперты не умеют искать тривиальные ответы самостоятельно Я вернул... текст свёрнут, показать | |
|
|
|
|
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.223, n00by (ok), 11:54, 25/03/2024 [^] [^^] [^^^] [ответить]
| +/– |
> https://ibb.co/ZYfJDwM
> Когда вижу такой синтаксис, моя рука тянется к нагану
Правильно тянется. Я не знаю Rust, но в коде всё понятно. Не понятно, однако, зачем же стреляться?
| |
|
|
2.194, Аноним (-), 17:09, 23/03/2024 [^] [^^] [^^^] [ответить]
| +1 +/– |
Рантайм проверки указателей? Где-то мы это уже видели. Заменим дыры на сегфолты. Многообещающе.
| |
|
1.126, Аноним (126), 21:22, 22/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 дыряшки но в растишке. Заводи "вывсёврёти", жду. Почему отказался компилировать код? Он же "кривой"!
| |
|
|
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.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 может быть операндом операции взятия адреса, и ... большой текст свёрнут, показать | |
|
|
|
|
|
3.216, Facemaker (?), 12:24, 24/03/2024 [^] [^^] [^^^] [ответить]
| +/– |
>const требует обязательного указания типа. Логику этого я не совсем понимаю, но думаю что есть причины
Одно из неявных правил, которого придерживаются разработчики языка: "выведение типа — локально". Константы (как и функции) могут быть объявлены на уровне модуля.
| |
|
|
|