Size: a a a

Scala User Group

2021 March 11

ЮБ

Юрий Богомолов... in Scala User Group
Aleksey Kislitsa
Коллеги, для pet project какой LICENSE лучше использовать? GPLv3?
Я обычно забиваю на это, чай не Торвальдс и не Столманн и даже не Гейтс, но тут написало мне, если собираетесь выложить в паблик, не забудте LICENSE приложить.
Посмотрите на MIT — под ней очень много опенсорса. ZIO под Apache, если нужно, чтобы форки вашего пет-проекта указывали attribution. GPL это очень холиварная лицензия, ИМХО.
источник

v

vaan in Scala User Group
Aleksey Kislitsa
Коллеги, для pet project какой LICENSE лучше использовать? GPLv3?
Я обычно забиваю на это, чай не Торвальдс и не Столманн и даже не Гейтс, но тут написало мне, если собираетесь выложить в паблик, не забудте LICENSE приложить.
Вот тут еще можно посмотреть - https://choosealicense.com/
источник

Oℕ

Oleg ℕizhnik in Scala User Group
Evgenii Kuznetcov
Мне интересно, почему эту фичу не обсуждали. Вроде идея на поверхности.
Может  в ней какие-то фундаментальные проблемы есть.
кажется, обсуждали, и не раз, но там скорее, не проблемы а костыльность вывода типов для яп вроде скалы
источник

EK

Evgenii Kuznetcov in Scala User Group
Oleg ℕizhnik
кажется, обсуждали, и не раз, но там скорее, не проблемы а костыльность вывода типов для яп вроде скалы
А,  окей, не видел. Наверное, утонуло в обсуждении добавления Элвис операторов)
источник

Oℕ

Oleg ℕizhnik in Scala User Group
вывод типов без субтайпинга - это старая и популярная тема, даже для завтипов есть много работ и реализаций, а языки вроде скалы, получается сами себе ресёрч
источник

Oℕ

Oleg ℕizhnik in Scala User Group
Evgenii Kuznetcov
А,  окей, не видел. Наверное, утонуло в обсуждении добавления Элвис операторов)
ещё для второй скалы обсуждали
источник

Oℕ

Oleg ℕizhnik in Scala User Group
я тоже не вижу фундаментальных проблем, судя по рассказам smarter
источник

Oℕ

Oleg ℕizhnik in Scala User Group
у них так же, как в остальных выводах на каждом этапе есть набор зарезолвленных и незарезолвленных параметров типа, и дальше они на основе непонятных эвристик каждый раз думают, форсить им или не форсить
источник

EK

Evgenii Kuznetcov in Scala User Group
Oleg ℕizhnik
я тоже не вижу фундаментальных проблем, судя по рассказам smarter
Я понимаю, что вывод типов это сложно. Но можно добавить синтаксис и реализовать best-effort вывод. Выводить, как раньше и кидать ошибку, если не сошлось с паттерном, - уже неплохо.
источник

ΛВ

Λнтон Войцишевский... in Scala User Group
а вообще если смотреть на это чисто как на прикладную вещь, можно же плагин для компилятора написать, чтобы работал на самой-самой последней стадии где-то, с логикой вроде «если стоит какой-то плейсхолдер вместо тайп-параметра, то используй тут то, что выводится тут»
источник

ΛВ

Λнтон Войцишевский... in Scala User Group
или все не так просто?
источник

ΛВ

Λнтон Войцишевский... in Scala User Group
типа
val eitherFoo: Either[Foo, #] = Left[Foo, String](Foo(…))

компилятор выведет для eitherFoo тип Either[Foo, String], если все, кроме плейсхолдера в явном типе совпадает, то плейсхолдер заменить на  выведенный кусок
источник

Oℕ

Oleg ℕizhnik in Scala User Group
Evgenii Kuznetcov
Я понимаю, что вывод типов это сложно. Но можно добавить синтаксис и реализовать best-effort вывод. Выводить, как раньше и кидать ошибку, если не сошлось с паттерном, - уже неплохо.
ну пока в большинстве практических ситуаций решается подкладыванием тайп-параметров в нужное место, либо там указанием типа аргумента в лямбде

так что специальный синтаксис, чтобы не подкладывать, а задать на уровне результата - чаще, скорее, дело вкуса. Мало того, фактически в субтайпинге и завтипах результат и аргументы не симметричны в правах, для всех, наверное, алгоритмов вывести тип результата, зная типы аргументов проще, чем наоборот. Так что тут такая сложная ситуация
источник

Oℕ

Oleg ℕizhnik in Scala User Group
Λнтон Войцишевский
а вообще если смотреть на это чисто как на прикладную вещь, можно же плагин для компилятора написать, чтобы работал на самой-самой последней стадии где-то, с логикой вроде «если стоит какой-то плейсхолдер вместо тайп-параметра, то используй тут то, что выводится тут»
я не очень понимаю, вывод типов - это часть одной из самых ранних фаз https://typelevel.org/scala/docs/phases.html
источник

Oℕ

Oleg ℕizhnik in Scala User Group
и чтобы работало нужно воткнуть этот плагин перед этой частью
источник

ΛВ

Λнтон Войцишевский... in Scala User Group
Oleg ℕizhnik
я не очень понимаю, вывод типов - это часть одной из самых ранних фаз https://typelevel.org/scala/docs/phases.html
хм, ну тогда можно указание типа с плейсхолдером игнорировать
источник

ΛВ

Λнтон Войцишевский... in Scala User Group
хотя смысл теряется
источник

ΛВ

Λнтон Войцишевский... in Scala User Group
лан, понял, что это сложно
источник

Oℕ

Oleg ℕizhnik in Scala User Group
в скале вывод типов это не просто сложно, это, вообще говоря, опасная операция
типы определяют подбор имплиситов и оверлоадингов, так что изменив механизм вывода типов, можно поменять семантику имеющихся программ
даже если этот алгоритм, скажем, будет работать только если есть сигнатура вроде def foo: F[T, _] = ...
нет никаких гарантий, что если в том же месте обычный алгоритм раньше и так выводил Either[String, Int] новый алгоритм не станет выводить Either[String, String]
или ещё хуже - тот же Either[String, Int], но втыкая другие имплиситы внутри выражения
источник

Oℕ

Oleg ℕizhnik in Scala User Group
собственно,  это к тому, почему некогерентность - это зло, сильнее, чем просто "ой я не могу вызвать .map, когда в скоупе :Applicative: Traverse"
источник