let rec์ ๊ฒฐ๊ตญ ๊ตฌํํ๊ณ ํ์ ์ ์ด ์ ์ด์ํ์ง๋ง ์ผ๋จ ์ฝ๋์ ์ด ์ผ์ถ ๋๊ณ ์๋ค.... (TS Output)
isEven(S(O)) == false
isEven(S(S(O)) == true
!!!!!
@ranolp@hackers.pub ยท 41 following ยท 60 followers
FunApp
(ฮ โข ๐: Humor โ Happy, ๐ : Humor) / (๐ ๐ : Happy)
let rec์ ๊ฒฐ๊ตญ ๊ตฌํํ๊ณ ํ์ ์ ์ด ์ ์ด์ํ์ง๋ง ์ผ๋จ ์ฝ๋์ ์ด ์ผ์ถ ๋๊ณ ์๋ค.... (TS Output)
isEven(S(O)) == false
isEven(S(S(O)) == true
!!!!!
์ฅ๊ณ ๋์ ๊ฒฐ๋ก ์ Lumo IR์ let-rec์ ์ถ๊ฐํด์ผ ํ๋ค๋ ๊ฒ์ด๋ค.
์ผ์ด์ด ๋ ๋ธ๋ฃจ์ธ ์ธ๋ฑ์ค ์ํด์ ๋งํ๋ค
์ด์ Lumo (GitHub)์์ fixpoint๋ฅผ ๋ฐํ์ผ๋ก ์ํธ ์ฌ๊ท ๊ฐ๋ฅํ ํจ์ ๋ฌถ์์ ์ ์ํ ์ ์๋ค. ์ฌ์ฌ MVP์ ๋์ด ๋ณด์ธ๋ค. ๋ค์ ์คํ ์ ์ฝ๋์ ์ด๋ค.
์ค๋์ ์ง์
fixpoint <- (
fn[A](f: thunk (A -> produce A)): produce A {
g <- produce (thunk (
fn(x: ฮผX. thunk (X -> produce A)): produce A {
ret <- (force unroll x)(x);
(force f)(ret)
}
));
(force g)(roll g)
}
);
fixpoint_ <- fixpoint[Unit];
(force fixpoint_)(thunk (fn(m: _): _ {
`Unit/unit {}
}))
๋ ์ด์ ํ์ ๊ฒ์ฌ๊ธฐ๋ฅผ ํต๊ณผํ๋ค!
@ranolp ๋ง์๋๋ก unification ๋ก์ง์ด ๋ฌดํ๋ฃจํ์ ์ทจ์ฝํ๋๋ฐ, ์ฌ์ค ๊ทธ๋ฅ ์กฐ์ฌํด์ ์ ์ง๊ธฐ ์ด์์ ๋ฐฉ๋ฒ์ ๋ชจ๋ฅด๊ฒ ๋๋ฆฌ๊ณ ์ใ
ใ
@bglbgl gwyng termination์ ๋ณด์ฅํ๋ ค๋ฉด occurs check๊ฐ ํ์์ ์ด๋ผ๊ณ ๋ค์์ด์.
occurs check๋ฅผ ์ ์ง์ ์ฝ๋ฉ์ ์๋ชปํ๋ฉด ์ปดํ์ผ๋ฌ๊ฐ ๋ฌดํ ๋ฃจํ๋ฅผ ๋๋ค. unification ์ด๋ ต๋ค...
unification์ด global๋ก ๋์์ผ ํ๋ค๋ ์ด์ ๋ฅผ ์ด๋์ ๋ ์ดํดํ๋ค ๊ตฌ์์ Algorithm W ๋์
์ค์ ๋ก ํ์๋ฅผ ์ง๊ณ ์๋ค.
Y = forall A. ฮปf.
let g = thunk (ฮปx. (force f) ((force (unroll x)) x)) : thunk ((ฮผX. thunk (X -> A)) -> A)
in g (roll g : ฮผX. thunk (X -> A))
๋ฅผ ํ์ ๊ฒ์ฌํ ๊ฒ ์ง๋ ์ผ์ด์๋ค.
(Y[ฮปโจ isEven: nat -> bool, isOdd: nat -> bool โฉ]) (ฮปm.
ฮปโจ
isEven: ฮปn. match n {
Nat.zero as n => return true
Nat.succ as n => return (force m::isOdd) (n.0)
}
isOdd: ฮปn. match n {
Nat.zero as n => return false
Nat.succ as n => return (force m::isEven) (n.0)
}
โฉ
)
์ด์ ์ ์ฝ๋๋ฅผ ๋์ถฉ ํ์ ๊ฒ์ฌํ ์ ์๋ ๊ฑฐ ๊ฐ๋ค.
์ด์ ์๋งจํฑ์ ํ์ํ ๋งํผ ๊ตฌํํ์ผ๋ ๋๋์ด ์ ํ์ค๋ ์ฝ๋์ ์ผ๋ก ๋์ด๊ฐ ์ ์๊ฒ ๋ค.
์ฌ๊ท ๊ตฌํ์ ์ํด Y combinator๋ฅผ ์ฌ๋ฐ๋ฅธ ํญ์ผ๋ก ์ ์ธํ ์ ์๊ฒ ํ์ ๊ฒ์ฌ๊ธฐ๋ฅผ ๊ณ ์ณค์ผ๋ TyApp์ด ๊ตฌํ๋์ด ์์ง ์์ ์ํ๊น๊ฒ๋ ์คํํ ์ ์๋ค. ์ฌํ ์ผ์ด๋ค.
match ์ง๋ฉด์ unification ๊ตฌํํ๋๋ฐ ์ด๊ฑฐ ์ ์ง๊ธฐ ์ด๋ ต๊ธด ํด๋ณด์ธ๋ค
thunk (fn(x : Nat): MaybeNat {
match(unroll(x)) {
case Nat.zero as x -> return MaybeNat.nothing
case Nat.succ as x -> let y = x.0 in return MaybeNat.just(y)
}
})
๋ฅผ Lumo๋ก ํ์ ๊ฒ์ฌํ ์ ์๊ฒ ๋์๋ค. sub1์ด๋ผ๋ ์ด๋ฆ์ ๋ถ์ผ ์ ์๋ ํจ์๋ค.
@ranolp ์๋ก์ด ์ธ์ด๋ฅผ ๋ง๋์๋๊ฑด๊ฐ์?
@bglbgl gwyng ๋ง์์ compiled to c/js ์ธ์ด๊ฐ ๋ชฉํ์์
ํ๊ฐ ๊ท์น์ด ์ ์ ์ด์ํด์ง๊ณ ์๋ค.
dup, drop ์ฝ์ ์ ์ํ IR โ IR ๋ฒ์ญ์ ๋ณ๊ฐ ์คํ ์ผ๋ก ๋ถ๋ฆฌํ๋ ๊ฒ ๋ซ๋...
ํ๊ฐ ๊ท์น์ด ์ ์ ์ด์ํด์ง๊ณ ์๋ค.
๊ฒฐ๊ตญ AST๋ฅผ ์ง๊ณ Name Resolution์ ํ ๋ค์์ AST Lowering์ ํด์ IR์ ๋ง๋ค์ด์ผ ํ ์ด๋ช ์ธ๊ฐ๋ณด๋ค
Perceus ๋ ผ๋ฌธ์ ๋ค์ ์ฝ๊ณ ์๋ค. ๋ค ์ฝ์ผ๋ฉด ์์ฝ ์ ๋ฆฌํด์ ํด์ปค์คํ์ ๊ธ ํ๋ฒ ์ฌ๋ฆด ๋ฏ ํ๋ค.
ํ์ํ ๋๋ฌด ์ด๋ ต๋ค
์๊ฐํด๋ณด๋ variant/record ๊ท์น ์ ๊ฒ ์๋์์
ํ์ํ ๋๋ฌด ์ด๋ ต๋ค
๋๋ค ํจ์์ Introduction Rule๊น์ง ์์ฑํ๋ค.
์ง๊ธ ํ์ ๊ฒ์ฌ ๋๋ ๊ฑฐ:
() : ()Nat.zeroNat.succ(Nat.zero)Nat.succ(Nat.succ(Nat.zero))Nat.zero : Natthunk (ฮปx. return ()) : thunk (() -> ())(์ ํธ์์ koka ์ฝ๋๋ ๊ทธ๋ ๊ณ ์ด ํธ์์ effekt ์ฝ๋๋ ๊ทธ๋ ๊ณ ๊ท์ฐฎ์์ ๋์ถฉ Gemini ์์ผฐ๋ค. ํ๋ ค๋ ์ํด ๋ฐ๋๋ค)
๋ฐ๋ฉด Effekt์ Capability Passing Style ๋ฉํ ๋ชจ๋ธ๋ก ์๊ฐํ๋ฉด ์ฝ๊ฐ ์์์ด ๋ฌ๋ผ์ง๋๋ฐ, Capability๋ ๊ฐ ์ฃผ์ ์ ๊ด์ ์ผ๋ก ๋ณด๊ธฐ ๋๋ฌธ์ Effect๋ฅผ it happens๊ฐ ์๋๋ผ it requires๋ก ๋ณธ๋ค. ๊ทธ๋์ named handler ๊ฐ์ ์ฝ๋๋ฅผ ์ด๋ ๊ฒ ์ด๋ค. ๊ฑ computation์ ๋ฐ๋ ํจ์์ธ ๊ฒ.
fun swap[A]() {h1: State[A]} {h2: State[A]}: Unit = {
val a = h1.get();
val b = h2.get();
h1.set(a);
h2.set(b);
}
koka๋ happens์ง๋ง effekt๋ requires๋ค. ํ์ง๋ง named handler์์๋ ๋ ๋ค ๊ทธ๋ฅ computation์ ์ธ์๋ก ๋๊ธฐ๋ ๋ชจ์์์ ์๋ ดํ๋ค.
Scala์ given - using์ ์ฌ์ฉํ Effect ๋ชจ์ฌ๋ ์๋ง Capability Passing Style์ ๊ฐ๊น์ฐ๋๊น Effekt์ ํด์์ ๋ฐ๋ฅผ ๊ฑฐ๋ก ๋ณธ๋ค.
swap :: State a (State a ()) ๊ฐ์ ํจ์๋ฅผ algebraic effect๋ก ๊ธฐ์ ํ๋ ค๋ฉด ๊ฐ์ ํจ๊ณผ๊ฐ ๋๋ฒ ๋์ค๊ธฐ์ koka๋ named handlers๋ฅผ ์คํํ๊ณ ์๋ค.
์ณ์ ๋ฐฉํฅ์ด๋ผ๊ณ ์๊ฐํ๋ค. ๊ธฐ์กด์ koka๋ masked effect๋ผ๋ ๋ณต์กํ ๊ฐ๋
์ ์ฌ์ฉํด outer effect์ ์ ๊ทผํ๋ค.
fun swap-with-mask() : <state<a>, state<a>> () {
val inner-val = get() // innermost
val outer-val = mask<state<a>> { get() } // skip the innermost
set(outer-val) // innermost
mask<state<a>> { set(inner-val) } // skip the innermost
}
ํ์ง๋ง named handler์ ํจ๊ป๋ผ๋ฉด ์ด๋ ๊ฒ ์ธ ์ ์๋ค
fun swap-with-named-handlers(h1, h2) : <state<a>> () {
val val1 = perform get() at h1
val val2 = perform get() at h2
perform set(val2) at h1
perform set(val1) at h2
}
(์ ํธ์์ koka ์ฝ๋๋ ๊ทธ๋ ๊ณ ์ด ํธ์์ effekt ์ฝ๋๋ ๊ทธ๋ ๊ณ ๊ท์ฐฎ์์ ๋์ถฉ Gemini ์์ผฐ๋ค. ํ๋ ค๋ ์ํด ๋ฐ๋๋ค)
๋ฐ๋ฉด Effekt์ Capability Passing Style ๋ฉํ ๋ชจ๋ธ๋ก ์๊ฐํ๋ฉด ์ฝ๊ฐ ์์์ด ๋ฌ๋ผ์ง๋๋ฐ, Capability๋ ๊ฐ ์ฃผ์ ์ ๊ด์ ์ผ๋ก ๋ณด๊ธฐ ๋๋ฌธ์ Effect๋ฅผ it happens๊ฐ ์๋๋ผ it requires๋ก ๋ณธ๋ค. ๊ทธ๋์ named handler ๊ฐ์ ์ฝ๋๋ฅผ ์ด๋ ๊ฒ ์ด๋ค. ๊ฑ computation์ ๋ฐ๋ ํจ์์ธ ๊ฒ.
fun swap[A]() {h1: State[A]} {h2: State[A]}: Unit = {
val a = h1.get();
val b = h2.get();
h1.set(a);
h2.set(b);
}
koka๋ happens์ง๋ง effekt๋ requires๋ค. ํ์ง๋ง named handler์์๋ ๋ ๋ค ๊ทธ๋ฅ computation์ ์ธ์๋ก ๋๊ธฐ๋ ๋ชจ์์์ ์๋ ดํ๋ค.
swap :: State a (State a ()) ๊ฐ์ ํจ์๋ฅผ algebraic effect๋ก ๊ธฐ์ ํ๋ ค๋ฉด ๊ฐ์ ํจ๊ณผ๊ฐ ๋๋ฒ ๋์ค๊ธฐ์ koka๋ named handlers๋ฅผ ์คํํ๊ณ ์๋ค.
์ณ์ ๋ฐฉํฅ์ด๋ผ๊ณ ์๊ฐํ๋ค. ๊ธฐ์กด์ koka๋ masked effect๋ผ๋ ๋ณต์กํ ๊ฐ๋
์ ์ฌ์ฉํด outer effect์ ์ ๊ทผํ๋ค.
fun swap-with-mask() : <state<a>, state<a>> () {
val inner-val = get() // innermost
val outer-val = mask<state<a>> { get() } // skip the innermost
set(outer-val) // innermost
mask<state<a>> { set(inner-val) } // skip the innermost
}
ํ์ง๋ง named handler์ ํจ๊ป๋ผ๋ฉด ์ด๋ ๊ฒ ์ธ ์ ์๋ค
fun swap-with-named-handlers(h1, h2) : <state<a>> () {
val val1 = perform get() at h1
val val2 = perform get() at h2
perform set(val2) at h1
perform set(val1) at h2
}
Call-by-Push-Value๋ฅผ ๋ค์ ๋ฐฉ๋ฌธํ๊ณ ์๋๋ฐ ์๋ฌธ์ด ๋ ๋์ง ์์...
์ tag๋ฅผ ์ผ๊ธ ์๋ฏผ์ผ๋ก ๋ง๋ค๊ณ ์๋น ๋ฐฉ๋ฒ์ (1) ์์กดํจ์ ฮ _iโI Bแตข (2) ๊ตฌ๋ถ ํฉ ฮฃ_iโI Aแตข ์ด๋ ๊ฒ 2๊ฐ๋ ๋ง๋ค๊ฒ ํ์ง
ํ์ ๊ฒ์ฌ๊ธฐ ์ถ๋ ฅ์ ๊ฐ์ ํ๋ค. ์์ง Introduction Rule๋ฐ์ ์๊ธฐ ๋๋ฌธ์ Pfenning Recipe๋ฅผ ๋ฐ๋ผ์ ๋ชจ๋ check ๊ท์น์ด๋ค.
x : A๋ฉด inl x๋ ์์์ B์ ๋ํด A + B๋ก ๊ฒ์ฌ๋ ์ ์๋ค
ํ
v : unroll ฯ โน roll v : ฯ
๋ญ๊ฐ ๋น์ฐํ๋ค๋ฉด ๋น์ฐํ๊ธด ํ๋ฐ ํ ์ฌ๋ฐ๋ค
์ด์ ํ์ ๊ฒ์ฌ๊ธฐ ์ง๋ ๋ฐ์๋ ์ต์ํด์ง๊ณ ์๋๋ฐ ๊ฒ์ ์ดํ์ ํ์ ์ ๋ณด๋ฅผ ์ด๋ป๊ฒ ์ฝ๋ ์์ฑ ๊ณผ์ ์์ ์ ์ฉํํ๋์ง ๋ชจ๋ฅด๊ฒ ๋ค
๋ชจ๋ ๋ ธ๋์ ๊ณ ์ ์๋ณ์๋ฅผ ๋ถ์ฌํ๊ณ ์ธ๋ถ์ ๊ฑฐ๋ํ ํด์๋งต Expr โ Type์ ๋ง๋๋ ์๋ฐ์ ์๋?
์ด์ ํ์ ๊ฒ์ฌ๊ธฐ ์ง๋ ๋ฐ์๋ ์ต์ํด์ง๊ณ ์๋๋ฐ ๊ฒ์ ์ดํ์ ํ์ ์ ๋ณด๋ฅผ ์ด๋ป๊ฒ ์ฝ๋ ์์ฑ ๊ณผ์ ์์ ์ ์ฉํํ๋์ง ๋ชจ๋ฅด๊ฒ ๋ค
Higher-Rank Polymorphism์ด ์์ด์ผ ํ๋๊ฐ์ ๋ํด ๊ณ ๋ฏผํ๋ ์ค ์์ผ๋ฉด unification ๊ตฌํ์ด ๊ท์ฐฎ์์ง๋ค๋ ๊ฑฐ ๊ฐ์๋ฐ
ํด์ปค์คํ์ ํ์ด์ง ๋งจ ์๋ก ๋ฒํผ์ด ์์ผ๋ฉด ์ข๊ฒ ๋ค
Higher-Order Abstract Syntax๊ฐ ์ ์ ์ฉํ์ง ์ดํด๋ณด๊ณ ์๋๋ฐ ์์ง์ ์ ๋ชจ๋ฅด๊ฒ ๋ค ๋ฉํ ์ธ์ด์ ๋์ ์ธ์ด๊ฐ ์๋ค๋ถํฐ ๊ธฐ๊ธฐ๋ฌ๋ฌํ๋ฐ
์ ๋ณด ๋ฆฌํฐ๋ฌ์ ๊ด๋ จ ์๊ฒฌ์ ๋ณด์กดํ๋ฌ ์๋ค. ์ฐ๋ฆฌ๋ ํํ ์์ด ์๋ฃ๊ฐ ํ๊ตญ์ด ์๋ฃ๋ณด๋ค ๋ซ๋ค๋ ๋ฌธํ์ฌ๋์ฃผ์์ ์๊ฒฌ์ ๊ณต๊ฐํ๊ณค ํ๋ค. ํ์ง๋ง ์ฌ๊ธฐ์ ์จ์ ์๊ฒฌ์ด ์ฌ๋ฟ ์๋ค. ํ๋์ฉ ๊น๋ณด๋ฉฐ ์๋ฏธํด๋ณด์.
์์ด ์๋ฃ๋ ํ๊ตญ์ด ์๋ฃ๋ณด๋ค ๋ซ๋ค. => ์ ๋์๊น? ๋์์ด ๋๊ธฐ ๋๋ฌธ์. ์ ๋์์ด ๋ ๊น? => (์ง์ค์ ๊ฐ๊น๊ธฐ ๋๋ฌธ์, ๋ค์ํ ๊ฒฝํ์ด ์ ์๋์ด ์๊ธฐ ๋๋ฌธ์). ์ ์ง์ค์ ๊ฐ๊น์ธ๊น? => 1์ฐจ ์ถ์ฒ์ ๊ฐ๊น๊ธฐ ๋๋ฌธ์. ์ 1์ฐจ ์ถ์ฒ์ ๊ฐ๊น์ธ๊น? => ์ฌ์ฉ์๊ฐ ๋ค์์ด๊ธฐ ๋๋ฌธ์ ์ง์ ์ฌ์ฉํ๊ฑฐ๋ ๋ฒ์ญ๋์ด 2์ฐจ ์ถ์ฒ๋ก ๊ธฐ๋ฅํ๊ธฐ ๋๋ฌธ์. ์ ๋ค์ํ ๊ฒฝํ์ด ์์๊น? => ์์ฐ์๊ฐ ์๋ฃ ์์ฑ ์ ์์ด๋ฅผ ์ ํํ ํ๋ฅ ์ด ํ๊ตญ์ด๋ณด๋ค ๋๊ธฐ ๋๋ฌธ์.
๊ทธ๋ ๋ค๋ฉด ์ฐ๋ฆฌ๋ ์์ด ์๋ฃ๊ฐ ๋์ ์ด์ ๋ฅผ ๊ตฌ์ฒด์ ์ผ๋ก ํํํ ์ ์๋ค.
ํ์ ๊ณต๊ฐ์ ๋ํ๊ณ , ์ ๋ณด ์ ํ ๊ณผ์ ์์์ ์๊ณก์ ์ค์ด๊ธฐ ์ํด์ ์์ด ์น ํ์์ด ํจ๊ณผ์ ์ด๋ค. ๋ค๋ง ์์ด ์น์ด "์ธ์ ๋" ์ข์ ๊ฑด ์๋๋ค. ํ์ปด์คํผ์ค ์๋ฃ๊ฐ ๋ฏธ๊ตญ์ ๋ง๊ฒ ๋๊ฐ, ์๋๋ฉด ํ๊ตญ์ ๋ง๊ฒ ๋๊ฐ? 1์ฐจ ์ถ์ฒ์ ๊ฐ๊น์ด ๊ณณ์ ํฅํด ์๊ณก์ ์ค์ด๊ณ , ๊ทธ ์์์ ํ์ ๊ณต๊ฐ์ ์ต๋ํ ํจ์จ์ ์ผ๋ก ๋ํ์ผ ํ๋ค.
์์ด ๊ฒ์์ด๋ผ๋ ํผ์์ ์ธ ํ์์์ ๋ฒ์ด๋ ์ ๋ณด ํ์์ ๋ณธ์ง์ ์ข๋ ๊ฒ์ด ์ข๋ค.
์ค๋๋ง์ ํ๋ก๊ทธ๋๋ฐ ์ธ์ด ์ด์ผ๊ธฐํ๋ฌ ์๋ค. ์ค๋ ์ฃผ์ ๋ ํ์ ์คํฌ๋ฆฝํธ์ ํต์ฌ ๊ฐ์น๋ค.
๋ง์ ์ฌ๋๋ค์ด ์ ์ ํ์ ์ธ์ด๋ฅผ ๋์ ํ๋ ์ด์ ๋ก ์์ ์ฑ(Soundness)๋ฅผ ์ด์ผ๊ธฐํ๋ค. ๋ง๋ ๋ง์ด๋ค. ํ์ง๋ง ํ์ ์คํฌ๋ฆฝํธ์์ ์์ ์ฑ์ 2๋ฑ ๊ฐ์น๋ค. ๊ทธ๋ผ 1๋ฑ ๊ฐ์น๋ ๋ญ๊น?
๋ฐ๋ก ๊ฐ๋ฐ ๊ฒฝํ ๊ฐ์ ์ด๋ค. ๊ตฌ์ฒด์ ์ผ๋ก, ์ค๋ฅ ๋๊ธฐ ์ฌ์ด ๊ตฌ๋ฌธ์ ์ ๋นํ ์ค์ด๊ณ ์๋ ์์ฑ์ ๊ฐ์ ํ๋ฉฐ ํฐ ๊ท๋ชจ ๋ฆฌํฉํ ๋ง ์ ์ฌ๋ฆฌ์ (๊ทธ๋ฆฌ๊ณ any ๊ฐ์ ๊ธฐ๋ฅ์ ์ ์ผ๋ค๋ ๊ฐ์ ํ์ ๋ฐํ์์๋ ์ ์๋ฏธํ ์์ค์) ์์ ์ฑ์ ์ป๊ฒ ๋ค๋ ๊ฑฐ๋ค.
ํ์ ์คํฌ๋ฆฝํธ ๊ณต์ ์ํค ๋ฌธ์์๋ ์์ ์ฑ์ ๋ชฉํ๊ฐ ์๋๋ผ๊ณ ๋์์๋ค (#). ์ฐ๋ฆฌ๋ ๋๋๋ก ๋๊ตฌ์ ๋ชฉ์ ์ ๋ค์ด๋ง์ง ์๋ ๋ถํ์ํ ๊ธฐ๋๋ฅผ ํ๊ณค ํ๋ค. ํ์ง๋ง ๋๊ตฌ ๊ฐ๋ฐ์์ ์ธ์ฐ๋ ๊ฑด ์ฌ์ฉ์๋ก์ ์ข์ ์ ๋ต์ด ์๋๋ค.
์กฐ๊ฑด๋ถ ํ์ ๊ณผ ์ฌ๊ท ํ์ , ํ ํ๋ฆฟ ๋ฌธ์์ด ํ์ , infer ๋ฑ์ ๋ณด๋ผ. ์ ์ ๋ถ์ ๋์ด๋๊ฐ ์ง์์ ์ผ๋ก ์ฌ๋ผ๊ฐ๋ ํฌํํ ๊ธฐ๋ฅ๋ค์ด ์ธ์ด์ ๊ณ์ ์ถ๊ฐ๋๋ ์ด์ ๊ฐ ๋ฌด์์ธ๊ฐ. ์ถ๋ก ์ ํฌ๊ธฐํ๊ณ any๊ฐ ๋์ค๊ณค ํ๋ ์ด์ ๊ฐ ๋ฌด์์ธ๊ฐ.
๊ทธ๋ค์ด ์ถ๊ตฌํ๋ ๊ฒ ์์ ํ ์ธ๊ณ๊ฐ ์๋ ์ค์ฉ์ ์ธ ์ธ๊ณ์ด๊ธฐ ๋๋ฌธ์ด๋ค.
โDeprecationโ์ ๅฐๆ๋๋ ้ๅ่ช ็ฟป่ญฏ่ช๊ฐ ๅฎ็ซ๋ ๅฟ ่ฆ๊ฐ ์๋ค.
https://hackers.pub/@hongminhee/01977192-399f-76c5-9d8c-07051a8a803a
@hongminheeๆดช ๆฐๆ (Hong Minhee)
์กฐ๊ธ ๊ธธ์ง๋ง ์ ๊ฑฐ ์์ (์๋ฌธ: Features deprecated / ์ ๊ฑฐ ์์ ์ธ ๊ธฐ๋ฅ)์ด ๊ทธ๋ญ์ ๋ญ ์ธ๋งํ ๋ฒ์ญ์ด์ธ ๊ฑฐ ๊ฐ๊ณ ์.
Gemini๋ฅผ ๊ตด๋ ค๋ณด๋ ์ฌ๋ฐ๋ ๋ฒ์ญ์ด๋ฅผ ๋ช ์ ์ํด์ฃผ๋ค์.
๋ค๋ง ์ฌ์ ํ ์ ๊ฒ๋ '์ ๊ฑฐ ์์ /์ ๊ฑฐํ '์ด ๊ฐ์ฅ ์๋ฟ๋ค์.
๋: ๊ฑด์ ํ ์ก์ ์ ๊ฑด์ ํ ์ ์ ์ด ๊น๋ ๋ค(Sound body โ Sound mind) โ ๊ฑด์ ํ์ง ์์ ์ ์ ์ด๋ผ๋ฉด ์ก์ ๋ ๊ฑด์ ํ์ง ์๋ค (ยฌSound mind โ ยฌSound body)
@: ๋น์ ์ ๋ช ์ ์ ๋์ฐ์ ์ฐธ๊ฐ์ด ๊ฐ๋ค๋ ์ฃผ์ฅ์ ํ๋ฉฐ ๋ฐฐ์ค๋ฅ ์ ๊ฐ์ ํ๊ณ ๋ง์์ต๋๋ค!!
๋: ์ ์ง์ฆ๋
๋ญ๋ผ๋ ๊ฑฐ์์ฌ
We eventually end up with constraints of the shape โ
โ and there always exists a and such that we can reduce the constraint to an equivalent constraint .โ (Parreaux and Chau, 2022, p. 10)
์ Ctrl + Enter๋ก ์ฌ๋ฆฌ๊ธฐ ๋๋๊น ๋๋ฌด ํธํ๋ค ์ด๊ฒ SNS์ง
MLstruct ์ฝ๊ณ ์๋๋ฐ ๋คํ์ค๋ฝ๊ฒ๋ Simple-sub ๊ธฐ๋ฐ์ด๋ผ๊ณ ํ๋ค. MLsub ๊ธฐ๋ฐ์ด์์ผ๋ฉด MLsub ์ฝ์ผ๋ฌ ๊ฐ์ผ ํด์ ์ธ์์
@cog25 ๋์ ์ด๋ํ๋ค ํํ
@ranolp ๊ตฌํํ์ต๋๋ค!
@hongminheeๆดช ๆฐๆ (Hong Minhee) ์ต๊ณ ์์
์ด๋ฐ ๋ฉด์์ KDL์ด ์์ฃผ ํ๋ฅญํ๋ค๊ณ ๋๊ผ๋ ๊ฒ /- ์ฃผ์์ด๋ ๊ฒ ์๋ค. AST ๋ ธ๋ ํ๋๋ฅผ ์ฃผ์ ์ฒ๋ฆฌํ๋ ๊ฑฐ.
#์๊ธฐ์๊ฐ ๋ฅผ ํด๋ณผ๊น์.
ํจ์ํ ์ธ์ด๋ ๋ญ ์ฌ์ค ์ญ์ฌ์ ์ ํต์ ๋ฆฌ์คํ ๋ฐฉ์ธ์์ ์์ํด์ผ ํ์ง ์๋ (์์)
๋ชจ๋ฐ์ผ ์น์ ๊ทธ๋ฅ ์๋ก ๋์์ธํ๋ ๊ฑธ ๊ฐ์ธ์ ์ผ๋ก ์ ํธํ๋ค. ๋ด๋น๊ฒ์ด์ ๋ฐฉ๋ฒ์ด ๊ฝค๋ ๋ฌ๋ผ์ (๋ฐํ ํญ ๋ด๋น๊ฒ์ด์ ๋ฑ)
@ranolp ๋ณธ๋ฌธ์ ๋งํฌ๋ฅผ ๊ฑธ ์ ์์ด์ ๊ทธ๋ฐ ๊ฒ ๊ฐ๊ธด ํ๋ฐโฆ ์๊ฐํด ๋ณด๋ฉด X๋ ๋ฉ์
์ ๋ฉ์
๋๋ก ๋๋ฅผ ์ ์์๋ ๊ฒ ๊ฐ๋ค์. ๋ชป ํ ์ด์ ๋ ์์ ๊ฒ ๊ฐ๊ธฐ๋โฆ? ๐ค
@hongminheeๆดช ๆฐๆ (Hong Minhee) ๋ญ๊ฐ ๊ตฌ์กฐ์ ํ๊ณ๋ ํ์ค์ ๊ฐ์์ ์๋์๊ตฐ์! ํญ์ ์ฐํฉ์ฐ์ฃผ ์น ํด๋ผ์ด์ธํธ๋ค ์ฐ๋ฉด์ ์ค๋ ๋ ํ์์ด ๋ถํธํ๋๋ฐ ๊ตฌํ์ ๋ฐ๊พธ๋ฉด ์ ๊ธฐ์ค ์ฝ๊ฐ์ ํธํด์ง ๊ฑฐ ๊ฐ๋ค์ ๊ฐ ๋ณด๊ณ ์ ํด๋ผ์ด์ธํธ ๊ธฐ์ฌํด์ผ์ง...
์๊ธฐ์๊ฐ ๊ฐ์ก๊ณ ์ฐ๊ธฐ ๊ท์ฐฎ์
~๋ถ์ ๋ถ๋ถ์ ๋๋ฌ์ผ ์ค๋ ๋ ์๋ก ํ์์ด ๊ฐ๋ฅํ๋ฐ ๊ทธ๋ฅ ํธ์ํฐ์ UX๋ก ์์ชฝ ํธ์ ์์ญ ์ ์ฒด๊ฐ ์ค๋ ๋ ์๋ก ํ์ ๊ธฐ๋ฅ์ด๋ฉด ์๋๋
์๊ฐํด๋ณด๋ฉด ์ฐํฉ์ฐ์ฃผ๋ฅ UX๊ฐ ๋ค ๊ทธ๋ฌ๋ ๊ฑฐ ๊ฐ์๋ฐ ์ด์ ๊ฐ ์๋ ๊ฑด๊ฐ
~๋ถ์ ๋ถ๋ถ์ ๋๋ฌ์ผ ์ค๋ ๋ ์๋ก ํ์์ด ๊ฐ๋ฅํ๋ฐ ๊ทธ๋ฅ ํธ์ํฐ์ UX๋ก ์์ชฝ ํธ์ ์์ญ ์ ์ฒด๊ฐ ์ค๋ ๋ ์๋ก ํ์ ๊ธฐ๋ฅ์ด๋ฉด ์๋๋