Fork me on GitHub
#clojure-hungary
<
2022-10-14
>
onetom07:10:16

ez a FlowStorm dolog nagyon igeretesnek tunik: https://youtu.be/A3AzlqNwUXc probalta mar valaki? nekem pont le kellett nyomoznom egy performance issue-t a hetekben. probaltam megfogni ezekkel a cuccokkal, de korulmenyes volt:

thunknyc/profile             {:mvn/version "0.5.2"}
  org.clojure/tools.trace      {:mvn/version "0.7.11"}
ezek a namespaceik:
[profile.core :as prof :refer [profile]]
    [clojure.tools.trace :as trace]
ugyh vegulis az async-profiler segitett:
com.clojure-goes-fast/clj-async-profiler    {:mvn/version "1.0.0"}
de gyanitom h a FlowStorm-al meg hatekonyabb lett volna a vadaszat.

👀 1
sb17:10:49

Igen, ez elegge jonak tunik. Foleg, hogy ki lehet menteni az aktualis lepes statuszat a repl-be.

sb17:10:18

Ez nalam a flow-test volt. Eleg jo, sot... Koszi, hogy megosztottad errol lemaradtam! 🙂

👍 1
onetom14:10:56

btw, epp azon morfondiroztam, h h lehetne clojure stilusban irni javascriptet. elso 5let az volt, h extra fuggveny argumentek, default ertekekkel szimulalnak a local binding-okat:

const P = x => (console.log('?', x), x) // Probe

console.log('Defining f...')
const f = (
  arg_1,
  // let:
  local_1 = P(2),
  local_2 = arg_1 + local_1 + 1
) => ({arg_1, local_1, local_2})

console.log('Calling f(1)...')
console.log(f(1))

console.log('Accidental local override...')
console.log(f(1, 10))
aztan rajottem h egy primitive segedeszkozzel tudok olvashatobb IIFE-t (https://developer.mozilla.org/en-US/docs/Glossary/IIFE) csinalni:
const Let = bindings => bindings()

console.log('Defining g...')
const g = arg_1 =>
  Let((local_1 = P(2),
       local_2 = arg_1 + local_1 + 1) => ({
    arg_1, local_1, local_2
  }))

console.log('Calling g(1)...')
console.log(g(1))
ami mar kb ugy nez ki, mint az elisp, pl 🙂
(let ((variable value)
      (variable value)
      …)
  body…)

👍 1
onetom14:10:03

nyilvan nem idiomatic JS, ami hatrany, viszont az elony az, h ilyen stilussal nagyobb valoszinuseggel ir az ember funkcionalis kodot...

onetom14:10:24

hasznaljuk pl a https://wappler.io -t, amiben van egy AppConnect nevu reactive JS framework, ami hasonloan a Vue.js -hez, reaktiv objektumokba csomagolja az adatokat. viszont olyan verbose, h mar meguntam es csinaltam hozza egy kis illesztest, amitol clojure-osebben megkozelitesu lehet a kod:

const merge = (o1, o2) => ({...o1, ...o2})
const deref = (dmx_var) => dmx_var?.dmxComponent?.get('value')
const reset = (dmx_var, val) => (dmx_var?.dmxComponent?.set('value', val), val)
const swap = (dmx_var, f, ...args) => reset(dmx_var, f(deref(dmx_var), ...args))
es igy tudok olyat irni pl, h:
reset(user,
    merge(
      decode_id_token(id_token()),
      merge(profile_defaults, user_profile)))
ami mar szinte clojure 🙂

sb14:10:46

holnap írok @onetom

👍 1