Python

짜피 Python에서는 Lambda = 일반함수이다. 그 전에 모든게 PyObject이고, 개념조차 똑같아서 속도에서 차이를 낼만한게 없다. 오히려 map, filter, sorted등의 built-in 함수들은 c로 직접 구현이 되어있어서 손수 loop 돌리는것보다 빠를수도 있다.

이들 함수들은 Python에서 인터프리터로 동작하는게 아니고, C급에서 직접 동작되기에... 같은 동작이라도 더 빠르다.

C에서의 Lambda

최적화가 되지 않으면.. 컴파일러가 heap에 빼버릴것 같긴 함. vtable에 둘거같음.

데이터 접근에 대한 최적의 방법을 알고있다면, common한 경우를 상정해 만든 filter, map등이 느릴수 밖에 없음.

컴파일러의 역량임

https://stackoverflow.com/questions/8611756/why-c-lambda-is-slower-than-ordinary-function-when-called-multiple-times

https://stackoverflow.com/questions/53446964/why-is-lambda-slower-then-stdfunction

Rust에서의 Lambda

Lambda라고 따로 뭐 하는것이 없음. 그냥 일반 function처럼 처리함. 특히 chainning에서 어마한 능력을 발휘함

let data = ~~~~~

data.filter(|x| x.school == ksu).filter(|x| x.score > 10).filter(|x| x.gender == 0).for_each(|x| println!(x))
/// 이걸
for item in data.iter() {
    if x.school == ksu && x.score > 10 && x.gender == 0 { println!(x); }
}
//이정도 급으로 풀어냄. 그러면서 추가로 최적화를 할 수 있는부분이 있다면 (lazy함을 이용하여) 그런 부분까지 알아서 해먹음

Data-Oriented-Programming의 징검다리

결론

함수형 프로그래밍은 내부 동작을 인터프리터나 내부 구현에 일임한다. 그렇기에 모든게 case-by-case 이다. 아래와 같은 코드를 작성했다고 해보자.

int main() {
	// 어쩌고 저쩌고 코드들
	stack* filtered = new stack(MAX_VALUE);
	for (int i = 0; i < MAX_VALUE; i++) {
		if(input[i]->score > 10 && input[i]->school == ID_KSU && input[i]->gender == 0) continue
		filtered.push(input[i])
	}
}

직관적으로 어떻게 돌아가는지 볼 수 있다. 그러나 Lambda로 구현된 filter를 이용하면 내부가 보이지 않는다. 이런 귀찮은것들을 모두 그 안에 위임했기 때문이다. filter는 극한의 최적화를 통해 divide-and-conqur식으로 구현되어 있을수도 있고, liner 탐색이 되어있을 수도 있다. 또는 다른 방법을 이용했을 수도 있다. 상황에 따라 더 빠를수도 있다는 것이다.