Size: a a a

2020 December 21

ND

Nikita Domnickij in Lisp Forever
я бы предпочёл что-то вроде контрактов из рэкета
источник

VL

Valeriy L in Lisp Forever
Dmitry Plesovskykh
че-то слишком абстрактно для меня звучит
Ну например, ты хочешь контракт на строку у которой префикс - три пробела.

Ты делаешь тип MyString и у него в конструкторе чекаешь этот контракт. А в определениях функций юзаешь MyString вместо String
источник

DP

Dmitry Plesovskykh in Lisp Forever
Valeriy L
Кроме репла есть еще минусы?
у статики по большому счету минус не так много, но все они критичные - это как раз-таки ухудшение репла, если все надо переопределять рефакторить и перекомпилять, тогда репл и в С++ возможен, просто на большом проекте после написания каждой маленькой ф-ции будешь ждать по полтора часа глобальной сборки. а так тоже да, "репл" и там какой-то можно зафигачить. второй минус - это ты вместо того чтобы думать о задаче сразу думаешь о типах, я не говорю что о них думать вообще не надо, но вначале это бывает очень утомительно, в том смысле что опять же часто код меняется. и третье - если система имеет динамическую природу (а что-то похоже на то что любая большая система ее захочет иметь, и там изобретают динамику в статике), то статика (речь идет о глобальной статике как сейчас принято в языках со стат типизацией) - это сплошной антипаттерн и монструозные конструкции, в результате которых ты все равно приходишь к динамике и переизобретению лиспа на 90%, только плохого медленного и как там дальше в цитате было
источник

DP

Dmitry Plesovskykh in Lisp Forever
Valeriy L
Ну например, ты хочешь контракт на строку у которой префикс - три пробела.

Ты делаешь тип MyString и у него в конструкторе чекаешь этот контракт. А в определениях функций юзаешь MyString вместо String
да нормально вроде звучит, любые контракты - лучше типов
источник

DP

Dmitry Plesovskykh in Lisp Forever
Nikita Domnickij
вообще мне в спеке не особо нравится что это всё отдельно от дефов
о чем речь, че-то не понял? и чем тебе контракты ракетки нравятся больше? в двух словах если можно
источник

ND

Nikita Domnickij in Lisp Forever
мне не нравится что определение спеки отдельно от всего вообще
источник

ND

Nikita Domnickij in Lisp Forever
ну типа ты пишешь s/def оно у тебя к кейворду биндится и ты сам это дёргаешь уже где надо
источник

ND

Nikita Domnickij in Lisp Forever
я б предпочёл что-то вроде define/contract
источник

ND

Nikita Domnickij in Lisp Forever
ты пишешь (s/defn add [a b] (-> int? int? int?) (+ a b))
источник

DP

Dmitry Plesovskykh in Lisp Forever
да, я понял
источник

DP

Dmitry Plesovskykh in Lisp Forever
на мой взгляд чисто дело вкуса, надо подумать какие есть преимущества у кложурского подхода, у подхода рекет преимущества очевидны - все в одном месте никуда бегать не надо
источник

ND

Nikita Domnickij in Lisp Forever
ну в целом одно другого не отменяет
источник

ND

Nikita Domnickij in Lisp Forever
для генерации данных можно и отдельные спеки юзать, наверное
источник

DP

Dmitry Plesovskykh in Lisp Forever
как варик просто можно в виде библиотеки в кложу прикрутить аналог ракетовских контрактов (на основе кложур спеки под капотом)
источник

ND

Nikita Domnickij in Lisp Forever
может уже кто и прикрутил я не искал просто
источник

DP

Dmitry Plesovskykh in Lisp Forever
по сути один макрос написать, хаха )
источник

DP

Dmitry Plesovskykh in Lisp Forever
ну, может не один, парочку. возможно, кстати, в этом смысле спеки более универсальные
источник

DP

Dmitry Plesovskykh in Lisp Forever
то есть если очень хочется их можно в макрос рекет-стайл контрактов запихнуть, в обратную сторону интуитивно кажется, что сильно сложнее
источник

DP

Dmitry Plesovskykh in Lisp Forever
Lämppi Lütti
Только контракты это не типы, это просто проверки
вот это утверждение я не совсем понял. в чем отличие? потому что проверка в рантайме? ну так типы тоже можно только в рантайме проверять в случае динамической типизации. а тип - это не "проверка" определенных условий, связанных с объектом?
источник

LL

Lämppi Lütti in Lisp Forever
В общем то да, в том что проверка в рантайме
источник