Как стать автором
Обновить
44
Карма
37
Рейтинг

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

  • Подписчики 26
  • Подписки 1

Замыкания в Rust

Я показывал упрощенные модели оригинальных трейтов замыканий (FnOnce и т.д.), которые тоже не "настоящие" (как мне кажется). "Не настоящие" в том смысле, что они обрабатываются компилятором особым образом. Я считаю, что реализовать их самостоятельно нельзя, компилятор не поймет, ибо это его сугубо "внутреннее дело". А если и поймет, то нельзя будет вернуть, а если можно вернуть, то что-то еще пойдет не так.


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

Замыкания в Rust

После слов:


Правда, реализовать такой типаж не так-то просто, и если нет желания раскрывать реализацию замыкания вручную…

я ожидал, что таки в рамках Stable channel можно предложить сложную реализацию ("замыкания вручную"), которая возвращает замыкание не через кучу. Cобственно именно это и интересует.


Вы же предложили (для Stable channel) вернуться к Box+dyn. Ну т.е. таки "в кучу, товарищи".


В общем, смысл Вашего комментария по отношению к стабильной ветке (про что я, собственно, рассказываю) не очень понятен мне.


К слову, можно ведь и так определить тип, подающий надежды на то, что можно вернуть замыкание:


trait Summer<Closure: FnMut(i32, i32) -> i32> {
    fn get_sum(mult: i32) -> Closure;
}

Но толку-то...

Замыкания в Rust

Вы забыли про такую возможность как type alias

Здесь не просто type alias, еще нужны associated types, которые требуют отдельного описания. Это в планах.


Правда, реализовать такой типаж не так-то просто

Если это возможно, приведите пример?

Golang для Embedded Linux

Не совсем понятно, что писать собираетесь. Вызовы С<=>Go занимают около сотни наносекунд, что почти на два порядка больше, чем C<=>Rust.


Для некоторых применений это фатально, для других вполне норм.

Почему любой Android снимает видео хуже iPhone?

я могу назвать минимум 5 приложений видео для iPhone, которые раскрывают возможности аппарата, и максимум 2 более менее достойных для Android

Очень интересно! Озвучьте, пожалуйста, хотя бы для Android.

Внутреннее устройство Kubernetes-кластера простым языком

Примерно так выглядит типичный мастер-узел:
image

Это то же самое, что и в документации:
image


"На самом деле", если ставить по инструкции при помощи kubeadm, получается как-то так:
image

Заменяем глобальный аллокатор в Rust

Да, пожалуй. Полемически заострил, слишком сильно. Сглажу.

Go: стоит ли использовать указатели вместо копий структуры?

func BenchmarkMemoryHeap2(b *testing.B) {

    f, err := os.Create("heap.out")
    if err != nil {
        panic(err)
    }
    defer f.Close()

    err = trace.Start(f)
    if err != nil {
        panic(err)
    }

    for i := 0; i < b.N; i++ {
        s := byPointer()
        if s.a != 1 {
            panic("a!=1")
        }
    }

    trace.Stop()
    b.StopTimer()

}

BenchmarkMemoryStack-4 193849980 6.160 ns/op
BenchmarkMemoryHeap-4 18460486 62.46 ns/op
BenchmarkMemoryHeap2-4 195428566 6.141 ns/op


Собственно, уже было

Складской Ватикан в Южном Бутово, или Как мы создали индивидуальный ЦОД для Утконос ОНЛАЙН

САП, согласно историческим данным, мог обработать в штатном режиме до 12 тысяч заказов за день. Новая WMS, по нашим оценкам, легко справится с 40–50 тысячами.

Не уловил, зачем индивидуальный ЦОД для такой нагрузки?

Магнитная Одиссея 2020: как Tarantool и Golang опутали всю Россию сетью экспресс-доставки

Я обычно удивляюсь, когда кто-то ArchiMate нотацию узнает, так как ее применение не так популярно, как тот же UML.

Встретились два одиночества...


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

Непонятна связь этой метрики с требованиями к системе: "С учетом географии «Магнита» – это более 420 000 изменений в минуту". Можете пояснить?

Магнитная Одиссея 2020: как Tarantool и Golang опутали всю Россию сетью экспресс-доставки

Ого, схема на ArchiMate​ modelling language.


На текущий момент мы обрабатываем более 150 000 изменений в минуту.

А можно узнать сколько и какого виртуального железа стоит за этим в облаке?

Заменяем глобальный аллокатор в Rust

Не ту часть кода процитировал, надо бы так:


struct MySystem{}
...
impl Logger for MySystem {
    fn info(&self, msg: &str) {
        println!("INFO: {}", msg);
    }
}
...
MySystem.info("Hello");

Заменяем глобальный аллокатор в Rust

Причём оно ещё и не симметрично сделано: struct S можно инициализировать и как S и как S{}, но со struct S{} вариант без скобок работать не будет.

Собственно, в этом и заключается разница. Unit-like структура представляет собой и тип, и значение. Вот такой код:


struct MySystem{}

impl Logger for std::alloc::System {
    fn info(&self, msg: &str) {
        println!("INFO: {}", msg);
    }
}
...
MySystem.info("Hello");

Даст ошибку "expected value, found struct MySystem". И, действительно, value ведь нет, откуда &self возьмется? А если заменить MySystem{} на MySystem; то все заработает.


Впрочем, согласен, у меня "косяк" в том смысле, что в качестве значения по умолчанию можно любую структуру использовать, не только unit-like, подправил, сделал специальную оговорку.

Работа с кучей в Rust

Понятно. Замечу, что в стабильных рамках языка Rust (если к языку не относить макрос std::ptr::addr_of!()) нельзя получить и raw pointer на невыровненные/неинициализированные/ данные.

Работа с кучей в Rust

Выделять типы нулевого размера и пустые типы отдельно от размерных (Sized) некорректно

Замечу, так сделано в документации.


… они так же являются Sized.

Но таки да, это лучше пояснить, поправил.

Работа с кучей в Rust

Дело не в выравнивании

Документация прямо указывает, что "// &packed.f2 would create an unaligned reference, and thus be Undefined Behavior!".


Да и не скомпилируется вот такой пример без allow(unaligned_references):


#[repr(packed)]
struct Packed {
    f1: u8,
    f2: u16,
}

#[allow(unaligned_references)]
fn main(){

    let packed = Packed { f1: 1, f2: 2 };

    // `&packed.f2` would create an unaligned reference, and thus be Undefined Behavior!
    let pf2 = &packed.f2 as *const _ as *const u16;

    unsafe {dbg!(*pf2)};
    dbg!(packed.f1);

}

а правила языка требуют, чтобы ссылки указывали только на инициализированные данные, нарушение это правила — это неопределённое поведение.

Неопределённое поведение в каком сценарии, можно ссылку на документацию? Понятно, что данные без инициализации "читать" не стоит, но ведь "читать" никто не собирается.

Работа с кучей в Rust

А в какой последовательности надо смотреть? Если начинать с этого, то, замечу, мои первые впечатления от Rust бесконечно далеки от показанного. Матан или сопромат, да и просто физ-мат в рамках средней школы на голову сложнее того, что придумано в Rust. Мне ближе такой видеоряд, только титры надо заменить на "Кто писал документацию?!".


Собственно, из-за нее, родимой, и появляются объемистые сторонние обучающие материалы.

Создание произведения и авторские права «путем нажатия кнопки»

Служебное произведение, создано нейронной сетью Сбера:


  • Исключительное право на произведение: принадлежит работодателю, т.е. Сберу
  • Право на вознаграждение за служебное произведение: Сбер обслуживает жизнь нейронки
  • Право авторства и право на имя: нейронная сеть Сбера. Это соблюдается, как видим
  • Право на неприкосновенность произведения и защита произведения от искажений: Ну да, нехорошо менять, извращать и выдавать за свое

Первые два права надо уметь закреплять документально, да и все.

Как я перестал «падать» и «тормозить» и начал жить?

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

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


Только скрипты и стили Disqus на указанном Вами сайте "весят" больше 500 kB.

Согласен, это сильный аргумент. Уже показали статью "Почему я отказался от Disqus и вам тоже пора" :) — Comment на порядок легче.


Чтобы нормально использовать Disqus и не показывать пользователям рекламу, надо платить 11$ в месяц.

Так пилим же бюджет на 200$, пока остается 189$.


У меня ещё счётчики просмотра статьи, рейтинги и много всего другого, что муторно реализовать при помощи "статики".

Понятно. Согласен, не зная всех требований легко попасть пальцем в небо, но вроде как раз и поступило предложение "потыкать" :)

Как я перестал «падать» и «тормозить» и начал жить?

Из динамических вещей нужны, например, комментарии.

Интересно, а https://disqus.com чем не устраивает?


По мне так вот такое более привычно:


чем:


Я, например, не очень люблю, когда просят вводить email.

Информация

В рейтинге
173-й
Откуда
Санкт-Петербург, Санкт-Петербург и область, Россия
Дата рождения
Зарегистрирован
Активность