Search
Write a publication
Pull to refresh
19
0
Viacheslav Lotsmanov @unclechu

Haskell enthusiast

Send message

Так запустится ведь! Ведь derivation наследует всё дерево зависимостей, до корня. Если ядро совместимо (а это вероятно так и есть), то запустится. Может вы не совсем понимаете принцип работы Nix? Т.е. вам не обязательно ссылаться даже для отдельной программы на общую базу пакетов, текущей такой-то версии, вы можете на конкретный коммит этой базы сослаться для отдельной программы.


Вот я например так и делаю, только не для программы, а вообще для системы. Лично я просто предпочитаю software-defined снапшот, чем channels, чтобы иметь абсолютную гарантию reproducibility.

Ну да, показатель. Непонятно только чего. Сейчас глянул у нас в папку third_party… 2853 подпапки. И это, в общем, притом что каждую библиотеку нужно отделный approve получать. И да, конечно, не все они в один бинарник линкуются… но вот так. Разница даже не на один порядок, а почти на два.

Вы вероятно говорите о зависимостях второго и более уровня, я же говорю о первом уровне. Т.е. непосредственно используемыми напрямую в вашем конечном коде. Разумеется что зависимостей зависимостей (это не тавтология) сильно больше. Я их не считал, но когда происходит первичная компиляция я вижу там большое длинное полотно.


А что это зависимости первого уровня я не поверю, т.к. ни один человек в здравом уме не сможет работать с 2853 библиотеками в рамках одной кодовой базы.

Вечный рефрен просто не нашлось того, кто написал… так и не найдётся никогда, если вы людей, на это способных будете «в пешее эротическое» посылать.

Я никого и не посылаю. И вообще говорю за себя, за всё коммьюнити говорить не могу. У меня свой взгляд на происходящее, вовсе не факт, что резонирует тесно с коммьюнити. Я говорю прежде всего о том, что люди, которым "плевать" ничего полезного для этого компьюнити и не сделают. А только его испортят (на сколько это возможно вообще в рамках Haskell, т.к. делать плохо на нём не очень удобно, будешь чувствовать себя не в своей тарелке).

А вот в Haskell — сплошной Жванецкий: Подшей, подгони там, воротник переставь, рукава подправь, хлястик передвинь, подкладку укрепи и носи сто лет. Ботинки — подклей, растяни, подбей и носи! Швейная машинка — подольская, новая совсем, ее только подремонтировать — и строчи!

Такого на себе не испытывал. Напротив, впечатление от работы с базой библиотек в целом приятные. А навигация по сигнатуре типа — я даже не знаю как я без этого раньше жил. Воображаю что мне нужна такая-то функция, что у неё был бы такой-то тип, ищу hoogle-ом, и в 90% случаев такая функция уже есть в базе библиотек. Это сильно упрощает жизнь, когда тебе не нужно выдумывать поисковый запрос, описание, рыться по статьям. Просто описываешь сигнатуру типа, как если бы ты писал функцию сам — и вот, нашлось.

А Hackage — это не мусор?

Далеко не в тех масштабах. Даже если пакет заброшен мейнтейнером, он таки может быть полезен и интересен, и как правило, даже если отсутствует в Stackage — вполне себе может быть использован, и при breaking changes даже такие пакеты ломаются не так уж и часто.


А Stackage — это уже фильтр чего-то реально работающего и собирающегося, совместимого с остальными зависимыми пакетами.

А у NixOS? Фигушки. Никак. Да даже под версию вышедшую год назад нет обновления компилятора.

Я так и не понял, почему же не могу?


Вот к примеру в базе пакетов представлены сразу несколько мажорных поколений gcc:


λ nix search 'gcc[0-9]' | grep nixpkgs | grep -v Stdenv
warning: using cached results; pass '-u' to update the cache
* nixpkgs.gcc48 (gcc-wrapper-4.8.5)
* nixpkgs.gcc49 (gcc-wrapper-4.9.4)
* nixpkgs.gcc6 (gcc-wrapper-6.5.0)
* nixpkgs.gcc7 (gcc-wrapper-7.5.0)
* nixpkgs.gcc8 (gcc-wrapper-8.3.0)
* nixpkgs.gcc9 (gcc-wrapper-9.2.0)

В unstable-ветке есть более новые версии.

We implemented our proposed change in Clang and ran it on the Google codebase.

Простите, целиком paper не читал. Но как они запустили это на Google codebase? Это сам гугл запустил? Или таки на каких-то открытых проектах гугла (стало быть не проприетарных)? В обоих случаях получается несостыковка. В случае крупных открытых проектов тут о проприетарном речи и не идёт. А в случае запуском самим гуглом мы говорим об репорте от самого пользователя гугла. Что мешает компании, использующей Haskell сделать совершенно аналогичный репорт для мейнтейнеров, если они в этом заинтересованы?

Это критерий взрослости, как бы.

Взрослость — это осознание и ответственность, а не обязательное подстраивание под формат, диктуемый средой. Взрослость — это сформированность и самостоятельность собственного мнения/мирровозрения.

у которых нет даже банального SDK, позволяющего собрать программу новым компилятором под старую платформу

Ну у NixOS с этим получше, можно сам компилятор достать старой версии при необходимости. Ну т.е. не факт что там есть в базе пакетов совсем старые версии, но сам подход к проблеме иной.

Потому что используют его только люди, которые могут себе позволить писать всё с нуля. Потому что там нет базы.

Ну не знаю, сколько писал сам и по работе, 50 используемых библиотек — это по-моему уже показатель. В рандомном JavaScript в зависимостях первого уровня как правило столько нет. Бывает редко под какую-то специфическую задачу чего-то не хватает, но как правило это незначительно, и можно самом враппер хоть поверх другой команды/программы написать. Но я могу с лёгкостью утверждать что точно такой же экспириенс у меня был с самыми различными языками, включая JavaScript. Т.е. я лично на себе не ощущал какого-то проигрыша по сравнению с другими языками.


Но это может сильно зависеть от предметной области, в которой тот или иной язык активнее применяется.


В том же последнем стабильном снапшоте https://www.stackage.org/lts-15.15 2342 пакета. А на Hackage под 15 тысяч, это по-моему совсем не мало. Только не надо в пример приводить базу npm где всё заполонено "очень взрослым" совершенно лютейшим мусором.

Спасибо за заботу. Если волею судьбы вдруг выбросит за борт — могу пойти обратно писать "взрослый" код на JavaScript, я с ним провёл много лет, чтобы владеть им на достаточном уровне и чтобы меня от него крепко подташнивало. А статьи подобные этой читаю на всякий случай, чтобы чекнуть, что skill is still in tune.


Так или иначе мне падают периодически регулярно вакансии с Haskell/PureScript из разных стран.

Так, а объясните мне как вы делаете реальную оценку в проприетарном коде, когда его никому не показывают? Гадаете на картах?

Так это и есть ваша главная претензия? Ну хорошо, принято. Можно было сразу с этого и начинать.

крупных же проектов, которые реально тяжело переписать с нуля на Haskell, по обсуждавшися уже причинам, не бывает…

Бывает, сам в таком участвовал, но это отдельная история. Беседа себя исчерпала.

Однако у вас есть возможность придти в рандомный проект… а в случае с Haskell — вы, в большинстве случаев, можете только в качестве хобби развлекаться или если начальство «в другую сторону смотрит».

Нет, не (только) хобби, я зарабатываю тем, что пишу Haskell код. В команде хаскелистов.

Так вот подход JavaScript — со всеми его UB у ужасами (странно, что вы вспомнили про мало кому нужную ассоциативность, но забыли про то, что у JavaScript сранения нетранзитивны — что, на практике, куда большая беда)… это язык взрослых, а Haskell… увы, нет.

Мда, мы явно "взрослым" называем разные вещи, если не диаметрально-противоположные. Называть уродство, примитивность и доступность массам "взрослостью" у меня язык не повернётся. "Адаптированностью к реальности" — возможно, но эта адаптированность вовсе не говорит что это что-то хорошее.


А вообще это вы хорошо назвали — "сранения", так надеюсь в стандарте и записано, чтобы лучше отражать суть.

Так вот: детский сад — это такое место, где люди могут заниматься чем угодно (пока воспитательница не видит), а главное — им не нужно зарабатывать на жизнь.

Ну я же зарабатываю, тем что пишу Haskell код. И занимаюсь не чем угодно, а решением бизнес-задач. И моя команда — это очень талантливые люди, каждый из которых — ценный специалист с широким кругозором.

Примерно так дистрибутивы Linux год за годом делают всё возможное и невозможное для того, чтобы пользователи оставались на Windows.

Можно конкретизировать проблему? Может о каком-то конкретном софте речь, но вы говорите именно об Linux, и я полагаю о ядре, где Линус Торвальдс очень трепетно относится за целостность userland api, и не даёт его ломать, даже если он был неправильный.

Ну и, конечно, кто и как оценивал работу по переходу с Monad на MonadFail, как убедились что все проекты уже перешли и всё такое прочее.

Пакеты, которые попали в Stackage снапшот гарантированно совместимы с новой стандартной библиотекой (пакет base). Ну и совместимы с другими зависимыми библиотеками из снапшота. При переезде на новый base в снапшоте все старые пакеты пробуются автоматически на предмет успешного переезда, если они ранее были добавлены в Stackage (что является таким условно одним из знаков качества и production-readyness для библиотеки). Если пакет отказывается собираться в рамках нового снапшота (который изначально выпускается как nightly), то на github-е в соответствующем треде тебе, как мейнтейнеру, отправляют меншн (там вроде и другие каналы коммуникации есть, но я точно не помню), этакий "пинок": "пожалуйста исправь, твоей пакет не собирается".

Я ещё раз обращу Ваше внимание на всякий случай на то, что я и не пытался вам или кому-то в треде навязать Haskell, я его использовал чисто для иллюстрации решения проблемы, которую я описал, насколько это было возможно просто. Я отдаю себе отчёт об интеллектуальном и эстетическом фоне большинства, которые выбирают JavaScript. Я лишь иронично заметил, что этот elvis-оператор — настолько не нов, что с него сыпется пыль, и что это не что иное, как корявое и неповоротливое мимикрирование под монады, от которых это большинство беспочвенно взрдагивает с лёгким ужасом и испариной.

Information

Rating
Does not participate
Registered
Activity