Обновить
17
0.2

Пользователь

Отправить сообщение

Справедливости ради в TS/JS наследование это всего лишь удобство синтаксиса.

На деле мы можем как и раньше менять прототипы и использовать defineObject.

Также и с методами их можно отдельно писать как и делали раньше.

Просто это достало ;)

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

Кстати, Rust не sound это значит, что можно и в безопасном коде написать код с проблемой безопасности.

Странное требование.

Ведь любой unsafe можно закопать в “безопасную” функцию.

А нужно на явный неявный?

Транзитивный вызов учитывается ?

Положим Rc использует внутри unsafe, им можно пользоваться ?

Как раз передача по умолчанию по перемещению это наиболее лучший вариант.

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

Можно посмотреть как с этим дела обстоят в C++ и убедиться, что это неудобно и создаёт ошибки при использовании после перемещения.

struct A {}

fn x(a : A) {}

fn main() {
    let a = A {};
    
    x(a);
    x(a);
}

error[E0382]: use of moved value: a
--> src/main.rs:11:7
|
8 | let a = A {};
| - move occurs because a has type A, which does not implement the Copy trait
9 |
10 | x(a);
| - value moved here
11 | x(a);
| ^ value used here after move

А когда мы хотим ссылку, то есть заимствевоние то пишем об этом явно

struct A {}

fn x(a : &A) {}

fn main() {
    let a = A {};
    
    x(&a);
    x(&a);
}


Внезапным исключением являются "методы", где компилятор за нас умеет ставить заимствевование

https://play.rust-lang.org/?version=stable&mode=debug&edition=2024&gist=a0919eb2079c6a9c2b5508998159eebf

trait IA {
    fn x(self: &mut Self);
    fn y(self: &Self);
}

struct A {}

impl IA for A {
    fn x(self: &mut Self) {}
    fn y(self: &Self) {}
}

fn main() {
    let mut a = A {};
    
    a.x();
    a.x();
    a.y();
    a.y();
}


Ну и конечно если мы перемещаем, то не соберёться

trait IA {
    fn x(self: Self);
}

struct A {}

impl IA for A {
    fn x(self: Self) {}
}

fn main() {
    let a = A {};
    
    a.x();
    a.x();
}

error[E0382]: use of moved value: a
--> src/main.rs:15:5
|
12 | let a = A {};
| - move occurs because a has type A, which does not implement the Copy trait
13 |
14 | a.x();
| --- a moved due to this method call
15 | a.x();
| ^ value used here after move



А про макросы всё верно.

Видимо не посмотрели как сделано в других языках и вышло что вышло.

Обещают поправить в будущем.
Надеюсь сделают как полагается с нормальной типизацией и гигиеной.

При создании вектора тоже надо указать тип. Тут нет в этом различия.

Да ещё одна функция. Но в стандарт не может предусмотреть на все случаи жизни. У нас будет книга на тысячи страниц тогда.

Насчёт holds_alternative, тут можно было бы сделать, но тогда в шаблонных классах пришлось бы писать v.template holds_alternative<T>.

Это ещё сложнее понять. К тому же есть свободные функции как get.

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

template <typename Container>
constexpr Container with_capacity(size_t capacity)
{
   Container c;
   c.reserve(capacity);
   return c;
}

auto v = with_capacity<vector<int>>(10);

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

https://github.com/lewissbaker/cppcoro
https://github.com/David-Haim/concurrencpp


В MSVC вообще есть свой Concurrency Runtime ( https://learn.microsoft.com/en-us/cpp/parallel/concrt/concurrency-runtime )

А код на модули переведут ? ;)

C++20 modules support is still experimental and needs to be
enabled with @option{-fmodules} option.

В том и дело, что стандарт и реальность не просто различаются, а вообще разные миры.

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

В итоге мы не можем просто взять и ориентироваться полностью на стандарт даже если этого хотим.

А если возвращать итераторы то можно просто использовать их сразу в алгоритме.

erase(find(c ,p), c.end())

Как вариант можно было сразу работать везде с отрезками как в D:

https://dlang.org/library/std/range.html

https://www.informit.com/articles/printerfriendly/1407357

Откройте std::ranges алгоритмы.

Как раз то, что просили без итераторов

https://en.cppreference.com/w/cpp/algorithm/ranges/find.html

Купил 5-ю года полтора назад.

Звук хороший, шумоподавление отличное.

Из разочарования музыка в ютьбюбе оказалось такой же качественной как в спотифай. Может из-за айфона нет разницы.

Там когда-то начали рекламу пихать или что там было.

Ушёл на freedownloadmanager и с тех пор если надо скачать пользуюсь им.

Как минимум в благодарность за бесплатное пользование можно и открыть тикет https://github.com/doublecmd/doublecmd/issues

Для сравнения папок я привык к BeyondCompare , коллеги Meld.

А ещё в VSCode тоже есть расширение.

Клавиши все настраиваются.

Скажем в Маке какое-то странное по умолчанию сделано.

Зато бесплатный , с открытым кодом и кроссплатформенный.

Ну и ещё поддерживает все плагины TotalCommander.

А что там кривенького? Я перешёл давно и не заметил, чтобы что-то, что мне надо не работало.

Как не вспомнить это выступление https://youtu.be/aHaBH4LqGsI

Забыли упомянуть ohmybash https://github.com/ohmybash/oh-my-bash

Ну так ИИ и ревьют.

Иначе то, что ИИ генерирует я бы без переписывания в продакшн так не пускал.

Да, есть off-heap. Но нет удобств как указатели и Span-ы.

А почему не рассматривался C# ?

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

1
23 ...

Информация

В рейтинге
3 176-й
Зарегистрирован
Активность