Size: a a a

Clojure — русскоговорящее сообщество

2020 July 19

AL

Arseniy Lebedev in Clojure — русскоговорящее сообщество
бдыщ
источник

MA

Mike Ananev in Clojure — русскоговорящее сообщество
Спасибо!
источник

ИФ

Иван Федоров... in Clojure — русскоговорящее сообщество
отличный выстрел!
источник

OR

Oleg Roshchupkin in Clojure — русскоговорящее сообщество
Того и гляди типов меньше станет
источник

T

Timmy B in Clojure — русскоговорящее сообщество
Я все пропустил, плак плак
источник

AC

Anton Chikin in Clojure — русскоговорящее сообщество
Andrey Osnovin
А почему не рассматривать типы как дополнительную документацию к коду? Глядя на сигнатуру функции с аннотациями типов значительно проще понять что она делает
Функция принимает Entity возвращает User
источник

AC

Anton Chikin in Clojure — русскоговорящее сообщество
Arseniy Lebedev
Есть потуги всякие интересные, JIT опять же, но все это заметно слабее чем O3 по полной программе
JIT про другое - это перевод байткода в машинный
источник

РБ

Рустам Бабаджанов... in Clojure — русскоговорящее сообщество
Всем привет, никто случайно с Asterisk AMI не работал из кложи?
источник

AC

Anton Chikin in Clojure — русскоговорящее сообщество
Arseniy Lebedev
Надо понимать что языки с динамической типизацией вроде все ещё принципиально хуже оптимизируются
Там дело скорее не в типах, а в том что языки которые мы относим к динамическим все работают через исполнение интерпретированного байткода в VM, выделяют память на хипе, не имеют доступ к стеку и почти все вызовы в них вынуждены быть виртуальными
источник

AC

Anton Chikin in Clojure — русскоговорящее сообщество
Типы могут помочь только с последним пунктом
источник

AC

Anton Chikin in Clojure — русскоговорящее сообщество
Но если посмотреть на современное ООП - там очень часто оперируют базовыми классами или интерфейсами а имплементации подгружают во время исполнения через DI - так что вызовы все равно остаются виртуальными
источник

VL

Vlad Lisovsky in Clojure — русскоговорящее сообщество
Anton Chikin
Но если посмотреть на современное ООП - там очень часто оперируют базовыми классами или интерфейсами а имплементации подгружают во время исполнения через DI - так что вызовы все равно остаются виртуальными
Хаха
источник

AC

Anton Chikin in Clojure — русскоговорящее сообщество
Ну вроде спринг ребята так и работают не?
источник

AC

Anton Chikin in Clojure — русскоговорящее сообщество
В Objective C класс кластеры - там один бог знает какой конкретный тип инстанцируется при создании массива например
источник

AO

Andrey Osnovin in Clojure — русскоговорящее сообщество
Anton Chikin
Функция принимает Entity возвращает User
А как ты узнаешь, что она возвращает User? У тебя на выходе будет какая-то мапа и тебе придётся в репле смотреть что это за мапа. У меня претензия к тому, что нельзя заранее сказать что за мапа вернётся, какая у неё структура, вложенность и т.д. Можно сделать (defrecord User [...]), и даже написать  (defn auth ^User [...] (->User ...)), но оно почему-то всё равно не проверяется в рантайме и я не видел на гитхабе что бы кто-то так делал
источник

AC

Anton Chikin in Clojure — русскоговорящее сообщество
Andrey Osnovin
А как ты узнаешь, что она возвращает User? У тебя на выходе будет какая-то мапа и тебе придётся в репле смотреть что это за мапа. У меня претензия к тому, что нельзя заранее сказать что за мапа вернётся, какая у неё структура, вложенность и т.д. Можно сделать (defrecord User [...]), и даже написать  (defn auth ^User [...] (->User ...)), но оно почему-то всё равно не проверяется в рантайме и я не видел на гитхабе что бы кто-то так делал
Ну на деле тебе тип с сотней полей тоже не сильно поможет. Тем более этот User может на деле оказаться сабклассом User
источник

AC

Anton Chikin in Clojure — русскоговорящее сообщество
Понять что метод вернул корректное значение все равно будет сложно
источник

VL

Vlad Lisovsky in Clojure — русскоговорящее сообщество
Andrey Osnovin
А как ты узнаешь, что она возвращает User? У тебя на выходе будет какая-то мапа и тебе придётся в репле смотреть что это за мапа. У меня претензия к тому, что нельзя заранее сказать что за мапа вернётся, какая у неё структура, вложенность и т.д. Можно сделать (defrecord User [...]), и даже написать  (defn auth ^User [...] (->User ...)), но оно почему-то всё равно не проверяется в рантайме и я не видел на гитхабе что бы кто-то так делал
Так это решается использованием спец. Если мапа подходит пл спеке, работаем дальше!
источник

VL

Vlad Lisovsky in Clojure — русскоговорящее сообщество
В твоей системе типлв придеться в рантайме также проверять
источник

VL

Vlad Lisovsky in Clojure — русскоговорящее сообщество
Если мы говорим о входным данных извне
источник