문맥적으로 알아서 어떤 타입이어야 하는지 추론해주는 정적 분석기가 달린 언어는 없나
언제까지 (a:number, b:number) => a + b, (a:string, b:string) => a + b, <T>(a: T, b: T) => a + b 를 해줘야 하나고
그냥 대충 눈치껏 (a, b) => a + b 하면 'b 는 a 와 더할 수 있어야 하는 타입이고 a 는 무언가와 더할 수 있는 타입이구나' 하고 추론할 수 있는 분석기가 달린 언어가 필요함
If you have a fediverse account, you can reply to this note from your own instance. Search https://hackers.pub/ap/notes/019b20e8-3a81-75df-83d3-d0776f5ca1dc on your instance and reply to it.
@2chanhaeng@hackers.pub초무 근데 그렇게 추론을 하다가 어디서부터는 "어 그게 맞으니까 거기까지만 추론하고 멈춰" 를 하고 그것과 다른 타입이 오는걸 막아야하는데 그게 가능할까요 아니면 그냥 파이썬 아닌가요
@2chanhaeng초무 하스켈 있음다..
@2chanhaeng초무 OCaml이나 Haskell 처럼 힌들러-밀너 타입 시스템 쓰는 언어들은 가능하지 않나요?
@2chanhaeng초무 말씀하시는 것을 타입 이론에서는 principal type이라고 하고요, 다른 분들께서 언급하셨듯 Hindley-Milner 타입 시스템이 principal type을 항상 추론할 수 있긴 합니다만 여기에 이것 저것 더 붙이는 과정에서 principal type을 추론할 수 없게 되거나 추론 과정이 종료한다는 보장(decidability)이 사라지는 경우가 많습니다. (그러니까 H-M 기반이라고 항상 principal type이 가능한 것도 아니에요.) 그냥 이론적으로 어려운 문제이기 때문에 현실적인 타입 시스템에서는 이걸 포기하는 경우가 일반적이라고 생각하시면 될 듯 합니다.