Хабр Курсы для всех
РЕКЛАМА
Практикум, Хекслет, SkyPro, авторские курсы — собрали всех и попросили скидки. Осталось выбрать!
Если же память выделена в куче — то указатель на неё (Box) ведёт себя точно так же, как и обычная переменная на стеке (удаляется при выходе из зоны видимости). Для совместного использования данных есть подсчёт ссылок (std::rc::Rc) и сборщик мусора (std::gc::Gc), оба реализованы как сторонние классы (Вы можете написать свои).
Никто кстати не желает забабахать подобное сравнение про D?
И Rust, и D, и GO мощные и современные языки, которые лишены многих недостатков C++. Поэтому, думаю, что можно спокойно выбирать язык с тем синтаксисом, который больше нравится.
к чему ссылкаЦелях ознакомления; в подтверждение вашего пункта 1.
из записи я не могу определить ошибку => все упирается в сообщение компилятора.Это то же самое, что утверждать что в С++ const не нужен, мол, из записи я не могу определить ошибку, приходится читать сообщения компилятора. Под лексическим уровнем я понимаю то, что компилятор обладает достаточной информацией, чтобы проводить анализ того, что в других языках остается «за кадром», в сознании программиста.
5) Многопоточность. Решается введением shared_ptr
Для совместного использования данных есть подсчёт ссылок (std::rc::Rc) и сборщик мусора (std::gc::Gc), оба реализованы как сторонние классы (Вы можете написать свои).Как написать свои классы без операции «удаления памяти»? Эта операция в языке есть, просто вы не нашли ее.
Для совместного использования данных есть подсчёт ссылок (std::rc::Rc) и сборщик мусора (std::gc::Gc), оба реализованы как сторонние классы (Вы можете написать свои).Как написать свои классы без операции «удаления памяти»? Эта операция в языке есть, просто вы не нашли ее.
Rc и Gc содержит небезопасный код для управления памятью. В области безопасного кода операции «удаления» нет, именно это имелось ввиду.fn bar<'a>(p: &'a int) -> &'a int {
~T, например:struct A {
x: ~int
}
Box<T>, который, собственно, в статье используется. А в прошлом году из языка удалили @, который обозначал как раз указатель за сборщиком мусора.Я честно говоря ожидал другую статью, например о возможностях Rust'a которые сильно бы облегчали разработку по сравнению с С++
их допускают либо новички которые только только перешли на С++, либо криворукие которым не дано.
используйте своё воображение, чтобы оценить масштабы угрозы в реальном мире
unsafe, где возможны небезопасные операции, вроде разыменования сырых указателей. Если программист будет пользоваться этими блоками направо и налево, он получит фактически C, где возможно всё, в том числе расстрелять себе ноги урановыми медведями.This is your last chance. After this, there is no turning back. You take the blue pill – the story ends, you wake up in your bed and believe whatever you want to believe. You take the red pill – you stay in Wonderland, and I show you how deep the rabbit hole goes. Remember, all I'm offering is the truth – nothing more.
Верной дорогой идете, товарищи!
/usr/include/c++/4.8/bits/stl_algo.h:160: ошибка: no match for 'operator==' (operand types are 'std::vector<int>' and 'const int')
if (*__first == __val)
^/usr/include/c++/4.8/bits/stl_algo.h:160: ошибка: invalid operands to binary expression ('std::vector<int, std::allocator<int> >' and 'int')
if (*__first == __val)
~~~~~~~~ ^ ~~~~~ int a;
std::vector<std::vector<int>> v;
auto it = std::find(begin(v), end(v), a);Шаблоны в Rust проверяются на корректность до их инстанцирования...
всё, что связано с аргументами шаблона, проверяется только на второй фазе
template <typename T1, typename T2>
struct A
{
};
template <typename T1>
struct A<T1, 2>
{
};
Visual Studio не поддерживает
template<typename T>
struct Base
{
template<typename U>
struct InnerBase
{};
};
template<typename T, typename U>
struct Derived : public Base<T>
{
struct InnerDerived : public Base<T>::template InnerBase<U>
{};
};
int main()
{
Derived<int, int>::InnerDerived foo;
}
Rust позволяет гарантировать безопасность в этих случаях. И это имеет качественные последствия. Например, Вам больше может быть не нужна аппаратная изоляция процессов (виртуальная память). Можно работать без неё, на более простых, дешёвых и экономичных процессорах.
Сравнение Rust и С++ на примерах