์๊ฐ์ด ์ง๋จ์ ๋ฐ๋ผ์ด ํค์๋๋ ์ ์ ๋ ๊ดด๋ก์์ก์ต๋๋ค. ๋ช ๊ฐ์ง ๋ฌธ์ ๊ฐ ์์ต๋๋ค.
type
๋ ๋งค์ฐ ์ผ๋ฐ์ ์ธ ๋จ์ด์ด๋ฉฐ ๋ณ์ ์ด๋ฆ (๋ฐ ํค์๋ ์ธ์!)์ ์ฌ์ฉํ ์์๋ ์ํ๋ก ๋๊ฒ ์ต๋๋ค.type
๋ฅผ ์ฌ์ฉํ์ฌ ๊ตฌ์ฒด์ ์ด๊ณ ๋ณ๊ฒฝ ๊ฐ๋ฅํ ๊ตฌ์กฐ ์ฒดํ ์ ํ ๋ง ์ฐธ์กฐํ๋ ๊ฒ์ด ์ด์ํ๊ฒ ๋ณด์
๋๋ค.type
๊ฐ ๊ฐ์ฅ ๋ช
๋ฐฑํ ์ ํ ์ ์ ํค์๋์ด์ง๋ง ์ผ๋ฐ์ ์ผ๋ก immutable
๊ฐ ๋ฐ๋์งํ๊ณ ๊ถ์ฅ๋ฉ๋๋ค.๋ค์์ ๋ช ๊ฐ์ง ๋์ฒด ํค์๋ ์ ์์ ๋๋ค.
mutable
- immutable
๋ฐ๋!struct
-์ ์ด๋ ๊ทธ๊ฒ์ด ์ด๋ค ์ข
๋ฅ์ ์ ํ์ธ์ง์ ๋ํด ๋งํ์ญ์์คreftype
- "์ฐธ์กฐ ์ ํ"์ฉ์ผ๋ก ์ผ๋ถ ์ฃผ์ ์์ฑ๋ ์ ๋ฌํฉ๋๋ค.type
๋ผ๋ ๋จ์ด๋ฅผ ๋ค๋ฅธ ์ปจํ
์คํธ์์ ์ฌ์ฉํ ์์๊ฒ ๋ง๋๋ ๊ฒ์ด ์ข์ต๋๋ค.
์ผ๊ด์ฑ์ ์ํด mutable
์ ์ข์ํฉ๋๋ค.
์ด ์์
์ด ์๋ฃ๋๋ฉด 0.6
ํฌํจ๋ ์ ์๋๋ก ์ต๋ํ ๋นจ๋ฆฌ ์ํํด์ผํฉ๋๋ค.
์ด๊ฒ์ด ์ผ์ด๋ ๊ฒฝ์ฐ, ์๊ฐํ๊ธฐ ์ ์ ๋ชจ๋๊ฐ ์ธ์ํ๋ ๊ฒ์ ์ฌ์ฉํ๋ ๊ฒ๋ณด๋ค : struct
type
๋ ์กฐ๊ธ ์ด์ํ๋ค๊ณ ์๊ฐํฉ๋๋ค. ๋ค๋ฅธ ์ฌ๋๋ค์๊ฒ ์ค๋ช
ํ ๋ ๋ณดํต "๊ตฌ์กฐ์ฒด์ฒ๋ผ"์ด๋ผ๊ณ ๋งํ๋ฏ๋ก +1ํฉ๋๋ค.
์ด๊ฒ์ด ์ผ์ด๋ ๊ฒฝ์ฐ, ์๊ฐํ๊ธฐ ์ ์ ๋ชจ๋๊ฐ ์ธ์ํ๋ ๊ฒ์ ์ฌ์ฉํ๋ ๊ฒ๋ณด๋ค :
struct
immutable
์ด ๊ตฌ์กฐ์ฒด์ ๊ฐ๋ค๊ณ ์๊ฐ ํ๋์?
mutable
+1
immutable
์๋ C ๊ตฌ์กฐ์ฒด์ ๋ฉ๋ชจ๋ฆฌ ๋ ์ด์์์ด ์์ต๋๋ค.
type
์๋ C ๊ตฌ์กฐ์ฒด์ ๋ณ๊ฒฝ ๊ฐ๋ฅ์ฑ์ด ์์ต๋๋ค.
๋ฐ๋ผ์ ๊ตฌ์กฐ์ฒด๋ ๋ ๋ค์ ๊ด๋ จ๋ฉ๋๋ค. mutable
๋์ struct
๊ฐ ์ด๊ฒ์ ๋ช
ํํํ๋ ๊ฒ์ด ๋ ๋ซ๋ค๊ณ ์๊ฐํฉ๋๋ค.
๋ชจ๋ ๋ณ์๋ ๋ณ๊ฒฝ ๊ฐ๋ฅํฉ๋๋ค. ์ด ๋ ์ด๋ธ์ ๋ณดํธ์ ์ผ๋ก ์ธ์๋๋ ์ด๋ฆ ( struct
)์ ํ ๋นํ๋ฉด ์ด์์๊ฐ ๋ช
ํ ํด์ง๋๋ค.
Fortran์์ ์จ ๋๊ตฐ๊ฐ์๊ฒ type
ํค์๋๋ ์ด๋ฏธ ์์ฐ์ค๋ฌ์ด ๊ฒ์
๋๋ค.
C์์ ์จ ์ฌ๋์๊ฒ๋ struct
ํค์๋๊ฐ ์์ฐ ์ค๋ฝ์ต๋๋ค.
immutable
๋ฅผ ๋ง์ด ์ฌ์ฉํ๋ ์ฌ๋์๊ฒ๋ ๋ฐ๋ ํค์๋ ์ธ mutable
๊ฐ ๋น์ฐํฉ๋๋ค.
๋ฐ๋ผ์ ์ฐ๋ฆฌ๋ ๊ทธ๋๋ก ๋์ด์ผํฉ๋๋ค.
struct{mutable}
struct{immutable}
๋๋
record{mutable}
record{immutable}
๋ ์ค๋ช ์ ์ธ ์์์ด ํ์ํ ๊ฒฝ์ฐ.
struct
๋ฅผ ์ฌ์ฉํ๋ฉด ๋ถ๋ณ์ ๊ตฌ๋ฌธ์ immutable struct
๊ฐ ๋ ์ ์์ต๋๋ค ( struct
๋ถ๋ถ์ ์ต์ํ ์ด๊ธฐ์๋ ์ ํ ์ฌํญ ์).
Fortran ํ๋ก๊ทธ๋๋จธ๋ "struct"๋ผ๋ ์ฉ์ด์ ์ต์ํ๋ค๊ณ ์๊ฐํฉ๋๋ค.
์ผ๊ด์ฑ ๋๋ฌธ์ mutable
+1. struct
๋ฅผ ์ ํํ ๊ฒฝ์ฐ ์ผ๊ด์ฑ์ด const struct
์ ๊ฐ์ ๋ณ๊ฒฝ ๋ถ๊ฐ๋ฅํ ๋ณ๊ฒฝ์ ์ง์ํ์ง ์์ต๋๊น? ;)
struct
์ immutable struct
๊ฐ ์ค์ ๋ก ๊ฝค ์ข์ ๊ฒ ๊ฐ์ต๋๋ค. struct
์ ๋งค์ฐ ์ต์ํ ์ฉ์ด์ด๋ฉฐ ์ ํค์๋๋ฅผ ํ๋๋ง ์ถ๊ฐํ๋ฉด๋ฉ๋๋ค. ๋ฐ๋์ ํ์ํ ๊ฒ์ ์๋์ง๋ง mutable struct
ํ์ฉํ๋ ๊ฒ๋ ์๋ฏธ๊ฐ์์ ์ ์์ต๋๋ค.
struct
๋ช
์ฌ๊ฐ ์ฅ์ ์ด๋ผ๊ณ ์๊ฐํฉ๋๋ค. ํ์ฉ์ฌ ๋ง ์ฌ์ฉํ์ง ์๋ ๊ฒ์ด ์ข์ต๋๋ค.
struct
๋ฅผ immutable struct
์ถ๊ฐํ๋ฉด ๋ถํ์ํ ๋ผ์ธ ๋
ธ์ด์ฆ๊ฐ ์ถ๊ฐ๋๋ฏ๋ก ์
๋ ฅ ํ ํ์๊ฐ ์์์ต๋๋ค.
Otoh, Fortran์ด ์ฐ๋ฆฌ์ ๋งค์ฐ ์ ์ฌํ ์ผ์ํ๋ type
ํค์๋๋ฅผ ๊ฐ์ง๊ณ ์๋ค๊ณ ์๊ฐํฉ๋๋ค. ๊ทธ๋ฌ๋ ๋๋ ์ด๊ฒ์ ๋ณ๊ฒฝํ๋ ๊ฒ์ ์ซ์ดํ์ง ์์ต๋๋ค.
์์ @KristofferC ๊ฐ ์ณ์ต๋๋ค. ๋ํ ์ด๊ฒ์ด ๋ฌด์์ธ์ง ์ค๋ช
ํ ๋ "struct"๋ผ๊ณ ๋งํ๊ณ ์์ต๋๋ค. ๋ด๋ถ ํ ๋ก ์์๋ type
๋ฌธ์ ๊ฐ์์์ต๋๋ค. ๋๊ตฐ๊ฐ๋ " x
๊ฐ ์ ํ์ด๋ผ๊ณ ๊ฐ์ ํ์"๊ณ ๋งํ ๊ฒ์ด๊ณ , " type
ํค์๋๋ก ์ ์ธ ๋ ๊ฒ"์ ์๋ฏธํ๋์ง ๋ค๋ฅธ ์๋ฏธ์์ "์ ํ"์ ์๋ฏธํ๋์ง ๋ช
ํํ์ง ์์ต๋๋ค.
์ด๋ฌํ ์ด๋ฆ์ด ์ค์ ๋ก ํ
์ด๋ธ์์๋ ๊ฒฝ์ฐ ( s/type/new name/
๋ ์ฝ๊ฐ ๋
ํด ๋ณด์),์ด ๊ธฐํ๋ฅผ ์ต๋ํ ํ์ฉํ์ฌ ๊ธฐ๋ณธ ์ ์ธ์ ๋ณ๊ฒฝ ๋ถ๊ฐ๋ฅํ๊ฒ ๋ง๋๋ ๊ฒ์ด ์ข์ต๋๋ค.
๋ฐ๋ผ์ struct
๋ immutable
๋์ฒดํ๊ณ mutable [struct]
๋ type.
๋์ฒดํฉ๋๋ค.
์๊ฐ๋๋ก mutable์ ๋ํ ๋ ๋ค๋ฅธ ๊ฐ๋ฅํ ์ฉ์ด๋ Ref
์ผ ์๋ ์์ต๋๋ค.
๋ค๋ฅธ ๊ฐ๋ฅํ ์ด๋ฆ์ composite
. ์ด์ ๋ํ ์ผ๋ฐ์ ์ธ CS ์ฉ์ด๋ ๋ณตํฉ ์ ํ ์ด๊ธฐ ๋๋ฌธ์
๋๋ค. ํ์ง๋ง ์ฌ์ ํ mutable Foo
๋ฐ immutable Foo
๋ฅผ mutable struct Foo
๋ฐ immutable struct Foo
๋ณด๋ค ์ ํธํฉ๋๋ค โ struct
(๋๋ composite
๋๋ class
๋ฑ) ๋ถํ์ ํด ๋ณด์
๋๋ค.
: +1 : ๋ช ์ฌ๋ก
Julia์ ๋ฐ์ดํฐ ์ ํ์ ์ ์ฒด์ ์ผ๋ก ๋ ๊ฐ๋ ฅํ๊ณ ๋ฏธ๋ฌํ๊ณ "struct"๊ฐ ์ฝ๊ฐ ๋จ์ ํ ์ ์๊ธฐ ๋๋ฌธ์ Julia์์ struct
๋ณด๋ค ํญ์ type
๋ณด๋ค ๋ ์ข์ํ์ต๋๋ค (๋ด ๋ฐฐ๊ฒฝ์ _C_ ์์๋ ๋ถ๊ตฌํ๊ณ ). ์์ด๋์ด. ๋๋ ๋ํ ์ด๊ฒ์ด ์๋ก์ด ์ธ์ด์ด๊ธฐ ๋๋ฌธ์ ๋
ธ๋ จํ ํ๋ก๊ทธ๋๋จธ๋ค์ด ์ต์ํ ๊ด์ต์ ์ฝ๋งค์ฌ์๋ ์๋๋ค๊ณ ๋๋๋๋ค. "์ ์ผ ์ธ์ด๊ฐ ์ค๋ฆฌ์ ์ธ ์ฌ๋์๊ฒ ์ด๊ฒ์ ์ค๋ช
ํ๋ ๊ฐ์ฅ ์ข์ ๋จ์ด๋ ๋ฌด์์ผ๊น์"๋ผ๊ณ ์๊ฐํด์ผํฉ๋๋ค.
๋๋ ๋ํ ์ด๊ฒ์ด ๋ฌด์์ธ์ง ์ค๋ช ํ ๋ "struct"๋ผ๊ณ ๋งํ๋ ๊ฒ์ ๋ฐ๊ฒฌํ๋ค.
struct T
์๋ก ์จ ์ฌ๋์ ์๊ฐ ํ ๋ค์ T::DataType
๋งํ๋ฉด ::Type{T}
์ฌ์ฉํ์ฌ ๋์คํจ์น ํ ์ ์์ผ๋ฉฐ ์ค๋ฆฌ์์ "๊ฐ๋ ฅํ ์ ํ ์์คํ
"์ ์ค๋ช
ํ๋ค๊ณ ์์ํด๋ณด์ญ์์ค. ๋๋ ์ด๊ฒ์ด ๋จ์ง ๋๋ก ์๋๋ก ์๋์ด๋ฅผ ๋ ๊ฑท์ด์ฐจ๋ ๊ฒ์ด๋ผ๊ณ ์๊ฐํฉ๋๋ค.
๋ช ์ฌ๋ ์ฅ์ ์ด๋ค
: +1 : ๋ช ์ฌ๋ก
"mutable"๊ณผ ๊ฐ์ ๋ผํด์ด ๊ณ์ด ํ์ฉ์ฌ๋ ๋ฌธ๋ฒ์ ์ผ๋ก๋ ์์ฒด ์ธ์ด์ ๋ช ์ฌ๊ฐ ๋ ์ ์๋ค๋ ์ ์ ์ฃผ๋ชฉํ ๊ฐ์น๊ฐ ์์ต๋๋ค. ๊ทธ๋ ๊ธฐ ๋๋ฌธ์ "๋ณ์ด ํ์ ๋ช ์ฌํ์ ๋ฌด์์ธ๊ฐ"๋ผ๊ณ ๋ฌผ์ ๋ ์ฐ๋ฆฌ๋ ์ด๊นจ๋ฅผ ์ผ์ฑํ๋ ๊ฒ์ ๋๋ค. ๊ทธ๋ฌ๋ ์ฐ๋ฆฌ๋ ํญ์ "๋ณ์"๋ผ๊ณ ๋งํ๊ณ Julia-speak์์๋ "์ด๊ฒ์ ์ํด ๋ถ๋ณ์ ๋์ ํฉ์๋ค"๋ผ๊ณ ๋งํ ๊ฒ์ ๋๋ค. ๋ถํํ๋ ์ฒ์์๋ ์๋ฌธ๋ฒ์ ๊ฒ๋ฅด๋ง ์ด๊ทผ ๋๋ฌธ์ ์ด์ํจ์ ๋๋๋๋ค. ๊ทธ๋ฌ๋ ์ด๊ฒ์ ์์ด์์ ์์ฃผ ๋ฐ์ํ์ง๋ง (์ฐ๋ฆฌ๋ ๋ํ ํ๋์ค์ด์ ๋ผํด์ด๋ฅผ ๊ธฐ๋ฐ์ผ๋กํ๊ธฐ ๋๋ฌธ์) ์๊ฐ์ด ์ง๋จ์ ๋ฐ๋ผ ์ต์ํด์ง๋๋ค.
๋ง์ง๋ง์ผ๋ก, ์ฃผ์ ๊ฐ "๋ฏธ์น ์์ด๋์ด"์ด๊ธฐ ๋๋ฌธ์ ์ด๋ฌํ ํค์๋๋ ๋์ฒด๋ก ์๋ก์ด DataType
ํ๋ฏ๋ก ํค์๋๋ฅผ ์์ ํ ์ ๊ฑฐํ๊ณ ์์ฑ์๋ฅผ ์ฌ์ฉํ ์ ์์ต๋๊น?
# Similar-ish to current
MyType = DataType(
a::Int,
b::Float64
)
# A DataFrame-like constructor
MyType = DataType(a = Int, b = Float64)
๋๋ ์ด๊ฒ๋ค์ด ccall
์ฒ๋ผ ํน๋ณํ (์ ์ ์ผ๋ก) ํ์ฑ๋์ด์ผํ๋ค๊ณ ์๊ฐํ๋ฉฐ ์ง๊ธ์ ์ต์์์์๋ง ํธ์ถ ํ ์ ์์ต๋๋ค. (๋ํ-๋ชจ๋ ๊ฐ๋ฅ์ฑ์ ๋ค๋ฃจ๊ธฐ ์ํด Mutable <: DataType
๋ฐ Immutable <: DataType
๋ฐ BitsType <: DataType
๊ฐ ํ์ํ์ง ํ์คํ์ง ์์ผ๋ฉฐ ๋ฐ์ธ๋ฉ์ ๊ฒฝ์ฐ const
์๋ ์์ต๋๋ค).
๋ถ๋ณ์ด ๊ตฌ์กฐ์ฒด์ ๊ฐ๋ค๊ณ ์๊ฐ ํ๋์?
๋ถ๋ณ์๋ C ๊ตฌ์กฐ์ฒด์ ๋ฉ๋ชจ๋ฆฌ ๋ ์ด์์์ด ์์ต๋๋ค.
์ ํ์ C ๊ตฌ์กฐ์ฒด์ ๊ฐ๋ณ์ฑ์๊ฐ์ง๋๋ค.
๋ง์ต๋๋ค ... ์ ๋ Swift๋ฅผ ์๊ฐํ๊ณ ์์๋ ๊ฒ ๊ฐ์ต๋๋ค.
์ด๊ฒ์ด ๊ตฌ์กฐ์ฒด์ ํด๋์ค์ ๊ฐ์ฅ ํฐ ์ฐจ์ด์ ์ ๋๋ค. ๊ตฌ์กฐ์ฒด๊ฐ ๋ณต์ฌ๋๊ณ ํด๋์ค๊ฐ ์ฐธ์กฐ๋ฉ๋๋ค. ... ๋ฐ๋ผ์ ํฐ ๊ฐ์ฒด์ ๊ฒฝ์ฐ ์ฐธ์กฐ๊ฐ ์๋ ๊ฐ์ผ๋ก ์ ๋ฌ๋ฉ๋๋ค.
immutable
vs type
์ฒ๋ผ ๋ค๋ฆฌ๋ฉฐ Julia ๋ฐ์ธ๋ฉ์ ์๋ฏธ๋ก ์์ ๊ฐ๋ณ์ฑ์ ํ์ฉํ๋ ์ฐธ์กฐ ์ผ๋ฟ์
๋๋ค.
DataType
์๋ abstract
, bitstypes, ๋ณ๊ฒฝ ๋ถ๊ฐ๋ฅ ๋ฐ ๋ณ๊ฒฝ ๊ฐ๋ฅํ ๊ตฌ์กฐ์ฒด์ ๊ฐ์ ๋ชจ๋ ๋ช
๋ชฉ ์ ํ์ด ํฌํจ๋ฉ๋๋ค. ๋ฐ๋ผ์ type
๋ฅผ DataType
๋ก ๋์ฒดํ๋ ๊ฒ์ ๋ช
ํํ์ง ์์ต๋๋ค. ๋ํ "์ ๊ท"์๋๋ฆฌ์ค์๋ ๋ค๋ฅธ ๊ฒฐ๋ก ์ ๋ด๋ฆฝ๋๋ค. ::Type
๋ฐ ::DataType
type T
์ ์ ๋ ํญ๋ชฉ์ ์์ ์งํฉ์ ์ ํํ๋ฏ๋ก ์ด๋ฆ์ด ๋ค๋ฅธ ๊ฒ์ ๋ฏธ์น ์ผ์ด ์๋๋๋ค. . " struct
๋ Type
์ ํ ์ข
๋ฅ์
๋๋ค." type
๋ Type
"์ ํ ์ข
๋ฅ์
๋๋ค.
๋๋ ํ์ฉ์ฌ๊ฐ ์ค์ ๋ก ๋ช ์ฌ ์ญํ ์ ํ ์ ์๋ค๋ ๋ฐ ๋์ํฉ๋๋ค. ์๋ฅผ ๋ค์ด "์ด๊ฒ์ ๋ถ๋ณ์ ๋๋ค"๋ผ๊ณ ๋งํ ์ ์์ต๋๋ค. ์ค๋ช ์ด ์ถฉ๋ถํ์ง ์๋ค๊ณ ์๊ฐํฉ๋๋ค. _is_๊ฐ ๋ฌด์์ธ์ง ๋งํ์ง ์๊ณ , ๊ทธ๊ฒ์ด ๋ฌด์์ด๋ , ๋น์ ์ ๊ทธ๊ฒ์ ๋์ฐ๋ณ์ด์ํฌ ์ ์๊ฑฐ๋ ํ ์ ์๋ค๋ ๊ฒ์ ์๋ ค์ค๋๋ค.
๋๋ ์ ํ์ ๋ํด structure
๋ฐ mutable structure
๋ฅผ ์ข์ํฉ๋๋ค. ๋ณ์ ํ ๋น์ ๊ฒฝ์ฐ a = 1
๋ฐ mutable a = 1
์ ์์ต๋๋ค. ๊ธฐ๋ณธ์ ์ผ๋ก ์ผ๊ด์ฑ, ์ฝ์ด ์์ ๋ฐ ๋ถ๋ณ์ฑ์ ์ํ๋ค๋ ์๊ฐ์์ ๋ฒ์ด๋์ญ์์ค.
ํธ์ง : ๊ธฐ๋ณธ์ ์ผ๋ก ๋ณ๊ฒฝ ๊ฐ๋ฅ์ฑ์์ const
๋์ constant
๋๋ ํค์๋ ์๊ฐ ์ ์ ๋ฒ์ ์ struct
๋ const struct
์
๋๋ค. ๊ธฐ๋ณธ์ ์ผ๋ก ๋ชจ๋ ๋ณ์๋ฅผ const๋ก ๋ง๋๋ ๊ฒ์์ด ์์ ์์ ๋๋ฌด ํผ๋ ์ค๋ฌ์ธ ๊ฒ์ด๋ผ๊ณ ์๊ฐํฉ๋๋ค.
์ค๋ช ์ด ์ถฉ๋ถํ์ง ์๋ค๊ณ ์๊ฐํฉ๋๋ค. ๊ทธ๊ฒ์ด ๋ฌด์์ธ์ง ๋งํ์ง ์๊ณ ๊ทธ๊ฒ์ด ๋ฌด์์ด๋ , ๋น์ ์ ๊ทธ๊ฒ์ ๋์ฐ๋ณ์ด์ํฌ ์ ์๊ฑฐ๋ ํ ์ ์๋ค๋ ๊ฒ์ ์๋ ค์ค๋๋ค.
๊ทธ๊ฒ ์ข์ ์ ์
๋๋ค.ํ์ง๋ง ์ฐธ์กฐ ๋์ ๋ "๊ฐ"๋์์ "๊ตฌ์กฐ์ฒด ๋๋ ๋นํธ ์ ํ์
๋๊น?"๋ณด๋ค ์ค๋ช
ํ๋ ๊ฒ์ด ๋ ์ค์ํ๊ณ ํฅ๋ฏธ ๋กญ๋ค๊ณ ์๊ฐํฉ๋๋ค. (๋๋ถ๋ถ bitstype
๊ฐ ์์ฃผ ๋์ค์ง ์๊ธฐ ๋๋ฌธ์-๋ด๊ฐ ๋ง๋ ๋ชจ๋ Julia ์ ํ์ ๊ตฌ์กฐ์ฒด์
๋๋ค). ๋ถ๋ณ์ฑ์ ๋ฐ์ธ๋ฉ ์๋ฏธ์ ๊ฐ์ ์ํ ์ ๋ฌ์ ๊ฒฐ๊ณผ ์ผ๋ฟ์
๋๋ค.
struct
๋ bitstype
์ ํ์์ฑ์ ์์ ํ ์์ ๊ธฐ ์ํด @quinnj ์์ด ์์ด๋์ด ๋ฅผ ํฌํจ ํ ์๋ ์์ต๋๋ค.
immutable 32 Int32 <: Integer
๋๋ ๋นํธ ์๋ก ์ฅ์๋์ง ์์ ํ๋๋ฅผ ๊ฐ์ง ์ ์์ต๋๋ค.
immutable Int32 <: Integer
32
end
(์ผ๋ฐ์ ์ผ๋ก ๋ช ๋ช ๋ ํ๋์ ํผํฉ ๋ ๊ฒฝ์ฐ) ํ์ํ ๊ฒฝ์ฐ ํจ๋ฉ์ ์ฝ์ ํ๋ ๋ฐ ์ ์ฉ ํ ์๋ ์์ต๋๋ค.
๊ทธ ๋ค์์ ๊ฐ ํ์ ์ฌ์ด์ ๋จ์ง ์ ํ (ํ์ฌ ๋ถ๋ณ ๋ฌด์) ํ์ฌ ๊ฐ๋ณ ๋ฌด์์ธ์ง (์ฐธ์กฐ ํ ๋ -ํ์ง๋ง ์ ์ฌ์ ์ผ๋ก const
๋ฅผ ํธ์ถ ํ ๋ ๋ค๋ฅธ ์ด์ ๋ ๋ฏธ๋์ ํ๋ mutable
) ๋ฐ ์ ์ ํ ์ด๋ฆ์ด ํ์ํฉ๋๋ค. ๋ง์ง๋ง์ผ๋ก ๊ฐ ์ฐธ์กฐ ์ ํ์ struct
๋ฅผ ์ฌ์ฉํ๋ฉด Swift ํ๋ก๊ทธ๋๋จธ๊ฐ ํผ๋์ค๋ฌ์์ง๋๋ค.
bitstype
๊ฐ immutable
๊ฐ ๋์
๋ ์ดํ๋ก ๋ชจ๋ ์ฌ๋ผ์ง ๊ฒ์ ์ฌ์ค์
๋๋ค. ๊ทธ๋ฌ๋ ๊ตฌ์กฐ ๋ ๋นํธ๋ณด๋ค ๊ตฌ๋ณ ํ ๊ฒ์ด ๋ ๋ง์ต๋๋ค. ์ถ์ ์ ํ, ํํ (๋ถ๋ณ) ๋ฐ ํฅํ ๋ถ๋ณ ๋ ์ฝ๋๊ฐ ์์ต๋๋ค.
์๋ immutable
์ด๊ฒ์ด ๊ฐ์ฅ ๋์ ์ ๋๋ ํน์ง์ด๋ผ๊ณ ์๊ฐํ๊ธฐ ๋๋ฌธ์
๋๋ค. ๋ค๋ฅธ ๊ฐ์ฒด์ ๋ฌ๋ฆฌ ์์ ํ ์ ์์ต๋๋ค. ์ฌ์ค, ํญ์ ๊ฐ์ผ๋ก ์ ๋ฌ๋๋ ๊ฒ์ ์๋๋๋ค. ๋ถ๋ณ์ฑ์ ์ฐจ์ด๋ฅผ ๊ตฌ๋ถํ ์ ์์์ ์๋ฏธํฉ๋๋ค. ์ผ๋ถ immutable
๋ ๋ฐฐ์ด ๋ฐ ๊ธฐํ ๊ฐ์ฒด์ ์ธ๋ผ์ธ๋๊ณ ์ผ๋ถ๋ ๊ทธ๋ ์ง ์์ต๋๋ค. ๋ถ๋ณ์ฑ์ ์ฐจ์ด๊ฐ ์ผ๋ฐ ์ค๋ฆฌ์ ์ฝ๋์ ๋ฌธ์ ๋ฅผ ์ผ์ผํค์ง ์์์ ์๋ฏธํฉ๋๋ค. ๋ฉ๋ชจ๋ฆฌ ๋ ์ด์์์ด C interop๊ณผ ๊ฐ์ด ์ ๋ง๋ก ์ค์ํ ๊ฒฝ์ฐ์๋ง ๋ฌธ์ ๊ฐ๋ฉ๋๋ค.
์ฌ์ค, ํญ์ ๊ฐ์ผ๋ก ์ ๋ฌ๋๋ ๊ฒ์ ์๋๋๋ค.
์ข์ ์ง์ ! ๊ทธ๋ฌ๋ ๊ทธ๊ฒ์ ๋ฐ๊ฟ ๊ณํ์ด ์์ต๋๋ค.
1.0์ ๊ฐ๊น์์ง๊ณ ์๊ธฐ ๋๋ฌธ์ ๋ฏธ๋ ๋ณด์ฅ ๊ฐ๋ ์ ๋ฐ์ํ๋ ๋ฏธ๋ ๋ณด์ฅ ํค์๋ ์ธํธ๊ฐ ํ์ํ๋ค๊ณ ์๊ฐํฉ๋๋ค. ๋ถ๋ณ ํญ๋ชฉ์ด ์ธ๋ผ์ธ๋๋ฉด ๊ฒฐ๊ณผ ์๋ฏธ ์ฒด๊ณ์ ๊ด๋ จํ์ฌ ๋์์ด๋๋ ์ด๋ฆ์ผ๋ก ์ด๋ฆ์ ๋ฐ๊ฟ ์์๋ ํฉ๋ฆฌ์ ์ธ ์๊ฐ์ด ๋ ์ ์์ต๋๋ค (์ด๋ฌํ ์๋ฏธ ์ฒด๊ณ๊ฐ FFI์ ๋์์ด๋๋ ๊ฒฝ์ฐ ๋ ์ข์ต๋๋ค).
๋๋ ์ฌ๋๋ค์ด abstract
, Tuple
s ๋ฐ "records"์ ํผ๋๋๋ ์๋ก์ด ๊ตฌ์ฒด์ ์ธ ์ ํ ์ ์ ํค์๋๋ฅผ ์ป์ง ๋ชปํ ๊ฒ์ด๋ผ๊ณ ์๊ฐํฉ๋๋ค (์ฆ, ํ๋ ์ด๋ฆ์ด์๋ ์ ์ ๋ ํํ๊ณผ ๊ฐ์ ๊ฒ์ ์๋ฏธํ๋ค๋ฉด, ์ ์๊ฐ์๋ ๋๋ ๋ํ ์ด์ ์ "๊ตฌ์กฐ์ฒด"๋ผ๊ณ ๋ถ๋ฆฌ๋ ๊ฒ์ ๋ค์์ต๋๋ค ...).
"๊ฐ์ ์ํ ์ ๋ฌ"๊ฐ๋
์ ์ค์ ๋ชฉ์ ์ f(x)
(์ด๋ค ์๋ฏธ์์) ์์ ํ๋ฉด ์ด๋ป๊ฒ๋๋์ง์ ๋ํ ์ง๋ฌธ์ ๋ตํ๋ ๊ฒ์
๋๋ค. x
: ๋์ผํ x
์์ ํฉ๋๊น?
์ด์จ๋ immutable
๋ฐ mutable
๋ ํค์๋์ ๋ํ ์คํ ๊ฐ๋ฅํ ์ต์
์ด๋ผ๊ณ ์๊ฐํฉ๋๋ค.
๋ถ๋ณ์ด ๋์ ๋ ์ดํ๋ก bitstype์ด ๊ฑฐ์ ์ฌ๋ผ์ง ๊ฒ์ ์ฌ์ค์ ๋๋ค.
๊ฐ์ธ์ ์ผ๋ฐ์ ์ผ๋ก ์๋ก์ด ๋นํธ ์ ํ์ ๋ง๋ค ํ์๊ฐ ์์ง๋ง ๊ธฐ์กด ๋นํธ ์ ํ๊ณผ ์ผ๋ฐ ๋ถ๋ณ์ ์ฐจ์ด๋ ์ด๋ค์ ๋ํ ABI๊ฐ ๋งค์ฐ ๋ค๋ฅด๊ธฐ ๋๋ฌธ์ ์์ ์์ค์์ ๋งค์ฐ ์ค์ํฉ๋๋ค. ๋๋ถ๋ถ์ ๊ฒฝ์ฐ ์ฌ์ฉ์๋ ์๋ก์ด ๊ตฌ์ฒด์ ์ธ ๋ฐ์ดํฐ ์ ํ์ ์ ์ ํ ๋ bitstype์ด ์๋ ๋ณ๊ฒฝ ๋ถ๊ฐ๋ฅํ ๊ตฌ์กฐ์ฒด๋ฅผ ์ํฉ๋๋ค.
FWIW, ๋ณ๊ฒฝ ํ์ง ์๋ ๊ฒ์ ๋ํ ์ง์์ด ๋ง์ง ์์๊ธฐ ๋๋ฌธ์ type
๋ฐ immutable
๊ฐ ๊ด์ฐฎ๋ค๊ณ ์๊ฐํฉ๋๋ค.
( do
๊ตฌ๋ฌธ์ ๋๋ฅผ ๊ดด๋กญํ์ง ๋ง ... ;-)
๋ชจ๋ ๊ฒ์ "๊ณต์ ๋ฅผ ํตํ ์ ๋ฌ"์ ๋๋ค.
๋๋ ๊ทธ๊ฒ์ ์กด์คํ ์ ์์ผ๋ฉฐ ํ ๋ก ์ ๊ฐ์ฌ๋๋ฆฝ๋๋ค.
๋ชจ๋ ๊ฒ์ "๊ณต์ ๋ฅผ ํตํ ์ ๋ฌ"์ ๋๋ค.
์ฐธ๊ณ ๋ก, ์ ํ ์ ์ธ์ const
ํค์๋๊ฐ ์์ผ๋ฉด immutable
๊ฐ ์์ ํ ๋ถํ์ ํด์ง๋๋ค.
type Complex{T}
const re::T
const im::T
end
(์ปดํ์ผ๋ฌ๋์ด ์ ํ์ด ์๋์ผ๋ก ๋ณ๊ฒฝ ๋ถ๊ฐ๋ฅํ๋ค๊ณ ํ๋จ ํ ์ ์์ผ๋ฉฐ ์ฌ์ฉ์๋ const
์ ํ์ ์ฌ์ฉํ๋ฉด ๋ ๋น ๋ฅธ ์ฝ๋๋ก ์ปดํ์ผ ํ ์ ์์์ ์ดํดํ ์ ์์ต๋๋ค.) ๊ทธ๋ฌ๋ฉด type
๋๋ struct
์ด ์๋ฏธ๊ฐ ์์ต๋๋ค. setfield!
๋ ๋์ ๋ฌธ์๊ฐ ํผํฉ ๋ const
ํ๋์์ ๋นํ์ฑํ ๋ ์ ์์ต๋๋ค.
type
๋ฐ const type
์ด๋ป์ต๋๊น? -type ํค์๋๋ struct๋ณด๋ค ๋์๊ฒ ๋ ์ฐ์ํ๊ฒ ๋ค๋ฆฌ๋ฉฐ struct์ ๋๋ ๋ด๋ถ ์์ฑ์๋ฅผ ๊ฐ๋ ~ object๊ฐ ์๋ ๊ธฐ์ ๋ฉ๋ชจ๋ฆฌ ๋ ์ด์์์ ์ผ์ข
์ ์ฐ๊ด์ํต๋๋ค. ๋ณตํฉ ์ ํ์ '... ์ค๋ฆฌ์์์ ๊ฐ์ฅ ์ผ๋ฐ์ ์ผ๋ก ์ฌ์ฉ๋๋ ์ฌ์ฉ์ ์ ์ ์ ํ'์ด๋ฏ๋ก '์ ํ์ด ์ ํ์ ํ ์ข
๋ฅ'๋ผ๋ฉด ๊ทธ๋ ๊ฒ ๋์์ง ์์๊น์? '๋ณตํฉ ํ'์ ์ฌ์ฉํ๋ ์์ฌ ์ํต์์๋ ๋ด๊ฐ '์ถ์ ํ'์ด๋ผ๊ณ ๋งํ ๊ฒ๊ณผ ๋์ผํ๊ฒ ๋ช
ํํํด์ผํ๋ค. ๋ผ์ธ ๋
ธ์ด์ฆ์ ๊ด๋ จํ์ฌ 'const type'์ 'immutable'๋ณด๋ค ๋์์ง ์์ต๋๋ค.
๋ณ์์ ์ ํ์ด์๋ const
์ ์๋ฏธ์ (์ฝ๊ฐ) ์ฐจ์ด๊ฐ ์๋์ง ์ ๋ชจ๋ฅด๊ฒ ์ต๋๋ค. -์ด๋ค ๊ฒฝ์ฐ์๋ ์ ํ๊ณผ ๋ถ๋ณ์ ํญ์ ๋์๊ฒ ์์ ์ ์ ์ ๋ธ๊พน์ง์ ์ฃผ์๋ค. ์ฌ๊ธฐ์์ด ๋ฌธ์ ๋ฅผ ๋ง๋์ ๋ฐ๊ฐ์ต๋๋ค!
struct
์ฌ์ฉ์ ์ฃผ๋ ๋ฌธ์ ๋ ์ฌ๋๋ค์ด Julia์์ ๋ฐ๋์ ์ฌ์ค์ด ์๋ C / C ++์์ ์ต์ํ ๊ฐ์ ์ ์์ฐ์ค๋ฝ๊ฒ ๋ง๋ค ์ ์๋ค๋ ๊ฒ์
๋๋ค. ๋ถ๋ณ์
๋๋ค.
immutable
๊ฐ type
๋ณด๋ค ๋ ์ฐ์ํ๊ฒ ํํํ๋ ํจ๋ฌ๋ค์์ ๋ฌด์์
๋๊น? ์๋ฅผ ๋ค์ด, ์ํ๋ ํ๋๊ฐ ์
๋ฐ์ดํธ ๋ ์๋ณธ์์ ๋ณ๊ฒฝ ๋ถ๊ฐ๋ฅํ ์ ํญ๋ชฉ์ ์ธ์คํด์คํํ์ฌ ๋๊ธฐํ ๊ธฐ๋ณธ ์์์์ด ๋์์ ์ฌ๋ฌ ํ๋์ ์ํ๋ฅผ ์์ ์ ์ผ๋ก "์ ํ"ํฉ๋๋ค.
์ ํ์ด ๋์คํจ์น / ์ฌ์ฉ ์ง์ ์ด ์๋ ์ ์ ์ง์ ์์ ๋ ๊ฐ์ ๊ฐ๋ณ ๋ฒ์ฃผ๋ก ๋ถ๋ฆฌ๋์ด์ผํ๋ ์ด์ ๋ ๋ฌด์์
๋๊น (C ++์ const
์ ์ ์ฌ)? type
/ struct
/ composite
ํ์ฌ ๋ณตํฉ ์ ํ์ ์ ์ํ๊ณ Immutable{T}
๊ตฌ์กฐ๋ฅผ ๋์
ํ์ฌ ๋ณ๊ฒฝ ๊ฐ๋ฅ์ ๋ถ๋ณ์ผ๋ก ์น๊ฒฉํ๋ฉด ๋ค์๊ณผ ๊ฐ์ ๊ฒฐ๊ณผ๋ฅผ ์ป์ ์ ์์ต๋๋ค.
type CompositeType end
f(x::Immutable{CompositeType}) = x
a = f(CompositeType())
b = f(a)
๋ํ ์ฌ๊ธฐ์์ abstract
๋ฐ bitstype
๋ํ ๋ณ๊ฒฝ์ ๊ณ ๋ คํ ์ ์์ต๋๊น? AFAICT "abstract"์ ์ฉ๋ฒ์ ๋ช
์ฌ๊ฐ ์๋ ํ์ฉ์ฌ์
๋๋ค. ์ ํ ํค์๋ (๋ชจ๋ ๋ช
์ฌ, ๋ชจ๋ ํ์ฉ์ฌ ๋ฑ)์ ์ต์ํ ์ธ์ด ์ ์ผ๊ด์ฑ์ด ์์ด์ผํฉ๋๋ค. bitstype
๋ bits
๋๋ primitive
๋ก ๋ ์ ํํ ๋ ์ ์์ต๋๋ค.
Julia ํค์๋์ ์ฒ ์ (๋๋ ์๋ฏธ ์ฒด๊ณ!)์ ๋ํ ๋ณ๊ฒฝ ์ฌํญ์ ๋
ผ์ํ๊ธฐ ์ํด ์ด๊ฒ์ ๊ณต๊ฐ ์ค๋ ๋๋ก ๋ฐ๊พธ์ง ๋ง์ญ์์ค. ์ด ์์ ์์ ๋ฐฐ๋ type
๋ฐ immutable
์ ๊ธฐ๋ณธ _ ๋์ _์ผ๋ก ํญํดํ์ต๋๋ค. ์ฌ๊ธฐ์ ์ ๊ธฐ๋๋ ์ ์ผํ ์ง๋ฌธ์ ์ ์ฌ์ฑ์ ๋ ์ ๋ฐ์ํ๋ type
๋ฐ immutable
์ฒ ์๋ฅผ ์ฌ์ฉํ ์ ์๋์ง ์ฌ๋ถ์
๋๋ค.
๋๋ ๊ณ์ํด์ mutable
vs immutable
๋ฅผ ์ง์ํ๊ฑฐ๋์ด ์์ ์์ ๊ฐ์ฅ ํฉ๋ฆฌ์ ์ธ ๋ ๊ฐ์ง ์ต์
์ผ๋ก ๊ทธ๋๋ก ๋ก๋๋ค. ๋ค๋ฅธ ๊ฒ์ ๋ฌด์๋ฏธํ๊ฒ ํ๊ดด์ ์
๋๋ค.
@andyferris ์ ๋ ๊ทธ ์์ด๋์ด๋ฅผ ์ ๋ง ์ข์ํฉ๋๋ค. struct
๋ฐ const
์ด ์ข์ต๋๋ค. ๊ทธ๋ ๊ฒํ๋ค๋ฉด ๋ชจ๋ ํ๋์ const
๋ฅผ ์ธ ํ์๊ฐ ์๋๋ก const struct
๋๋ const type
๋ผ๊ณ ๋งํ ์๋ ์์ต๋๋ค. (1) ) ๋ฐ๋ผ์ ํ๋ ๋ณ ๋ถ๋ณ์ฑ์ ์๋ก์ด ๊ธฐ๋ฅ์ ์ฆ์ ์ถ๊ฐ ํ ํ์๊ฐ ์์ต๋๋ค. ๊ทธ ๊ธฐ๋ฅ์ ์ถ๊ฐํ๊ณ ์ถ๋ค๋ฉด ์ผ๊ด๋ ์ดํ๋ฅผ ์ฌ์ฉํ๋ ๊ฒ์ด ์ข์ต๋๋ค.
'๋ณตํฉ ์ ํ'์ ์ฌ์ฉํ๋ ํต์ ์์ ๋ช ํํํด์ผํฉ๋๋ค.
์ฐ๋ฆฌ๊ฐ ๊ฐ์ฅ ์ข์ํ๋ ์ด๋ฆ ์ง์ ๊ธฐ๋ฒ ์ค ํ๋๋ ํ ๋ฌธ์ฅ์ผ๋ก ๋๊ตฐ๊ฐ์๊ฒ ์ด๋ค ์ผ์ ์ค๋ช
ํ๊ณ ๊ฐ์ฅ ๋ง์ ์ผ์ํ๋ ๊ฒ์ผ๋ก ๋ณด์ด๋ ๋จ์ด๋ฅผ ๊ณจ๋ผ๋ด๋ ๊ฒ์
๋๋ค. ๊ทธ๋์ ๋์๊ฒ ์ด๊ฒ์ composite
๋ํ ํฌํ๊ฐ ๋ ๊ฒ์
๋๋ค.
์ ํ์ด ๋์คํจ์น / ์ฌ์ฉ ์ง์ ์ด ์๋ ์ ์ ์ง์ ์์ ๋ ๊ฐ์ ๊ฐ๋ณ ๋ฒ์ฃผ๋ก ๋ถ๋ฆฌ๋์ด์ผํ๋ ์ด์ ๋ ๋ฌด์์ ๋๊น (C ++์ const์ ๋ ๋น์ท ํจ)?
๊ฐ๋จํฉ๋๋ค. ๊ธ๋ก๋ฒ ๋ณด์ฆ์ ์ ๊ณตํ๋ ๊ฒ์ ๋๋ค. C ++์์ "const"๊ฐ์ฒด๋ ๋๊ตฐ๊ฐ์ ๋ํ non-const ์ฐธ์กฐ๊ฐ์๋ ๊ฒฝ์ฐ ์ฌ์ ํ ๋ณ๊ฒฝ ๋ ์ ์์ต๋๋ค.
๋ํ abstract ๋ฐ bitstype์ ๋ํ ๋ณ๊ฒฝ์ ์ฌ๊ธฐ์ ๊ณ ๋ คํ ์ ์์ต๋๊น?
์ ์์ํ์ญ์์ค. bitstype
์ ๊ฒฝ์ฐ ํค์๋๊ฐ ๊ฑฐ์ ์ฌ์ฉ๋์ง ์์ผ๋ฏ๋ก bits
์ ๊ฐ์ ์์ ์ ์ฉํ ๋จ์ด๋ฅผ ํ์น๊ณ ์ถ์ง ์์ต๋๋ค.
immutable
-> const type
๋ ๊ด์ฐฎ์ ๋ณด์
๋๋ค. type
-> composite
๋๋ struct
์ ํจ๊ป ์ฌ์ฉํ๋ฉด type
์์ต๋๋ค.
ํนํ @compat
์์ ์ง์ํ ์ ์๊ธฐ ๋๋ฌธ์ ์ด๋ก ์ธํด ๋ฐ์ํ ์์๋ ๋ชจ๋ ์ฝ๋ ๋ณ๋์ ๋ํด ๋งค์ฐ ๋ง์กฑ์ค๋ฝ์ง ์์ต๋๋ค. ์ด ์์
์ ์ํํด์ผํ๋ค๋ฉด ์
๊ทธ๋ ์ด๋ ๊ฒฝ๋ก๋ (1) 0.6์์ ์ ํค์๋ ๋์์ด๋ฅผ ๋์
ํ์ง๋ง ์ด์ ํค์๋ ๋์์ด๋ _don't_ ( @compat
๋ถ์กฑ์ผ๋ก ์ธํด), (2) deprecate์ ๊ฐ์์ผํ๋ค๊ณ ์๊ฐํฉ๋๋ค. 0.7์ ์ค๋๋ ๊ฒ.
bitstype
๊ฒฝ์ฐ ์ด๊ฒ์ primitive
์ ํ์ด๋ผ๊ณ ๋ถ๋ฅด๋ ๊ฒ์ ์ด๋ป์ต๋๊น? ํ์ฌ ์ด๋ฆ์ an isbits composite type
์ ์ ์ฌํ๊ธฐ ๋๋ฌธ์ ์ฝ๊ฐ ์ง์ฆ์ด๋ฉ๋๋ค.
Julia๊ฐ ๋ค๋ฅธ ์ธ์ด์ "def / func / elif"์คํ์ผ ์ฝ์ด๋ฅผ ์์ฃผ ์ฌ์ฉํ์ง ์๋ ๋ฐฉ์์ด ๋ง์์ ๋ญ๋๋ค. (Dn w abbrevs, kthx.) ๊ทธ๋์ mutable
๊ฐ struct
๋ณด๋ค ์น๋ฆฌํฉ๋๋ค.
FWIW, OCaml์ ๋ ์ฝ๋ ๋ฐ ๋ณํ (๊ตฌ์กฐ์ฒด ๋ฐ ๊ณต์ฉ์ฒด) ๋ฐ ๋ณ์นญ์ type
๋ฅผ ์ฌ์ฉํฉ๋๋ค. ํ์ค ML์ datatype
์ ์ฌ์ฉํ๋ค๊ณ ์๊ฐํฉ๋๋ค.
๋์นญ์ ์ข์ง๋ง mutable
์ค๋ช
์ด ์ถฉ๋ถํ์ง ์์ต๋๋ค. immutable
๋ ๋ง์ฐฌ๊ฐ์ง์
๋๋ค ( const type
์์ด๋์ด๊ฐ ๋ง์์ ๋ญ๋๋ค).
Steve๊ฐ ์ง์ ํ๋ฏ์ด ์ด๋ก ์ธํด ์ปค๋ฎค๋ํฐ ์ ์ฒด์ ์ฌ๊ฐํ ์ฝ๋ ๋ณ๋์ด ๋ฐ์ํ ์ ์์ต๋๋ค. ๊ทธ๋ฆฌ๊ณ ๊ทธ ํํ์ ๋ชจํธํฉ๋๋ค.
๋๋ ํ์คํ const type
์ฌ๊ฑด์ ๋ณธ๋ค; ๊ทธ๊ฒ์ net -1 ํค์๋๊ฐ ๋ ๊ฒ์ด๊ณ type๊ณผ immutable ์ฌ์ด์ ๊ด๊ณ๋ฅผ ๋ช
ํํํฉ๋๋ค. ํ์ง๋ง type
๋ฅผ ๋ค๋ฅธ ๋ฐฉ๋ฒ์ผ๋ก ์ฌ์ฉํ ์ ์๋ค๋ฉด ์ ๋ง ์ข์ ๊ฒ์
๋๋ค. ๊ทธ ํํ์ด ์์ผ๋ฉด ๋ณํ๋ฅผ ์ ๋นํํ๊ธฐ๊ฐ ํจ์ฌ ๋ ์ด๋ ต์ต๋๋ค. ๊ทธ๋ฌ๋์ด๋ฅผ์ํ ์ฝ๋ ์
๋ฐ์ดํธ๋ ๋งค์ฐ ์ฝ์ต๋๋ค. type
์ ๊ตฌ๋ฌธ์ ๊ธฐ๋ณธ์ ์ผ๋ก ๋ค๋ฅธ ์ปจํ
์คํธ์์ ์ฌ์ฉํ ์ ์์ต๋๋ค.
composite
/ const composite
๋ํ +1.
primitive
๋ composite
์ (๋) ํ์์ ๋ฐ๋ผ const
ํค์๋๊ฐ ์ถ๊ฐ ๋ ํ๋ฅญํ ์ฐจ๋ณํ ์์๋ผ๊ณ ์๊ฐํฉ๋๋ค.
๋ณ๊ฒฝ ๋ ์์๋ ์ผ๋ถ ๋นํธ์ ๊ตฌ๋ณํ๊ธฐ ์ํด (๋ฐ ์ผ๊ด์ฑ์ ์ํด) const primitive
๊ฐ ํ์ํฉ๋๊น? ๊ทธ๋์ ๋์นญ ์ ์ผ๋ก ์ฐ๋ฆฌ๋
primitive # something new...
const primitive # bitstype
composite # type
const composite # immutable
๋ณ๊ฒฝ ๊ฐ๋ฅํ ๊ธฐ๋ณธ ์ ํ์ด๋ผ๋ ๋ฌธ์ ๋ ๊ตฌํ๋์ด์ผํฉ๋๋ค ... (๋ฌผ๋ก ์ด๊ฒ์ ๋์ค์ ๋ฐ์ํ ์ ์์ง๋ง bitstype
-> const primitive
_now_ ๋ ๊ฐ๋จํ๊ฒ ๋งํ๋ฉด, ๊ฐ๋ณ์ฑ์ ์คํ์ ๊ฐ์ ธ ์ค๊ธฐ์ํ ์ข์ "์ฐ์ต"๋์์ด ๋ ์ ์์ง๋ง, ์ ๋ ๊ทธ๊ฒ์ ๋ํ ์ ๋ฌธ๊ฐ๊ฐ ์๋๋๋ค).
๋ง์ฐฌ๊ฐ์ง๋ก ๋ณตํฉ์ ๊ฐ๋ณ ํ๋์ const
์ ์ถ๊ฐํ๋ ์์ด๋์ด๋ ๋์ค์ ์ฝ๊ฒ ๊ตฌํํ ์ ์์ผ๋ฉฐ ๋ ์ข์ ์ ์ ๊นจ์ง์ง ์๋ ๋ณ๊ฒฝ์
๋๋ค.
๊ทธ๋ ๊ฒํ๋ค๋ฉด, (1) ๋ชจ๋ ํ๋์ const๋ฅผ ์ธ ํ์๊ฐ ์๋๋กํ๊ธฐ ์ํด const struct ๋๋ const type์ ๋งํ ์ ์๊ธฐ๋ฅผ ์ํ ๊ฒ์ ๋๋ค. (2) ์๋ก์ด ๊ธฐ๋ฅ์ ์ถ๊ฐ ํ ํ์๊ฐ ์์ต๋๋ค. ํ๋ ๋ณ ๋ถ๋ณ์ฑ. ๊ทธ ๊ธฐ๋ฅ์ ์ถ๊ฐํ๊ณ ์ถ๋ค๋ฉด ์ผ๊ด๋ ์ดํ๋ฅผ ์ฌ์ฉํ๋ ๊ฒ์ด ์ข์ต๋๋ค.
๋์๊ฒ ์๋ฒฝํ๊ฒ ์ดํด๋ฉ๋๋ค.
composite
๋ฐ์ดํฐ ํ์์ ๊ฒ์ ํ ๊ฒฐ๊ณผ ์ ์ด๋ Ada์ Visual Basic๋ ๊ทธ ์๋์ ๋ฐฐ์ด ํ์์ ํฌํจํ๋ค๋ ๊ฒ์ ์์์ต๋๋ค. (๊ทธ๋ ์ง ์์ผ๋ฉด ์ฝ๊ฐ ๋ฌด์์๋ก ๋ฐ๊ฒฌ๋์์ต๋๋ค : Haskell : ๋ชฉ๋ก๊ณผ ํํ (์ ์๊ฐ ์์ฒญ ๋์๋๋ผ๋); Python : ๋ชฉ๋ก, ํํ, dicts; Lisp : ๋ชฉ๋ก, ๋ฒกํฐ, ํด์ ํ
์ด๋ธ, ์ฌ์ฉ์ ์ ์ ํด๋์ค, ๊ตฌ์กฐ).
๋ฐ๋ผ์ ๋๋ ์ด์ type
์ ๊ฐ์ ๊ตฌ์กฐ์ ๋ํด ์ผ๋ง๋ ์ ํํ ํฉ์ฑ์ด ์๋์ง ๊ถ๊ธํฉ๋๋ค. (๊ทธ๋ฌ๋ ๋๋ ์ปดํจํฐ ๊ณผํ์๊ฐ ์๋๋ฉฐ ์ดํ / ๊ด๋ฒ์ํ ์๊ฐ์ด ๋ถ์กฑํฉ๋๋ค).
ํ , ๋ง์ ์ ์์ต๋๋ค.์ด ํน์ ์ ํ์ ์ ํ์ ํญ์ ๊ตฌ์กฐ์ฒด, ๊ตฌ์กฐ ๋๋ ๋ ์ฝ๋ (๋๋ ํด๋์ค ๋๋ ๊ฐ์ฒด)๋ผ๊ณ ํ๋ฉฐ "๋ณตํฉ"์ ๋ ๋์ ์ฉ์ด์ ๋๋ค. http://rosettacode.org/wiki/Compound_data_type์ ๋ง์ ์์ ๊ฐ
type
๋ฅผ ์๋ณ์๋ก ๋ณต๊ตฌํ๊ณ ๋ ๊ตฌ์ฒด์ ์ธ ์ด๋ฆ์ ์ฌ์ฉํ๋ ๊ฒ์ด ์ข์ต๋๋ค. ~ 0.6 ์ด์ ์ ์์ฑ๋ ๊ฑฐ์ ๋ชจ๋ ์ฌ์ํ ํจํค์ง์ ํ์์ ๋งค์ฐ ๋ถํ ํ ๊ฒ์
๋๋ค.
const
ํค์๋๋ฅผ ์ฌ์ฌ์ฉํ๋ค๋ ์์ด๋์ด๋ ์ ์ญ ๋ฒ์์์ const
๋ณ์ ๋ฐ์ธ๋ฉ๊ณผ ๋ถ๋ณ ํญ๋ชฉ ๋ด์ ํ๋ ๋ฐ์ธ๋ฉ const
์ ๋๋ฑ์ฑ์ ๊ฐ์กฐํ๋ฏ๋ก ์๋นํ ๋งค๋ ฅ์ ์
๋๋ค. ์ด๊ฒ์ immutable
๋ณด๋ค ์ข์ ํตํฉ๊ณผ ๋ ๋์ ์ด๋ฆ์ผ๋ก ๋ณด์
๋๋ค.
type
๋ฅผ ๋์ฒด ํ ์ด๋ฆ์ ๊ฒฝ์ฐ, struct
๋ ๋ชจํธํจ์ ์๋นํ ์ ํผํ๋ ๊ฒ ๊ฐ์ต๋๋ค ( "a mutable type"๋ฐ "immutable type"๋ฌธ๊ตฌ๊ฐ ๋๋ฌด ๋น์ทํ๊ฒ ๋ค๋ฆฌ๋ ๊ฒฝ์ฐ๊ฐ ๋ง์ต๋๋ค).
๋ค์์ ์๋นํ ๋ฉ์ ธ ๋ณด์ ๋๋ค.
struct A
a::Float64
end
const struct B
b::Float64
end
์ ํ์ ์๋ณ์๋ก ๋ณต๊ตฌํ๊ณ ๋ ๊ตฌ์ฒด์ ์ธ ์ด๋ฆ์ ์ฌ์ฉํ๋ ๊ฒ์ด ์ข์ต๋๋ค.
๋๋์ด ์ ์๋ฅผ ๋ฐํฅํ๋ค.
์ด๋ฆ์ ๋ณ๊ฒฝํ๋ ค๋ ๊ฒฝ์ฐ ์ง์ ์ค๋จ์ ์ด๋ป๊ฒ ์ฒ๋ฆฌ๋ฉ๋๊น? type
๋ฐ immutable
์ (๋) 0.6์์ ์ฌ์ ํ ์ ํจํ๋ฉฐ ์๋ง๋ 1.0์์๋ ๊ฒฝ๊ณ ์ ํจ๊ป ์ ํจํฉ๋๊น? Compat.jl
๋ ์ด๊ฒ์ ํฌ๋ช
ํ๊ฒ ์ฒ๋ฆฌ ํ ์ โโ์์ต๋๋ค. ์ธํฐ๋ท์์๋ ๋ง์ ๋ฌธํ (๋ธ๋ก๊ทธ ํฌ์คํธ, ํํ ๋ฆฌ์ผ ๋ฑ)์ ๊ฒฝ๊ณ ๋ฅผ ๋ณด์ฌ์ค ๊ฒ์
๋๋ค-์ด๋ณด์์๊ฒ๋ ์ฌ์ํ ์ฑ๊ฐ์ฌ์
๋๋ค.
์ ํ์ ์ฝ๊ฒํ๊ธฐ ์ํด ํ์๋ณด๋ค ๋ ์ค๋ type
๋ฐ immutable
๋ฅผ ์์ฝ ํ ์ ์์ต๋๋ค.
์ฐ๋ฆฌ๋ 1.0 ์ด์ ์ ๋๋ค. ์ด๊ฒ์ ๋ฐ๊ฟ ๋๊ฐ ์ง๊ธ์ด ์๋๋ฉด ์๋ฉ๋๋ค. ์ด์ ํค์๋๋ฅผ ๋ ์ค๋ ์ฌ์ฉํ ์ ์์ผ๋ฉด ์ํํ ์ ํ์ ๋ณด์ฅํ๋ ๋ฐ ํ์คํ ์ข์ต๋๋ค. ๋๋ ์ค์ ๋ช ๋ช ์ ๋ํ ๋ ผ์์ ์ ํ์ด ์๋ฏธํ๋ ๊ณ ํต์ ํผ๋ํ์ง ์์ ๊ฒ์ ๋๋ค.
๊ฐ์ธ์ ์ผ๋ก ๋๋ ๊ทธ๊ฒ์ struct
๋ผ๊ณ ๋ถ๋ฅด๋ ๊ฒ์
๋๋ค. ๋ผ๊ณ ํ
๋๋ ์ค์ ๋ช ๋ช ์ ๋ํ ๋ ผ์์ ์ ํ์ด ์๋ฏธํ๋ ๊ณ ํต์ ํผ๋ํ์ง ์์ ๊ฒ์ ๋๋ค.
๋ณํ๊ฐ ๋๋ฌด ๊ณ ํต ์ค๋ฝ๋ค๋ฉด ๋๋ ๊ทธ ๋ณํ์ ๋ฐ๋ ํ ๊ฒ์ ๋๋ค. 1.0 ์ด์ ์ ๋ณ๊ฒฝ์ ์ ๋นํ์ง๋ง ๋ฐ์ํ๋ ๋ชจ๋ ์ค๋จ๊ณผ ๋น๊ตํ์ฌ IMO๊ฐ ์ฌ๋ฐ๋ฅธ ์กฐ์น์ ๋๋ค.
@stevengj ๋ ์ง์ ์ค๋จ์ ์ํํ๋ ๋ฐฉ๋ฒ์ ๋ํ ์ข์ ์ ์์ ๋ฐ์์ผ๋ฉฐ @amitmurthy ๊ฐ ๋์ผํ ๊ฒฐ๋ก ์ ๋๋ฌ ํ ๊ฒ์ฒ๋ผ ๋ณด์ ๋๋ค (ํ์์๋ณด๋ค ํค์๋๋ฅผ ๋ ๊ธธ๊ฒ ์ ์ง). ์ฐ๋ฆฌ ๋ชจ๋์ด ์ธ์ด๋ฅผ ํ๋์ ์ฌ์ฉํด ์์ง๋ง ์์ง ์ด๊ธฐ ๋จ๊ณ์ด๋ฏ๋ก ๋ณ๊ฒฝํ๋ ๊ฒ์ ๋๋ ค์ํด์๋ ์๋ฉ๋๋ค. ์ด๊ฒ๋ ์ฝ๊ฒ ๊ฒ์ํ๊ณ ๊ต์ฒด ํ ์ ์์ต๋๋ค.
๊ณ์ํด์ struct
ํฌํํ๊ฒ ์ต๋๋ค. ๋๋ ์ด๊ฒ์ด ๋ง์ ์๋ฌธ๊ณผ ๋ถ๋ง์ ์ผ๊ธฐ ํ ๊ทธ๋ฌํ ๋ณํ ์ค ํ๋๋ผ๊ณ ์๊ฐํ์ง๋ง ์ค์ ๋ก ํจํค์ง / ์ฌ์ฉ์ ์ฝ๋๋ฅผ ์์ ํ๋ ๊ฒ์ ๊ทธ๋ฆฌ ์ด๋ ต์ง ์์ต๋๋ค.
immutable
-> const type
์ (๋) ์ ํญ์ด ๊ฐ์ฅ ์ ์ ๊ฒฝ๋ก ์ธ ๊ฒ ๊ฐ์ผ๋ฉฐ IMO๋ ํ์คํ ์ํ๋์ด์ผํฉ๋๋ค. ๋๋ ์ด๊ฒ์ด ํจ์ฌ ๋ ์ข์ ๊ฒ์ ์ค๋ช
ํ๋ค๊ณ ์๊ฐํฉ๋๋ค.
type
-> composite
๋ณด๋ค ์ ํ type
๊ทธ๋ฌ๋๋ณด๋ค ์ ํํ struct
๋ณด๋ค ์ ๊ฒํ๋ฉด์ ์ฉ์ด-Y struct
(ํ ์๋ก์ด ํ๋ก๊ทธ๋๋จธ). Jeff์ '์ด๋ณด์์๊ฒ ์ค๋ช
ํ๋ ๋ฌธ์ฅ ์ฐ๊ธฐ'ํ
์คํธ๋ฅผ ํต๊ณผํ๊ณ type
ํค์๋๋ฅผ ๋ณต๊ตฌํฉ๋๋ค. ๋จ์ ์ composite
๊ฐ ๋ค๋ฅธ ์ธ์ด๋ก ํ์๋์ง ์๋๋ค๊ณ ์๊ฐํฉ๋๋ค. ํผ์ ๊ฐ์ธ์.
type
-> struct
๊ฐ ๊ฐ์ฅ ์ ํํ์ง๋ง structure
๊ฐ ์ฝ์ด๋ณด๋ค ๋ ์๋ป์ง ์ ์์ต๋๋ค (์ฝ์ด๋ฅผ struct
์ฒ๋ผ ์ถ์
ํ๊ฒ ์๊ฐํ๋ ค๊ณ ํฉ๋๋ค eye()
์ ์์ด ๊ด์ ์์ ๊ฝค ์ญ๊ฒจ์ด ์ ํต์ด๋ผ๊ณ ์๊ฐํฉ๋๋ค).
bitstype -> primitive
๋ type
๊ฐ ๋ณ๊ฒฝ๋๋ฉด ์๋ฏธ๊ฐ ์์ต๋๋ค.
@tbreloff ๊ฐ ๋ง์ต๋๋ค. ํต์ฌ ๊ฐ๋ฐ์๋ค์ ๊ณผ๊ฑฐ์ ์ข์ ์ทจํฅ์ ๋ณด์๊ณ ๊ฒฐ๊ตญ ์ฌ๋๋ค์ ๊ทธ๋ค์ ๋ฆฌ๋๋ฅผ ๋ฐ๋ฅผ ๊ฒ์ ๋๋ค. ๊ณงํ์ธ์!
๋ช
์ ์ ์ผ๋ก ๋ณ๊ฒฝํ ํ์๊ฐ์๋ ํ immutable
์ด ํ์ค์ด์ด์ผํ๋ฏ๋ก ์ด๋ฆ ๋ณ๊ฒฝ์ด ๋ค์๊ณผ ๊ฐ์์ผํ๋์ง ๊ถ๊ธํฉ๋๋ค.
immutable
-> struct
type
-> mutable
๊ทธ๋ฐ ๋ค์ ๊ณตํต / ์์ ์ด๋ฆ์ด ๋ชจ๋ฒ ์ฌ๋ก์ด๋ฉฐ ๋ณ๊ฒฝ ๊ฐ๋ฅ์ฑ์ ์์ฒญํ๊ธฐ์ํ ๋ช ์์ ์ด๊ณ ๋ช ํํ ์ด๋ฆ์ด ์์ต๋๋ค.
bitstype
-> primitive
๋ ์ข์ํฉ๋๋ค ...
const
์ด ๊ธฐ๋ณธ๊ฐ์ด์ด์ผํ๋ค๊ณ ์๊ฐํ์ง ์์ต๋๋ค. ๊ธฐ๋ฅ์ ์ค์ด๋ ์ต์ ํ๊ฐ ๊ธฐ๋ณธ๊ฐ์ด๋์ด์๋ ์๋ฉ๋๋ค.
struct
๋ฐ const struct
๋ํ +1.
composite
๋ผ๋ ์ฉ์ด๋ ์ฝ๊ฐ ๋ ์ค๋ช
์ ์ด์ง๋ง struct
๋ ์งง๊ณ ์ผ๋ฐ์ ์ผ๋ก ๋ณตํฉ ์ ํ์ผ๋ก ์๋ ค์ ธ ์์ต๋๋ค.
bitstype
์ฒ๋ผ ๊ฑฐ์ ์ฌ์ฉ๋์ง ์๋ ๊ฒ์ ๋ํด ์ค์ ๋จ์ด๋ฅผ ํ์น์ง ์๋ ํธ์
๋๋ค. primtype
๋๋ primitivetype
?
bitstype
๋ฅผ primitive
์ ๊ฐ์ ๋ถ๋ช
ํ๊ฒ ๋ ๋์ ์ด๋ฆ์ผ๋ก ๋ณ๊ฒฝํ์ง ์์ผ๋ ค๋ฉด ๊ทธ๋๋ก ๋๋ ๊ฒ์ด ๋ ๋ซ๋ค๊ณ ์๊ฐํฉ๋๋ค.
-1 ~ struct
. C ํ๋ก๊ทธ๋๋จธ์ ์ด์ผ๊ธฐํ์ง ์๋ ํ ์ ํ ์ ์๊ฐ ๋ฌด์์ธ์ง ์ค๋ช
ํ๋ ๋ฐ์ด ์ฉ์ด๋ฅผ ์ฌ์ฉํ์ง ์๊ณ ๋ ์ด์์์ด ํธํ ๊ฐ๋ฅํ๊ณ ์์ฑ์ ๋น๊ต / ๋์กฐํ๋ค๋ ์ ๋ง ์ธ๊ธํฉ๋๋ค.
-1 ~ const
. C๋ ์ ๋์ ์ผ๋ก ์ต์ํ์ ํค์๋๋ฅผ ๊ฐ๋ ๋ฐฉํฅ์ผ๋ก ๊ฐ๊ณ , ์ด์ ์ฐ๋ฆฌ๋ ๋ฌธ๋งฅ์ ๋ฏผ๊ฐํ ์๋ฏธ๋ฅผ ๊ฐ์ง ๋ง์ ํค์๋์ ๊ฐํ ์์ต๋๋ค. ๋๋ ์ค์ ๋ก const
๊ฐ ์ด๋ฌํ ์ ํ์ ํต์ฌ ์์ฑ์ด ์๋๋ผ ๊ฐ ์ ํ (์ฐธ์กฐ ์ ํ๊ณผ ๋ฐ๋)์ด๋ผ๊ณ ์๊ฐํฉ๋๋ค.
ํ์ง๋ง ๋ค๋ฅธ ๋ฐฉํฅ์ผ๋ก ๊ฐ๋ฉด new
ํค์๋๋ฅผ ์ฌ์ฉํ๋ ๊ฒ์ ์ด๋ป์ต๋๊น?
new abstract Abstract
new value Value <: Abstract
Value() = new()
end
new primitive 8 BitsByte <: Abstract
new record Object <: Abstract
Object() = new()
end
new function WhyNot # equivalent to `function WhyNot end`
"๊ฐ ์ ํ"์ ๋ฌธ์ ๋ ์ธ์ด์ ๋งค์ฐ ๊น์ ์ฌ๋ ๋ง ์ดํดํ ์ ์๋ค๋ ๊ฒ์
๋๋ค. ์ ๊ท ์ฌ์ฉ์์ ๊ฒฝ์ฐ ํ๋๊ฐ ๋ณ๊ฒฝ ๋ถ๊ฐ๋ฅํ๋ค๋ ์ฌ์ค์ ์ฆ์ ์ง๋ฉดํ๊ฒ๋๋ _semantic_ ์ฌ์ค์
๋๋ค. ๊ทธ ๋ฐ์ ๋ชจ๋ ๊ฒ์ ๊ตฌํ ์ธ๋ถ ์ฌํญ์
๋๋ค. ๊ทธ๋์ ์ ๋ const
์ ํธํฉ๋๋ค.
๋๋ ๋น์ ์ด record ๋ก ์ด๋๋ก ๊ฐ๋์ง ์์ง๋ง, ์์งํ ๋๋์ด ์ฉ์ด๊ฐ struct
๋ณด๋ค ๋ ์ผ๋ฐ์ ์ด๋ผ๊ณ ์๊ฐํ๋ค. (๊ตฌ๊ธ "record type ruby"vs "struct type ruby"๋ฅผ ์ฌ์ฉํ๊ฑฐ๋ python, perl ๋๋ ์ผ๋ถ๋ฅผ ๋์ฒดํ๋๋ผ๋ ๋ค๋ฅธ ๋น C ์ธ์ด). record
๋ ํค์๋๋ก ์์ฝํ๋ ๊ฒ์ด ๋ถ๋๋ฌ์ด ๋ฐ๋ฉด struct
๋ ํ๋ก๊ทธ๋จ์์ ๋ค๋ฅธ ์ด๋ค ๊ฒ๋ ํ์ํ์ง ์์ ๊ฒ ๊ฐ์ ๊ฝค ์ ์ฉํ ์์ด ๋จ์ด๋ผ๋ ๋ฌธ์ ๋ ์์ต๋๋ค.
struct
๋ ๋งค์ฐ ์ผ๋ฐ์ ์ผ๋ก ์ฌ์ฉ๋ฉ๋๋ค. rosettacode๋ฅผ ์ดํด๋ณด๋ฉด ๋ค์์์ ์ฌ์ฉ๋ฉ๋๋ค.
algol, C, C #, C ++, lisp, D, elixir, forward, go, maxima, racket, rust, seed7, swift, visual basic ( structure
)
record
์ฌ์ฉ์ฒ :
ada, clojure, delphi, pascal, erlang, icon, modula-2, ์ผ๋ถ ๊ณํ
record
์ (๋) ์ด์ ์ธ์ด์์ ์ ํธ๋๋ ๊ฒ ๊ฐ์ต๋๋ค. ์์ฆ ํจ์ํ ํ๋ก๊ทธ๋๋ฐ์ด ๋์คํ๋จ์ ๋ฐ๋ผ ๊ตฌ์กฐ์ ์ผ๋ก ํ์ํ ๋ ๋ ์ฝ๋๋ฅผ ์ฐธ์กฐํ๋ ๊ฒฝํฅ์ด ์์ต๋๋ค.
ํฅ๋ฏธ๋กญ๊ฒ๋ seed7์ new struct
ํฉ๋๋ค.
A๋ ๋ณผ ์ ์ฌํ ๋นํธ struct
๊น์งํ๋ค ์ธ์ด๋ก ๊ทธ๊ฒ์ ๋ง๋ค๊ธฐ (์ ๋ง ๋จ์ด๋ฅผ ์๋ฃ ๋์? ํ ์์๋ ๋ณ๋์ ์ธ ๊ธ์์ด๋ค) function
๋์ func
, ๋ฑ๋ฑ. ๋๊ตฐ๊ฐ๊ฐ ์ธ์ด๋ฅผ ๊ฑฐ๋ถํ๋ ๊ฒ์ ์๋์ง๋ง ์ฌ์ ํ ...
structure
์ ์ค์ ๋ก PL / I ๋ฐ Visual Basic์์ ์ฌ์ฉ๋ฉ๋๋ค. VB์๋ structure immutable
์์ต๋๋ค. ๊ทธ๋ฌ๋ struct
์ ๋๋ฌด ํํด์ ๊ฑฐ์ ์๋ก์ด ๋จ์ด๊ฐ ๋ ๊ฒ ๊ฐ์ต๋๋ค.
์ฌ๊ธฐ์๋ ์์ด๋ฏผ ๋งํ๊ธฐ ๋ฌธ์ ๊ฐ ์๋์ง ๊ถ๊ธํฉ๋๋ค. ์ด ๋ฌธ๋งฅ์์ struct
๋ผ๋ ๋จ์ด์ ๋งค์ฐ ์ต์ํ ์ ์๊ฒ๋ structure
๊ฐ ๋ ์ด์ํ๊ฒ ๋๊ปด์ง๋๋ค. ๊ฐ์ ์ด์ ๋ก func
๋์ฐํ๊ณ function
์์ฐ ์ค๋ฝ์ต๋๋ค.
struct
์ ๋ค์ํ ํ๋ก๊ทธ๋๋ฐ ์ธ์ด์์ ์ฌ์ฉ๋๊ธฐ ๋๋ฌธ์ ๋
๋ฆฝ์ ์ธ ์ฉ์ด๊ฐ๋์ง ์์์ต๋๊น? structure
๋ผ๋ ๋จ์ด๋ (์ ์ด๋ ๋
์ผ ์ถ์ ์ธ ์ ์๊ฒ๋) ํจ์ฌ ๋ ์ถ์์ ์
๋๋ค. ์๋ฅผ ๋ค์ด ๊ทธ ์ ํ ๊ณ์ธต์๋ ํน์ "๊ตฌ์กฐ"๊ฐ ์์ต๋๋ค.
func
์ (๋) ๋
๋ฆฝ์ ์ธ ์ฉ์ด๊ฐ ์๋๋ผ ์ฝ์ด์
๋๋ค.
func๋ ๋์๊ฒ ๋ ๋ฆฝ์ ์ธ ์ฉ์ด๊ฐ ์๋๋ผ ๋จ์ง ์ฝ์ด์ ๋๋ค.
struct๋ ์ด๋ป๊ฒ ์ฝ์ด๊ฐ ์๋๊ฐ? ๋ง ๊ทธ๋๋ก ๊ตฌ์กฐ์ ์ฝ์ ์๋๋๊น, ์๋๋ฉด ์ ๊ฐ ๊ทธ ์ฉ์ด๋ฅผ ์คํด ํ์ต๋๊น? ๋น์ ์ func
๋ณด๋ค ๊ทธ๊ฒ์ ๋ ์ต์ํฉ๋๋ค. ๋ง์ ๊ฒ๋ค์ด "๋
๋ฆฝ์ ์ธ ์ฉ์ด"์ด๊ณ ๋ง์ ์ธ์ด์์ ๊ณตํต์ ์ด์ง๋ง, ๊ทธ๊ฒ์ด ์ค๋ฆฌ์๊ฐ ๋ ๋ซ์ง ์์ ๊ฒฝ์ฐ ์ ํต์ ๋ฐ๋ผ์ผํ๋ค๋ ๊ฒ์ ๋ฐ๋์ ์๋ฏธํ์ง๋ ์์ต๋๋ค. ๊ทธ๋ ๋ค๋ฉด ๊ทธ๊ฒ์ ๋ ์ข๊ฑฐ๋ ๋ ๋์ ๊ฒ์ ๋ํ ์ธ์์ด๊ณ , ๊ทธ๊ฒ์ ๊ฑฐ์ ๋ง์ ๋ฌธ์ ์
๋๋ค.
์ด์จ๋ , ๋๋ mutable
์ ํธํ๊ธฐ ๋๋ฌธ์ ๊ตฌ์กฐ์ฒด ๋ ๊ตฌ์กฐ์ฒด ๋ _ ๋๋ฌด _ ์ ๊ฒฝ ์ฐ์ง ์์ต๋๋ค. mutable์ ํ์ฌ immutable
๋ํด ํญ์ const
์์ฑํ๋ ๊ฒ์ ํผํ ์ ์์ต๋๋ค.
ํ์ง๋ง ๊ฒฐ๊ตญ struct
๋๋ strct
๋๋ stct
๋๋ strctr
๊ฐ ๋์ด๋ ๋ค๋ฅธ ์ธ์ด๋ก Julia๋ฅผ ๋ณ๊ฒฝํ ๊ฐ๋ฅ์ฑ์ ๊ฑฐ์ ์์ต๋๋ค. ๋ด ์ํ, ๊ทธ๋์ ... :)
์ด๊ฒ์ด ์์ด๋ก ์ดํด๋์ง ์๋ ๊ฒฝ์ฐ ์ฃ์กํฉ๋๋ค.ํ์ง๋ง struct
๊ฐ construct
์ ์ฝ์ด๊ฐ ์๋๋๋ค. ์ ์ด๋ ๋
์ผ์ด์์๋ Konstrukt
๋ผ๋ ๋จ์ด๊ฐ ๋ณตํฉ ์ ํ์ด ๋ฌด์์ธ์ง ์ค๋ช
ํ๋ ๋ฐ ํจ์ฌ ๋ ์๋ฏธ๊ฐ ์์ต๋๋ค.
์์ด์์ construct
๊ฐ ๋ช
์ฌ์ธ์ง ๋๋ ๋์ฌ๊ฐ ์์ด ๊ธฐ๋ฐ ํ๋ก๊ทธ๋๋ฐ ์ธ์ด์์ ์ฌ์ฉ์ ๋ฐฐ์ ํ๋์ง ์ ์์๋ ๊ฒฝ์ฐ :) ๋
์ผ์ด ๋๋ฌธ์ ์ฌ์ฉ์ด ๋์์ด๋ฉ๋๋ค.
struct
๋ TV, ASAP ๋ฐ LOL์ด ๋จ์ด ์ธ ๊ฒ๊ณผ ๊ฐ์ ๋ฐฉ์์ผ๋ก ์์ฒด ๋จ์ด์
๋๋ค. ๋๋ ์ฌ๋๋ค์ด "๊ตฌ์กฐ"๋ผ๊ณ ๋งํ๋ ๊ฒ์ ๊ฑฐ์ ๋ฃ์ง ๋ชปํฉ๋๋ค. ๋ด ๊ฒฝํ์ ๊ทธ ๋จ์ด๋ ๋งํ๊ณ ์ฐ์ฌ์ง "๊ตฌ์กฐ์ฒด"์
๋๋ค.
BTW : Matlab์ struct
๋ผ๋ ๋จ์ด๋ฅผ ์ฌ์ฉํฉ๋๋ค.
์์์ ์ธ๊ธ ํ๋๋ก OTOH๋ C # ๋ฐ Swift์์ struct
๊ฐ ์ ํ์ ํด๋นํฉ๋๋ค ( class
์ ๋ฐ๋). ๋ฐ๋ผ์ ๋ณ๊ฒฝ ๊ฐ๋ฅํ ์ ํ๊ณผ ๋ณ๊ฒฝ ๋ถ๊ฐ๋ฅํ ์ ํ ๋ชจ๋์ ๋ํด ์ ์ฌํ ์ฉ์ด๋ฅผ ์ฌ์ฉํ๋ ๊ฒ์ ์ด๋ฌํ ์ธ์ด์ ์ต์ํ ์ฌ๋๋ค์๊ฒ ์ค์ ๋ก ๋์์ด๋์ง ์์ต๋๋ค. ๊ทธ๊ฒ์ด ๊ฒฐ์ ์ ์ธ ์ง์ ์ธ์ง ํ์คํ์ง ์์ต๋๋ค ....
mutable
/ immutable
์ (๋) ๊ฐ์ฅ ๋ช
๋ฐฑํ ์ ํ ์ธ ๊ฒ์ฒ๋ผ ๋ค๋ฆฌ๋ฉฐ, ์ ๊ท ์ด๋ฏผ์์๊ฒ๋ ๋งค์ฐ ๋ถ๋ช
ํฉ๋๋ค.
struct
๋ฅผ ์ฌ์ฉํ๋ ๋ง์ ๋ค๋ฅธ ์ธ์ด๋ฅผ ๊ฐ์ํ ๋ ํด๋น ์ด๋ฆ์ ์ฌ์ฉํ๋ ๋ฐ ๋์ผํ ์๋ฏธ๊ฐ ํ์ํ๋ค๊ณ ์๊ฐํ์ง ์์ต๋๋ค.
๋๋ type
๋ฐ const type
๋ฅผ ๊ฐ์ฅ ์ข์ํ์ง๋ง type
ํค์๋๋ฅผ ํ๋ณดํ์ง๋ ๋ชปํฉ๋๋ค. type
๋ํด ๊ณํ๋ ๊ฒ์ด ๋ฌด์์ธ์ง ๋ชจ๋ฅด๊ธฐ ๋๋ฌธ์ ๋น์ฉ์ด ์ผ๋ง๋ ํฐ์ง ๋ชจ๋ฅด๊ฒ ์ต๋๋ค.
๊ทธ๋ฌ๋ type
๋ถ๋ถ์ ์ด๋ฏธ abstract
์์๋์ด ์์ผ๋ฏ๋ก mutable
๋ฐ immutable
์์ฒด๋ฅผ ์ฌ์ฉํ๋ ๊ฒ์ด ๊ฐ์ฅ ์ ํฉํฉ๋๋ค. ๊ทธ๋ฆฌ๊ณ immutable struct
๋ณด๋ค ์ ์ ํ์ดํ๊ณผ ์ฝ๊ฐ์ ๋ณํ (type-> mutable).
๋จ์ด ๊ตฌ์กฐ๋ (์ ์ด๋ ๋ ์ผ ์ถ์ ์ธ ๋์๊ฒ๋) ํจ์ฌ ๋ ์ถ์์ ์ ๋๋ค.
์ฐ๋ฆฌ๊ฐ ์ธ์ด์ ๋ํด ๋
ผ์ํ๋ ๋์ ๋ชจ๋ ์ฌ๋๋ค์ struct
์ธ ์ฝ์ด์ ์์ ๊ณผ์ ํ๊ฐํ๊ณ ์์ต๋๋ค. "๋ฐ์ดํฐ ๊ตฌ์กฐ"์ ์ค์๋ง์
๋๋ค. ๋ง์ฐฌ๊ฐ์ง๋ก type
๋ "๋ฐ์ดํฐ ์ ํ"์ ์ฝ์์
๋๋ค. ๋๋ ๋ฐฐ์ด์ด๋ ๋ฒํผ๋ ๋งํฌ ๋๋ฆฌ์คํธ์ฒ๋ผ ๋ฐ์ดํฐ ๊ตฌ์กฐ๋ผ๊ณ ๋งํ ์ ์์ง๋ง, struct
๋ ์ฒซ ๋ฒ์งธ ๊ณตํต ๋ฐ์ดํฐ ๊ตฌ์กฐ ์ค ํ๋๋ก์ ์ด๊ธฐ ๋ฃจํธ๋ฅผ ๊ฐ์ง๊ณ ์์ผ๋ฉฐ ์ปดํจํ
๋ด์์ ๊ทธ ์์ฒด์ ๋ ๊ตฌ์ฒด์ ์ธ ์๋ฏธ (๋ฐ๋ผ์ ์์ด ๋๋ ๊ธฐํ ๋ค์ดํฐ๋ธ ํ๋ก๊ทธ๋๋จธ์๊ฒ๋ structure
๋งํผ ์ถ์์ ์ผ๋ก ๋ค๋ฆฌ์ง ์์ต๋๋ค).
-1 ~
struct
. C ํ๋ก๊ทธ๋๋จธ์ ์ด์ผ๊ธฐํ์ง ์๋ ํ ์ ํ ์ ์๊ฐ ๋ฌด์์ธ์ง ์ค๋ช ํ๋ ๋ฐ์ด ์ฉ์ด๋ฅผ ์ฌ์ฉํ์ง ์๊ณ ๋ ์ด์์์ด ํธํ ๊ฐ๋ฅํ๊ณ ์์ฑ์ ๋น๊ต / ๋์กฐํ๋ค๋ ์ ๋ง ์ธ๊ธํฉ๋๋ค.
๋๋ struct
๋ํด ์ ํํ ์ด๋ฐ ์์ผ๋ก ๋๋๋๋ค. ํน๋ณํ ์ด์ ์์ด ์ค๋ฆฌ์์๊ฒ ์๋ก์ด ์ฉ์ด๋ฅผ ๋์
ํ ๊ฒ์ด๋ผ๊ณ ์๊ฐํฉ๋๋ค.
-1 ~
const
. C๋ ์ ๋์ ์ผ๋ก ์ต์ํ์ ํค์๋๋ฅผ ๊ฐ๋ ๋ฐฉํฅ์ผ๋ก ๊ฐ๊ณ , ์ด์ ์ฐ๋ฆฌ๋ ๋ฌธ๋งฅ์ ๋ฏผ๊ฐํ ์๋ฏธ๋ฅผ ๊ฐ์ง ๋ง์ ํค์๋์ ๊ฐํ ์์ต๋๋ค. ๋๋ const๊ฐ ์ด๋ฌํ ์ ํ์ ํต์ฌ ์์ฑ์ด๋ผ๊ณ ์๊ฐํ์ง ์์ง๋ง ์ฐธ์กฐ ์ ํ๊ณผ ๋ฐ๋๋๋ ๊ฐ ์ ํ์ด๋ผ๊ณ ์๊ฐํฉ๋๋ค.
Jeff๋ ๋์๊ฒ (๋งค์ฐ ์น์ ํ๊ฒ) ์๋ฏธ ๋ก ์ ์ผ๋ก ์ฌ๋ฌผ์ด ๊ฐ์ธ์ง ์ฐธ์กฐ์ธ์ง ์๊ดํ์ง ์๋๋ค๊ณ ์ค๋ช ํ์ต๋๋ค. ์ด๊ฒ์ ์๋ฏธ๋ก ์ด ์๋ ๊ตฌํ ์ธ๋ถ ์ฌํญ์ด๋ฉฐ ๋ฏธ๋์ ํฉ๊ธ ์๋์ _ ์ฐ๋ฆฌ๋ ์ ๊ฒฝ ์ฐ์ง ์์ ๊ฒ์ ๋๋ค _. ์ปดํ์ผ๋ฌ๊ฐ ์ํ๋ ๋ฐฉ์ (ํ์์ ๋ฐ๋ผ ์ผ๋ถ FFI ๋ณด์ฅ ํฌํจ)์ผ๋ก ๋ชจ๋ ๊ฒ์ด "๊ณต์ ๋ก ์ ๋ฌ"๋ฉ๋๋ค. ์ง๋ ๋ฉฐ์น ๋์ ์ ๋ ์ด๋ฏธ "๋ง๋ฒ์ ์ํ ๊ณต์ "๋ผ๊ณ ๋ถ๋ฅด๊ธฐ ์ํด ์์ผ๋ฉฐ ์ด๊ฒ์ด ์ ๊ฒ (์ด์์ ์ผ๋ก๋) ์๊ฐํ ํ์๊ฐ์๋ ์ ์ ์ ์๋ฐ์ ๋์ด์ฃผ๋ ๊ณ์๋ผ๊ณ ์๊ฐํฉ๋๋ค. @vtjnash ๋น์ ์ ๋ด๊ฐ ๊ฐ๊ณผ ์ฐธ์กฐ๋ก ์ด๋ป๊ฒ ๊ณ ์ํ๋์ง, ๊ทธ๋ฆฌ๊ณ ์ด๊ฒ์ด ์ปดํ์ผ๋ฌ์ GC ๋ฑ์ ์ํด ๋ค๋ฅธ ํจํค์ง์ ์ค๋ ๋์์ ์ด๋ป๊ฒ ๊ตฌํ๋๋์ง ๋ณด์์ต๋๋ค).
๋ฐ์ธ๋ฉ์ ๋ณ๊ฒฝ๋๊ฑฐ๋ ์ผ์ ํ ์ ์์ต๋๋ค ( const
ํ์ง๋ง constant
๋ ๊ฝค ๊ท์ฝ์ต๋๋ค). ๋ง์ฐฌ๊ฐ์ง๋ก ๋ณตํฉ ๋ฐ์ดํฐ ์ ํ ๋ด์ ํ๋ ๋ฐ์ธ๋ฉ์ ๋ณ๊ฒฝ๋๊ฑฐ๋ ์ผ์ ํฉ๋๋ค. ์ด๊ฒ์ด ๋ด๊ฐ ์ด์ ์ ๊ฐ ํ๋์ ๋ช
์ ์ ์ผ๋ก const
์ฒจ๋ถํ๋๋ก ์ ์ํ ์ด์ ์
๋๋ค. ์ด๋ ์๋ฏธ๋ก ์ ๋ช
ํํ๊ฒ ๋ง๋ค์์ต๋๋ค (์ ์ด๋ ๋์๊ฒ๋).
IMO ์ฐ๋ฆฌ๋ ์ด๊ฒ์ ๋ํด ์ด์ผ๊ธฐํ๊ธฐ ์ํด "mutability"๋ฐ "immutable"๊ณผ ๊ฐ์ ๋ฉ์ง ๋จ์ด๋ฅผ ์ฌ์ฉํ ํ์๊ฐ ์์ต๋๋ค. ๋ฌด์ธ๊ฐ๊ฐ ์๋ก์ด ๋ฌผ์ฒด์ ๋ฆฌ ๋ฐ์ธ๋ ๋ ์๋ ์๊ณ ๊ทธ๋ ์ง ์์ผ๋ฉด ์ผ์ ํฉ๋๋ค. struct
๋ฐ immutable
struct
์ ๊ฐ์ ๋ณต์กํ ์์ด ๋จ์ด์ ํ์์ฑ์ ์ค๋ฆฌ์ (์ฝ๋๋ฟ๋ง ์๋๋ผ)์ ๋ํ ๋ด๋ก ์์ ์์ ํ ์ ๊ฑฐํ๋ ๊ฒ์ ์ข์ ์ผ (๋ชฉํ, ์ฌ์ง์ด)๋ก ๊ฐ์ฃผ๋์ด์ผํฉ๋๋ค.
๋ํ "struct"๋ ์์ฒด ๋จ์ด (C์์ ์๋ฏธ) ์ธ ๋ฐ๋ฉด "structure"๋ ์๋ง๋ "๋ฐ์ดํฐ ๊ตฌ์กฐ"์ผ ๊ฒ์ ๋๋ค. ๋ ์ฝ๋ ์ ํ์ ์๋ฏธํ๋ ๊ฒฝ์ฐ "struct"๋ผ๊ณ ๋งํ ์ ์๊ธฐ ๋๋ฌธ์ ๋๋ค. ํ์ง๋ง ์ฌ๊ธฐ์ ๋ด C ๋ฟ๋ฆฌ๋ฅผ ๋ณด์ฌ์ฃผ๊ณ ์์ต๋๋ค.
๊ทธ๊ฒ์ ๋ํ ๊ณตํต์ ์ธ ๋ถ๋ถ์ ์์ต๋๋ค. defstruct
์๋ง๋ ์ฌ๊ธฐ์์๋ ๋๋ถ๋ถ์ ๋ค๋ฅธ ์์ ๋ณด๋ค ์ฌ์ํ ๊ฒ ๊ฐ์ง๋ง ์ฐ๋ฆฌ๊ฐ ์์ ๊ฑฐ๋ฅผ ํ๋ ํ : ํฐ ์๋ฆฌ๋ก ๋งํ๋ฉด immutable object
์ a mutable object
๊ตฌ์ ์ด ์ง์ฆ๋๊ฒ ๋น์ทํ๊ฒ ๋ค๋ฆฝ๋๋ค. ์ค๋ฆฌ์์ ์ ํ ์์คํ
์ ๋ํ ๋ํ๋ฅผ ํ์ ์ด์์ผ๋ก ์ด๋ ต๊ฒ ๋ง๋ค ๊ฒ์
๋๋ค. ํธ์ง : ์ด๊ฒ์ ์ด๋ฏธ์ด ์ค๋ ๋์์ ๊ฐ์ ธ์จ ๊ฒ ๊ฐ์ต๋๋ค.
type
-> struct
๋ฐ immutable
-> const struct
+1ํฉ๋๋ค. ๋๋ ์ด๊ฒ์ ๋ํด ํผ๋ ์ค๋ฌ์ธ ์ฌ๋์ ๋ง๋ ์ ์ด ์๋ค๊ณ ์๊ฐํฉ๋๋ค. ํนํ ๊ฐ๋จํ ์ค๋ช
ํ์.
type
๋ฅผ ๋ฐ๊พธ๋ ๊ฒ์ v0.6์์๋ ํ์ค์ ์ด๊ณ v0.8์์๋ ๋นํ์ค์ ์
๋๋ค. ์ฐ๋ฆฌ๋ ์ด๊ฒ์ํด์ผํฉ๋๋ค. ๋ช
ํํ ์์ฌ ์ํต๊ณผ ํํ์ ์ ์์ฑ์ ์ํด Julia์ ํ๊ณ ๋ ์ฌ๋ฅ์๋ณด๋ค ์ํํ๊ฒ ๋ง๋ค๊ณ ํฅ์์ํฌ ์์๋ ๊ธฐํ์
๋๋ค. ์ ํ์ ์ ์๋ํ๋ ์ํํธ์จ์ด๋ฅผ ๋ง๋๋ ๋ฐ ๋๋ฌด๋ ๋ง์ด ์ฌ์ฉ๋ฉ๋๋ค. ์ ํ์ ์ธ ๊ฒ๋ค์ ๋ํ ๋ ๋์ ์ด๋ฆ ์ง์ ์ ๊ฐ๋ ฅํ๊ฒ ์ธ๋ ค ํผ์ง๋ฉฐ Julia์๊ฒ ๋ ์ด์ผ๊ธฐ ๋ ๋ฏธ๋๋ฅผ ๊ฐ์ ธ๋ค ์ค ๊ฒ์
๋๋ค.
struct
์ฌ์ฉํ์ง ์์ ์ํ๋ก ๋๋ ๊ฒ์ด ์ข์ต๋๋ค. C์์ ๊ตฌ์กฐ์ฒด๋ ์ ํ ๊ณ ์ ํ๋์ ๊ณ ์ ์ํ์ค์ ๋ํ ๊ตฌ๋ฌธ ์ปจํ
์ด๋์
๋๋ค. Julia๋ C๊ฐ ์๋๋ฉฐ C-ism์ Julian ๋ด๋ก ์ผ๋ก ๋์ด ๋ค์ด๋ฉด Julia์ ์ธก๋ฉด์ ๊ฐ๋
ํํ๋ ์ต์์ ์ฌ์ฉ๊ณผ ๋ ๋์ ๋ฐฉ๋ฒ์ ๋ํ ์ง์งํ ํ ๋ก ์์ Julia์ ์ผ์์ ์ธ ์ฑ๊ฒฉ์ ๋ฐ์ด ๋ผ ์ ์์ต๋๋ค.
๋ํ "๋ถ๋ณ"๊ณผ "๋ณ์ด ๊ฐ๋ฅ"์ ์๊ฐ์ ์ผ๋ก ๋๋ฌด ์ผ์นํฉ๋๋ค. ์ฐ๋ฆฌ๋ ๋ ์ํ ์ ์์ต๋๋ค.
immutable ComplexNumber ... end
alterable MethodTable ... end
@JeffreySarnoff ์์ผ๋ก ์ปค๋ฎค๋ํฐ ํ์ค ์ ๋ฐ๋ผ Julia๋ฅผ "๊ทธ๊ฒ"์ด๋ผ๊ณ ๋ถ๋ฅด๋ ๊ฒ์ด ์ข์ต๋๋ค. ๋ด๊ฐ ์ธ๊ธ ํ ๊ฒ์ด๋ผ๊ณ ์๊ฐํ์ต๋๋ค. ๐
@ararslan Julia์ ๋ํ ์ปค๋ฎค๋ํฐ ํ์ค ์ง์นจ์ด ๋ณ๊ฒฝ๋ ๊ฒ์ผ๋ก ๋ณด์ด๋ฉฐ ์ด์ ๋ฌธํ ๋๋ช ์ฌ ์ ์ฉ์ ํผํฉ๋๋ค. ๊ด์ฌ์ ๊ฐ์ ธ ์ฃผ์ ์ ๊ฐ์ฌํฉ๋๋ค. :ํฌ๋ฆฌ์ผ:
์ฌ์ฑ ๋๋ช ์ฌ๋ฅผ ์ฌ์ฉํ๋ ๊ฒ์ ๊ทธ ์์ฒด๋ก ๋์์ง๋ ์์ง๋ง (๊ทธ๋ฆฌ๊ณ ๋ง์ ์ธ์ด์์ ํผํ ์์๋) ๋ง์ ์ฌ๋๋ค์ด "๊ทธ๋ "๋ผ๋ ์ฉ์ด๋ฅผ ์ฌ์ฉํ๋ ๊ฒ์์ ๋จ๊ฑฐ์ด ๋ฐ์ดํธ๋ก ์ค๋ฆฌ์์ ๋ํด ์ด์ผ๊ธฐํ๋ ๊ฒ์ผ๋ก ์ ํํ๋ ๊ฒ์ ๊ฑฐ๋ถ ํ ์์๋ ๊ฒ์ผ๋ก ๋ณด์ ๋๋ค. ๊ฐ๋ฅํ ํ ๋ง์ด ์ ํน์ ํผํ์ญ์์ค.
๊ณ ๋ง์
2016 ๋
11 ์ 3 ์ผ ๋ชฉ์์ผ ์คํ 4:29, Stefan Karpinski [email protected]
์ผ๋ค :
์ฌ์ฑ ๋๋ช ์ฌ๋ฅผ ์ฌ์ฉํ๋ ๊ฒ์ ๊ทธ ์์ฒด๋ก ๋์์ง ์์ต๋๋ค.
์ธ์ด), ๊ทธ๋ฌ๋ ๋ง์ ์ฌ๋๋ค์ด ์ฌ์ฉ์์ ๋ฐ์ด ๋ด๋ฆฌ๋ ๊ฒ์ ๊ฑฐ๋ถ ํ ์ ์๋ค๊ณ ์๊ฐํ๋ ๊ฒ ๊ฐ์ต๋๋ค.
"๊ทธ๋ "๋ผ๋ ์ฉ์ด๋ ์ค๋ฆฌ์๋ฅผ ๋จ๊ฑฐ์ด ๋ฐ์ดํธ๋ก ๋งํ๋ ๊ฒ์ด๋ฏ๋ก
๊ฐ๋ฅํ ํ ๋ง์ด ์ ํน์ ํผํ์ญ์์ค.โ
๋น์ ์ด ์ธ๊ธ ๋์๊ธฐ ๋๋ฌธ์ ์ด๊ฒ์ ๋ฐ๊ณ ์์ต๋๋ค.
์ด ์ด๋ฉ์ผ์ ์ง์ ๋ต์ฅํ๊ณ GitHub์์ ํ์ธํ์ธ์.
https://github.com/JuliaLang/julia/issues/19157#issuecomment -258264451,
๋๋ ์ค๋ ๋ ์์๊ฑฐ
https://github.com/notifications/unsubscribe-auth/ABmqxopTX8oWKbwnLxfCBtIv-Ih7l-nXks5q6kRFgaJpZM4KkN_g
.
๋น๋ฉดํ ๋ฌธ์ ์ ๊ด๋ จํ์ฌ ์ ๋ ๊ฐ์ธ์ ์ผ๋ก ๋ฌด์์ด ์ต์ ์ ๋ณํ๋ผ๊ณ ์๊ฐํ ์ง ๊ฒฐ์ ํ์ง ๋ชปํ์ต๋๋ค. ๊ทธ๋ฌ๋ ์ค๋ฆฌ์์ ๋๋ผ์ด _type_ ์์คํ
์ ๋ํ ์ด์ผ๊ธฐ๋ฅผ ๋์๊ฒ ์ด์ํ๊ฒ ๋ณด์ผ ๋ค์ ์ ํ์ ๊ตฌ์ถ์ ์ฌ์ฉ ๋ ํค์๋๊ฐ ์ค์ ๋ก ์ง์ ์์ต๋๋ค struct
๋ณด๋ค๋ type
. ๋๋ ์ฌ๋๋ค์ด ๋์ ๊ตฌ์กฐ์ฒด๋ก ํ์
์ ๋ํด ์ด์ผ๊ธฐํ๋๋ก ์ฅ๋ คํ๊ณ ๊ฒฐ๊ตญ Julia๋ฅผ ์ค๋ช
ํ๋ ๋ฐ ์ฌ์ฉ๋๋ ์ธ์ด์ ๋ณํ๋ก ์ด์ด์ง ์ ์๋ค๊ณ ์๊ฐํฉ๋๋ค. ์๋ฅผ ๋ค์ด Julia์ ๋๋ผ์ด _struct_ ์์คํ
์ ๋ํด ๋
ผ์ํฉ๋๋ค.
์ ํ์ ๊ตฌ์ฑํ๋ ๋ฐ ์ฌ์ฉ๋๋ ํค์๋๋ ์ค์ ๋ก ์ ํ์ด ์๋ ๊ตฌ์กฐ์ฒด์ ๋๋ค.
๊ทธ๋ฌ๋ ํค์๋๋ ์ค์ ๋ก ์ ํ์ ๊ตฌ์ฑํ๋ ๊ฒ์ด ์๋๋๋ค. ์๋ฅผ ๋ค์ด Tuple{Int}
ํํ์๋ ์ ํ์ ๊ตฌ์ฑํฉ๋๋ค. type
๋ก ํ์ฌ ์ ์ ๋ ๊ฒ์ ํญ์ struct
s๋ผ๊ณ ํ๋ค๋ฉด ์ข์ ๊ฒ์
๋๋ค. Real
๊ฐ ์ ํ์ด๊ณ Union{Int8,Int16}
๋ ์ ํ ๋ฑ์
๋๋ค.
์, ์ด์ ๋ฉ๋ชจ๋ฅผ ํธ์ง ์ค์ด๋ฉฐ ๋ฐฉ๊ธ ์์ฑํ์ต๋๋ค. ๊ทธ๊ฒ์
์ค๋ฆฌ์์ "๋๋ด๊ณผ ๋จน์ด"์ ๋ง์ฐํด
ํํ๋ ฅ๊ณผ ๊ฐ๊ฒฐํจ์ ๋ฏธ๋ ๊ฐ๋ฐ. ๋ฌธ์
Julia์ ์ ํ ์์คํ
์ ํฉ๋ฒ์ ์ผ๋ก ๊ณ ๋ คํ๊ธฐ ์ํด ์ด์์ต๋๋ค.
C ๊ตฌ์กฐ์ฒด์ ๋น๊ณ๋ฅผ ์ค์นํ๋ฉด ์ ์์ด ์ฌ๋ผ์ง๋๋ค.
2016 ๋
11 ์ 3 ์ผ ๋ชฉ์์ผ ์คํ 4:38, Alex Arslan [email protected]
์ผ๋ค :
๋น๋ฉดํ ๋ฌธ์ ์ ๊ด๋ จํ์ฌ ์ ๋ ๊ฐ์ธ์ ์ผ๋ก ์ ๊ฐ ๋ฌด์์
์ต์ ์ ๋ณํ๋ฅผ ๊ณ ๋ คํ ๊ฒ์ ๋๋ค. ํ์ง๋ง ์ด์ผ๊ธฐํ๋ ๊ฒ์ด ์ด์ํด ๋ณด์ ๋๋ค.
Julia์ ๋๋ผ์ด _type_ ์์คํ ์ ์ฌ์ฉํ ๋ค์ ํค์๋๊ฐ
์ ํ ์์ฑ์ ์ค์ ๋ก ์ ํ์ด ์๋ ๊ตฌ์กฐ์ฒด์ ๋๋ค. ์๋ง๋
์ฌ๋๋ค์ด ์ ํ์ ๋ํด ๊ตฌ์กฐ์ฒด๋ก ์ด์ผ๊ธฐํ๋๋ก ์ฅ๋ คํ์ฌ ๊ฒฐ๊ตญ
์ค๋ฆฌ์๋ฅผ ์ค๋ช ํ๋ ๋ฐ ์ฌ์ฉ๋๋ ์ธ์ด์ ๋ณํ, ์๋ฅผ ๋ค์ด ์ค๋ฆฌ์์
๋๋ผ์ด _struct_ ์์คํ .โ
๋น์ ์ด ์ธ๊ธ ๋์๊ธฐ ๋๋ฌธ์ ์ด๊ฒ์ ๋ฐ๊ณ ์์ต๋๋ค.
์ด ์ด๋ฉ์ผ์ ์ง์ ๋ต์ฅํ๊ณ GitHub์์ ํ์ธํ์ธ์.
https://github.com/JuliaLang/julia/issues/19157#issuecomment -258266857,
๋๋ ์ค๋ ๋ ์์๊ฑฐ
https://github.com/notifications/unsubscribe-auth/ABmqxsZ_rXkn6GpVFxhd6TZnkkao9plWks5q6kZggaJpZM4KkN_g
.
type
๋ก ํ์ฌ ์ ์ ๋ ๊ฒ์ ํญ์struct
s๋ผ๊ณ ํ๋ค๋ฉดReal
๊ฐ ์ ํ์ด๊ณUnion{Int8,Int16}
์ ์ ํ ๋ฑ์ ๋๋ค.
ํ์ฌ ๊ทธ๊ฒ์ ๋ํด ํผ๋์ด ์์ต๋๊น? ๋๋ ๊ทธ๊ฒ์ ๋ํ ํ ๋ก ์ ๋์น ๊ฒ ๊ฐ์ง๋ง ๋์๊ฒ ๋ง์ ๊ฒ์ด ๋ถ๋ช ํด ๋ณด์๋ค๊ณ ์๊ฐํ๋ค.
@ararslan : type
๋ผ๋ ์ฉ์ด๋ ํ์ฌ ๊ตฌ์ฑ๋์ด์๋ ๊ฒ์ ๋ํ ์ผ๋ฐ์ ์ธ ์ฉ์ด์
๋๋ค. ํ์ฌ type
ํค์๋๋ก ๊ตฌ์ฑํ๋ ๊ฒ์ ๋ณตํฉ ์ ํ์ผ๋ก ๊ตฌ์ฑ๋ ๊ตฌ์กฐ์
๋๋ค. ๊ทธ๋ฌ๋ Julia ๋ด์๋ type
ํค์๋๋ฅผ ์ฌ์ฉํ์ฌ ๊ตฌ์ฑ๋์ง ์์ ๋ค๋ฅธ ์ ํ์ด ๋ง์ด ์์ต๋๋ค.
์๋์, ์ ๋ ํ์ฌ ๊ทธ๊ฒ์ ๋ํด ๋๋ฌด ๋ง์ ํผ๋์ด ์๋ค๊ณ ์๊ฐํ์ง ์์ง๋ง ํค์๋ struct
์ฌ์ฉํ๋ฉด ๋ชจ๋ ์ค๋ฆฌ์ ์ ํ์ด ๊ตฌ์กฐ์ฒด๋ผ๊ณ ์๊ฐํ์ง ์์ต๋๋ค.
์ข์์, ์ข์ ์ง์ ์ ๋๋ค.
Union {Int8, Int16}์ ์ ํ์ ๋๋ค.
์. Union
๋ ์กด์ฌํ๋ค๋ ์ฌ์ค์ ์์์ต๋๋ค. struct
( Struct
?)์ ๋ํ ์ฃผ์ฅ์ด ๋ ๋งค๋ ฅ์ ์
๋๋ค. IMO. ๊ทธ๋๋ mutable
๋ฐ immutable
๋ ๋ง์์ ๋ค์ง ์์ต๋๋ค.
๋๋ _struct_ ๋ถ๋ช
์์ค๋ฝ๊ณ ์ ๋ง๋ก ์ค๋ฆฌ์๋ฅผ ๊ฐ์ง๊ณ ๋ค๋๋ฉด ์๊ฐ์ด ์ง๋จ์ ๋ฐ๋ผ ์งํํ๋ ์๋ ๊ฐ์ด์คํธ๋ฅผ ์๋๋ก ๋์ด ๋น๊ธธ ๊ฒ์ด๋ผ๊ณ ์ ๋ง๋ก ๋ฏฟ์ต๋๋ค. ์๋ฆฌ๋ ์์ง์ด๋ ๋นํธ์ ์ค๋ช
๊ณผ ๋ ๋์ ์์ค์ ๋ฉ๋์ ๋ ๊น์ ๊ฒ ์คํ ํธ๋ก์์ ๊ณ์ฐ์ ์ด์ฉ๋ฉด ํํ ์ฌ์ด์ ์ ๋๊ฐ์
๋๋ค. struct
๋ฅผ ์ฌ์ฉํ๋ค๊ณ ํด์ ๋ชจ๋ ์ฌ๋๋ค์ด ๊ตฌ์กฐ์ฒด๊ฐ ์์ ์ ๋ฒ์ด๋ ์ ํ์ ์๊ฐํ๊ฒ๋๋ ๊ฒ์ ์๋๋๋ค. ... ๊ณผ์ฅ๋๊ฒํ์ ...
ํนํ ์ฌ๋ฌด์์ผ๋ก์ ์์ธ์ํ์ธ์ ๋ํด ๊ธ์ ์ฐ๋ ๊ฒ์ด ๊ทธ์ ๊ณตํ์ ๋ํ ๊ฐ์ฌ๋ฅผ ์ค์ด๋ ๊ฒ์ด๋ผ๊ณ ์ฃผ์ฅ ํ ์ ์์ต๋๋ค. ์๋ฒํธ ์์ธ์ํ์ธ์ ๋ํ ์ธ๊ธ์ด ํนํ ์ฌ๋ฌด์์ผ๋ก์์ ์๊ฐ์ ์ค์์ฑ์ ์ผ์์ ์ผ๋ก ํ๊ฐํ๋ ๊ณผ์ ์์ ๋ช ๋ช
์ด์์ ํ์๋ค์ด ํฅํ ๋ํ์์ ๊ทธ๋ฌํ ๊ฐ๊ฐ์ ์ ํ๊ฒ ๋ ๊ฒ์
๋๋ค. so
๊ฒ์ ์ ํ๊ต๋ก ์ด์ฌ ํ ํ so
๋ง ์๋ํ๋ ๊ฒ์ ๋ณด์ฅํ์ง ์์ต๋๋ค.
_struct_ ์ฌ์ฉ์ ๋ํ ์ค๋๋ ฅ์๋ ์ฌ๋ก๊ฐ ์๋ค๋ฉด ๋ค์ ์ค ํ๋์ ๋ํ ๋ ๋์ ์ฌ๋ก๊ฐ ์์ด์ผํฉ๋๋ค.
structure
๋ ์ ๋ณด์ ์
๊ฐ ํ ๊ตฌ์ฑ ์ธ ๋ถํ์ ์๋ฏธ์๋ ์ํธ ๊ด๊ณ์
๋๋ค.
construct
๋ ๊ฐ์น๋ฅผ ๋์ด๋ ๋์์ธ ์ธ ๊ด๊ณ์ ์ ์ฉํ ๊ตฌ์กฐ์
๋๋ค.
๋ถ๋ณ structure
๋ ์๊ตฌ ํฉ์ฑ๋ฌผ์
๋๋ค.
mutuable structure
๋ ๊ณ ์ ๋์ง ์์ ์ ํฅ์
๋๋ค.
๋ณ๊ฒฝ ๋ถ๊ฐ๋ฅํ construct
๋ ํ๋ฆฝ ๋ ๊ฒฐ๊ณผ์
๋๋ค.
๋ณ๊ฒฝ ๊ฐ๋ฅํ construct
๋ ์ปจํ
์คํธ์ ๋ํ ์๋์ ์ธ ์ ์ฝ์
๋๋ค.
์ฐ๋ฆฌ๋ "๋นํธ in place and through gates"๋งํ๋ ๋ฐฉ์๊ณผ "๋ฐ์ดํฐ ๊ตฌ์กฐํ๊ฐ ์กด์ฌ ๋ก ์ ์ ๋ณด๋ฅผ ๋๋ฌ๋ธ๋ค"๋ ๋ ๊ฐ์ง๊ฐ ๋ชจ๋ ํ์ํ๋ฉฐ, ์ด๋ ๋ณํ ์์ ์ ๋ฐฉ์์ผ๋ก ์ฌ์ฉํ ์ ์์ต๋๋ค. CS ์ฌ๋ฅ์ด์๋ ์ปค๋ฎค๋ํฐ ์ฐธ๊ฐ์์ ๋๊ท๋ชจ๋ก ํ๋ก๊ทธ๋จํ๋ ๋๋ถ๋ถ์ ๋ค๋ฅธ ๋๋ฉ์ธ ์ ๋ฌธ๊ฐ๋ ๋ฐ์ดํธ, ๋ฉ๋ชจ๋ฆฌ, ๋ ผ๋ฆฌ, ์ง์ ๋ ์์ ๋ฑ์ ์ฒ ์ ํ ์ฒ๋ฆฌํฉ๋๋ค. ์๋ง, ์ฐฝ์์ฑ, ๊ฐ๋ฅ์ฑ ๋ฐ ์์๋ ฅ์ ๋ง๋๋ ๋ค๋ฅธ ๋ฐฉ๋ฒ์ ์ ์๋ํ๋ ์ํํธ์จ์ด๊ฐ๋ฉ๋๋ค. ์์ ํ ๋งํ ๊ฐ์น๊ฐ ์์ต๋๋ค. ์ฉ์ด ๋ช ๋ช ์ ๋ํ ๋ชจ๋ ๊ฒฐ์ ์ ๊ทธ ์ฐ์ค์ ์ฅ๋ คํ๊ธฐ ์ํด ๋๋ฌํด์ผํฉ๋๋ค.
class
๋ฐ immutable
์ด๋ป์ต๋๊น?
๋ธํ์ด์ ํด๋์ค๋ฅผ ์๊ณ ์๊ณ ์ฌ๊ธฐ์๋ ๋ถ๊ฐ๋ฅํ๋ค๊ณ ์๊ฐํ์ง๋ง ๋ฉํฐ ๋ฉ์๋๊ฐ์๋ Nice ์ธ์ด์์๋ ํค์๋ ( link )๋ก ์ฌ์ฉ๋ฉ๋๋ค. ๊ทธ๋ฆฌ๊ณ -๋ด๊ฐ ๋งค๋ด์ผ์ ์ฌ๋ฐ๋ฅด๊ฒ ์ฝ์ผ๋ฉด-Haskell๊ณผ Dylan์์๋ ๋ง์ฐฌ๊ฐ์ง์ ๋๋ค. ๊ทธ๊ฒ์ "class is one kind of Type"ํ ์คํธ๋ฅผ ํต๊ณผํ์ง๋ง ์ฌ์ ํ ๊ฝค ๋ชจํธํฉ๋๋ค (์ค๋๋ ์ 'type'์ฒ๋ผ). 15:00-15:20 ๋ถ์ '๋ฐฐ์ด ๋ฐ ๋ฐ๋ณต ๊ฐ์'๋น๋์ค์์ Tim Holy (์ค์๋ก)๋ ์ค์ํ์ง ์์ ์ธ๋ถ ์ฌํญ ์ธ 'ํด๋์ค'๋ผ๊ณ ๋งํ์ง๋ง ๊ทธ๋ผ์๋ ๋ถ๊ตฌํ๊ณ Julia ์ปจํ ์คํธ์์ ํด๋์ค๊ฐ ์์ ํ ์ด์ง์ ์ด์ง ์๋ค๋ ๊ฒ์ ๋ณด์ฌ์ค ์ ์์ต๋๋ค.
๊ทธ๋ ์ง ์์ผ๋ฉด reftype
๋ฐ immutable
? reftype ์ฉ์ด๋ ์ด๊ธฐ ์ฃผ์์์ ์ธ๊ธ๋์์ผ๋ฉฐ ๊ทธ ์ดํ๋ก ๋ฌด์๋์์ต๋๋ค. ์? ๋์๊ฒ ๊ทธ๊ฒ์ ๊ฝค ์ข๊ฒ ๋ค๋ฆฌ๊ณ ์ ํ์ ํด์ ํ๊ณ ์ฐธ์กฐ ์๋ฏธ๋ฅผ ์ ๋ฌํฉ๋๋ค.
( 'new'ํค์๋์ ๋ชฉ์ ์ ์ดํดํ์ง ๋ชปํ์ต๋๋ค. ๋ณ๊ฒฝ์์ด ๋ชจ๋ ์ค์์ 'new'๋ฅผ ์๋ต ํ ์ ์์์ต๋๊น? 'value'์ 'record'์ฉ์ด๋ ํค์๋๊ฐ๋๊ณ ํ์ฌ ์ฌ์ฉ๋๋ 'immutable'์ ๋์ฒดํฉ๋๋ค. ๊ทธ๋ฆฌ๊ณ 'ํ์ '๋ง์ฃ ?)
@swissr ์ด ๋ ์ ํ์ ์ ์ผํ ์ฐจ์ด์ (๋๋ถ๋ถ์ ์ฌ์ฉ์๊ฐ ์๊ณ ์์ด์ผ ํจ)์ ํ ํ๋์ ํ๋๊ฐ ๋ณ๊ฒฝ ๋ ์ ์๊ณ ๋ค๋ฅธ ํ๋๋ ๋ณ๊ฒฝํ ์ ์๋ค๋ ๊ฒ์
๋๋ค. ๊ทธ๋ค์ ์ด๋ฆ์ด ์ ์ผํ ์๋ฏธ ๊ตฌ๋ณ์ ๋ํ๋ด๋ฉด ๋
ผ๋ฆฌ์ ์
๋๋ค. (์ธ๊ธํ๋ฏ์ด ๊ฐ๊ณผ ์ฐธ์กฐ๋ฅผ ์ฌ์ฉํ๋ ๊ตฌํ์ ์ ๋์ ์
๋๋ค. ์๋ฅผ ๋ค์ด ๊ฐ์ ๋ ์ปดํ์ผ๋ฌ๋ ์ต์ ํ๋ก ์ฐธ์กฐ์ ์ํด ํฐ isbits
์ ํ์ ์๋์ผ๋ก ์ ๋ฌํ ์ ์์ผ๋ฉฐ ๋ฐ๋๋ก ์์ ๊ฐ๋ณ์ ํน์ ์ํฉ์์ ์คํ์ผ๋ก ์ด๋ํ ์ ์์ต๋๋ค.)
type
๋ struct
์ ๊ด๋ จํ์ฌ abstract
, Union{}
, typealias
๋ฑ์ผ๋ก ์ถ์ ๋ฐ์ดํฐ ์ ํ์ ๋ง๋ค ์ ์์์ ์ ์ ์์ต๋๋ค. Tuple{}
์ ๊ฒฝ์ฐ ์๋ก์ด ์ ํ์ธ์ง ์๋๋ฉด ๋งค๊ฐ ๋ณ์ํ ๋ ์ ํ์ธ์ง ๋
ผ์์ ์ฌ์ง๊ฐ ์์ง๋ง ์ค์ ๋ก๋ _ ์ฌ์ฉ์ ์ ์ ๊ตฌ์ฒด์ ์ธ ์ ํ _์ bitstype
, type
๋ฐ immutable
์ด๊ฒ๋ค์ ๊ตฌ๋ฌธ์ ๊ทธ๋ค์ด ์ด๋ป๊ฒ ๋ ํฌํจํ๋ ๋ฐ์ดํฐ๋ฅผ ์ ์ํ๊ณ ์ถ์์ ์ธ ๊ฒ์ ์ ์ํ์ง ์๋๋ค๋ ์ ์์ ์ถ์์ ์ธ ์ ์์๋ ํ๋ฆผ ์๋ค. immutable
๋ฅผ const type
๋ก ๋ณ๊ฒฝํ๋ฉด ์ํฉ์ด ๋ช
ํ ํด์ง๋๋ค.
๋๋ ์ธ์ด์ ๋ํด ๊ฑฑ์ ํ๊ณ ์ ๋ฌธ์ ์ธ ๋จ์ด struct
๋ฅผ ์ ํํ๋ ๊ฒ์ ๋ํด ๊ฑฑ์ ํฉ๋๋ค. ์ ์ผํ ์ด์ ๋ ์ ํต์ด๊ธฐ ๋๋ฌธ์
๋๋ค. ์ฐ๋ฆฌ๊ฐ ํ์ ๋์ ์ฉ์ด๋ก ๋
ผ์๋๋ ํ๋ก๊ทธ๋๋ฐ ์ธ์ด๋ฅผ ๋ง๋ค ๊ธฐํ๊ฐ์์ ๋์
๋๋ค. ์ด๊ฒ์ด ๋์์ด๋์ง ์๋๋ค๊ณ ์๊ฐํ๋ ์๋ Symmetric{Matrix{T}}
์ ๊ฐ์ ๋ํผ ์ ํ์ ๋ง๋ค ๋์
๋๋ค.-ํ ๋ก ์์ "์ด struct
๋ฅผ ํ๋์ ํ๋๋ก ๋ง๋ค์์ต๋๋ค. "๋ด๊ฐ ๋งํ ์์๋ ๋"์ด๋ค ... ๋ด๊ฐ ๋ง๋ Symmetric
๋ํผ type
์ ๋ํด Matrix
"(๊ทธ ๋ฌธ์ฅ์ ์ ๋ฐ์ ์ค์ ๊ตฌ๋ฌธ์ด๋ผ๊ณ ๋ฉ๋ชจ๋ฅผ ํ ). "๋ํผ ๊ตฌ์กฐ์ฒด"? ์ผ์ข
์ ์ด๋ฆฌ์์ ์๋ฆฌ-๋๊ฐ ํ๋์ ํ๋๋ก ๊ตฌ์กฐ์ฒด๋ฅผ ๋ง๋ค๊น์? ๊ทธ ๋ฌธ์ ์ ๋ํด ํ๋๊ฐ์๋ ์ฑ๊ธ ํค์ ์ด๋ป์ต๋๊น? types
๋ฐ immutables
์ ์๋น ๋ถ๋ถ์ (์ฌ์ํ์ง ์์) ๋ฐ์ดํฐ ๊ตฌ์กฐ ๋ฅผ ์์ฑํ๋๋ก ์ ์๋์ง ์๊ณ ๋ํผ ๋ฐ ์ฑ๊ธ ํค๊ณผ ํจ๊ป ๊ฐ๋ ฅํ ์ ํ ๋ฐ ๋์คํจ์น ์์คํ
์ ์ฌ์ฉํ๋ ๋ช
์์ ์ธ ๋ชฉ์ ์ผ๋ก ์ ์๋ฉ๋๋ค. IMO ์ด๊ฒ์ Julia์ ๊ฐ์ฅ ํฅ๋ฏธ๋กญ๊ณ ๊ฐ๋ ฅํ๋ฉฐ ํํ๋ ฅ์ด ํ๋ถํ ์ธก๋ฉด์
๋๋ค (_fast_๋ผ๋ ์ฌ์ค๊ณผ ๊ฒฐํฉ ๋จ).
struct
์ ๋ชจ๋ ๊ธฐ๋ฅ์ ๊ตฌ์กฐ๋ฅผ ์ฌ์ฉํ์ฌ ํน์ฑ ๋ฑ์ ๊ตฌํํ ์ ์๋ค๋ ๊ฒ์ ์๊ณ ์๋ ์๋ จ ๋ ํ
ํ๋ฆฟ C ++ ๋ฉํ ํ๋ก๊ทธ๋๋จธ์๊ฒ๋ง ์ฆ์ ๋ช
๋ฐฑ ํ ๊ฒ์ด๋ผ๊ณ ์๊ฐํฉ๋๋ค. ์ด๋ ์ฝ๊ฐ ๋ถ๋๋ฌ์ด ์ผ์
๋๋ค.
"์ข ๋ฅ"๋ ์ ํ ์ด๋ก ์์ ์๋นํ ํน์ ํ ๊ธฐ์ ์ ์๋ฏธ ๋ฅผ ๊ฐ์ง๊ณ ์์ต๋๋ค.
๋ชฉํ / ์ฅ์ ์ด type
๋ฅผ ๋ฌด๋ฃ๋กํ๋ ๊ฒ์ด๋ผ๋ฉด ์ด๋ป๊ฒํ๋์?
const datatype # immutable
datatype # type
๊ทธ๊ฒ๋ค์ ๊ตฌ์ฒด์ ์ธ ์ ํ์ด๋ฏ๋ก ์๋ง๋ ๋ฐ์ดํฐ๋ฅผ ํฌํจํ๊ณ DataType
๋ฅผ ๊ตฌ์ฑํ๋ (๋ง์) ๋ฐฉ๋ฒ ์ค ํ๋์
๋๋ค.
"์ข ๋ฅ"๋ ์ ํ ์ด๋ก ์์ ์๋นํ ํน์ ํ ๊ธฐ์ ์ ์๋ฏธ๋ฅผ ๊ฐ์ง๊ณ ์์ต๋๋ค.
์ํค์ ๋ํ ์๊ฐ๋ Type{}
( DataType
๋ฐ TypeConstructor
, Union
๋ฑ์ ํ์ฉ ํจ)๊ณผ ์ ํํ ๋๊ฐ์ด ๋ค๋ฆฝ๋๋ค. ์ค๋จ ํ ๊ฐ์น๊ฐ ์์ต๋๋ค)
kind
์ ์ฌ๊ธฐ์์ ์ฌ๋ฐ๋ฅธ ๋จ์ด๊ฐ ์๋๋๋ค.
๋๋ถ๋ถ์ ๊ฒฝ์ฐ ๊ฐ์ฅ ์ข์ ๋ฐฉ๋ฒ์ ๋ถ์ผ์
ํ์ค ์ดํ๋ก ๋ฐ๊พธ๋ ค๊ณ ํ๋ ๋์
์ถ์ธก์ด ๋ ์ฌ์ธ ๊ฒ์
๋๋ค.
์ด ๊ฒฐ์ ์ ๋น๊ณต์ ์ฐ์ค์๋ ์ํฅ์ ๋ฏธ์น์ง ์์ต๋๋ค. ๋น์ ์ ์ฌ์ ํ โโ"๋๋
์ข ๋ ๊ตฌ์ฒด์ ์ธ ํค์๋๋ฅผ ์ฌ์ฉํ๋ฉด
์ ํํด์ผํฉ๋๋ค.
์ ํ. const struct
๋ฐ struct
์ด (๊ฐ) immutable
๋๋น type
๋ณด๋ค ๊ฐ์ ๋ ๊ฒ์ด๋ผ๊ณ _do_ ์๊ฐํฉ๋๋ค (ํ์ง๋ง ๊ทธ๋ ๋ค๊ณ ํด์ ๋ ๋์ ๊ฒ).
struct๊ฐ ๊ตฌ์กฐ ๋๋ ๊ตฌ์กฐ๋ก ๋ ๋ง์ด ์ธ์ํ๋ค๊ณ ์๊ฐํ ๋ ๋ ๋ค ๋๋ ๋ ๋ค?
@andyferris ๋ด 'class'๋ฐ ' const struct
๋ฐ struct
๊ฐ ๊ฐ์ ๋ ๊ฒ์ด๋ผ๋ ๊ฒ์ ์ง์ํ์ง ์๋๋ค๋ ์๋ฏธ๋ ์๋๋๋ค. 'const'๋ฅผ ํผํ๊ณ , 'immutable'์ ๋ณด์กดํ๊ณ 'struct'๋ฅผ ์ ์ธํ๊ณ ์ถ์ ๋ ๊ฐ๋ฅํ ์ฉ์ด๋ฅผ ์ฐพ๋ ๋ ๋ค๋ฅธ ์๋์์ต๋๋ค (์ธ๊ธ ๋ ๊ตฌํ์ ์๊ณ ์์์ง๋ง 80 + %์ ์ฌ๋ก์์ ๋ง๋ค๋ฉด ๊ด์ฐฎ๋ค๊ณ ์๊ฐํ์ต๋๋ค) .
fieldtype
(๋๋ fieldstype
)๋ ์ด๋ป์ต๋๊น? ๊ทธ๊ฒ์ ํํ bitstype
์ ์ผ์น fieldnames()
.
๊ธ๋ ,
๋๋ ์ง์ค์ ์ข์ํ๋ค. fieldstype์ด ๋ ๋์ ์ ํ์
๋๋ค. ์ด๋ค ๊ฒ์ด ๋จ์ ๋๋ ๋ณต์๊ฐ ๋ ์์๋ ๋ณต์ํ์ ์ฌ์ฉํ๋ ๊ฒ์ด ์ ์ ํ๊ธฐ ๋๋ฌธ์
๋๋ค.
-์ ํ๋ฆฌ
class
๋ ๊ด์ฐฎ์ ์ ์์ต๋๋ค. ์ฐ๋ฆฌ๋ ์๋ ๊ฐ์ฒด ๋ด๋ถ์ ๋ฉ์๋์ ํด๋์ค ๊ธฐ๋ฐ OO์์ ์ฐ๊ด ๋๋ฌธ์ ๊ฑฐ๋ถํ์ต๋๋ค. struct
์ด ๋ ์ ํํ๋ค๊ณ ๋งํ ์ ์์ต๋๋ค.
๋๋ struct
๋ฅผ ์ด๋ค ๊ฒ์ ๋ํ ์ค์๋ง๋ก ๋ณด์ง ์๋๋ค; ์ด ์์ ์์ ์ด๋ฌํ ์ข
๋ฅ์ ๋ฐ์ดํฐ ๊ตฌ์กฐ๊ฐ ํธ์ถ๋ฉ๋๋ค. ๋ค์ ์ฌ๋ฏธ์๊ฒ๋ lisp์๋ cons
์ด ์๋๋ฐ, ์๋๋ construct
์ ์ฝ์ โโ์์ ์ ์์ง๋ง ์ฌ๋๋ค์์ด ์ฌ์ค์ ๊ธ๋ฐฉ ์์ด ๋ฒ๋ฆฌ๊ณ "๋จ์ ์
"์ ๋ํด ์ด์ผ๊ธฐํ๊ธฐ ์์ํ์ต๋๋ค.
๊ณ์ํด์ class
๋ฅผ ๊ฑฐ๋ถํด์ผํ๋ค๊ณ ์๊ฐํฉ๋๋ค. ์ด ์ฉ์ด๋ฅผ ์ฌ์ฉํ๋ฉด Julia ์คํ์ผ๊ณผ ์๋ฐ๋๋ ์๋ง์ OOP ๊ธฐ๋์น๋ฅผ ๋ถ๋ฌ ์ผ์ผํฌ ์ ์์ต๋๋ค.
๋๋ struct
๊ฐ ๋ฌด์์ด๋ ์งง๊ฒ ๋ณด์ง ์์ง๋ง C์ ๊ตฌ์กฐ์ฒด์ ๋ํ ์์ ์ ์ฐธ์กฐ๊ฐ Julia๊ฐ ๊ฐ ์ ํ์ด ๋ ๊ฒ์ด๋ผ๋ ๊ฒ์ ์์ํ๋ค๊ณ ๊ฑฑ์ ํฉ๋๋ค. ๋ฌผ๋ก ๊ทธ๋ ์ง ์์ต๋๋ค. ์ด๋ฅผ ์ํด ํ์ฌ๋ ์ฆ๊ฐ์ ์ธ ์๋ฏธ๊ฐ ํจ์ฌ ์ ๊ธฐ ๋๋ฌธ์ record
์ชฝ์ผ๋ก ์ฝ๊ฐ ๊ธฐ์ธ๊ณ ์์ต๋๋ค.
๋ช
ํํ์ง ์์ ์์๋ ์ ์ ๋ช
ํํํ๊ธฐ ์ํด const record
๋๋ const struct
๊ฒ์ ๋ชจ๋ ํ๋์ const
๋งคํ์์ํ ์งง์ ์๋ฏธ๋ก ํด์๋๋ ๊ฒฝ์ฐ์๋ง ์คํ ๊ฐ๋ฅํ๋ค๊ณ ์๊ฐํฉ๋๋ค. , ์ด๋ ๊ฐ๋ณ ํ๋๋ฅผ const
๋ก ํ์ํ๋ ๊ฒ์ ์ง์ํ๋ค๋ ๊ฒ์ ์๋ฏธํฉ๋๋ค. ๊ทธ๋์ ์ ๊ฐ ๋งํ๋ ๊ฒ์ ์ฐ๋ฆฌ๊ฐ ์ด๊ฒ์ ๊ฐ์ง ์ ์๋ค๋ ๊ฒ์
๋๋ค.
record T0
f::A
g::B
end
record T1
const f::A
g::B
end
record T2
f::A
const g::B
end
record T3
const f::A
const g::B
end
const record T4
f::A
g::B
end
์ฌ๊ธฐ์ T3 ๋ฐ T4๋ ์ค์ ๋ก ๋๋ฑํ ์ ํ์ ์ค๋ช
ํฉ๋๋ค. ์ฆ, const record
์ฐ๋ ๊ฒ์ ๋ชจ๋ ํ๋๊ฐ const
์ฝ์ด์
๋๋ค. ์ด๊ฒ์ด ํด์์ด ์๋๋ผ๋ฉด ๋ถ๋ณ์ฑ๊ณผ ๋ถ๋ณ์ฑ์ ์ตํฉ์ ์ด๋ฏธ ๊ฐ๋
์ ํผ๋์ ๊ณตํต๋ ๊ทผ์์ด๊ธฐ ๋๋ฌธ์ ์ํํ๋ค๊ณ ์๊ฐํฉ๋๋ค. ๊ทธ๋ฆฌ๊ณ ์ฐ๋ฆฌ๊ฐ ๊ทธ ์ฉ์ด ํผ๋์ ๋ํ๋ฉด ๋ฌธ์ ๋ฅผ ๋์ง ์์ ๊ฒ์
๋๋ค.
์ฌ๊ธฐ์ T3๊ณผ T4๋ ์ค์ ๋ก ๋๋ฑํ ์ ํ์ ์ค๋ช ํฉ๋๋ค. ์ฆ, const ๋ ์ฝ๋๋ฅผ ์์ฑํ๋ ๊ฒ์ const๊ฐ๋๋ ๋ชจ๋ ํ๋์ ๋ํ ์๊ธฐ ์ผ๋ฟ์ ๋๋ค.
const record
immutable
์ง๊ธ ์๋ฏธํ๋ ๋ฐ๋ฅผ ์๋ฏธํ๋ค๊ณ ํ๋ค๋ฉด ์ด๊ฒ์ ์ฌ์ค์ด ์๋ ์๋ ์์ต๋๋ค. const record
๋ ํ๋๋ฅผ ๋ณ๊ฒฝํ ์์๋ ์ฐธ์กฐ ์ ํ์ ์ค๋ช
ํฉ๋๋ค. ํ์ฌ immutable
๋ ๊ฐ ์ ํ์
๋๋ค.
record
๋ํ ํ ๋ก ์ https://github.com/JuliaLang/julia/issues/19157#issuecomment -257942059 ๋ฐ ๋ค์ ์ฃผ์์ ์ฐธ์กฐ
@vtjnash ์ข์ ์ง์ ์ด์ง๋ง, immutable
๊ฐ ์ฐธ์กฐ๋ฅผ ํฌํจํ๋ ๊ฒฝ์ฐ "์ฐธ์กฐ"์ ํ์ด๋๋ ์ง๊ธ ๋ฐ์ํ๋ ์ํฉ๊ณผ ์ ์ฌํฉ๋๋ค.
record
๊ฐ ๋ ํํ๋ค๋ ์ฌ์ค์ ๊ด์ฐฎ๋ค๊ณ ์๊ฐํฉ๋๋ค. ๋ช
์ฌ์ ๋์ฌ ๋ชจ๋ ์ ์ฉํ ๋จ์ด๋ผ๋ ์ฌ์ค์ด ๋ ๋ฌธ์ ๊ฐ๋ฉ๋๋ค.
nuple
์ด๋์? ๋ฌผ๋ก "named tuple"์ ์ค์๋ง์
๋๋ค.
์์ ์ ์์ด ๋ง์์ ๋ญ๋๋ค.
const datatype # immutable
datatype # type
์ง๊ธ๊น์ง ์ต๊ณ ์ ๋๋ค. ๊ทธ๊ฒ์ ์ญ์ฌ์ ์ธ ์ง๊ณผ ํจ๊ป ์ค๋๋ ๋จ์ด๋ฅผ ๊ฐ์ ธ ์ค๋ ๊ฒ์ ํผํ๊ณ ๋์๊ฒ ์์ ํ ๋ถ๋ช ํด ๋ณด์ธ๋ค. ๋ฌผ๋ก julia์ ์ ์ผํ ๋ฐ์ดํฐ ์ ํ์ ์๋์ง๋ง ์ผ๋ฐ ์ฌ์ฉ์๊ฐ ์ ์ํ ๊ฐ์ฅ ์ผ๋ฐ์ ์ธ ๋ฐ์ดํฐ ์ ํ์ ๋๋ค.
๋ฌธ์์์ ์ด๊ฒ์ ์ค๋ช
ํ๊ธฐ ์ํด ์ฉ์ด๋ ๋ณ๊ฒฝํ๊ณ ์ด์ ๊ฐ์ ์ฅ์ ์ ๋ชฉ์ ๋ ๋ง์ด ๋ณ๊ฒฝํ ๊ณํ ์ด ์์ต๋๊น? ๊ทธ๋ ์ง ์๋ค๋ฉด composite
๋ฐ immutable composite
๋๋ const composite
๊ฐ์ฅ ์ข์ต๋๋ค. const
๋ ์ ์ญ ์์์๋ ์ฌ์ฉ๋๊ธฐ ๋๋ฌธ์ ๋ ๊ฐ์ง ๋ชจ๋์ ๋ํด const
๋๋ immutable
๋ฅผ ์ ํํ๊ณ const
์ฝ๊ฐ ์ ํธํฉ๋๋ค. ๋ ์งง์ต๋๋ค. ์ ์ด๋ ํฉ์ฑ์ด๋ผ๋ ๋จ์ด๋ ๋๋ถ๋ถ์ ์ ๊ท ์ฌ์ฉ์์๊ฒ ์ต์ํ์ง ์์์ ๋ฌธ์๋ฅผ ๊ฐ์ ๋ก ์ดํด๋ณด๊ณ C ์ด๋ฆ๊ณผ์ ์ ์ฌ์ฑ์ผ๋ก ์ธํ ์๋ชป๋ ๊ฐ์ ์ ํผํ ์ ์์ต๋๋ค. const
์ ๋ํ ์๋ชป๋ ๊ฐ์ ์ C ++์์ ์ต์ํ ์ฌ๋์ ์๋ฌด๊ฒ๋ ๊ฐ์ ํ์ง ์๋ ๊ฒ์ ์๊ธฐ ๋๋ฌธ์ ๊ฐ๋ฅ์ฑ์ด ๋ฎ์ ๋ณด์
๋๋ค.
๋ํ ๋ถ๋ณ์ฑ์ ๋ํ ๋ด๊ธฐ ์ํด ๋ ๋จ์ด๋ฅผ ์ฌ์ฉํ๋ ์ด์ ์ ํ์ํ ๋ ๊ฐ๋ฅํ ๋ฏธ๋ const abstract
๋ฐ const bitstype
ํฉ๋๋ค.
const ๋ ์ฝ๋๋ฅผ ๋ง๋ค๋ฉด ํ์ฌ ๋ถ๋ณ์ ์๋ฏธ๋ฅผ ์๋ฏธํ๋ ๊ฒ์ ์ฌ์ค์ด ์๋ ์๋ ์์ต๋๋ค. const ๋ ์ฝ๋๋ ํ๋๋ฅผ ๋ณ๊ฒฝํ ์์๋ ์ฐธ์กฐ ์ ํ์ ์ค๋ช ํฉ๋๋ค. ํ์ฌ ๋ถ๋ณ์ ๊ฐ ์ ํ์ ๋๋ค.
์ด ์ค. immutable
์ ๊ฐ์น ๋๋ ๋น๊ฐ ์น๊ฐ ๊ตฌํ ์์ค์์ ์ ์๋์๋ค๊ณ ์๊ฐํ๊ณ ๋ชจ๋ ์ฌ์ฉ์๋ ํ๋๋ฅผ ๋ฆฌ ๋ฐ์ธ๋ ํ ์ ์๋ค๋ ์ ์ ๊ณ ๋ คํด์ผํฉ๋๋ค. ๊ฐ์ ์ํ ์ ๋ฌ (๋๋ ๊ทธ๋ ์ง ์์)์ ์์ํ ABI ๋ฌธ์ ์ด๋ฉฐ, ์ปดํ์ผ๋ฌ๋ ์์น์ ์ผ๋ก ๋ ํจ์จ์ ์ธ ๊ฒ์ ์์ ๋กญ๊ฒ ์ ํํ ์ ์์ด์ผํฉ๋๋ค. ๋์๊ฒ ๋ถ๋ณ์ ์ฌ์ฉ์๊ฐ ๋ณผ ์์๋ ์๋ฏธ๋ const
์ ํ์ฌ ์๋ฏธ๋ฅผ ์ ํ์ ๋ชจ๋ ํ๋์ ์ ์ฉํ๋ ๊ฒ๊ณผ ์ ํํ ๋์ผํ๊ฒ ๋ณด์
๋๋ค.
๋ถ๋ณ์ ์๋ ๋ ์ฌ์ฉ์ ์์ค ์๋ฏธ๋ก ์ ๋ํด ์ฌ์ ํ ํผ๋ ์ค๋ฝ์ต๋๊น, ์๋๋ฉด ์ฌ๊ธฐ์ ๊ตฌํ ์ธ๋ถ ์ฌํญ์ ์ด์ผ๊ธฐํ๊ณ ์์ต๋๊น?
๋ํ์ ์ด๋? ๋ฌผ๋ก "named tuple"์ ์ค์๋ง์ ๋๋ค.
record
) ์ฌ์ฉํ ์๋ ์์ต๋๋ค. ์๋ฅผ ๋ค์ด, ๋ช
๋ช
๋ ํํ์ Erlang์์๋ record
์
๋๋ค. ๊ทธ๋ฆฌ๊ณ ๋ฐ์ดํฐ๋ฒ ์ด์ค ์ธ๊ณ์์๋ ์๊ฐํฉ๋๋ค.
๊ทธ๋ฌ๋ Julia๊ฐ C
์๋ ์ฌ๋๋ค๊ณผ ๋ ๋ง์ด ๊ฒน์น๋ค๋ฉด struct
๊ฐ ๋ ์ ์ ํ ๋ณ๊ฒฝ์
๋๋ค.
๊ฐ์ธ์ ์ผ๋ก record
์ข
๋ฅ๊ฐ ์ด์ํ๊ณ ๋ช
ํํ์ง ์๋ค๋ ๊ฒ์ ๋ฐ๊ฒฌํ์ต๋๋ค. ๋ฐ์ดํฐ๋ฒ ์ด์ค ์ธ๊ณ์์ ๋ ์ฝ๋๋ ํ
์ด๋ธ์ ํ์
๋๋ค. ๊ทธ๊ฒ์ Julia ์ ํ (๋ถ๋ณ ๋๋ ๊ธฐํ)๊ณผ ๊ฐ์ ์ผ๋ฐ์ ์ธ ๊ฒ๊ณผ ํผ๋์ค๋ฌ์ด ์ถฉ๋์ฒ๋ผ ๋ณด์
๋๋ค.
์ด ์ค๋ ๋๋ฅผ ๋ค์ ์ฝ์ ํ composite
๋ํด type
composite
์ชฝ์ผ๋ก ๊ธฐ์ธ๊ณ ์์ต๋๋ค. ๊ทธ๊ฒ์ Jeffs์ "ํ ๋ฌธ์ฅ ๊ท์น"์ ๋ณด์ ํ๊ณ ์์ผ๋ฉฐ ์ด์ ๋ํ ๋ถ์ ์ ์ธ ํฌํ๋ ๋ง์ง ์์์ต๋๋ค. ์ด ์ฉ์ด๊ฐ ๋ค๋ฅธ ์ธ์ด์์ ๊ทธ๋ ๊ฒ ๋ง์ด ์ฌ์ฉ๋์ง ์๋๋ค๋ ๊ฒ์ ์ ์๊ฐ์๋ ๋ฌธ์ ๊ฐ ์๋๋๋ค. ๊ทธ๋ฆฌ๊ณ composite
๋ ์ค์ ๋ก ์ฐพ์ ์์๋ ๊ฐ์ฅ ์ค๋ช
์ ์ธ ๋จ์ด์
๋๋ค. ์ด๊ฒ์ด ๋ฌธ์์์ ์ด๋ฌํ ๊ฒ๋ค์ composite types
๋ผ๊ณ ๋ถ๋ฅด๋ ์ด์ ์
๋๋ค.
Fortran์์ ์์ง๋ง type
ํค์๋๊ฐ ๊ด์ฐฎ๋ค๊ณ ์๊ฐํฉ๋๋ค.
์ต์ ํ๋ช
ํ ๋ณ๊ฒฝ์ immutable
-> const type
์
๋๋ค.
ํ์ง๋ง type
์ ๋ง ๊ฐ์ผํ๋ค๋ฉด
composite
๋ฐ const composite
๊ฐ ์ฐจ์ ์ฑ
์ธ ๊ฒ ๊ฐ์ต๋๋ค.
immutable
-> const type
์ ํ์คํ ์คํ ๊ฐ๋ฅํด ๋ณด์
๋๋ค. ๋์์ ์ค๋จ์ ํผํ๊ณ ํค์๋๋ฅผ ์ ๊ฑฐํ๋ฉฐ ์ธ์ด์ ๋ช
ํ์ฑ์ ์ถ๊ฐํฉ๋๋ค.
type
๋ฅผ ์ฌ์ฉํ ์ ์๋ค๋ ๊ฒ์ด ์ฌํ์ง๋ง ์์งํ ๋งํด์ ์ ๊ฐ ์ฌ์ฉํ๊ณ ์ถ์ ๊ฒ์ Type
์
๋๋ค. ๋ด ์ ํ ๋ณ์ 10 ๊ฐ ์ค 9 ๊ฐ๋ ๋์ ์ ํ ๋ถ์์์ํ DataType
๋ณ์๊ฐ ์๋ ์ ์ ๋์คํจ์น๋ฅผ์ํ ๋งค๊ฐ ๋ณ์์
๋๋ค (์์ธ๊ฐ ์์ฑ๋๋ ํจ์). inference.jl์ ์์ฑํ๋ ์ฌ๋๋ค์๊ฒ๋ ์ฌ์ค์ด ์๋์ง๋ง, ๋น์ ์ด ์ํ๋ค๋ฉด ๊ทธ๋ค์ ์ค์ ๋ก ์ธ์ด์ "๋์ ์ฒญ์ค"์ด ์๋๋๋ค.
๊ด๋ จ ์ง๋ฌธ : ์ต์์ ์์ค์์ type
๋ฅผ ์ฌ์ฉํ ์ ์์ง๋ง ํจ์ ๋ด๋ถ (ํ์ฌ๋ ํญ์ ์ ํจํ์ง ์์)์์ ๋ณ์ ์ด๋ฆ์ด ๋ ์ ์๋๋ก ํ์ฉํฉ๋๊น? ๋๋ ๋ ๋์๊ฐ ์ ํ ์ ์์ ๊ตฌ์กฐ๋ ๋งค์ฐ ๊ตฌ์ฒด์ ์
๋๋ค ... ์ ์ญ ๋ณ์ (๋๋ ํจ์)๋ type
๋ฐ์ธ๋ฉ๋๋๋ก ํ์ฉํ๋ฉด์ ์ ํ ์ ์๋ฅผ ํน์ ๊ตฌ๋ฌธ์ผ๋ก ๊ฐ์ง ํ ์ ์์ต๋๊น?
์ฆ, ์ ํ์ ์ ์ํ๋ ๊ตฌ๋ฌธ์ ์ ์งํ๋ฉด์ ํค์๋ ๋์์ ์ ๊ฑฐ ํ ์ ์์ต๋๊น?
(์๋ง๋ imo) ๊ฐ๋ ฅํ ์ํ์ด ๋ถ์ด ์์ต๋๋ค. ํน์ดํ ์ฌ์ ๋ฒ์ด์ฃผ์๋ฅผ ์ฐ๋งํ๊ฒํ๊ธฐ๊ฐ ๋๋ฌด ์ฌ์์ง๋๋ค. ๊ทธ๋ฆฌ๊ณ ๋๋ฝ ๋ ๋ง์ดํฌ๋ก ์ฐ์์ฑ์ ํ์ ๊ณผ ๋ช ํํ ์ปค๋ฎค๋์ผ์ด์ ์ ์ฝ๊ฒํ๊ธฐ์ ํ๊ดด์ ์ ๋๋ค.
@ c42f :
๋ถ๋ณ์ ์๋ ๋ ์ฌ์ฉ์ ์์ค ์๋ฏธ๋ก ์ ๋ํด ์ฌ์ ํ ํผ๋ ์ค๋ฝ์ต๋๊น? ์๋๋ฉด ์ฌ๊ธฐ์ ๊ตฌํ ์ธ๋ถ ์ฌํญ์ ์ด์ผ๊ธฐํ๊ณ ์์ต๋๊น?
์๋, ๋ ์๋์ผ. ๋ ์๋ง ์ด์์ด. ๋ถ ๋ณํ์ ์ค์ ๋ก ๊ฐ ์ ํ์ด ์๋์ง๋ง ๋ณ์ด ํ์ ํ์คํ ๊ทธ๋ ์ง ์์ผ๋ฉฐ C์ ๋์ผํ ์ฉ์ด๋ฅผ ์ฌ์ฉํ๋ ๊ฒ์ด ๊ทธ๋ ๋ค๋ ๊ฒ์ ์์ ํ ์ ์๋ค๊ณ ๋๊ผ์ต๋๋ค.
๋๋ C์ ๋งฅ๋ฝ์์ ๊ตฌ์กฐ์ฒด "๊ฐ ์ ํ"์ ํธ์ถํ๋ ๊ฒ์ด ํฉ๋ฆฌ์ ์ผ์ง ๋ช ํํ์ง ์๋ค๋ ๊ฒ์ ๊นจ๋ฌ์์ต๋๋ค. ์ค์ ์ํฉ์ C๊ฐ ๊ฐ์ ์ํ ์ ๋ฌ ์ธ์ด์ด๊ธฐ ๋๋ฌธ์ ๋๋ค. ๋ฐ๋ผ์ ๋ฐ์ดํฐ ์ ํ ์์ฒด๊ฐ ์๋๋ผ ์ ๋ฌ ๋ฐ ํ ๋น ๊ท์น์ด ๋ค๋ฆ ๋๋ค.
์ด ๋ฌธ์ ๊ฐ ์ด๋ฆฌ๋ ๋ณ๊ฒฝ ์ฌํญ์ ์ ์ฉํ๋ ๋ฐ ์ ์ ์ผ๋ก ์ฐฌ์ฑํฉ๋๋ค. ์ ์ฉ์ฑ์ ํ๋ณด ์ฉ์ด ์ค ํ๋๊ฐ ์ฌ์ฉ๋๋ ๊ฒ๋ณด๋ค ํ๋๊ฐ ์ฌ์ฉ๋๋ ๋ณธ๋ฅ์ ์ ํธ๋ณด๋ค ์ค์ํฉ๋๋ค.
_์ด๊ธฐ๋ ํ์ง๋ง_
์ค์ ์ํฉ์ด C์ด๊ธฐ ๋๋ฌธ์
ํ๋ณด ์ฉ์ด ์ค
struct
์ด ๊ฐ์ฅ ์ ํธ๋์ง ์๋ ์ด์ ๋ฅผ ์ ํฌ์ฐฉํฉ๋๋ค.
์ ๊ฐ ํ๋งคํ๋ ์ด์ผ๊ธฐ๋ ๋ค์๊ณผ ๊ฐ์ต๋๋ค. "C์ julia์์ struct
๋ ๊ณ ์ ๋ ํ๋ ์ด๋ฆ ์งํฉ์ ๋ค์ํ ์ ํ์ ๊ฐ์ ๋งคํํ๋ ๋ฐ์ดํฐ ๊ตฌ์กฐ์
๋๋ค. ๊ฐ์น์ ๋ฐ๋ผ ์ค๋ฆฌ์๋ ๊ณต์ ๋ฅผ ํตํด ์ ๋ฌ๋ฉ๋๋ค. "
๊ทธ ๊ณ์ ์ ๋ฒ๊ฑฐ๋กญ์ง ์๊ณ ์์ ํ ์ ํํฉ๋๋ค. ๊ทธ ์์์๋ ๋ชจ๋ ๊ฒ์ด ์ฑ๊ณต์ ์ผ๋ก ๊ฒ์ ๋ ์ ์์ต๋๋ค. PL ์ด๋ก ๊ฐ๋ ๊ทธ๊ฒ์ ๋ํด ๋ถํํ์ง ์์ ๊ฒ์ด๋ฉฐ, ๋น PL ์ด๋ก ๊ฐ๋ ๊ทธ๊ฒ์ ๋ฃ๊ณ ๋ฌด์ธ๊ฐ๋ฅผ ๋ฐฐ์ธ ๊ฒ์ ๋๋ค.
๋๋ ๊ทธ ์ด์ผ๊ธฐ๋ฅผ ์ฐ๋ค. ๊ถ๊ธํ์ง๋ง ์ฌ๊ธฐ์ PL ์ด๋ก ๊ฐ๊ฐ ๋ถํ ํ ๋งํ ์ฉ์ด๊ฐ ์์ต๋๊น? ๋๋ ์ค๋ฆฌ์๊ฐ PL ์ด๋ก ๊ฐ์ ๋น ์ด๋ก ๊ฐ ๋ชจ๋๋ฅผ ๋ง์กฑ์ํค๋ ํ์ ์์ฅ์ ์ ํฉํ๋ค๊ณ ์๊ฐํ๊ธฐ ๋๋ฌธ์ ์ฌ๊ธฐ์์ ์ ํ์ฑ๊ณผ ์ผ๋ฐ ๋ช ํ์ฑ์ ๊ท ํ์ ๋ง์ถ๋ ๊ฒ์ด ์ค์ํด ๋ณด์ ๋๋ค.
๊ธ์์, ์ ๋ ๋ค๋ฅธ ์ฌ๋์ ์
์ ๋ง์ํ๊ณ ์ถ์ง ์์ต๋๋ค. ๊ตฌ์กฐ์ฒด๊ฐ "๊ฐ ์ ํ"์ด๊ธฐ ๋๋ฌธ์ struct
์ด ํผ๋ ์ค๋ฌ์ธ ์ ์๋ค๋ ์๊ฐ์ ๋ค๋ฃจ๊ณ ์ถ์์ต๋๋ค.
immutable
์ (๋) ๋จ์ผ ๋จ์ด ํค์๋๋ก ์ ์ง๋์ด์ผํ๋ค๊ณ ์๊ฐํฉ๋๋ค. const type
๋๋ const struct
๋๋ immutable struct
์ซ์ดํฉ๋๋ค. ์ ๋ immutable
๋ฅผ ๋ง์ด ์ฌ์ฉํ๋๋ฐ ๋ค๋ฅธ ๋ชจ๋ ๊ฒ์ด ํ๋์ ๋จ์ด ์ผ ๋ ์ด๋ฌํ ์ ์ธ์ด ๋ ๋จ์ด๋ก๋์ด์๋ ๊ฒ์ด ์ ๋ง ์ด์ํ๋ค๊ณ ์๊ฐํฉ๋๋ค. ๊ทธ๊ฒ์ ์ง์ ํ ๊ด์ฌ์ฌ๊ฐ ์๋๊ธฐ ๋๋ฌธ์ ํ์ดํ์ ์๋ฏธ๊ฐ ์๋๋๋ค. ๊ทธ๋ฌ๋ "ํ๊ทธ"์ฒ๋ผ ๋ณ๊ฒฝ ๋ถ๊ฐ๋ฅํ๋ค๋ ์ ์์ 2 ๋ฑ๊ธ ๋๋์ด ๋ญ๋๋ค.
@TotalVerb ๋๋ ๊ทธ๊ฒ์ด ์ฌ์ค๊ณผ ๋งค์ฐ ํธํ
type MyType
const field::Int
end
๋๊ฐ์ด ํ๋ํด์ผ
immutable MyType
field::Int
end
์ง๊ธํฉ๋๋ค.
๋ฐ๋ผ์ const type
(๋๋ const struct
, const composite
๋ฑ)์ const
๋ฅผ ๊ฐ ํ๋์ ๋ฐ๋ก ๊ฐ๊ธฐ๋ก ๋ธ๋ก๋ ์บ์คํธํ๋ ๊ฒ์ด ์ ์ฉ ํด ๋ณด์
๋๋ค (ํ์ง๋ง ๊ผญ ํ์ํ์ง๋ ์์) ๊ธฐ๋ฅ. ๋๋ ๋ฏธ๋์ ์ปดํ์ผ๋ฌ๊ฐ ๋น์ ์ด ์ด๋ค ๊ฒ์ ์
๋ ฅํ๋์ง์กฐ์ฐจ ์์ง ๋ชปํ๊ธฐ๋ฅผ ๋ฐ๋๋๋ค ( const type
๋๋ const
-์ ์๋ ํ์์ ์ํด ํ์๋ก ๋ณํ ๋ ์ ์์ต๋๋ค). ์ด ์์ ์์ ์ immutable
ํฉ๋๊น?
"ํ๊ทธ"์ฒ๋ผ ๋ถ๋ณ์ฑ์ ๊ฐ๋ ๊ฒ์ 2 ๋ฑ๊ธ ๋๋์์ค๋๋ค.
Jeff์ Stefan์ ์ฌ๋ฐ๋ฅด๊ฒ ์ดํดํ๋ฉด immutable
๋ ์ ํ์ ํ๋๊ฐ ์์ ๋ฐ์ธ๋ฉ์์ ๋ํ๋ด๋ ํ๊ทธ ์ผ๋ฟ์
๋๋ค. ์์ (_really_ constant, C์ ๊ฐ์ง ์์)๋ ์ปดํ์ผ๋ฌ๊ฐ ์ต์ ํํ๋ ๋ฐ ๋์์ด๋๋ฉฐ ํ๋ ์์ฒด๊ฐ ๋ฐ๋ณต์ ์ผ๋ก ์์ ๋๋ ๊ธฐ๋ณธ ์์ (์ : isbits
)์ด๋ฉด ๋ ๋ง์ ์ต์ ํ๋ฅผ ์ํํ๋ ๋ฐ ๋์์ด๋ฉ๋๋ค. ์ด๊ฒ์ ์์๋๋ฉด ์ข์ง๋ง ์๋ฏธ ์ ์ค์ํ์ง๋ ์์ต๋๋ค. ์๋ฏธ๋ก ์ ํ์ฌ ๋์์ ์ฐ๊ฒฐํ๋ฉด ํฅํ ํด๋น ๋์์ ๊ฐ์ ํ๊ธฐ๊ฐ ๋ ์ด๋ ค์ธ ์ ์์ต๋๋ค.
๊ทธ๋ฌ๋ ์ค์ํ ์๋ฏธ ์ฐจ์ด๊ฐ ์์ต๋๋ค. ๋ณ๊ฒฝ ๋ถ๊ฐ๋ฅํ ์ ํ์ ๊ฐ์ด๋ฏ๋ก ๊ฐ์ฒด์ ID๊ฐ ํ๋์ ์ํด ์ง์ ๋๋ค๊ณ ์์ ํ๊ฒ ๊ฐ์ ํ ์ ์์ต๋๋ค. ๋ถ๋ณ ์ ํ์ ๊ฐ์ฒด๋ ์ฌ์ฉ์์ ๊ด์ ์์ ํ๋์์ ์ก์ธ์ค ํ ์์๋ ํน๋ณํ "์๋ณ ๊ธฐ๋ฅ"์ด ์์ต๋๋ค. ๋ฐ๋ฉด์ ๋จ์ผํ๋์ง ์์ ๊ฐ๋ณ ์ ํ์ ๊ฐ์ฒด๋ ๋ถ๋ช ํ์ด ๋ณด์ด์ง ์๋ "ID"๋ฅผ ๊ฐ์ง๊ณ ์์ต๋๋ค. ๋ง์ ๋ถ๋ณ ์ ํ์ด ๋ฐ์คํ ๊ฐ์ฒด๋ก ์ ์ฅ๋๋ฏ๋ก ์ค์ ๋ก ๋ด๋ถ์ ์ผ๋ก์ด ์ถ๊ฐ ID๊ฐ ์๋ค๋ ์ฌ์ค์ ์๋ฏธ๋ก ๊ณผ ๋ฌด๊ดํฉ๋๋ค.
์ ์๊ฐ์, ๊ทธ๊ฒ์ ๋จ์ง _ ์ต์ ํ _๊ฐ ์๋๋๋ค.
immutable Complex{T} ... end
๋์ ์
type Complex{T} ... end
์ฌ์ฉ์๊ฐ ๋ณผ ์์๋ ํ๋์ ๋ง์ ์ธก๋ฉด์ด ๋ณ๊ฒฝ๋๊ธฐ ๋๋ฌธ์ : ===
, ๊ธฐ๋ณธ๊ฐ ==
, objectid
, hash
๋ฑ. ๋ณ๊ฒฝ ๋ถ๊ฐ๋ฅํ ์ ํ์ ๋ณ๊ฒฝ ๊ฐ๋ฅํ ์ ํ์ ๊ธฐ๋ฅ์ ํ์ ์งํฉ์ ์ ๊ณตํฉ๋๋ค. ๋ฐ๋๋ก, ๊ทธ๊ฒ๋ค์ด ๋ถ๋ณ์ด๋ผ๋ ์ฌ์ค์ ๋ถ๋ณ ์ ํ์ด ๋ ๊ฐ๋ ฅํด์ง ์ ์๋๋ก ์ค์ํ ๋ณด์ฅ์ ์ ๊ณตํฉ๋๋ค.
์ปค๋ฎค๋ํฐ๊ฐ const
๋ฐ struct
์ ์ ์ฐฉํ๊ธฐ ์ ์ constant
๋ฐ structure
๋ํ ํ๋ฌ๊ทธ๋ฅผ ํ๋ ๋ ๋ง๋ค๊ณ ์ถ์์ต๋๋ค.
1) ์ค์ ๋จ์ด๋ฅผ์ํ 3 ๊ฐ์ ์ถ๊ฐ ๋ฌธ์!
2) struct
๊ฐ ๊ด์ฉ์ ์ด๋ผ๋ ์ฃผ์ฅ์๋ ๋ถ๊ตฌํ๊ณ
2a) R์์ ๋ง์ด๊ทธ๋ ์ด์
ํ๋ ์ฌ๋ (๋์ ๊ฐ์)์ด ํผ๋ ์ค๋ฌ์ธ ์ ์์ต๋๋ค.
2b) ํ๋ก๊ทธ๋๋ฐ์ ์ฒ์ ์ ํ๋ ์ฌ๋ (๊ฐ์ฅ ๋์์ด ํ์ํ ์ฌ๋)์ ํผ๋ ์ค๋ฌ์ธ ์ ์์ต๋๋ค.
์ฌ๋ฏธ๋ฅผ ์ํด struct๊ฐ ํผ๋ ๋ ์์๋ ์ด๋ฆฌ์์ ๋จ์ด :
ํ๊ดด ๋ถ๊ฐ
๋ฐฉํด
ํฌ์คํธ ๊ตฌ์กฐ์ฃผ์
์๋ถ ๊ตฌ์กฐ (oh hi Marx)
๋ฐ const :
์ฝ์คํํฐ๋
ธํ
๋ณ์๋ฆฌ
๋ณด์ ์์ถ ๊ทผ
์ํ
๋ถ๋ณ์ ๋ถ๋ณ๊ณผ ์ด๋ฐ ์ข ๋ฅ์ const์ ์ํด ์ป์ด์ง๋ PL ์๋ฆ๋ค์ / ๊ถ๋ ฅ์ด ์๋๊ฐ?
์ฆ, ๊ฐ์ ์ง๋ฌธ์ ๋๋ค.
ํ์ฌ๋ ์ ์ญ ๋ฒ์์์ ๋ณ์๋ฅผ ์ฌ์ฉํ๋ ๊ฒ์ด ๋ฌธ์ ๊ฐ๋๊ณ ํด๊ฒฐํด์ผ ํ trick
์ (๋) ๋จ์ผ ํญ๋ชฉ์ผ๋ก const ๋ฒกํฐ์ ๊ฐ๋ณ ๊ฐ์ ๋ํํ๋ ๊ฒ์
๋๋ค. ์ด ๊ฒฝ์ฐ const
์ ๋ฐฉ์ก๋์ง ์์ต๋๋ค. const
์ ๋ฐฉ์ก ๋ฒ์ ์ ๋ฒกํฐ๋ฟ๋ง ์๋๋ผ ๋ฒกํฐ์ ํญ๋ชฉ ๊ฐ์๋ ์์ ์ฑ์ ์ ์ฉํฉ๋๋ค. ๋ง์ฐฌ๊ฐ์ง๋ก ๋ค๋ฅธ ์ข
๋ฅ์ ๊ฐ์ ๊ฐ์ธ๊ฑฐ๋ ๋ฌถ๋ ๊ฐ์ ๋ณด์ ํ ์์๋ ํ๋๊ฐ์๋ ์ ํ ์ ์ธ์
๋๋ค. ๋ถ๋ณ ์ ํ์ ์ด์ ํ๋ ๊ฐ์ ๋ถ๋ณ์ฑ์ ๋ถ์ฌํ์ง ์์ต๋๋ค (ํ๋๋ฅผ ํตํด ๊ฐ์ ์ ์ผ๋ก ๋๋ฌ ํ ์์๋ ๊ฐ์ด ์๋). "์ด ํญ๋ชฉ [๋๋์ด ์ ํ์ ํญ๋ชฉ]์ ๋ถ์ฌ ๋ ๊ฐ์ด ๋ณ๊ฒฝ๋์ง ์์ [๋ณ๊ฒฝ์ด ํ์ฉ๋์ง ์์]์ ์๋ฏธํ๋ ํค์๋์ ๋ฐฉ์ก ๋ฒ์ ๊ณผ ํจ๊ป ์ ๊ณต๋๋ ์ฐ์ํจ๊ณผ ์ ์ฉํ ๊ธฐ๋ฅ์ด ์์ต๋๋ค. .
์ฆ๊ฐ์ ์ธ (๋น ๋ฐฉ์ก) ์ ๋ ฌ์ด ๋๋ฆฌ ์ฌ์ฉ๋๋ฉฐ, Julia์ ์ฌ์ ์ปดํ์ผ์ด Julia์ ์ฌ์ ์ปดํ์ผ์ด ๋ฐฉ์ก ๊ฐ๋ฅํ constness ๋์ ์ ๋ ์ / ๋น ๋ฅด๊ณ / ๊ฐ๋จํ๊ฒ ๋ง๋ค๊ฑฐ๋ ์์กดํ๋๋ก ์ค๋ฆฌ์๋ก ์ํํ๋ ์์ ์ค ์ผ๋ถ๊ฐ ํจ์ฌ ์ฌ์ ์ง๋ค๊ณ ๊ฐ์ ํ๋ฉด ์ฌ์์ด ํ์ํฉ๋๋ค. ์ฆ๊ฐ์ ์ธ ์ ๋ ฌ๊ณผ ์ ์ด์ธ๋ฆฝ๋๋ค. ์ด๊ฒ์ด ์ถ๊ฐ์ ์ธ _ ์ด๋ก ์ ํ๋ก๊ทธ๋๋ฐ ์ธ์ด์ ์ฅ์ _ (ํํ์ ์ฉ์ด์ฑ, ํํ๋ ฅ, ...)์ ๊ฐ์ ธ ์ค๋ ๋ฐฉ๋ฒ์ธ์ง ๊ถ๊ธํฉ๋๋ค. ๋ฐฉ์ก ์์๋ ์ฐธ์กฐ ์ ํ์ด ํฌํจ๋์ด ์๊ฑฐ๋?๊ฐ์๋ ์ ํ์ ๊ฐ์ ํตํด ๋ฐฉ์ก๋ฉ๋๋ค. (a) ๋ด๋ถ ์๋ฒ ๋ฉ ๋๋ ์ปจํ ์ด๋๊ฐ์๋ ๊ฐ์ ๋๋ฌํ๊ฑฐ๋ (b) ๊ฐ์ ๋๋ฌํ๋ ๊ฒ์ ์์ฒด์ ์ผ๋ก (๋ ๋ฆฝ์ ์ผ๋ก ๋๋ ๋ฌ๋ฆฌ) ๋ฐฉ์ก๋์ง ์๋ ์์๋ฅผ ๊ฐ๋ ์ ํ์ ๊ฒ์ ๋๋ค.
์ด๊ฒ์ ๋ํด ๋ ์๊ฐํด ๋ณด๋ฉด, ๋ด๊ฐ ์ ๋ง๋ก ํ์ ํ ๊ฐ์น๊ฐ ์๋ค๊ณ ์๊ฐํ๋ ์ ์ผํ ๋ณํ๋ bitstype
-> primitive
isbits
์
๋๋ค.
์ด ํ ๋ก ์ ์ง์ง ์์ ์ธ type
๋ฐ immutable
,์ด ์์ ์์ ์ ๊ฐ ๊ฐ์ฅ ์ข์ํ๋ ์ต์
์ ์ ํ ๋ณ๊ฒฝ๋์ง ์์ต๋๋ค. ์ ํ์ ๊ตฌ์ฑํ๋ type
๋ ๋ช
ํํ๊ณ ๋ถ๋ณ ์ ํ์ ๊ตฌ์ฑํ๋ immutable
๋ ๋ช
ํํฉ๋๋ค. ๊ทธ๋ฌ๋ ๋๋ ์์ผ๋ก์ ์ธ์ด์ ๊ฐ์ฅ ์ ํฉํ ๊ฒ์ ๋ํ ๊ทธ๋ค์ ํ๋จ์ ์๋ฌต์ ์ผ๋ก ์ ๋ขฐํ๊ธฐ ๋๋ฌธ์ ์ฐ๋ฆฌ์ ์ต๊ณ ๊ตฐ์ฃผ๊ฐ ์ฐ๋ฆฌ์๊ฒ์ฃผ๋ ๊ฒ์ ๊ธฐ๊บผ์ด ๋ฐ์ ๋ค์ผ ๊ฒ์
๋๋ค.
const ๋๋ constant ๋์ fixed๋ฅผ ์ฌ์ฉํ์ง ์๋ ์ด์ ๊ฐ ์์ต๋๊น? ์ ์ด๋ ๋์๊ฒ๋ ํจ์ฌ ๋ ๋ช ํํ ์ค๋ช ์ธ ๊ฒ ๊ฐ์ต๋๋ค.
@JeffreySarnoff ์ฐธ์กฐ (์ : ํฌ์ธํฐ)๋ฅผ ์ป์ ์์๋ ๊ฒ์ const
ness๋ฅผ ์์ํ๋ ๊ฒ์ ์ด๋ ต์ต๋๋ค. Julia์ "๊ณต์ "์๋ฏธ๋ก ์ ์ปดํ์ผ๋ฌ๊ฐ ์ง์ ์ผ๋ก ๋ถ๋ณ์ฑ์์ ์ฆ๋ช
ํ ์์๋ ๋ชจ๋ ๊ฒ์ด ์ฐธ์กฐ ์ ํ์ด์ด์ผ ํจ์ ์๋ฏธํฉ๋๋ค. ์ด๋ฌํ ์ฐธ์กฐ๋ฅผ const type
( immutable
)์ ํ๋์ ๋ฐ์ธ๋ฉํ๋ฉด์ด ์ฐธ์กฐ๊ฐ ๋ค๋ฅธ ๊ณณ์ ์กด์ฌํ์ง ์๋๋ค๋ ์ฆ๊ฑฐ๊ฐ ์์ผ๋ฏ๋ก ์ฐธ์กฐ ๋ ๋ฐ์ดํฐ๊ฐ ์ผ์ ํ๋ค๋ ์ฆ๊ฑฐ๊ฐ ์์ต๋๋ค.
์ด ๋์์ ๋ณ๊ฒฝํ๋ ๊ฒ์ด Julia ์ธ์ด์ ๊ทผ๋ณธ์ ์ธ ๋ณ๊ฒฝ์ด๋ผ๊ณ ์๊ฐํฉ๋๋ค.
@andyferris ๋ช ํํ ๋ต๋ณ์ ๊ฐ์ฌ๋๋ฆฝ๋๋ค.
const
๋๋constant
๋์fixed
๋ฅผ ์ฌ์ฉํ์ง ์๋ ์ด์ ๊ฐ ์์ต๋๊น? ์ ์ด๋ ๋์๊ฒ๋ ํจ์ฌ ๋ ๋ช ํํ ์ค๋ช ์ธ ๊ฒ ๊ฐ์ต๋๋ค.
๋๋ ๊ทธ๊ฒ์ด ์๊ตฌ์ ์ธ ๋ฐ์ธ๋ฉ์ด๊ณ ๋ฐ์ธ๋ฉ ๋ ๊ฐ์ฒด ๋ด๋ถ์ ๋ฐ์ดํฐ๊ฐ ๋ณ๊ฒฝ ๋ ์ ์๋ค๋ ๊ฒ์ (ํ์ฐ์ ์ผ๋ก) ๋ฐ์ํ๋ค๋ ๊ฒ์ ๋ฐ์ํ๋ const
๋๋ constant
๋ณด๋ค ๋ ๋์ ๊ฒ์ด ์๋์ง ๊ถ๊ธํ์ต๋๋ค. fixed
์ (๋) ์ด๋ค ๋ฐฉ์ ์ผ๋ก๋ ๊ฐ ์ ์์ง๋ง ๋ค๋ฅธ ์ธ์ด์์๋ ๋ณด์ง ๋ชปํ์ต๋๋ค (๋ค์ ๋งํ์ง๋ง ๋ค๋ฅธ ์ธ์ด์์ Julia์ ๋ฐ์ธ๋ฉ / ๊ณต์ ์๋ฏธ๋ฅผ ์์ ์ฐจ๋ฆฌ์ง ๋ชปํจ).
์๋ง๋ bind
(์ : bind x = 2
) ... ์์๋ฌ์ค๊ฐ glue
์ ์ํฉ๋๋ค ... ์ด๊ฒ์ ๊ฝค ์ถ์ธก์ด๋๊ณ ์์ต๋๋ค ...
const
๋ฅผ ๋ ์ ํํ ๊ฒ์ผ๋ก ๋ฐ๊พธ๋ ์์ด๋์ด๋ ๋งค๋ ฅ์ ์
๋๋ค. ๊ทธ๋ฌ๋ ์ฐ๋ฆฌ๋ ์ ํ ์ ์ธ๊ณผ ๊ฐ๋ณ ๋ณ์ ํ ๋น ๋ชจ๋์ ํ๋ช
ํ๊ฒ ์ ์ฉํ๊ธฐ๋ฅผ ์ํฉ๋๋ค. fixed struct
์ ์๋ฏธ๊ฐ ์์ง๋ง ์ ํ ์ ์ธ์ด ์๋ ๊ณ ์ ๋ ๊ตฌ์กฐ์ฒด์ ํ๋์
๋๋ค. ๋ถํํ๋ bound struct
( tied struct
?)๋ ๋ค์ ๋ถ๋ถ๋ช
ํด ๋ณด์
๋๋ค. ์ด๋ค ์ด์ ๋ก const
๊ฐ ์ ํ์ ์ ์ฉ๋ ๋ ๋ ๋ช
ํ ํด ๋ณด์
๋๋ค.
a ํ์ ์ ์ธ๊ณผ ๊ฐ๋ณ ๋ณ์ ํ ๋น ๋ชจ๋์ ํ๋ช ํ๊ฒ ์ ์ฉํ๊ธฐ๋ฅผ ์ํฉ๋๋ค.
๋๋ ๊ทธ๊ฒ์ ๋ชฉํ๋กํ๋ ๊ฒ์ด ์์ฐ์ ์ด๋ผ๊ณ ์๊ฐํฉ๋๋ค.
type A
const x::Int # fixed, bind, bound, tied, glue
end
๋ง์ด๋๋ค. type
, struct
์์ ๋ฐ๋ก ๊ฐ๊ธฐ๊ฐ ์์ผ๋ฉด ์๋ฅผ ์๋ฏธํ๋ ๋ฐ๋ก ๊ฐ๊ธฐ๊ฐ๋ฉ๋๋ค.
@generated
์ ๊ฐ์ด ์ฌ๋ฌผ์ ํน์ฑ์ ๋ณ๊ฒฝํ๋ ๋ค๋ฅธ ์ค์ํ ์ฅ์์ฒ๋ผ์ด ๋งคํฌ๋ก๋ฅผ ๋งคํฌ๋ก๋ก ๋ง๋๋ ๊ฒ์ด ํฉ๋ฆฌ์ ์ผ ์ ์์ต๋๋ค. ๊ทธ๋ฌ๋ฉด ๋ ๋ค๋ฅธ ํค์๋๊ฐ ์ ๊ฑฐ๋ฉ๋๋ค ...
type
-> composite
๋ํ +1,ํ์ง๋ง type
์์ ์ค์ ๋ก ๋ณ๊ฒฝ๋ ์ฌํญ์ ํ๋ฅญํ๊ฒ ๋ค๋ฆฝ๋๋ค.
์ค๋ ๋์ ์ ๋๊ธ์ ์ถ๊ฐํ์ง ์๊ณ ๋ GitHub ๋ฌธ์ ์ ํฌํ ํ ์ ์๊ธฐ๋ฅผ ๋ฐ๋๋๋ค. ๋ด ํฌํ๋ mutable
๋ฐ immutable
์
๋๋ค. ๋งค์ฐ ๊น๋ํ๊ณ ๊นจ๋ํฉ๋๋ค. struct
์ (๋) ๋จ์ฉ๋๋ฉฐ ๋ณ๊ฒฝ ๊ฐ๋ฅ์ฑ ๋ถ๋ถ์ ๊ฐ์กฐํ์ง ์์ต๋๋ค.
์ถ์ : ๋๊ตฌ๋ ์ง GitHub์ ๊ธฐ์ฌํ๊ณ ํฌํ ๊ธฐ๋ฅ์ ์ถ๊ฐ ํ ์ ์์ต๋๊น? "๋ฌธ์ํ๊ธฐ"ํ์ด์ง์์ ์ง๋ฌธํ์ง๋ง ์ด๋ฉ์ผ์ด ๋ถ์ค๋์์ ์ ์์ต๋๋ค.
์ต๊ทผ ๋ค๋ฅธ ๋ง์ ์ธ์ด์ ๋ํ ๋ฐฐ๊ฒฝ ์ง์์ด์๋ Julia๋ก ์ ํ ํ ํ Julia๊ฐ C / C ++์ ๋ชจ๋ ํผ๋์ค๋ฌ์ด const-ness ๋ฌธ์ ๋ฅผ C ์คํ์ผ ์ด๋ฆ ์ง์ ๋ฐ ๋์ด ์ค๊ธฐ๋ฅผ ์ฑํํ๋ ๊ฒ์๋ณด๊ณ ์ถ์ง ์์ต๋๋ค. ๋์ ๋ฐ์ดํฐ ์ ํ ์ ์ธ์ ๊ฐ ์ ํ ๋๋ ๊ณต์ ์ฐธ์กฐ ์ ํ์ ์๋๋ฅผ ๋ฐ์ํ๋ ๊ฐ๋ ์ ์ ๊ณตํ๋ฉด ๋จ์ํ ๋ณ๊ฒฝ ๊ฐ๋ฅ์ฑ์ ์ฐธ์กฐํ๋ ๋์ ํฌ๊ฒ ๋์์ด๋์์ ๊ฒ์ ๋๋ค.
Julia์ ๋ํ ๋์ ์ด๊ธฐ ๊ธฐ๋์น๋ ๋ณ๊ฒฝ ๋ถ๊ฐ๋ฅํ C ์คํ์ผ struct
๋๋ Python ๊ฐ์ฒด์ ์ ์ฌํ๊ฒ ๋์ํ๋ ๋จ์ํ type
์์ ๊ฒ์
๋๋ค. Julia๋ ํจ์ํ ํ๋ก๊ทธ๋๋ฐ ์คํ์ผ๊ณผ ์๋์ ๊ดํ ๊ฒ ๊ฐ๊ธฐ ๋๋ฌธ์
๋๋ค.
type ...
๋ฐ immutable...
์ ๋น๋์นญ ์ฑ์ผ๋ก ์ธํด ์ฌ์ ํ ํผ๋ ์ค๋ฝ์ง๋ง DataType
์์ typeof(SomeType)
๋๋ 'bitstype์ ์ค์ ์๋ฏธ '๋ฐ ๊ฐ๋จํ Alias = DataType
๋ฌธ ๋์ typealias
ํค์๋๊ฐ ํ์ํฉ๋๋ค.
๋ฐ๋ผ์, ๋๋ ํฌํ ๊ฒ datatype
๊ณผ ์ผ์น ๋ ๊ฒ์ด๋ผ๊ณ , typeof(SomeType) == DataType
์ ํจ๊ป ์๊ทน ์ ์ฌ์ฑ ํด์ ๊ฒ์ด ::Type{}
. composite [datatype]
๋ณ๊ฒฝ ๊ฐ๋ฅํ ์ ํ์ ์ฅ์ํ๋ฉด ๊ธฐ๋ณธ 'bitstypes'์ ๋นํด ํน๋ณํ๊ณ ์๋ง๋ ๋ ๋น์ผ ํน์ฑ์ ๊ฐ์กฐ ํ ์ ์์ต๋๋ค.
C / C ++์ ๋ชจ๋ ํผ๋์ค๋ฌ์ด const-ness ๋ฌธ์ ๊ฐ์ ธ ์ค๊ธฐ
์ด ํค์๋์ ์ด๋ฆ์ ๋ฐ๊พธ๋ฉด ๊ทธ๋ ๊ฒ๋์ง ์์ต๋๋ค. ์ด๋ฌํ ๋ฌธ์ ๋ ์ฌ๊ธฐ์ ์ ํ ๊ด๋ จ๋์ง ์์ ์ ์ ๊ฒ์ฌ ๋ฐ ์บ์คํธ์ ๊ด๋ จ์ด ์์ต๋๋ค.
๊ฐ ์ ํ ๋๋ ๊ณต์ ์ฐธ์กฐ ์ ํ์ด ๋๋ ค๋ ์๋๋ ๋จ์ํ ๋ณ๊ฒฝ ๊ฐ๋ฅ์ฑ์ ์ฐธ์กฐํ๋ ๋์ ํฌ๊ฒ ๋์์ด๋์์ ๊ฒ์ ๋๋ค.
๋๋ ์ด๊ฒ์ ์์ ํ ์ดํดํ์ง ๋ชปํฉ๋๋ค. ๊ฐ์ฒด๊ฐ ๋ถ๋ณ ์ธ ๊ฒฝ์ฐ ๊ฐ ๋๋ ์ฐธ์กฐ๋ก ์ ๋ฌ๋๋์ง ์ฌ๋ถ๋ฅผ ์ ์์๋ ๋ฐฉ๋ฒ์ด ์์ต๋๋ค. ๊ทธ๋ ๋ค๋ฉด ๊ฐ / ์ฐธ์กฐ ๊ตฌ๋ณ์ด ์ด๋ป๊ฒ ๊ธฐ๋ณธ์ด ๋ ์ ์์ต๋๊น?
datatype
์ ๋์ ์ ํ์ด ์๋๋๋ค. ํ์ง๋ง datatype
๋ composite datatype
๋ ๊ฐ๋ณ์ฑ ๊ตฌ๋ถ์ ์ ๋ฌํ๋ ์ข์ ๋ฐฉ๋ฒ์ด๋ผ๊ณ ์๊ฐํ์ง ์์ต๋๋ค.
@JeffBezanson , C์ ์ ์ฌํ const-ness๋ฅผ ์ฌ์ฉํ์ฌ Julia ์ ํ์ด C / C ++์์์ ๋์ผํ ๋์์ ๊ฐ์ง ์ ์๋ค๋ ์์ ์ ๊ธฐ๋๋ฅผ ์๋ฏธํ์ต๋๋ค. ๋ฐํ ์ ํ. ๋ฐ๋ผ์ C / C ++๋ฅผ ์ฐธ์กฐํ์ง ์๋ ํค์๋๋ฅผ ์ ํํ ๋ ์ข์ ์ ํ์ด๋ฏ๋ก const struct
ํ์ง ๋ง์ญ์์ค.
'๊ฐ ๋ ์ฐธ์กฐ'๊ด๋ จ : ๋ถ๋ณ ์ ํ์ด ๋ฉค๋ฒ๋ฅผ ์ง์ ํฌํจํ๊ณ ๋ฉ์ง๊ณ ๊ฐ๊ฒฐํ ๋น ๋ฅธ ์ด์
๋ธ๋ฌ ์ฝ๋๋ฅผ ์์ฑํ๋ ์ด์ ๋ฅผ ์ดํดํ๋ ๋ฐ ๊ฝค ์ค๋ ์๊ฐ์ด ๊ฑธ๋ ธ์ง ๋ง '์ ํ'์๋ ๊ฐ์ฒด์ ๋ํ ๋ชจ๋ ํธ์ถ์ด ํฌํจ๋์ง ์์๊ณ ์ฌ์ ํ ํฌํจ๋์ด ์์ต๋๋ค. ์ฆ, ์๋๋ฅผ ๊ฒจ๋ฅ ํ ๋ ์ผ๋ฐ์ ์ผ๋ก NTuple์ ์ฌ์ฉํ๋ ์ด์ ์
๋๋ค. ๋ฐ๋ผ์ '๋ถ๋ณ'๊ณผ '๋ณ์ด ๊ฐ๋ฅ'์ ์ฝ์ ๋ ๋๋ Fortran์์ '๋งค๊ฐ ๋ณ์'๋ก ์๋ฏธ๋ฅผ ์์ํ์ง๋ง ์ค์ ๋ฐ์ดํฐ ์ ํ์ ๋ ์ด์์์ด๋ ๊ตฌํ์ ์ข
๋ฅ๊ฐ ๋ณ๊ฒฝ๋์ง ์์์ต๋๋ค.
์๋ง๋ ๋๋ถ๋ถ์ ๊ฒฝ์ฐ Complex์ ๊ฐ์ ์์ ๋ณตํฉ ์ ํ์ ๋ํด์๋ '๋ถ๋ณ ๊ฐ'์๋ฏธ ์ฒด๊ณ๋ฅผ ์ํ ์ ์์ง๋ง ๋ฐฐ์ด ๋ฑ๊ณผ ๊ฐ์ ํฐ ๋ฐ์ดํฐ ์ธํธ์ ๋ํด์๋ '๋ณ๊ฒฝ ๊ฐ๋ฅ ๋ฐ ์ฐธ์กฐ / ๋น ๋ณต์ฌ'๋ฅผ ์ํ ์ ์์ต๋๋ค.
๊ทธ๋ฐ ๋ค์ ๊ธฐ๋ณธ ์๋๋ ์๋ง๋ ๋ณ๊ฒฝ ๊ฐ๋ฅ์ฑ์ด ์๋๋ผ ๋ฐ์ดํฐ ๋ณต์ฌ๋ฅผ ํผํ๋ ๊ฒ์
๋๋ค.
๊ทธ๋ฌ๋ ๊ทธ๊ฒ์ ๋น ๋ฅธ ์ด์ ๋ธ๋ฌ ์ฝ๋๋ฅผ ์ป๊ธฐ ์ํด Julia ์ ์์ค ๊ธฐ๊ณ๋ฅผ ๋ฐฐ์ธ ๋์ ๊ฒฝํ ์ด์์ง๋ง ํค์๋ ์ด๋ฆ ์ง์ ์ ๊ทธ๊ฒ์ ๋ ์ ๋ฐ์ํ๋ ๋ฐฉ๋ฒ๊ณผ ๊ทธ๊ฒ์ ๊ฐ๋ณ์ฑ์ผ๋ก ๊ฒฐํฉํ๊ฑฐ๋ ํํํ๋ ๋ฐฉ๋ฒ์ ๋ชจ๋ฆ ๋๋ค.
๋๋ ๋น์ ์ด @mjw์์ ์ค๋ ๊ณณ์ ์ป์์ต๋๋ค. ๋๋ ๊ฑฐ๊ธฐ์ ์์์ง๋ง C / C ++์ ๋ํด ์๋ ๋ชจ๋ ๊ฒ์ ๋ฐฐ์ฐ์ง ์๋ ๊ฒ์ด ๋ซ๋ค๊ณ ์๊ฐํฉ๋๋ค. ์ฌ๊ธฐ์์ ๋ถ๋ณํ๋ ๊ฒ์ const
-ness์ด๋ฉฐ ๋ฌด์ธ๊ฐ๊ฐ ์คํ์ธ์ง ๋๋ ๋์ ์ผ๋ก ํ ๋น๋๋์ง, ์ฐธ์กฐ ๋๋ ๊ฐ์ผ๋ก ์ ๋ฌ๋๋์ง ์ฌ๋ถ๋ ์์ ๋กญ๊ฒ ๋ณ๊ฒฝํ ์ ์์ผ๋ฉฐ ์ปดํ์ผ๋ฌ์ ๋ํ ์ต์ ํ ์ ํ์ด ๋ ๊ฒ์
๋๋ค. ๋ชจ๋ ๊ฒ์ด ๋์ ์ผ๋ก ํ ๋น๋๊ณ ์ฐธ์กฐ๋ก ์ ๋ฌ๋๋ ์ธ์ด๋ฅผ ๋ง๋ค ์ ์์ต๋๋ค. ์ด๊ฒ์ Julia์ ๊ธฐ๋ณธ ๋ฐฉ์์
๋๋ค (๋ฐ์คํ ๊ฐ์ ๊ฒฝ์ฐ ์ ํ์ ์ ์์๋ ๊ฒฝ์ฐ์๋ "๊ณต์ ๋ก ์ ๋ฌ"์ ๊ตฌํํฉ๋๋ค). ์ฌ๋ฌ๋ถ (๊ทธ๋ฆฌ๊ณ ๋๋จธ์ง ์ฐ๋ฆฌ)์ ํ์ฌ ์ต์ ํ๊ฐ ๊ตฌํ ๋ ๊ณณ์ด๊ธฐ ๋๋ฌธ์ ์์ ๋ถ๋ณ์ฑ์ด ํจ์ฌ ๋ ๋น ๋ฅด๋ค๋ ๊ฒ์ ์์์ต๋๋ค. ์ด๊ฒ์ ์ต์ ํ๋ฅผ ๋ ์ฝ๊ฒ ๋ง๋๋ immutable
์ ์๋ฏธ ์ฒด๊ณ์ ๊ฒฐ๊ณผ์
๋๋ค.
๊ทธ๋ฌ๋ ์ค์ ๋ก๋ ํฐ ๋ถ๋ณ ํญ๋ชฉ์ด ์ฐธ์กฐ (์๋ง๋ ์คํ ํฌ์ธํฐ์ ์ํด ์ ๋ฌ๋๋ ๊ฒฝ์ฐ)๋ฅผ ์ ํธํ์ง๋ง NTuple{1_000_000}
๋ฅผ ํ ํ ๋นํ๋ ๊ฒ์ด ๊ฐ์ฅ ์ข์ผ๋ฉฐ ์๋ ค์ง ํฌ๊ธฐ์ ์์ ๋ณ๊ฒฝ ๊ฐ๋ฅ ํญ๋ชฉ์ ์คํ ํ ๋น๋ฉ๋๋ค. (๊ฐ๋ฅํ ๊ฒฝ์ฐ ๋ค์). ๊ฐ๋น์ง ์์ง์กฐ์ฐจ๋ ๊ฒฝ์ฐ์ ๋ฐ๋ผ ์ ์ ์ผ๋ก ๊ฒฐ์ ๋ ์ ์์ผ๋ฉฐ, ์๋ฅผ ๋ค์ด ๋ฃจํ ๋ด์์ ํ ๊ณต๊ฐ์ ์ฌ์ฌ์ฉ ํ ์ ์์ต๋๋ค. ๋๋ ์ด๊ฒ์ ์ด์ค์ผ์ดํ ๋ถ์์ด ํ์ํ ๋ฏธ๋์ ์ต์ ํ ๊ธฐํ๋ผ๊ณ ์๊ฐํฉ๋๋ค (๊ทธ๋ฆฌ๊ณ ์ด๊ฒ๋ค ์ค ์ด๋ ๊ฒ๋ ์ธ์ด์ ์๋ฏธ๋ก ์ ์ํฅ์์ฃผ์ง ์๊ณ ์ฑ๋ฅ์๋ง ์ํฅ์ ๋ฏธ์นฉ๋๋ค).
์ ๊ฐ ๋งํ๊ณ ์ํ๋ ๊ฒ์ ํค์๋๊ฐ ๋ช ๋ ์์ ๋ณ๊ฒฝ ๋ ๊ตฌํ ์ธ๋ถ ์ฌํญ (์ฆ, ํจ์จ์ ์ธ ์ํ ๊ฐ๋ณ ๋ฐ ํจ์จ์ ์ธ ๋ํ ๋ถ๋ณ)์ด ์๋๋ผ 10 ~ 2 ๋ ๋์ ์ผ์ ํ๊ฒ ์ ์ง ๋ ์๋ฏธ๋ฅผ ๋ฐ์ํด์ผํ๋ค๋ ๊ฒ์ ๋๋ค.
๋๋ Julia ์ ํ์ด C / C ++์์์ ๋์ผํ ๋์์ ๊ฐ์ง ๊ฒ์ด๋ผ๋ ์์ ์ ๊ธฐ๋๋ฅผ ์๋ฏธํ์ต๋๋ค.
์ด๊ฒ์ ์์งํ const
-> constant
์ ๊ณ ๋ คํ ์ถฉ๋ถํ ์ด์ ๊ฐ ๋ ์ ์์ต๋๋ค. ํ์ฌ๋ก์๋ const
๊ฐ ์ ์ผํ ์ถ์ฝ ํ ํค์๋ ์ผ ์ ์์ผ๋ฏ๋ก ์ด์จ๋ ์ด์ํ๊ฒ ๋ง๋ค ์ ์์ต๋๋ค.
๊ฐ๋จํ
Alias = DataType
๋ฌธ.
๋๋ ์ด๊ฒ์ด ์๋ฏธ์๋ ๊ณณ์์ ์ ๋์ ์ผ๋ก ๊ด์ฐฎ๋ค๊ณ ํ์ ํ์ง๋ง typealias RealMatrix{T<:Real} Matrix{T}
์ ๊ฐ์ด ๋ ๋ณต์กํ ์ ํ์ ์์ ์ ํ์ฉํ์ง ์์ ๊ฒ์ด๋ฉฐ, ์๋ก์ด Type
์์ฑํ์ง ์๋ ๋จ์ํ ๋ฐ์ธ๋ฉ์
๋๋ค TypeVar
). RealMatrix = Matrix{T <: Real}
๋ก ์ ์ํ๊ณ ์ถ์ง ์๋ค๋ฉด apply
๊ฐ TypeVar
๋ํดํ๋ apply
์ผ๋ฐํํ์ญ์์ค (์ฆ, TypeConstructor
๋ง๋ญ๋๋ค) ... ์ค์ ๋ก ํฅ๋ฏธ๋ก์ด ์์ด๋์ด์
๋๋ค (ํ์ง๋ง ๊ตฌ๋ฌธ ๋ฌธ์ ๊ฐ ์์ผ๋ฏ๋ก typealias
๊ฐ ์ข์ ์ด์ ์
๋๋ค ...).
@andyferris , ๋๋ ์ด๋ฏธ '
@mjw ํ๋ฅญํฉ๋๋ค. ์ ๋ ๊ทธ ๋ชจ๋ ๊ฒ์ ๋์ํฉ๋๋ค. :)
๊ฐ์ฅ ์ข์ GitHub ๊ธฐ๋ฅ์ธ ๋ฐ์ ์ด๋ชจํฐ์ฝ์ ์ฌ์ฉํ์ฌ ์ค๋ฌธ ์กฐ์ฌ์ ๊ฐ์ฅ ๊ฐ๊น์ด ๋ฐฉ๋ฒ์ ์๋ํด ๋ณด๊ฒ ์ต๋๋ค.
์ฌ๊ธฐ์์๋ _ ํน์ ์์์์ด _ ๊ฐ์ฅ ๋ง์์ง์ง๋ฅผ๋ฐ๋ โโ์ ์์ ํ๋ก ์ ๋ฆฌํ์ต๋๋ค. ์ง์ ๋ ์ด๋ชจํฐ์ฝ์ ์ฌ์ฉํ์ฌ ๋ฐ์ํ์ฌ ํด๋น ์ ์์ ํฌํํ์ธ์. ๋ฐ์คํฌํฑ ๋ธ๋ผ์ฐ์ ๋ฅผ ํตํด GitHub์ ์ก์ธ์คํด์ผํ๋ค๊ณ ์๊ฐํฉ๋๋ค. AFAIK ๋ฐ์ ์ด๋ชจ์ง๋ ๋ชจ๋ฐ์ผ ์ธํฐํ์ด์ค์์ ๊ตฌํ๋์ง ์์์ต๋๋ค. ์ด ๊ฒ์๋ฌผ์ ์ค๋ฅธ์ชฝ ์๋จ ๋ชจ์๋ฆฌ์์๋ ์ผ๊ตด์ ํด๋ฆญํ์ฌ ๊ทธ๋ฆผ ์ด๋ชจํฐ์ฝ ๋ฉ๋ด์ ์ก์ธ์คํฉ๋๋ค.
| type
| immutable
| ๋ฐ์ |
| :-: | :-: | :-: |
| struct
| const struct
| ๐ (+1) |
| mutable
| immutable
| ๐ (-1) |
| type
| immutable
| ๐ (์์) |
| composite
| const composite
| : tada : (๋ง์ธ) |
| datatype
| const datatype
| ๐ (ํผ๋) |
| type
| const type
| โค๏ธ (ํํธ) |
ํฌํ์ ์คํจํ๋ ๊ฒ์ ๋ฌผ๋ก nuple
์ ๋ํ ์์ ์ ํฌํ์ ํด๋นํฉ๋๋ค. : trollface :
์ ๋ "๋ฏผ์ฃผ์ ์ผ๋ก"์ด์ ๊ฐ์ ๋ ผ์์ ์ธ ๊ฒฐ์ ์ ๋ด๋ฆฌ๋ ๊ฒ์ ์ข์ํ์ง ์์ต๋๋ค. ํฉ์์์ด ๋ ผ์๊ฐ ์งํ ๋์๋ค๋ฉด BDFL์ ๊ฒฐ์ ์ ์ฐ๊ธฐ ํ ๊ฒ์ ๋๋ค.
๊ณต์ ํ ํฌ์ธํธ, @TotalVerb. ๋ด๊ฐ ์ ์ ๋งํ๋ฏ์ด, ๋๋ ๊ทธ๋ค์ด ์ต๊ณ ๋ผ๊ณ ์๊ฐํ๋ ๊ฒ์ ์ฐ๋ฆฌ์๊ฒ ์ค ์์๋ ํ์ ๊ฐ์ง๋ฉด ์์ ํ ๊ด์ฐฎ์ ๊ฒ์ ๋๋ค. ์ค๋ ๋๊ฐ ์ฝ๊ฐ ๊ตฌ๋ถ ๊ตฌ๋ถํ๊ณ ํฌํ์ ๋ํ @juliohm ์ ์์ ์ด ํฉ๋ฆฌ์ ์ธ ๊ฒ์ฒ๋ผ
๊ฐ์ธ์ ์ผ๋ก ์ ๋ ๋ฏธํ์ ์ผ๋ก ๋ ๋จ์ด๋ฅผ ๊ฐ๋ ๊ฒ์ ์ข์ํ์ง ์๋๋ค๊ณ ์๊ฐํฉ๋๋ค ( const type
). ๊ทธ๊ฒ์ ๋ํ ์ฝ๊ฐ ์๋ฏธ ์ ๋ถํํ์์ ๋๋๋๋ค. const x = 1
๋ผ๊ณ ํ๋ฉด. ์ฐ๋ฆฌ๋ x
๊ฐ ์ผ์ ํ๋ค๋ ๊ฒ์ ์๋ฏธํฉ๋๋ค. const type; x; end
๋ผ๊ณ ํ๋ฉด์ด ์ ํ์ ์ธ์คํด์ค๊ฐ ์์ฑ ํ์๋ ๋ณ๊ฒฝ๋์ง ์๋๋ค๋ ์๋ฏธ์
๋๋ค. ์ง์ ๋ณด๊ฐ์์ ๋ฌด์ธ๊ฐ๊ฐ ์์ ์ ํ์ด๋ผ๊ณ ๋งํ๋ ๊ฒ์ ์ ํ ์์ฒด๊ฐ ๋ณ๊ฒฝ๋์ง ์๋๋ค๋ ๊ฒ์ ์๋ฏธํฉ๋๋ค (์ด๋ฏธ ์ด๋ฏธ ๊ทธ๋ ์ต๋๋ค). ๋ํ๋ณด์ญ์์ค:
type foo
end
const bar = foo
๋ฐ๋ผ์ bar
๋ const์ด๊ณ ํญ์ foo์ด์ง๋ง const type
๋ ์๋๋๋ค. const
(๋ฐ์ธ๋ฉ์ ์ ์ฉ)์ ๊ธฐ์กด ์๋ฏธ ์ฒด๊ณ์ ๋ํ wrt์ฒ๋ผ ๋๊ปด์ง๋ฉฐ ์ ํ์ ์ด๋ฆ์ ์ด๋ฏธ const์
๋๋ค.
๊ฐ๊ฒฐํ๊ณ ์๋ ๋ ์๋ฏธ๋ฅผ ์ ๋ฌํ๋ฉฐ ๋ณ์ ์ด๋ฆ์ผ๋ก ๋ฐ๋์งํ์ง ์์ ํค์๋๊ฐ ์๋ค๊ณ ์๊ฐํฉ๋๋ค. ์ด๋ฌํ ๋ชฉํ์ ๊ฐ์ฅ ๊ฐ๊น๋ค๊ณ ์๊ฐํ๋ ์ฉ์ด๋ ์ ์ธ ๋ ์ธ ๊ฐ์ง ์ ํ์ ๋ํ mutable datatype
, immutable datatype
๋ฐ abstract datatype
์
๋๋ค.
type
๋ฐ immutable
์ธ์๋ ์ถ๊ฐ ๋ณ๊ฒฝ ๊ฐ๋ฅํ ๊ฐ ์ ํ์ด ์๊ธฐ๋ฅผ ๋ฐ๋๋๋ค.
๋ฌธ์ ์ด๋๊ฐ์์ ๋ช ๊ฐ์ง ๋
ผ์๋ฅผ ๋ณด์์ง๋ง ๊ธฐ๋ณธ์ ์ผ๋ก ํ์ฌ ๋ค์๊ณผ ๊ฐ์ ์๋๋ฆฌ์ค๋ฅผ ํจ์จ์ ์ผ๋ก ์ฒ๋ฆฌํ๋ ๊ฒ์ ๋ถ๊ฐ๋ฅํฉ๋๋ค.
immutable T
a::Int
b::Float64
...
end
t = Vector{T}(10)
t[2].a = 5 # error here
# instead
c = t[2]
t[2] = T(5, c.b, ...) # works
์ด ์ฝ๋๋ sizeof(T) * 10
๊ฐ ์ ํ์ ๊น๋ํ ๋ฐฐ์ด์ ์์ฑํ์ง๋ง ์ผ๋ถ ํ๋๋ฅผ ๋ณ๊ฒฝํ๋ ค๋ฉด ์ผ๋ฐ์ ์ผ๋ก 3-5 ๊ฐ์ ํ๋ ๊ธธ์ด ์ธ ์ ์ฒด T(...)
๋ฅผ ๋ค์ ํ ๋นํด์ผํฉ๋๋ค.
๊ทธ๋์ ๊ธฐ๋ณธ์ ์ผ๋ก ๋ด 5 ์ผํธ :
type
-GC ์์ง ์ฐธ์กฐ
immutable
-๋ณ๊ฒฝํ ์์๋ ๊ฐ (์คํ ํ ๋น) ์ ํ
mutable
-ํนํ ๋ฐฐ์ด์์ ๋ณ๊ฒฝํ ์์๋ ๊ฐ ์ ํ
๋ณ๊ฒฝํ ์์๋ ๊ฐ ์ ํ
๋ณ๊ฒฝ์ ํ์ฉํ๋ ๊ฒ์ด ์ฌ๋ฌผ์ ์ ์ฒด์ฑ์ ๋ถ์ฌํ๋ ๊ฒ์ด๋ฏ๋ก ๋ฌ์ฑํ๊ธฐ ๋ถ๊ฐ๋ฅํ ๋ชฉํ๋ผ๊ณ ์๊ฐํฉ๋๋ค.
๋์ ์ด ์ ๊ทผ ๋ฐฉ์์ ์ํ ์๋ ์์ต๋๋ค. # 11902
๊ฐ๋ณ ๊ณผ ๋ถ๋ณ ์ ๋ถ๋ฆฌํ๋ ๊ฒ์ ์ ์ธํ๊ณ ๋ ๊ฐ ๊ณผ ์ฐธ์กฐ๋ฅผ ๋ถํ ํ๋ ๊ฒ์ด ๋ ์ข์ต๋๋ค.
abstract Node{T}
immutable Link{T} <: Node{T}
value :: T
next :: ref{Link{T}} # next :: Link{T} will be an error: Recursive type
end
๊ฐ๊ณผ ์ฐธ์กฐ๋ฅผ ์ธ์์ ์ผ๋ก ๊ตฌ๋ถํ์ฌ ์ธ์ด๋ฅผ ์ง๋์น๊ฒ ๋ณต์กํ๊ฒ ๋ง๋ค ํ์๊ฐ ์์ต๋๋ค. ๋ณ๊ฒฝ ๊ฐ๋ฅ ๋ฐ ๋ถ๋ณ ์ ํ์ ์๋ฏธ ์ ํจ์ฌ ๋ ๊ฐ๋จํฉ๋๋ค. ์ ํ์ด ๊ฐ ์ ํ์ด๋ผ๋ ์ฌ์ค์ ๋จ์ง ์ต์ ํ ์ผ๋ฟ์ ๋๋ค.
@Keno ๋ ์ข์ ์ง์ ์ํฉ๋๋ค
๊ฐ์ธ์ ์ผ๋ก ์ ๋ ๋ฏธํ์ ์ผ๋ก ๋ ๋จ์ด๋ฅผ ๊ฐ๋ ๊ฒ์ ์ข์ํ์ง ์๋๋ค๊ณ ์๊ฐํฉ๋๋ค (const type). ๊ทธ๊ฒ์ ๋ํ ์ฝ๊ฐ ์๋ฏธ ์ ๋ถํํ์์ ๋๋๋๋ค. const x = 1์ด๋ผ๊ณ ํ๋ฉด x๊ฐ ์ผ์ ํ๋ค๋ ๊ฒ์ ์๋ฏธํฉ๋๋ค. ์ฐ๋ฆฌ๊ฐ const type์ด๋ผ๊ณ ๋งํ ๋; ์์ค; end ์ฐ๋ฆฌ๋์ด ์ ํ์ ์ธ์คํด์ค๊ฐ ์์ฑ ํ์ ๋ณ๊ฒฝ๋์ง ์๋๋ค๋ ๊ฒ์ ์๋ฏธํฉ๋๋ค. ์ง์ ๋ณด๊ฐ์์ ๋ฌด์ธ๊ฐ๊ฐ ์์ ์ ํ์ด๋ผ๊ณ ๋งํ๋ ๊ฒ์ฒ๋ผ ๋๊ปด์ง๋ค๋ ๊ฒ์ ์ ํ ์์ฒด๊ฐ ๋ณ๊ฒฝ๋์ง ์๋๋ค๋ ๊ฒ์ ์๋ฏธํฉ๋๋ค (์ง๊ธ์ ์ด๋ฏธ ๊ทธ๋ ์ต๋๋ค)
์์ ์ธ๊ธํ๋ฏ์ด "์ฌ๋ฐ๋ฅธ"์๋ฏธ๋
type Complex{T}
const re::T
const im::T
end
z = Complex(1,2)
์ฌ๊ธฐ์ z.re
๋ const z.re = 1
์ ์ ์ฌํ ๊ฒ์ ์
๋ ฅ ํ ๋์ ๋๊ฐ์ด ๋์ํ๋ฏ๋ก ์ ํํ ์ด๋ค ๋ฐ์ธ๋ฉ์ด const
์ธ์ง์ ๋ํ ์๋ฏธ ์ ํผ๋์ด ์์ต๋๋ค.
@JeffBezanson์ด ๋งํ๋ฏ์ด ์ด๊ฒ์ ๋ง์ ์์ ํ๋์ ์ค์ ๋ก ํธ๋ฆฌํ์ง ์์ผ๋ฉฐ ํ์ฌ ์ ํ์ ๊ตฌํ๊ณผ ํธํ๋์ง ์์ต๋๋ค. ๋ถ๋ถ์ ์ผ๋ก ๋ณ๊ฒฝ ๊ฐ๋ฅํ๊ณ ๋ถ๋ถ์ ์ผ๋ก ์ผ์ ํ ๊ตฌ์กฐ์ฒด๋ ๋ฏธ๋์ ๊ตฌํ๋๊ฑฐ๋ ๊ตฌํ๋์ง ์์ ์ ์์ต๋๋ค. ๊ทธ๋ฌ๋ ํ์ฌ์ ๋ฏธ๋์ ๋ชจ๋ ์๋ฏธ ๊ฐ ์๋ ๊ตฌ๋ฌธ์ด ์์ต๋๋ค.
<strong i="19">@const</strong> type Complex{T}
re::T
im::T
end
์ด๊ฒ์ด ๊ตฌํ ๋ ํ์ฌ ๋ฐฉ์์ผ๋ก ๋งคํฌ๋ก๋ AST์์ type
์์ immutable
๋ก ๋ณ๊ฒฝํ ์ ์์ต๋๋ค. ์์ผ๋ก ๋ถ๋ถ์ ์ผ๋ก ์์ ์ธ ๊ตฌ์กฐ์ฒด๊ฐ ๊ตฌํ๋๋ฉด ๋งคํฌ๋ก๋ ๊ฐ ํ๋์ const
๋ฅผ ์ถ๊ฐํ์ฌ AST์ ๋ํ ์กฐ์์ ๊ณ์ ์ํ ํ ์ ์์ผ๋ฉฐ ํ๋ ๋ฐ์ธ๋ฉ์ด๋ผ๋ ๊ฒ์ด ๋ชจ๋์๊ฒ ๋ถ๋ช
ํ ๊ฒ์
๋๋ค. ์ผ์ ํฉ๋๋ค. ๋ฏธํ์ ์ผ๋ก๋ ์ฐ์ ๋ ๋ ๊ฐ์ ํค์๋๋ณด๋ค ๋ซ์ต๋๋ค. ํจ์ ( @generated
, @inline
, @proagate_inbounds
๋ฑ)์ ๋ํด ์ ์ฌํ ์์
์ ์ํํฉ๋๋ค.
@const
๋ ์ฝ๊ฒ @immutable
๋๋ ์ ์ฌํ ๊ฒ ( <strong i="31">@immutable</strong> type Val{T}; end
์ฝ๊ธฐ OK, IMO)์ด ๋ ์ ์์ผ๋ฉฐ ๋งคํฌ๋ก ์์ด๋์ด๋ struct
, composite
์ ํธํ๋ฉ๋๋ค. , ๋ฑ๋ฑ.
@ be5invis ์,์ด C #์์ ์๋ฅผ ๋ค์ด, ๋ง์ ์ธ์ด์์ ์ผ๋ฐ์ ์ธ ๋ฐฉ๋ฒ์ด๋๋ค struct
, ๋ฑ ์ฌ๋ฌ ๊ฐ์ง๋ฉด์์ ์ด๋ค ๋์ํฉ๋๋ค immutable
: ๊ทธ๊ฒ์ ๋ช
์ ์ ์ผ๋ก ํ ๋น๋๊ณ , ๊ธฐ๋ฅ์ ์ฌ๋ณธ ์ ๋ฌ ๋ฐฐ์ด ( class
| type
์ ๊ฒฝ์ฐ์ฒ๋ผ GC ๊ด๋ฆฌ ๊ฐ์ฒด์ ๋ํ ์ฐธ์กฐ๊ฐ ์๋). ๊ทธ๋ฌ๋ _mutable_์ด๋ฉฐ ๋ฐฐ์ด์์ ๋จ์ผ ํ๋๋ก ์์ ํ ์ ์์ต๋๋ค.
immutable
๊ฒฝ์ฐ ๋ ๊ฐ์ง ์์ฑ์ด ํผํฉ๋์ด ์๋ค๊ณ ์๊ฐํฉ๋๋ค.
๋ฐ๋ผ์ ๊ธฐ๋ณธ์ ์ผ๋ก ์์ฑ 2 ๋ง์๋ ์ ํ์ ๋์
์๋ณด๊ณ ์ถ์ต๋๋ค. ์ด๊ฒ์ ๊ธฐ์กด ์ฝ๋๋ฒ ์ด์ค๋ฅผ ๋ฐฉํดํ์ง ์์ต๋๋ค ( immutable
๋จ์ ์์).ํ์ง๋ง ์ต์ํ์ GC ๊ฐ์
์ผ๋ก ๋น ๋ฅด๊ฒ ๋ฌด์ธ๊ฐ๋ฅผ ์์ฑํ๋ ์ฌ๋๋ค์๊ฒ๋ ๊ฐ์น๊ฐ์์ ๊ฒ์
๋๋ค. .
@johnmyleswhite # 11902์ ๊ฐ์ฌ๋๋ฆฝ๋๋ค.
@wgreenr ์์ ์ธ๊ธํ๋ฏ์ด ์ฌ๋ฌ ๋ฒ ๋ ผ์๋์์ผ๋ฏ๋ก ๋ถ๊ฐ๋ฅํฉ๋๋ค. ์ด ๋ฌธ์ ์ ๋ ผ์์๋ ์ค์ ๋ก ๊ด๋ จ์ด ์์ต๋๋ค.
๋ชจ๋ ๊ฒ์ด ๊ฐ๋ฅํ์ง๋ง ๊ฐ๋ณ ๊ฐ ์ ํ์ ๋์ ํ๋ ๊ฒ์ ๋งค์ฐ ํ๊ดด์ ์ด๊ณ ๋งค์ฐ ๋์ ์๊ฐ์ ๋๋ค. ๋๋ ๊ทธ๊ฒ์ด ๊ฒ๋ณด๊ธฐ์ ๊ฐ๋จํ๊ณ ๋งค๋ ฅ์ ์ธ ์์ด๋์ด ์ธ ์ด์ ๋ฅผ ์ดํดํ ์ ์์ง๋ง, ์์ ํ ๋ค๋ฅธ ์ข ๋ฅ์ ์ ๊ฐ์ฒด ์๋ฏธ๋ฅผ ์ถ๊ฐํ๊ณ ์ ํ ๊ทธ๋ํ๋ฅผ ์ฐธ์กฐ ๋ฐ ๊ฐ ์๋ฏธ๋ก ๋ถ๊ธฐํ๋ ๊ฒ์ด ์ธ์ด๋ฅผ ๋ ์ข๊ฒ ๋ง๋ค์ง๋ ์์ต๋๋ค . ์ ์์๋ ์๋ฏธ๋ก ์ ๋ฐ๋ผ ๋์ผํ ์ฝ๋๊ฐ ๋งค์ฐ ๋ค๋ฅธ ์์ ์ ์ํํ๋ฏ๋ก ์ผ๋ฐ ์ฝ๋๋ฅผ ์์ ํ๊ฒ ์์ฑํ๋ ๊ฒ์ด ๋ถ๊ฐ๋ฅํฉ๋๋ค. ์ฌ๊ธฐ ์ ์์ ์ ๋ํ ๊ด๋ฒ์ํ ๋ ผ์๊ฐ
์ด๊ฒ์ด ์ธ๊ธ ํ ๊ฐ์น๊ฐ ์๋์ง ํ์คํ์ง ์์ต๋๋ค. ๊ทธ๋ฌ๋ C / C ++์์ 'struct'๋ ๋ฐ์ดํฐ์ ๋ ์ด์์์ ๋ํด์๋ ์์ํฉ๋๋ค. ๋ฐ๋ฉด์ ๋ ๋์ ๋ฉ๋ชจ๋ฆฌ ๋ ์ด์์์ ์ป๊ธฐ ์ํด ๊ตฌ์กฐ์ฒด ๋ฉค๋ฒ๋ฅผ ๋ค์ ์ ๋ ฌํ๋ ๊ฒ์ด ์ข์ต๋๋ค. ๊ตฌ๋ฌธ์ ์ฃผ์ ๋ณ๊ฒฝ์ ๊ณ ๋ คํ๊ณ ์๋ค๋ฉด '๊ตฌ์กฐ์ฒด'(์์-> C interop)์ '๋ถ๋ณ'(์ด๋ค ์ ์ผ๋ก๋ ์์๋ฅผ ์ง์ ํ ์ ์์)์ ์ด๋ป๊ฒ ๋ ๊ตฌ๋ถํ ์์๋ ๋ฉ์ปค๋์ฆ์ ๊ฐ๋ ๊ฒ์ด ์ข์ต๋๋ค.
๋๋ ์ค๋ฆฌ์๋ฅผ ์ฒ์ ์ ํ๊ธฐ ๋๋ฌธ์ ๋ถ๋ช ํ ๊ฒ์ ๋์ณค๋ค๋ฉด ์ฃ์กํฉ๋๋ค.
๋๋ ๊ฐ์ธ์ ์ผ๋ก ์ง์ ํ ์ ํธ wrt ์ด๋ฆ์ด ์์ต๋๋ค. ๊ทธ๋ฌ๋ "์ถ์์ "์ด ์ด๋ฏธ ์กด์ฌํ๋ค๋ ์ ์ ๊ฐ์ํ ๋ ์๋ฌด๋ "๊ตฌ์ฒด์ "์ ์ ์ํ์ง ์์ ๊ฒ ๊ฐ์ ๋๋์ต๋๋ค.
๋ ๋ค๋ฅธ ์ ์์ ์ถ๊ฐํ๋ ค๋ฉด ๋ค์์ด ๊ฐ์ฅ ์ข์ต๋๋ค.
์ฌ์ฉ struct
๋์ immutable
.
์ฌ์ฉ struct!
๋์ type
. ์์ด๋ก ๋งํ ๋ ์ด๊ฒ์ "๋ณ์ด ๊ฐ๋ฅํ ๊ตฌ์กฐ์ฒด"๋ผ๊ณ ํฉ๋๋ค.
struct!
์์์๋ ์ผ๋ถ ํ๋๋ฅผ const
๋ก ํ์ํ๋๋ก ํ์ฉํฉ๋๋ค.๋ช ๊ฐ์ง ์ ๋นํ ๋ฐ ์๊ฐ :
1) ๋ด๊ฐ ๋ช
๋ฐฑํ ๊ฒ์ ๋์น ๊ฒฝ์ฐ๊ฐ ์๋๋ผ๋ฉด, ๋ถ๋ณ ์ ํ์ ๊ฐ์ ์กฐ์ํ๊ธฐ ์ํด !
์ ํจ๊ป ํจ์๋ฅผ ์ฌ์ฉํ๊ณ ์ถ์ง ์์ต๋๋ค. ๊ทธ๊ฒ์ด ํ๋ ธ๋ค๋ฉด (์๋ฅผ ๋ค์ด, ๋ณ๊ฒฝ ๋ถ๊ฐ๋ฅํ ์ ํ์ด ๋ณ๊ฒฝ ๊ฐ๋ฅํ ์ ํ์ ์ฐธ์กฐํ๊ณ !
๊ฐ์๋ ํจ์๊ฐ์ด๋ฅผ ๋ณ๊ฒฝํ๋ ์ค์ํ ๊ฒฝ์ฐ๊ฐ์๋ ๊ฒฝ์ฐ),์ด ์ ์์ ์ข์ ์ ์์ด ์๋ ์ ์์ต๋๋ค.
2) ๋ณ๊ฒฝ ๋ถ๊ฐ๋ฅํ ์ ํ์ ์ผ๋ฐ์ ์ผ๋ก ๋ณ๊ฒฝ ๊ฐ๋ฅํ ์ ํ๋ณด๋ค ์ ํธ๋์ด์ผํ๋ค๊ณ ์๊ฐํฉ๋๋ค. ๋ ๋ง์ ์ต์ ํ๊ฐ ์ ์ฉ๋๊ณ ํ๋ก๊ทธ๋๋จธ์๊ฒ ๋ ์์ธก ๊ฐ๋ฅํ ๋์์ด ์๊ธฐ ๋๋ฌธ์ ๋๋ค.
3) ์ด๊ฒ์ด ์๋ํ๋ ค๋ฉด, ์๋ง๋ ๊ฑฐ์ ๋ชจ๋ ๊ฒฝ์ฐ์์ ๋ถ๋ณ ์ ํ์ ์ต์ํ ๊ฐ๋ณ ์ ํ๋งํผ ํจ์จ์ ์ผ๋ก ๋ง๋ค๊ธฐ ์ํด ์ต์ ํ๋ฅผ ๊ตฌํํ๋ ๊ฒ์ด ์ ์ ์กฐ๊ฑด ์ผ ๊ฒ์ ๋๋ค. ํนํ ์ปดํ์ผ๋ฌ๋ ํฐ ๋ถ๋ณ ์ ํ์ ์ฐธ์กฐ๋ก ์ ๋ฌํ๋ ๊ฒ์ ๋ํด ํ๋ช ํด์ผํฉ๋๋ค.
์
๋ฐ์ดํธ : ๋ด๊ฐ ๊ฐ์ง ๋ฐ ์ฌ์ฉ record
๋์ struct
์์ง๋ง record!
๋๋ฌด ๋ง์ ๋์ฌ ๊ฐ๋ค. ๋ ์ค๋ฅด๋ ๋ช ๊ฐ์ง ๋ค๋ฅธ ์ต์
: newtype
, typedef
(10 ์ด ๋์ C ํ๋ก๊ทธ๋๋จธ๋ฅผ ํผ๋์ค๋ฝ๊ฒ ํจ), composite
๋๋ concrete
.
v0.6 ๊ธฐ๋ฅ์ด ๋๊ฒฐ๋๊ธฐ ์ ์์ด ๊ณต๊ฐ์์ ์ด๋ค ์ผ์ด ๋ฐ์ํ ๊ฐ๋ฅ์ฑ์ด ์์ต๋๊น?
(์ ์ด๋ ๊ณต๊ฐ์ ์ผ๋ก) ๊ฒฐ์ ์ด ๋ด๋ ค์ง์ง ์์๊ณ ๋๊ฒฐ์์ 10 ์ผ ์ ๋ ๋จ์๋ค๋ ์ ์ ๊ฐ์ํ ๋ ์๋ง๋ ์๋ ๊ฒ์ ๋๋ค.
๋๋ ์ด๊ฒ์์ฃผ์ ๊น๊ฒ ๋ฐ๋ฅด์ง ์์์ง๋ง ํ ๊ฐ์ง ์๊ฒฌ์ ์ด๊ฒ์ด ๋ณ๊ฒฝ ๋ ๊ฒฝ์ฐ, ๋จผ์ ๋ฌธ์ ๊ฐ๋๋ ํ์ผ / ์ค ๋ฒํธ์ ๋ํ ์ข์๋ณด๊ณ ๋ฅผ ์ฐ๋ฆฌ์๊ฒ ์์ฒญํ๊ณ ์ถ๋ค๋ ๊ฒ์
๋๋ค. ๋๋ ์ ์ด๋ ๋ชจ๋; 0.5์์๋ ์ด๋ค ํจํค์ง์ @deprecate
d _binding
๊ฐ ์๋์ง ์์ ๋ด๊ธฐ์กฐ์ฐจ ์ด๋ ต์ต๋๋ค.
xref https://github.com/JuliaLang/julia/pull/20418#issuecomment -277475415
๊ฐ์ฅ ์ ์ฉํ ๋๊ธ
์ผ๊ด์ฑ์ ์ํด
mutable
์ ์ข์ํฉ๋๋ค.