Julia: ๋ฏธ์นœ ์•„์ด๋””์–ด :`type` ํ‚ค์›Œ๋“œ ๋ณ€๊ฒฝ

์— ๋งŒ๋“  2016๋…„ 10์›” 29์ผ  ยท  167์ฝ”๋ฉ˜ํŠธ  ยท  ์ถœ์ฒ˜: JuliaLang/julia

์‹œ๊ฐ„์ด ์ง€๋‚จ์— ๋”ฐ๋ผ์ด ํ‚ค์›Œ๋“œ๋Š” ์ ์  ๋” ๊ดด๋กœ์›Œ์กŒ์Šต๋‹ˆ๋‹ค. ๋ช‡ ๊ฐ€์ง€ ๋ฌธ์ œ๊ฐ€ ์žˆ์Šต๋‹ˆ๋‹ค.

  • type ๋Š” ๋งค์šฐ ์ผ๋ฐ˜์ ์ธ ๋‹จ์–ด์ด๋ฉฐ ๋ณ€์ˆ˜ ์ด๋ฆ„ (๋ฐ ํ‚ค์›Œ๋“œ ์ธ์ˆ˜!)์— ์‚ฌ์šฉํ•  ์ˆ˜์žˆ๋Š” ์ƒํƒœ๋กœ ๋‘๊ฒ ์Šต๋‹ˆ๋‹ค.
  • ์ด์ œ ์—ฌ๋Ÿฌ ์ข…๋ฅ˜์˜ ์œ ํ˜•์ด ์žˆ์œผ๋ฏ€๋กœ type ๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ๊ตฌ์ฒด์ ์ด๊ณ  ๋ณ€๊ฒฝ ๊ฐ€๋Šฅํ•œ ๊ตฌ์กฐ ์ฒดํ˜• ์œ ํ˜• ๋งŒ ์ฐธ์กฐํ•˜๋Š” ๊ฒƒ์ด ์ด์ƒํ•˜๊ฒŒ ๋ณด์ž…๋‹ˆ๋‹ค.
  • type ๊ฐ€ ๊ฐ€์žฅ ๋ช…๋ฐฑํ•œ ์œ ํ˜• ์ •์˜ ํ‚ค์›Œ๋“œ์ด์ง€๋งŒ ์ผ๋ฐ˜์ ์œผ๋กœ immutable ๊ฐ€ ๋ฐ”๋žŒ์งํ•˜๊ณ  ๊ถŒ์žฅ๋ฉ๋‹ˆ๋‹ค.

๋‹ค์Œ์€ ๋ช‡ ๊ฐ€์ง€ ๋Œ€์ฒด ํ‚ค์›Œ๋“œ ์ œ์•ˆ์ž…๋‹ˆ๋‹ค.

  • mutable - immutable ๋ฐ˜๋Œ€!
  • struct -์ ์–ด๋„ ๊ทธ๊ฒƒ์ด ์–ด๋–ค ์ข…๋ฅ˜์˜ ์œ ํ˜•์ธ์ง€์— ๋Œ€ํ•ด ๋งํ•˜์‹ญ์‹œ์˜ค
  • reftype - "์ฐธ์กฐ ์œ ํ˜•"์šฉ์œผ๋กœ ์ผ๋ถ€ ์ฃผ์š” ์†์„ฑ๋„ ์ „๋‹ฌํ•ฉ๋‹ˆ๋‹ค.
breaking decision

๊ฐ€์žฅ ์œ ์šฉํ•œ ๋Œ“๊ธ€

์ผ๊ด€์„ฑ์„ ์œ„ํ•ด mutable ์„ ์ข‹์•„ํ•ฉ๋‹ˆ๋‹ค.

๋ชจ๋“  167 ๋Œ“๊ธ€

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 ๊ฒฝ์šฐ ๋‘ ๊ฐ€์ง€ ์†์„ฑ์ด ํ˜ผํ•ฉ๋˜์–ด ์žˆ๋‹ค๊ณ  ์ƒ๊ฐํ•ฉ๋‹ˆ๋‹ค.

  1. ๋ถˆ๋ณ€์„ฑ (์ ์ ˆํ•œ ํ•จ์ˆ˜ ํ”„๋กœ๊ทธ๋ž˜๋ฐ ์ˆ˜ํ–‰์„์œ„ํ•œ)
  2. ํ•˜์œ„ ์ˆ˜์ค€์—์„œ ๊ฐ’ ์œ ํ˜•์œผ๋กœ ์ž‘๋™

๋”ฐ๋ผ์„œ ๊ธฐ๋ณธ์ ์œผ๋กœ ์†์„ฑ 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 ๊ฐ€ ์žˆ๋Š”์ง€ ์•Œ์•„ ๋‚ด๊ธฐ์กฐ์ฐจ ์–ด๋ ต์Šต๋‹ˆ๋‹ค.

์ด ํŽ˜์ด์ง€๊ฐ€ ๋„์›€์ด ๋˜์—ˆ๋‚˜์š”?
0 / 5 - 0 ๋“ฑ๊ธ‰