Type Unions for C# μ œμ•ˆμ„œ

A proposal for type unions (aka discriminated unions) in C#.

νƒ€μž…μ΄ κ°•μ‘°λ˜λŠ” ν•¨μˆ˜ν˜• μ–Έμ–΄λŠ” λŒ€μˆ˜(Algebraic)적 원리λ₯Ό λ„μž…ν•΄ νƒ€μž…μ„ μ •μ˜ν•˜λŠ”λ°μš”. λŒ€μˆ˜μ—μ„œ ADT(Algebraic Data Type)은 ν•©νƒ€μž…κ³Ό κ³±νƒ€μž…μœΌλ‘œ λΆ„ν•΄λ©λ‹ˆλ‹€.

C# 7에 νŠœν”Œμ΄ 1κΈ‰μœΌλ‘œ μ·¨κΈ‰λ˜κ³  C# 8 λΆ€ν„° μŠ€μœ„μΉ˜μ‹μ΄ λ„μž…λ˜κ³  κ°œμ„ λ˜λ©΄μ„œ κ³±νƒ€μž…μ„ λ‹€λ£¨λŠ” 데 μ–Έμ–΄μ μœΌλ‘œ μ„±μˆ™ν•΄ μ‘Œμ§€μš”. λ‹€λ§Œ ν•©νƒ€μž…μ„ μΆ”κ°€ν•˜μ§€ λͺ»ν•˜λŠ” λ°”λžŒμ— ADTλ₯Ό 1κΈ‰μœΌλ‘œ λ‹€λ£° 수 μ—†λŠ” λ¬Έμ œκ°€ μžˆμŠ΅λ‹ˆλ‹€.

DU(Discriminated Unions)은 ν•¨μˆ˜ν˜• μ–Έμ–΄(Scala, haskell, f#)와 졜근 개발 μ–Έμ–΄(Rust, Kotlin)μ—μ„œ 1κΈ‰μœΌλ‘œ μ œκ³΅ν•˜λŠ” ν•©νƒ€μž…μœΌλ‘œ 상속과 λΉ„μŠ·ν•΄ λ³΄μ΄μ§€λ§Œ κ°€μž₯ 큰 차이점은 상속에 λŒ€ν•΄ λ‹«ν˜€ μžˆλ‹€λŠ” μ μ΄μ§€μš”. FSM(μœ ν•œμƒνƒœκΈ°κ³„)λ₯Ό μ–Έμ–΄μ—μ„œ 1κΈ‰μœΌλ‘œ λ‹€λ£° 수 μžˆλ‹€λŠ” μž₯점도 μžˆμŠ΅λ‹ˆλ‹€.

C#이 λ”μš± 저변을 λ„“νž 수 μžˆλŠ” 기회라 μƒκ°λ˜λ„€μš”. (λ¬Όλ‘  ν•œκ΅­ μ œμ™Έ)

9개의 μ’‹μ•„μš”

1λ…„ λ§Œμ— 졜근 근황을 μ‚΄νŽ΄ λ³΄λ‹ˆ μ•žμœΌλ‘œ 10년도 ν‘œμ€€ 문제둜 λ‹€νˆ΄ κΈ°μ„Έκ΅°μš”.

5개 μ œμ•ˆμ€‘ 2κ°œλŠ” μ„œλ‘œ μ™„μ „ λ‹€λ₯Έ 이야기

2개의 μ’‹μ•„μš”

μ‚¬μ‘±μž…λ‹ˆλ‹€λ§Œ LDM λ―ΈνŒ…μ΄ 2013λ…„λΆ€ν„° μ‹œμž‘ν•΄μ„œ 벌써 12년차에 λ“€μ–΄κ°€λŠ”κ΅°μš”. γ„·γ„·

2개의 μ’‹μ•„μš”

ν•© νƒ€μž…μ€ μ½”λ“œλ‘œ κ΅¬ν˜„μ΄ κ°€λŠ₯ν•œ 뢀뢄이고, μ‹€μ œλ‘œ νŒ¨ν‚€μ§€κ°€ μžˆκΈ°λ„ ν•΄μ„œ, 개인적으둜 κ·Έλ ‡κ²Œ κΈ‰ν•œ λ¬Έμ œλŠ” μ•„λ‹Œ 것 κ°™μŠ΅λ‹ˆλ‹€.

λ‹Ήμž₯은 Collection Expression 의 κΈ°λ³Έ νƒ€μž…μ΄λ‚˜ μ–Όλ₯Έ ν™•μ •ν•΄μ€¬μœΌλ©΄ ν•˜λŠ” λ°”λž¨μ΄ 더 ν½λ‹ˆλ‹€.

var collection = [1, 2, 3, 4]; // error

List κ°€ 될 것이라고 κ·ΈλŸ¬λ”λ‹ˆ, μ•„μ§κΉŒμ§€ 감감 λ¬΄μ†Œμ‹μ΄λ„€μš”.

7개의 μ’‹μ•„μš”