Можно, наверное, запускать с запасом, а в рантайме менять erlang:system_flag(schedulers_online, N).
нельзя указать на каком пуле ниток запускать этот драйвер
Так там всего один пул. Точнее, пул планировщиков и пул IO и dirty schedulers, но драйверы (если ниче не путаю) всегда на пуле планировщиков исполняются (явно скидывая IO в пул IO). Или что имеется в виду?
Если в твоём языке есть удобный тип данных с поддержкой арифметики, конверсией таймзон, форматированного вывода, то почему нужно его игнорировать?
С unix timestamp быстро надоест «руками» высчитывать сколько это будет «сейчас плюс один год и три месяца».
По ссылке используется GIN индекс для поиска по произвольному регулярному выражению. Индекс делаешь один раз на колонку, а потом можешь по нему любыми регулярками искать.
Насчет того, что 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());
Вы всё-же приведите конкретный пример императивного языка с хорошей, использующейся на практике, поддержкой зелёных тредов. Желательно, умеющих самостоятельно расползаться по ядрам CPU.
Ну вы почитайте ссылку то, там очень подробно расписано почему приняли такое решение. Но в целом меня такое направление движения тоже несколько расстроило. Я надеялся на «Go с нормальной системой типов».
А какие ещё современные императивные языки, кроме Go, имеют хорошую поддержку зелёных потоков?
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 * количество сообщений в мейлбоксе получателя
.С unix timestamp быстро надоест «руками» высчитывать сколько это будет «сейчас плюс один год и три месяца».
Сомнительный совет как по мне.
Например у меня сейчас запущено приложение, работает около 15 дней, в HTOP отображается 153Мб, изнутри же
Т.е. 56Мб всего «полезной нагрузки». Это всё конечно можно подтюнить, но верным ваше утверждение от этого не станет.
Если пробрасывать ошибку на уровень выше, то ещё короче (обычно так и делают)
try!()
для проброса ошибки наверх.Вы всё-же приведите конкретный пример императивного языка с хорошей, использующейся на практике, поддержкой зелёных тредов. Желательно, умеющих самостоятельно расползаться по ядрам CPU.
А какие ещё современные императивные языки, кроме Go, имеют хорошую поддержку зелёных потоков?
В общем, они решили не делать конкурента Go а сделать конкурента С и С++ — без толстых абстракций и рантайма.