Обновить
4
@Alex_MEread⁠-⁠only

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

7
Подписчики
Отправить сообщение

Упомянутый Termux — сам по себе неплохой "линукс". Есть ряд базовых утилит, а также даже свой пакетный менеджер, позволяющий много чего установить дополнительно.

AMD предлагает 64 ядра в полтора раза более дешевом чипе с тем же TDP. И тем не менее intel продает больше чипов.

Может, еще дело в софте? Intel Compiler, VTune, всякие Threading Building Blocks, оптимизированные MPI и так далее.

А ещё Clear Linux. Но зачем? Ресурсов стало опять слишком много, надо бы ещё один уровень абстракции навернуть, чтоб софт как тормозил, продолжал тормозить?

Эх, что-то меня это будущее не радует.

Я как-то на сайте аудиофилоф наткнулся то ли на DIY ЦАП, то ли на усилитель, в описании которого был отслушанный припой, собранный из каких-то старых приборов 19хх года.

Да, спасибо. Я уже догадался, что я совершенно забыл про все эти функции, о чем я написал выше.

Я хотел просто пропустить те файлы, которые почему-то Err(), а не выходить из функции по первой ошибке.

PS. А почему я не использовал map() и bind()? Зациклился, блин, на операторе ?...

0xd34df00d проживает в США, если память не изменяет.

Тот же раст — весь полон монад (Result, Some, Either, etc), но слово "монада" нигде не встречается. Вместо этого дают приятный сахар (с глубокими архитектурными последствиями) и массу гарантий качества. (тот же ?, который позволяет писать почти-что-bind не ломая мозг).

И это очень грустно, ведь раст полон копипасты, условно, map для Option, map для Iterator и так далее. При этом, в некоторых "монадах" одни возможности появляются раньше, чем в других. А для некоторых (async/await) требуется поддержка компилятора, так что даже библиотекой не исправишь. И все это мешает писать по-настоящему обобщенный и абстрактный код, как в хаскеле.


Я сегодня писал около-хеллоуворлд на расте, и столкнулся с неудобством обработки Result даже с "?". Хотел пройти по директории и напечатать содержимое. (См. read_dir).


fn print_entry(entry: Result<DirEntry>) -> Result<()> {
    let path = entry?.path();
    let path = path.to_str().or_not(Error::new(/*skip*/))?;
println!("{}", path);
}
fn main() -> Result<()> {
    for entry in read_dir(Path::new("/")) {
        let _ = print_entry(entry):
    }
}

Чтоб скипать итерацию цикла с ошибкой при помощи оператора ?, пришлось внести кусок в отдельную функцию (ладно, это нормально), результат которой игнорируется (выгдядит как костыль). А чтоб использовать? для Option, а на для Result, пришлось None в Err превращать.


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

Я не DBA, но мне казалось, что и без знаний реляционной алгебры и всех определений из нее можно пользовался реляционными БД. Можно даже знать и применять нормальные формы на уровне эмпирических правил.

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


Тут очень хорошо написано, на мой взгляд: монады как паттерн переиспользования кода

Можете привести пример исключений из красивых концепций? Мне кажется, что, примером исключений из концепций является C++, который (по моему скромному опыту, я больше по Си) состоит из исключений и замороченного поведения чуть менее, чем полностью. (Например, я все еще немного вздрагиваю, когда надо возвращать что-то из функции. Ну да, guaranteed copy elision, но похоже на магию).

Попробую высказать критику на критику и дополнения. Я соглашусь с вами в двух пунтках:


  • Rust еще слишком молод. Думаю, следствием этого являются пункты "Набор инструментов", "Интеграция", "Производительность" и "Unsafe". Есть основания полагать, что со временем будет происходит улучшение в этом плане. Ошибки есть и в GCC (сам видел).
  • Rust сложен и имеет более крутую кривую входа

Я бы еще добавил, что проблема в том, что Rust позиционируется как более безопасный язык, чем Си, но компилятор он слишком неформализован и активно развивается, чтобы быть сертифицированным для применения в каких-то реально safety-critical задачах, где, к примеру, сертифицирован лишь какой-нибудь IAR.


Еще из недостатков (как следствие молодости) добавлю малое количество библиотек. На С++, не говоря уже о С, больше. Захотел я GUI писать и приуныл. Пока что самая зрелая — веб-гуи на WASM, yew.


Не всё программирование является системным

Не соглашусь. Rust дает преимущества и не в системном программировании, не за счет модели работы с памятью, а за счет своей системы типов (ADT, pattern matching и все такое). Например, подход Option вместо исключений может сделать более понятным (по сигнатуре видно) и безопасным. Но проблема в том, что как, уже сказано, Rust имеет сложности, и все равно придется думать о владении, памяти, лайфтаймах и всяких Rc<RefCell>

А ещё есть Kenshi, практически полностью подходит под описание.

git консольный + gitk для графического дерева коммитов (но можно и в консоли тоже) + meld для диффов/мерджей.

Можно ли считать лисп ФП?

Хм, может какой-нибудь ПИД-регулятор?

По какому критерию отбирали? Почему нет C# и Java, если уж есть питон, которому тоже нужен рантайм? Или даже Ruby? Или JS?

Выглядит как типичная задача ТАУ.

Информация

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