Fork me on GitHub
#clojure-russia
<
2015-11-14
>
razum2um06:11:28

@thickprogrammer: run-server возвращает ratpack.server.internal.DefaultRatpackServer который можно (.stop server)

az07:11:52

Почему датомик обсуждают, а эту няшку - нет

lowl4tency07:11:51

Потому что датомик крутой?

az07:11:21

Да никто толком не понимает что и как там работает, все хвалят, но никто не работал. Синдром монги … понравилась модель данных и пошло кококо.

az07:11:03

Как-то черезчур набросил simple_smile кажется

lowl4tency08:11:05

az: у нас прод на датомике

lowl4tency08:11:13

все работает!

razum2um08:11:08

@lowl4tency: напомни где?

lowl4tency08:11:46

Причем навреное уже 2 года

az08:11:01

И как?

artemyarulin10:11:28

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

thickprogrammer11:11:18

razum2um,, спасибо. а nginx-clojure кто-то юзал? вообще, нужен сервер под 100к лонгпуллов - может, что посоветуете

lowl4tency11:11:24

az: да нормально, но я не деелоплю, я мантейню

lowl4tency11:11:36

программисты вроде довольны

ul15:11:07

@thickprogrammer: re: catacumba спроси автора, @niwinz, могу поспорить, что он и по-русски понимает

thickprogrammer17:11:51

опять не могу понять с присвоением значений символам. читаю книжку по кложе, там пишут: однажды привязав значение 1 к символу а, изменить эту привязку, назначив значение 2 символу а, уже нельзя при этом (def a 10) (defn func [x] (def a x) (def a (+ a x)) a) (func 10) значения переназначаются. объясните плз

nicola18:11:44

def порождает Var, который мутабельный ссылочный тип

nicola18:11:42

let и его производные как раз связывают значения с символом

delaguardo18:11:29

а что это за книжка с такими странными примерами?

nicola18:11:51

На varах обычно не программируют, они используются для относительно неизменных функций, протоколов и тп

nicola18:11:25

но мутабельны, чтобы можно было делать горячую перезагрузку кода - REPL driven, dynamic programming

thickprogrammer18:11:15

@delaguardo книжка - программирование на clojure , пример я сам придумал @nicola defn func [x]... - порождает var ? что значит порождает ? можете объяснить механизм привязки. вчера я думал, что все понял. но после этой фразы опять запутался )))

delaguardo18:11:49

(defn func [x]) == (def func (fn [x]))

nicola18:11:13

У тебя есть namespase - можешь мыслить его как измеряемый hashmap

thickprogrammer18:11:21

hashmap в котором символу сопоставлена ссылка на объект ?

nicola18:11:23

def x - регистрирует в namespace под ключом x объект типа Var

nicola18:11:23

def x - регистрирует в namespace под ключом x объект типа Var

nicola18:11:46

var в свою очередь ссылается на значение

nicola18:11:09

Значением может быть функция, примитив и тп

thickprogrammer18:11:45

т.е. def всегда сопоставляется с Var ? при (def a b) а сопоставляется ссылка на Var b ? или создается новый Var в который копируется ссылка на b

nicola18:11:16

Второе

nicola18:11:12

Классик маленький и читаьельный

nicola18:11:02

В var также валяются метаданные - если ты про них слышал

thickprogrammer18:11:40

а при (def a #'b) что происходит ?

thickprogrammer18:11:07

я жаву не знаю, сложно читать

nicola18:11:26

#'symbol - дает тебе именно ссылку на var

nicola18:11:30

(type #'b)

thickprogrammer18:11:45

т.е. при (def a #'b) а сопоставляется ссылка на Var b ?

nicola18:11:32

(type a) => clojure.lang.Var

thickprogrammer18:11:33

это понятно, но какой var ? можно сопоставить ссылку на созданный var a так и на уже существующий var b

nicola18:11:08

#'a => ссылка на созданный var

nicola18:11:36

Понял?

nicola18:11:47

поиграй в REPL - разберешься

nicola18:11:28

ну и java подучи - у тебя какой предыдущий язык?

thickprogrammer18:11:52

не, не понял ) (def a b) в а ссылка на созданный var , в котором ссылка на значение b (def a #'b) в а , тоже ссылка на созданный var , в котором ссылка на var b , в котором ссылка на значение b - так ?

nicola18:11:20

(type a) => java.lang.Long

nicola18:11:26

(println a) => 1

nicola18:11:59

(type #'a) => clojure.lang.Var

nicola18:11:16

(deref #'a) => 1

thickprogrammer18:11:04

это я понимаю ) я не понимаю - что происходит при def a b и def a #'b

nicola18:11:04

(println #'a) => #'yournamespace/a

nicola18:11:48

если (def a b), то создается var a, который смотрит на значение var b

nicola18:11:12

(type b) => java.lang.Long

nicola18:11:57

пока ты не сказал #', символ в коде вычисляется в значение var

nicola18:11:23

(def b #'a)

nicola18:11:32

(type b) => clojure.lang.Var

nicola18:11:38

понятно?

thickprogrammer18:11:51

почти ) если (def a b), то создается var a, который смотрит на значение var b, а если (def a #'b) то ?

nicola19:11:17

Создаётся var который смотрит на var

thickprogrammer19:11:34

теперь понятно)

nicola19:11:18

Но внутрифункций мы используем let, а не def

thickprogrammer19:11:27

я немного на питоне пишу . почему нельзя внутри функций использовать def ?

nicola19:11:51

И как раз к let и аргументам функций относиться то, что написано в книге

nicola19:11:20

Потому что он глобальный для namespace и мутабельный

nicola19:11:38

т.е. это не фп style

thickprogrammer19:11:50

ясно, но если я какую-то либу подключу, она может мои def переопределить ? так получается

nicola19:11:16

да, clojure язык динамический simple_smile

nicola19:11:29

но так почти не делают

thickprogrammer19:11:16

я ерланг трогал - там с этим строже. поэтому меня немного удивило что тут можно переопределять

nicola19:11:29

в erlang тоже есть горячая перезагрузка, только на уровне модуля

nicola19:11:52

зато в clojure ты можешь поправить объявление функции и перегрузить только его

thickprogrammer19:11:51

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

thickprogrammer19:11:13

какой сервер лучше использовать для 100к лонгполлов ? есть вообще такое , или nginx pub/sub наше всё?

rm21:11:25

лонгполлы фу же, лучше вебсокеты

thickprogrammer23:11:33

может, я что-то не так делал - но у меня вебсокеты через некоторые корпоративные прокси не работали. пришлось на sse переходить https://www.websocket.org/echo.html c тех сетей тоже не коннектилось