Как стать автором
Обновить
128
0
Сергей @seriyPS

backend

Отправить сообщение
Можно, наверное, запускать с запасом, а в рантайме менять erlang:system_flag(schedulers_online, N).

нельзя указать на каком пуле ниток запускать этот драйвер

Так там всего один пул. Точнее, пул планировщиков и пул IO и dirty schedulers, но драйверы (если ниче не путаю) всегда на пуле планировщиков исполняются (явно скидывая IO в пул IO). Или что имеется в виду?
Похоже она всё же есть
https://github.com/erlang/otp/blob/maint/erts/emulator/beam/bif.c#L2105

Если покопаться, то видно, что у процесса списывается редукций 4 * количество сообщений в мейлбоксе получателя.
Можно к этому бенчмарку добавить https://habrahabr.ru/post/163979/
В Ubuntu вроде даже по умолчанию Baobab установлен image
Если в твоём языке есть удобный тип данных с поддержкой арифметики, конверсией таймзон, форматированного вывода, то почему нужно его игнорировать?
С unix timestamp быстро надоест «руками» высчитывать сколько это будет «сейчас плюс один год и три месяца».
По ссылке используется GIN индекс для поиска по произвольному регулярному выражению. Индекс делаешь один раз на колонку, а потом можешь по нему любыми регулярками искать.
Пока для хранения и обработки дат можно использовать unix timestamp, лучше использовать unix timestamp.

Сомнительный совет как по мне.
Не советую прокаливать соду в алюминиевой посуде. Может разъесть.
Насчет того, что Erlang «достаточно честно использует память» это совсем неправда. У Erlang довольно сложный многослойный аллокатор памяти, так что фрагментация может съедать до 50%.
Например у меня сейчас запущено приложение, работает около 15 дней, в HTOP отображается 153Мб, изнутри же
1> memory(total).
61631088

Т.е. 56Мб всего «полезной нагрузки». Это всё конечно можно подтюнить, но верным ваше утверждение от этого не станет.
Насчёт строчек странное замечание. Можно и так написать, если сильно захотеть

match File::open(&Path::new("foo.txt")) { Ok(f) => {
        // здесь код, который может работать с файлом с помощью переменной f, к переменной e в этой ветке доступа нет
    } Err(e) => {
        // здесь можно вывести сообщение об ошибке ипользуя переменную e, к переменной f в этой ветке доступа нет
    }
}

Если пробрасывать ошибку на уровень выше, то ещё короче (обычно так и делают)
let file = try!(File::open(&Path::new("foo.txt")));
let line = try!(file.read_line());
Ну и try!() для проброса ошибки наверх.
Зачем их выставлять? Если ping-pong фреймы сервер будет посылать, то соединение может жить сколько угодно.
Как full-time erlang программист, готов утверждать, что нет. Не императивный.
А чем не подходит текущий подход к обработке ошибок? Или вам эксепшены надо?
Специально уточнил про «императивные».

Вы всё-же приведите конкретный пример императивного языка с хорошей, использующейся на практике, поддержкой зелёных тредов. Желательно, умеющих самостоятельно расползаться по ядрам CPU.
Ну вы почитайте ссылку то, там очень подробно расписано почему приняли такое решение. Но в целом меня такое направление движения тоже несколько расстроило. Я надеялся на «Go с нормальной системой типов».

А какие ещё современные императивные языки, кроме Go, имеют хорошую поддержку зелёных потоков?
Были были. Использовали segmentsged stack github.com/aturon/rfcs/blob/remove-runtime/active/0000-remove-runtime.md.

В общем, они решили не делать конкурента Go а сделать конкурента С и С++ — без толстых абстракций и рантайма.

Информация

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