и достаёт какие-то данные, хранит их в БД. Также надо прикрутить веб-интерфейс, у которого несколько функций:
1. Визуализация полученных данных;
2. Отдача распоряжений обращаться к API и получать какие-то данные.
В случае возникновения ошибок (с API или с моей программой) оповещать по почте.
Я подбираю язык программирования. В моём wish list был Rust и Haskell. Я чуть больше, чем новичок в обоих этих языках (проблема в том, что часто "переключаюсь" между ними), поэтому хотел бы узнать, правильно ли я выбираю ЯП для того, чтобы решить задачу.
Тут не требуется высокая производительность (лишь из-за того, что API сильно ограничивает в количестве запросов, которые можно выполнить за определённый период), но нужна асинхронность. Важный пункт -- надёжность: программа не должна падать, даже если будут проблемы с доступностью API, также сама программа должна содержать минимум багов, чтобы их потом не приходилось отлавливать.
Так вот Haskell для этого отличный кандидат, мне нравится этот язык, он изящен.
Все требования соблюдены: асинхронность, высокая надёжность, есть библиотеки, позволяющие совершать запросы в сеть, отправлять письма по почте, делать веб-приложения...
И на Rust то же самое, однако, чтобы там написать подобную программу, придётся затратить больше сил (из-за ручного управления памятью), но зато программа будет потреблять меньше памяти (спорно, но это исходит из того, что нет GC) и будет без GC.
Так вот вопросы: верны ли мои рассуждения и занимаюсь ли я premature optimization? Ну и как мне перестать выбирать язык (вернее, перестать переключаться между ними: начинать писать код, через время бросать, брать другой язык), наконец-то начать решать задачу и изучать Haskell?
Мое мнение: premature optimization.
я вот прямо сейчас подобную задачу на Хаскеле решаю. но это не потому что он лучше всех языков подходит, а лучше всех знакомых мне языков
Кстати плюс, лучший язык - язык который ты знаешь лучше остальных
На хаскелле есть мощное подспорье в виде servant, который позволяет описать API в виде типа и импортировать его в сервер (и клиент, если зачем-то понадобился, он вообще на стороне servant-а полностью делается одним вызовом client).
Язык, в котором я лучше всего разбираюсь, — Python. Однако, он мне не подходит из-за того, что риск не увидеть баг очень большой. Для маленьких скриптов — отличный язык, но если проект разрастается, то всё сложнее и сложнее становится...
Servant (хаскелльная либа для бэкенда) очень прикольный - выражает REST API через систему типов (плюс бесплатно даёт многопотоки), а вызов чужого апи возвращает тип-сумму, так что борьбы с исключениями и падениями почти не будеь. SQL тоже в Хаскелле довольно удобный, есть hasql-th с проверкой синтаксиса и типов запросов postgres на этапе компиляции, например. Раст я не пробовал, но про Хаскелль точно можно сказать что подходит, и даёт интересный опыт.
В rust нет нормальной поддержки для higher kinded data, а в вебе полно задач, которые ложатся на переиспользование hkd. Я бы только из-за этого предпочел хаскель расту
вот у меня такая же мотивация
Только тесты могут помочь, на большом проекте (а язык, особо ни от чего не спасет :)
Ну это не так конечно
Если юнит-тесты многословны, тогда это признак того, что где-то у нас протекли абстракции
Обсуждают сегодня