클로져의 개념을 유심히 생각하다보니까
대략 클로져가 성립하기 위한 조건을 유추할수 있을거 같아요
1. 변수명(심볼)들은 참조일 뿐이고 실제 데이터는 힙에 할당된것마냥 딴곳에 따로 존재함
2. 함수가 객체로 분리됨, 그래서 함수가 선언될 시간의 어휘적인 환경(변수명 유효범위)을 함수객체 어딘가에다 저장함
자바스크립트 같은 경우 동적 타입이지만 변수를 쓰려면
반드시 앞대가리에 var 를 써서 지역변수임을 분명히 하기 때문에
어떤 유효범위에 속했나 깔끔하게 알수 있는데
파이썬의 경우에는 그냥 변수 선언이 없었어도 그냥 바로 사용이 되기 때문에
무조건 가장 안쪽 유효범위에만 바인딩 되는 단점이 있네요 (파이썬 2.X)
def foo():
n = 100
def boo():
n -= 1 # 파이썬 2.X에서 불가능, 이시점에서 n은 바깥쪽 foo 유효범위를 의도한거지만 무조건 안쪽 유효범위만 가능해서..에러남
return boo
func = foo() # 함수를 리턴
func() #리턴 받은 함수를 실행
이걸 해결하는 방법으로는 리스트의 값으로 바꾸거나.. ㅡㅡ
파이썬 3에서는 nonlocal 이라는 키워드까지 도입을 했네요
def foo():
n = 100
def boo():
nonlocal n
n -= 1
return boo
func = foo() # 함수를 리턴
func() #리턴 받은 함수를 실행
솔직히 파이썬은 처음부터 펑셔널을 지원할 생각은 없었는데
그냥 대충 나중에 개념을 끼워넣은듯한 느낌이 들기더 해여
lambda 함수가 그 대표적인 예인듯.. 좀 어거지같은 느낌
여기서 루비가 왜 , while, for, if, return ... 와 같은 놈들을
표현식으로 만들었는지 이해가 가네요
리얼 펑셔널하네요
또 망령이 들었나
태생부터 펑셔널인 언어 하나 해보고 시픈 유혹이 슬금슬금
예전에 스킴 좀 하다가 짜증나서 때려쳤는데 ㅋㅋ
프갤에 하스켈 취미로 파는 흉들 있잖아요 ㅠㅠ
얼랭인가? 이거 병렬로 동작하는거 촙내 빠르다던데
아는횽 잇듬?
대략 클로져가 성립하기 위한 조건을 유추할수 있을거 같아요
1. 변수명(심볼)들은 참조일 뿐이고 실제 데이터는 힙에 할당된것마냥 딴곳에 따로 존재함
2. 함수가 객체로 분리됨, 그래서 함수가 선언될 시간의 어휘적인 환경(변수명 유효범위)을 함수객체 어딘가에다 저장함
자바스크립트 같은 경우 동적 타입이지만 변수를 쓰려면
반드시 앞대가리에 var 를 써서 지역변수임을 분명히 하기 때문에
어떤 유효범위에 속했나 깔끔하게 알수 있는데
파이썬의 경우에는 그냥 변수 선언이 없었어도 그냥 바로 사용이 되기 때문에
무조건 가장 안쪽 유효범위에만 바인딩 되는 단점이 있네요 (파이썬 2.X)
def foo():
n = 100
def boo():
n -= 1 # 파이썬 2.X에서 불가능, 이시점에서 n은 바깥쪽 foo 유효범위를 의도한거지만 무조건 안쪽 유효범위만 가능해서..에러남
return boo
func = foo() # 함수를 리턴
func() #리턴 받은 함수를 실행
이걸 해결하는 방법으로는 리스트의 값으로 바꾸거나.. ㅡㅡ
파이썬 3에서는 nonlocal 이라는 키워드까지 도입을 했네요
def foo():
n = 100
def boo():
nonlocal n
n -= 1
return boo
func = foo() # 함수를 리턴
func() #리턴 받은 함수를 실행
솔직히 파이썬은 처음부터 펑셔널을 지원할 생각은 없었는데
그냥 대충 나중에 개념을 끼워넣은듯한 느낌이 들기더 해여
lambda 함수가 그 대표적인 예인듯.. 좀 어거지같은 느낌
여기서 루비가 왜 , while, for, if, return ... 와 같은 놈들을
표현식으로 만들었는지 이해가 가네요
리얼 펑셔널하네요
또 망령이 들었나
태생부터 펑셔널인 언어 하나 해보고 시픈 유혹이 슬금슬금
예전에 스킴 좀 하다가 짜증나서 때려쳤는데 ㅋㅋ
프갤에 하스켈 취미로 파는 흉들 있잖아요 ㅠㅠ
얼랭인가? 이거 병렬로 동작하는거 촙내 빠르다던데
아는횽 잇듬?
스킴해요 스킴.
얼랭은 성능이 좋다는 장점보다는 무정지 시스템으로 운영할수 있다는 장점으로 어필하는거 같던데~. 그냥 취미로 배울거면 하스켈도 괜찮아 . 랭귀지 코어도 작아서 핵심은 금방배운다. 단지 실제로 어떤 프로그램 작성하려면 I/O 처리가 좀 귀찮은거 같아. 나도 틈틈히 해보는중이라, 적극적으로 좋다고 추천하긴 힘들지만, 알고리즘 기술이나, 함수형언어 개념을 배우는데 있어서는 최고이지 싶다.
Clojure 파라. 함수형이고 jvm에서 돌고 자바를 호출 할수도 있고 생각보다 그럴 듯 한 라이브러리나 프레임워크도 많더라. 말만 잘하면 실무에서도 큰 거부감 없이 쓸 수 있을 듯
참 근데 그건 루비도 마찬가지. Oop에서 함수언어 개념 추가하다 보면 다 난잡해짐.
루비는 솔까 레일즈 때문애 쓰는 거긔
!