
Aleksey
11.07.2018
10:45:27
Ага, просто в рантайме валилось
npm shrinkwrap тоже придумали просто так, от скуки

shadowjack
11.07.2018
10:46:31
В рантайме тоже не валилось, может библиотеки были слишком мейнстримные

Aleksey
11.07.2018
10:47:43
В хаскеле возни с версиями больше, потому что всё всместа компилится. Или не компилится. В любом случа еошибки получаются до запуска. В дин.тип языках очень часто проблемы всплывают сильно после бампа зависимостей

Google

Yuriy
11.07.2018
10:47:51
ну да, NPE раз в неделю — это не считается

shadowjack
11.07.2018
10:48:12
shrinkwrap нужен в первую очередь для врспроизводимой сборки, чтобы либы регрессий не принесли.

Yuriy
11.07.2018
10:48:56
воспроизводимая сборка => минимизация неожиданных багов

shadowjack
11.07.2018
10:50:27

Aleksey
11.07.2018
10:50:50

Yuriy
11.07.2018
10:51:27
использовать докер — сложнее, чем не использовать докер
использовать что угодно — сложнее, чем не использовать

Aleksey
11.07.2018
10:52:08
shrinkwrap в любом случае предполагает, что программист знает, что с текущим набором версий сборка работает. Что в целом сомнительно в языке без статической проверки типов

shadowjack
11.07.2018
10:52:13
Я вот не знаю как раньше без докера жил

Aleksey
11.07.2018
10:55:02
gradual typing не работает
flow ещё туда-сюда

Google

shadowjack
11.07.2018
10:55:48
Ну нужно делать так, чтобы он был не gradual а total
В новых проектах конечно

Aleksey
11.07.2018
10:56:09
Т.е. все библиотеки были на 100% типизированы?
Зачем тогда писать на JS/TS?

shadowjack
11.07.2018
10:56:48
Ну фронт например

Aleksey
11.07.2018
10:57:07
React полностью статически проверен и типизирован?

shadowjack
11.07.2018
10:57:56
По крайней мере внешний api типизирован

Aleksey
11.07.2018
10:58:29
Вот поэтому gradual typing и не работает - типы ка будто есть, но падает всё в рантайме
Опциональные типы делают язык лучше (чуть-чуть). Но не делают хорошим
Кароч, оффтоп.

shadowjack
11.07.2018
11:00:08
Да

Aleksey
11.07.2018
11:00:10
Или в blah продолжаем, или соглашаемся, что JS - плохой, негодный язык :)

shadowjack
11.07.2018
11:00:50
Лучше руби всяко

A64m
11.07.2018
11:00:51
не надо отвлекаться от стек вс кабал

shadowjack
11.07.2018
11:01:30
Hackage vs stackage?

Piu
11.07.2018
11:02:18
начинали с stack vs cabal а в итоге js плохой
лол

shadowjack
11.07.2018
11:03:20
Ну вот я не в восторге ни от stack, ни от cabal

A64m
11.07.2018
11:03:34
хотя мне в принципе нравятся плоды того что хекедж стал курируемым, мне не нравится, что он стал таким, и первоначальный план для кабала, который подразумевал что тот начнет работать лучше с некурируемой помойкой в основном заброшен

Leonid
11.07.2018
11:04:00

Google

shadowjack
11.07.2018
11:04:42

A64m
11.07.2018
11:04:45
да потому что началось это обычное, а посмотрите как в жс плохо. это как если бы стоматолог вместо обезбаливания говорил "а представь как страдает программист на си++", спасибо доктор, стало намного легче

Leonid
11.07.2018
11:05:11

shadowjack
11.07.2018
11:05:34
Просто работает
С некурируемой помойкой

A64m
11.07.2018
11:06:28
для плюсовика эта информация может быть ценной, что где-то там лучше. но если ты и так не пишешь на си++, а на хаскеле, каком смысл мне знать где хуже? интереснее где лучше

Leonid
11.07.2018
11:06:34
Ага, потому что ошибки в рантайме всплывают

shadowjack
11.07.2018
11:07:41

Александр
11.07.2018
11:08:25

A64m
11.07.2018
11:09:03
причем даже если нигде не лучше, от этого все равно не легче

Daniel
11.07.2018
11:09:37
самое банальное что может быть лучше - поддержка плагинов, чтобы решать проблемы с нехваткой функциональности

Leonid
11.07.2018
11:09:40

A64m
11.07.2018
11:09:48
если ощущается и осознается какая-то проблема, надо как-то ее решать безотносительно того, решил ее уже кто-то или нет
кстати, почему в хекедж матрикс билдер до сих пор 8.4 нету?


Fedor
11.07.2018
11:37:06
кстати, почему в хекедж матрикс билдер до сих пор 8.4 нету?
В питоне есть пакетный менеджер conda, он в основном было сначала для бинарных зависимостей, там были каналы (ака репозитории) только из коробки... Но потом в ней появились кастомные каналы и нормальные курируемые пакеты и все стали счастливы, а pip в ней используется как бекэнд (прямо как кое-что другое).
npm shrinkwrap не работает, потому что нельзя обновить зависимость с критической уязвимостью, да и вообще npm перезаписывает package.lock при установке, например. Поэтому в yarn сделали resolutions. npm в бэкенде.
короче вся эта конфигурационная байда придумана не на пустом месте и это только к лучшему, что она развивается.
Лично мне гораздо больше нравится подход, когда есть и низкоуревневая ("cabal", "pip", "npm"), так и высокоуровневая система пакетов, вплоть до докера и далее.
Думаю, что stack.yaml может быть непонятен только из-за исторических причин, когда всё объясняется через команды cabal. Я зеленый, поэтому не встречал package.yml, но это не должно мешать новичку смотреть хотя бы в первую страницу документации.
сорян, случайно референснул сообщение :(


Yuriy
11.07.2018
12:25:19
преттипринтеры Мэйнланда и Вадлера—Лейена писаны независимо?
наблюдаю идентичный баг в обоих, но уже сомневаюсь, что это действительно баг


Aleksey
11.07.2018
12:30:08
В питоне есть пакетный менеджер conda, он в основном было сначала для бинарных зависимостей, там были каналы (ака репозитории) только из коробки... Но потом в ней появились кастомные каналы и нормальные курируемые пакеты и все стали счастливы, а pip в ней используется как бекэнд (прямо как кое-что другое).
npm shrinkwrap не работает, потому что нельзя обновить зависимость с критической уязвимостью, да и вообще npm перезаписывает package.lock при установке, например. Поэтому в yarn сделали resolutions. npm в бэкенде.
короче вся эта конфигурационная байда придумана не на пустом месте и это только к лучшему, что она развивается.
Лично мне гораздо больше нравится подход, когда есть и низкоуревневая ("cabal", "pip", "npm"), так и высокоуровневая система пакетов, вплоть до докера и далее.
Думаю, что stack.yaml может быть непонятен только из-за исторических причин, когда всё объясняется через команды cabal. Я зеленый, поэтому не встречал package.yml, но это не должно мешать новичку смотреть хотя бы в первую страницу документации.
package.yaml (hpack) сам по себе довольно удобен. Проблемы вызывает включение оного по умолчанию в умолчательном же шаблоне для stack-проектов.
Пришлось даже викифицировать назначение "всех этих разных файлов" :)

Google

Антон
11.07.2018
12:50:01


Dmitry
11.07.2018
12:50:32
Выскажу не самое популярное мнение, но мне сильно не нравится hpack. Как по мне, он даёт не так много преимуществ, но поддержка со стороны тулинга и дружелюбность экосистемы уменьшается. А точнее по пунктам:
1. Многим нравится поле общих зависимостей (и не только) в hpack, но в cabal-2.2. это уже впилено, и там можно указать в общей станзе любой кусок станзы.
2. Автоматический поиск модуля: добавить модуль — одна строка. Это не так часто происходит, чтобы было слишком неудобно. К тому же, когда есть модули, которые генерируются пакетами вроде proto-lens, то их всё равно надо добавлять в package.yaml явно, без этого не работает, поэтому проблема всё равно полностью не решается.
3. YAML. Я сам лично не люблю этот формат, мне в нём много не нравится. Например, там были проблемы с парсингом версий, когда они у пакетов похожи на число. В одном multi-package проекте мы использовали hpack, и там дублицирование кода уменьшилось благодаря алиасам в yaml. Но полностью дублирование убрать не удалось, потому что yaml не поддерживает конкатенацию списков. Поэтому общие куски зависимостей между пакетами всё равно нельзя вынести в отдельный файл :( Если уж хочется полноценную и программируемую конфигурацию, тогда лучше использовать dhall.
4. Генерация .cabal файла с новым хешом каждый раз. Если над проектом работает несколько людей, то у них постоянно будут конфликты в этом .cabal файле, если он есть на GitHub. А если его нет на GitHub, то людям, у которых не стоит hpack, будет трудней сбилдить проект, надо прилагать больше усилий, чтобы этот cabal файл сгенерить. Да, stack работает, но вокруг одного stack мир не вертится.
То есть как по мне, преимущества довольно сомнительные, но есть недостатки, создаётся раскол в сообществе, ухудшается и без того не самый хороший тулинг. Уж лучше все силы, что были потрачены на создание hpack ушли бы в cabal — добавить в exposed-modules какое-нибудь поле типа automatic, и весь hpack был бы не нужен.


Aleksey
11.07.2018
12:51:11
Wiki.haskell.org?
https://github.com/ruHaskell/ruhaskell/wiki/%D0%A4%D0%B0%D0%B9%D0%BB%D1%8B-%D0%BA%D0%BE%D0%BD%D1%84%D0%B8%D0%B3%D1%83%D1%80%D0%B0%D1%86%D0%B8%D0%B8-stack-%D0%BF%D1%80%D0%BE%D0%B5%D0%BA%D1%82%D0%BE%D0%B2

Антон
11.07.2018
12:51:25

A64m
11.07.2018
12:52:22
не сказал бы, что это непопулярное мнение
вроде такое мнение как раз самое популярное и есть

Антон
11.07.2018
12:53:16
Хоспади, почему у такого, в общем-то, хорошего языка такая жуткая ситуация с тулингом?

Aleksey
11.07.2018
12:53:18
У hpack более разумные умолчания.
dependencies:
- base
executable:
main: Main.hs
минимальный package.yaml
Что там у кабала?

Dmitry
11.07.2018
12:55:39

Admin
ERROR: S client not available

Aleksey
11.07.2018
12:56:32
Хочу дописывать по мере необходимости, а не замыливать глаза избыточным конфигом, кочующим из проекта в проект
Чем меньше рутинных кусков конфига, тем проще его читать.

Index
11.07.2018
12:59:45
мне нравится идея минималистичных файлов, я считаю, что редактирование чего-либо автосгенерированного от сатаны
т.е. если автосгенерил, то оставь и не трогай
либо нужная какая-то супер-хитрая patch theory, чтобы изменения в файле можно было ребейзать на результаты перегенерации с другими опциями

shadowjack
11.07.2018
13:00:33

Yuriy
11.07.2018
13:01:01

Index
11.07.2018
13:01:31
ну так это о чем я говорю, не нравится
вот человеческий мозг генерирует какие-то строчки и мы их кладем в файлы, это поэтому назвываются ИСХОДНЫЕ файлы
если что-то потрогал компьютер, это уже не исходные, а сгенерированные файлы

Google

Index
11.07.2018
13:02:41
нужда так делать - индикатор плохого формата для исходных файлов

Yuriy
11.07.2018
13:02:48
скаффолдинг решает проблему не избыточности, а порога входа

Index
11.07.2018
13:03:04
просто пустой файл должен быть валидной конфигурацией

Yuriy
11.07.2018
13:03:18

A64m
11.07.2018
13:04:31
да, кабал плохой формат, ну так и хпак плохой, нормальных улучшений нет, а боли от двух форматов и еще и генерации файлов есть
даже адище вроде никса и дхола и то лучше, это хоть какие-никакие но языки программирования

Aleksey
11.07.2018
13:10:19
Сорец на хаскеле а ля конфиг XMonad бы кто запилил :) Шоб со статической проверкой, комплитом в редакторе на основе типиков

A64m
11.07.2018
13:11:40
язык общего назначения для конфигурации тоже ничего хорошего (но все равно лучше чем кабал и хпак)

Aleksey
11.07.2018
13:12:47
есть уже один необщего - Nix
Вон в кложурке проект описывается в виде EDN-словарика. Мне нравится

A64m
11.07.2018
13:13:28
я про него высказался уже, он именно как язык плохой
но нормальное описание пакета это не словарик, это функция

Alister
11.07.2018
13:15:13
Makefile?

A64m
11.07.2018
13:15:27
нет

Aleksey
11.07.2018
13:15:35

A64m
11.07.2018
13:15:45
из пакетов в пакеты
да, фвп в общем случае
из "модулей" в "модули"

Aleksey
11.07.2018
13:17:12
"сложна"(с)
или я не слишком понимаю идею

A64m
11.07.2018
13:25:53
helloWorld :: (Has Prelude p, Has TypeApplications c => p -> c -> Obj
helloWorld p c = c $ main p
main Prelude{..} = { main = print @Int 42 }

Fedor
11.07.2018
13:26:02
хз офтоп или нет, но jetbrains mps никто не трогал?

Евгений
11.07.2018
13:27:12
В книжке харпера норм про модули написано