Pull to refresh
20
3.4

Register-based calling convention, GO?

Остаётся вопрос - а почему сразу так не сделали?

PostgreSQL под капотом. Часть 1. Цикл сервера

select - это не просто функция. Это системный вызов Linux, и на Windows должно происходить что-то другое.

Кроме того, это устаревший системный вызов, странно что он используется.

Как мы придумали и запустили совместные поездки в Яндекс Go

А почему никто никогда не упоминает, что такой тариф был короткое время года 3-4 назад для поездок из аэропорта Домодедово?

Mojo: Python-совместимый язык с производительностью Си — от Криса Лэттнера

Получается, если вы завели вектор интов, использовать цикл вроде for elem in vec:

Будет нежелательно?

Mojo: Python-совместимый язык с производительностью Си — от Криса Лэттнера

При этом Type Specialisation вы должны сами написать вариант вашего класса для примитивного типа, или компилятор сможет сам?

Mojo: Python-совместимый язык с производительностью Си — от Криса Лэттнера

А почему они тогда не добавили int, который всегда примитивный?

Разбираемся с использованием неблокируещего ввода-вывода в ОС Linux. Пишем пример сервера на голых системных вызовах

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

Разбираемся с использованием неблокируещего ввода-вывода в ОС Linux. Пишем пример сервера на голых системных вызовах

Потому что процессу в принципе не получится открыть больше чем RLIMIT_NOFILE дескрипторов

Разбираемся с использованием неблокируещего ввода-вывода в ОС Linux. Пишем пример сервера на голых системных вызовах

Мне кажется, что с асинхронным вводом-выводом код чего либо сложнее такого echo сервера будет нечитаем.

Разбираемся с использованием неблокируещего ввода-вывода в ОС Linux. Пишем пример сервера на голых системных вызовах

int client_fd = accept4(socket_fd, nullptr, nullptr, SOCK_NONBLOCK);

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

poll используется не для одного fd. Он используется для fd, на котором сервер принимает новые соединения и на fd клиентов. Но если клиентов нет, то да, fd будет один.

Разбираемся с использованием неблокируещего ввода-вывода в ОС Linux. Пишем пример сервера на голых системных вызовах

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

О разнице между лямбдами и обычными функциями и о имплементации лямбд в некторых языках программирования

Я немного подумал, и у меня получился такой код, довольно тривиальный (не хватает конструкторов, но в общем оно работает):

код
template<typename RType, typename... Args>
class IFuncHolder {
public:
    virtual RType operator()(Args ...args) = 0;

    virtual ~IFuncHolder() = default;
};

template<typename RType, typename Callable, typename... Args>
class FuncHolderImpl : public IFuncHolder<RType, Args...> {
public:
    FuncHolderImpl(Callable&& callable) : callable(callable) {}

    ~FuncHolderImpl() {
    }

    RType operator()(Args ...args) override {
        return callable(args...);
    }

private:
    Callable callable;
};

template<typename Signature>
class my_function;

template<typename RType, typename... Args>
class my_function<RType(Args...)>
{
public:
    template<typename Callable>
    my_function(Callable&& f) {
        func = new FuncHolderImpl<RType, Callable, Args...>(std::forward<Callable>(f));
    }

    ~my_function() {
        delete func;
    }

    RType operator()(Args ...args) {
        return func->operator()(args...);
    }

private:
    IFuncHolder<RType, Args...> *func;

};

void for_each(const vector<int> &vec, my_function<void(int)> func) {
    for (const auto &elem: vec) {
        func(elem);
    }
}

Но в STL написан код без чего-либо виртуального, поэтому непонятно - там написано что-то принципиально другое или примерно то же.

О разнице между лямбдами и обычными функциями и о имплементации лямбд в некторых языках программирования

Ну если знаете, то расскажите, если не трудно. Не какой у него интерфейс, а как он внутри сохраняет функцию и как вызывает её

О разнице между лямбдами и обычными функциями и о имплементации лямбд в некторых языках программирования

Скажу, что функция example принимает threshold на регистре %rdx; выделяет память на куче размером с то, что захватывает лямбда функция, копирует туда этот threshold, после чего передаёт в for_each на регистрах ваш массив, его размер, указатель на эту структуру с захваченным и указатель на код лямбда функции.

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

По сути, это подход с виртуальными классами, только указатель на код функции кладётся не в структуру с захваченными переменными, а отдельно.

On the difference between regular functions and Lambdas

What I meant is that lambda function that captures something from the outside, can`t be compiled to a function, because in terms of the language, as you said, it is an object that own other objects.

As for the struct, I feel like this is more of an imaginary construct - you won`t see the compiler generate a constructor or a destructor for it or really pass it to another function - as it seems to always inline it.

Как снимали первую Матрицу и в чём её феномен

Мне фильм каким-то скучным показался. Вроде завязка интересная, а потом всё скатывается в сплошные бои.

Индексы в PostgreSQL — 4

А у меня что-то получается, что при удалении строк страницы индекса не освобождаются.

Я создал таблицу, у которой единственный индекс - primary key (id). Вставил туда элементов, потом много раз сделал так: вставляю 10000 новых строк, потом удаляю 10000 строк с минимальными id. Размер индекса всё это время рос.

Потом я удалил всё из таблицы, запустил vacuum - индекс не уменьшился.

Потом для верности ещё сделал "vacuum (index_cleanup ON) ids;" - то же самое

Возможно, страницы индекса удаляются, когда они находятся в конце файла, а тут они в начале получаются?

Information

Rating
786-th
Registered
Activity