Когда я делаю новый проект. Скажем, веб-приложение, использующее Snap. Я генерирую скелет с помощью snap init barebones
, создаю новую песочницу и затем устанавливаю зависимости.
Это занимает вечность. Шутки в сторону. Если вы когда-либо работали практически с любым другим веб-фреймворком (например, node.js с экспрессом), процесс почти идентичен, но занимает немного времени. Я знаю, что большинство зависимостей узлов не требуют какой-либо компиляции, но мне кажется очень странным, что это не считается более серьезной проблемой. Например, я никогда не смогу запустить приложение Yesod на своем дешевом VPS, потому что VPS недостаточно мощный для его компиляции, и я не могу загрузить 500 МБ предварительно скомпилированных библиотек.
Вопрос в том, почему в репозитории не размещаются бинарные файлы, а не просто код? .NET также скомпилирован (в байт-код), но я могу использовать его библиотеки DLL без необходимости перекомпиляции.
Конечно, у хостинга бинарных файлов есть недостатки, например, требуется больше места для хранения, несколько бинарных файлов на библиотеку для нескольких ОС... Но все проблемы кажутся незначительными по сравнению с огромными преимуществами, которые вы получаете, такими как
- Больше никаких ошибок компиляции
- Более быстрая настройка для новых проектов
- Требуется значительно меньше памяти
- Знание того, что библиотека не поддерживает вашу ОС, ДО того, как вы это узнаете сами
Мне трудно понять, почему вообще существует ад клики. Если бы все библиотеки были доступны для динамической компоновки, разве необходимости в перекомпиляции просто не существовало бы?
В настоящее время нужно очень стараться придерживаться Haskell в этом отношении. Похоже, система наказывает меня за то, что я что-то пробую. Если я хочу добавить новую библиотеку в свой проект, я должен быть уверен, что готов ждать 15-45 (!!!) минут, пока она скомпилируется. Не говоря уже о том, что библиотека не компилируется чаще, чем мне удобно. Только после того, как я переживу этот процесс, я действительно смогу понять, является ли эта библиотека тем, что я хочу использовать, и совместима ли она с остальной частью моего проекта.