Как стать автором
Обновить
89
-1

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

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

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


Сибираюсь "черкнуть" пару статей про обобщенные типы в Go, там этот вопрос будет рассматриваться.

Добавил разделители для удобства. Хотя это уже "подделка данных".

окно, партиция != фрейм окна (опять же правильно ли называть партицию окном — извечный вопрос определения, переведенного с иностранного языка)

Интересно, а почему не использовать терминологию Microsoft?


  • Окно
  • Рамка окна
  • Секция
  • Секционирование?

Очень интересно! А каков профиль нагрузки в плане соотношения чтение/запись и сколько/какого "железа" под эту нагрузку выделено?

6081 RPS (операций в секунду).
которые суммарно были оснащены 636 процессорными ядрами

Выходит, 10 операций в секунду на ядро?

2-2,5 млн транзакций в секунду

А можно подробнее про эти транзакции? Это транзакции на запись или запросы только на чтение тоже включены сюда? Если это все вместе, каково примерно соотношение записи и чтения?

Пример с деструктурирующим присваиванием я бы переписал в таком песочницо-компилируемом виде:


fn main() {

    let (a, b, c, d, e);

    (a, b) = (1, 2);
    [c, .., d, _] = [1, 2, 3, 4, 5];

    struct EF {
        e: i32,
        #[allow(unused)]        
        f: i32,
    }

    EF { e, .. } = EF { e: 5, f: 3 };

    assert_eq!([1, 2, 1, 4, 5], [a, b, c, d, e]);
}
(подсказка, мы теперь проверены).

Не уловил, что изменилось — было два смежных ДЦ, оба загорелись, а теперь ситуация какова?

Дом далеко, но он сам по себе большой — больше человека, а значит и Луна большая.

Как быть с тем, что на море эта иллюзия наблюдается тоже, хотя домов в поле зрения нет?


D' < D

Не понял, почему наблюдатель для угла D находится ближе к Солнцу, чем для D'?

Все правильно, все справедливо. Список односвязный, как и показано на первой картинке.


В C++ можно передать кастомный аллокатор, если нет желания использовать дефолтный.

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


Вместо этой строки должен быть растовый аналог std::aligned_storageT, а в методе push — perfect forwarding аргументов.

Пробросить параметры конструктора и собрать объект по нужному месту — нет, так нельзя. Даже в кучу поместить, гарантированно минуя стек, можно только в "ночной версии". В ряде случаев компилятор соптимизирует Box::new::(), конечно.


Собственно, как я говорил, если рассматривать Rust как "замену", то это скорее "замена" языка C, чем C++.

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

Можно более подробно про условия задачи? Также не очень понятны требования:


  • Notification Service is ext
  • Do not loose data
Просто не очень понятно с чего вы решили что можно просто скопировать код из STD и он заработает.

Я разве написал, что он должен заработать? В цитате этого нет. В цитате есть "Попробуем".


Мы там увидем примерно такое:
public readonly struct Int32
{
private readonly Int32 m_value;
...
}

Тут странно. Я вижу такое:


public readonly struct Int32
{
  private readonly int m_value;
}

И это работает, по крайней мере, тут.

Я лично уже запутался, какие у вас претензии к тому, что box не работает в пользовательсокм коде в стабильной версии Rust?

Давайте так поступим — процитируйте какое-либо мое утверждение из статьи и далее я поясню его, если это нужно.

Это хороший подход — договориться про определения.


Нестабильный код (или unstable feature) требует особой версии компилятора — альфа, ночная и прочая. Стабильной версией (release, production) нестабильный код компилироваться не должен. Вкратце эти тезисы излагал тут.

Такого нет, конечно — в плюсах отсутсвует явный механизм индикации нестабильности чего-то и явное разделение на стабильный-ночной версии компилятора. Только нестабильные штуки из реализации std от этого не пропадают,

Вообще, это означает, что "нестабильных штук" там нет, т.е. можно взять компилятор и скомпилировать к нему библиотеку.


Есть "нестандартные штуки", т.е. другим компилятором эта библиотека может не скопилироваться.

а разве нет?

typedef signed int __int32_t;? — Нет.


ну хорошо, вот прям ссылка на то как GCC реализация stdc++ использует кучу builtin штук компилятора

Это все компилируется стабильным компилятором
https://godbolt.org/z/8qEezhbch


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

Выше пример не такой был

Это разве был интересующий пример нестабильного C++ в стандартной библиотеке C++?


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

Чем же лучше версия на Rust:


type Int32T = isize;

?

Вот, например, если я знаю, что последний элемент типа T это массив, то могу ли я добавить в malloc некоторое количество элементов для него?

Можно глянуть на код для С?


Мощь Rust я понимаю больше как гарантию отсутствия race conditions в сложном многопоточном коде.

Что насчет автоматического освобождения ресурсов, обобщенных типов, контроля за явной инициализацией всех полей структур, решения проблемы висячих ссылок? Еще есть такая приятная мелочь как "каждое значение имеет одного и только одного владельца-переменную".


КМК и вне рамок многопоточности тут много "плюшек".

На какой-то платформе соберется и будет нормально работать, на какой-то взорвется нафиг.

Вот это взорвется? https://www.onlinegdb.com/vmdoJZFgL


Поясните, из-за чего?


Мы ж про плюсы говорим

Вообще меня интересовали примеры нестабильного C++ в стандартной библиотеке C++.


Пока рассматриваем стабильный из С.

Пример по ссылке компилируется.


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

Информация

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