참고 : 다음 글은 논란의 여지가있는 의견을 포함 할 수 있으므로 본인의 의견 일 뿐이며 다른 사람을 화나게하는 것은 아닙니다.
나는 1999 년 이래로 어떤 형태로든 다른 형태로 프로그래밍하고있다. 나는 처음에 R을 사용했다가 나중에 2004 년경에 주로 파이썬으로 바꿨다.
예를 들어 MCMC와 같은 시뮬레이션을 포함한 시뮬레이션과 같은 많은 과학 응용 프로그램의 경우 R과 Python이 너무 느려서 속도를 높여야합니다. 일반적인 방법은 C 또는 C ++로 확장하는 것입니다. R과 Python 모두 C ++에서 R의 C API를 사용하고 Python에서 Boost Python 라이브러리를 사용하여 수행 한 작업입니다.
그러나 여러 가지 이유로이 조합은 이상적인 솔루션이 아닙니다. 프로그래밍, 특히 알고리즘에서 중요한 것은 무엇입니까? 물론 표현력과 속도. 표현력이 높은 언어 일수록 더 빨리 쓸 수 있습니다.
1) 표현력에 관한 한 R이나 Python은 과학 알고리즘을 작성하는 데 이상적이라고 생각하지 않습니다. 기본 알고리즘에 밀접하게 매핑되지 않습니다. 그러나 둘 다 C ++보다 훨씬 낫습니다.
2) 나는 파이썬으로 작성하는 것을 즐깁니다. 유쾌한 언어이지만 위에서 언급 한 것처럼 알고리즘 작업에는 이상적이지 않습니다. 그러나 속도 문제로 인해 Python / C ++ 조합으로 작업 해야하는 경우이 혼합은 작업하기가 상당히 즐겁지 않습니다. 일반적으로 파이썬에서 처음 글을 쓰고 잘 작동하는 것을 찾으면 너무 느리다는 것을 종종 발견합니다 (주관적 가치가 너무 느림). 그런 다음 C ++로 다시 작성하는 데 불합리한 시간을 소비할지 아니면 속도를 늦출 지 결정합니다. 뒤늦은 견해에서, 나는 특히 획득 속도가 예측할 수 없기 때문에 느려짐을 극복하는 것이 더 나을 수도 있다고 생각합니다. 또한, 둘 사이의 Boost Python 인터페이스는 유지 관리에 많은 어려움을 겪습니다. 이렇게 서로 다른 두 언어로 된 코드를 붙이는 것은 산만합니다. Boost Python에 대한 비판은 없으며, 상상할 수있는만큼 강력한 인터페이스이며 거의 대부분 작동합니다.
이제 시간과 자원이 무제한 인 이상적인 세상에서 이러한 문제는 큰 문제가되지 않습니다. 그러나 내가 연구 한 과학 프로젝트에서 다음과 같은 경험을했습니다.
프로젝트에 공동 작업자가 있는지 여부에 관계없이 항상 컴퓨팅의 대부분을 수행하는 것처럼 보입니다. 총 5 개의 중요한 프로젝트에서 한 사람의 프로젝트에 한 사람 만 참여했습니다. 한 사람은 자신의 체중을 당기는 것 이상을했습니다. 그는 나만큼이나 많이했다. 그러나 여러 공동 작업자가있는 프로젝트를 포함한 다른 모든 경우에는 (가상적으로) 모든 계산 작업을 수행했습니다. 나는 최고의 협력자들에게 축복을받지 못했다고 말할 수는 있지만 (게으름과 무능함이 섞여있는 것 같음)이 상황이 미래에 변할 것인지는 분명하지 않습니다.
전산 과학 연구는 엄청난 노력이며, 공동 작업자의 행동 방식을 바꿀 수 없다면, 내가 일하는 방식을 바꿀 수 있습니다. 가장 중요한 개선은 더 빨리 일을 처리하는 것입니다. 언어를 정통성이 덜한 언어로 바꾸면 도움이 될 수 있습니다. 과거 연구에 따르면 가능성이 가장 높은 후보는 Common Lisp와 Ocaml입니다. 나는 몇 년 동안 이것에 대해 생각 해 왔지만 최근에는 더 심각하게 생각하고 있습니다.
내가 알 수 있듯이 과학 계산에 CL 또는 Ocaml을 사용하는 사람은 거의 없습니다. 이 사이트를 검색하면서 CL (하나는 광산)과 하나는 Ocaml (광)에 대한 두 가지 참조를 찾았습니다. 나는 수년 동안 모험을 좋아하는 사람들이 프린지에서 일하는 것을 격려하는 몇 가지 접촉을했습니다. 2008 년에 나는 Tamas K. Papp의 Peter Seibel의 "Practical Common Lisp"(내가 소유 한)에 대한 서평을 접하게 되었다. 이것이 내가 인터넷에서 봤던 Lisp에 대한 과학적 컴퓨팅에 대한 몇 안되는 언급 중 하나 였기 때문에 이것은 나의 관심을 끌었다. 나는 타마스에게 편지를 썼는데, 그는 즉시 도움과 격려를 표했습니다. 그를 인용
내 프로그래밍 생산성은 아마도 Lisp로 10 배 증가했을 것입니다. 그러나 약 1 년이 걸렸고 여전히 배우고 있습니다 (2 개월 후에는 꽤 잘 지내고있었습니다). 따라서 시간이 중요한 작업을 수행하는 경우 스위치를 연기하십시오.
당신은 cll에 사람들을 요구하는 것을 고려해야합니다, 나는 이것에 대해 아는 유일한 사람이 아니며, 다른 사람들은 Lisp에 대한 과학적 컴퓨팅을합니다.
또한 블로그 와 GitHub 페이지가 있습니다.
내가 간단히 (2006 년 12 월에) 연락했던 또 다른 사람 은 방사선 종양학의 맥락에서 Common Lisp를 사용한 Ira Kalet 이었다 .
아마도 Lisp에서 과학 컴퓨팅을하는 다른 사람들이 있을지 모르지만 나는 아무도 모른다.
사람들이 CL로 인용하는 가장 일반적인 문제는 라이브러리가 없다는 것입니다. 이것은 범용 컴퓨팅에서 심각한 문제이지만 과학적 컴퓨팅, 특히 처음부터 알고리즘을 구현하는 경우에는 그리 많지 않을 수 있습니다. 특히, 확률 분포 함수, 다차원 배열 라이브러리 및 C ++ 및 Python 표준 라이브러리에있는 기본 컨테이너 세트 (예 : 맵, 세트, 목록 등)를 포함한 기본 수학 라이브러리를 사용하여 대부분의 시간을 얻을 수 있습니다.
나는 CL보다 Ocaml에 대해 덜 알고 있지만 대안으로 던졌습니다. 그것은 매우 빠르며, 프랑스 연구자들에 의해 하나의 무료 구현을 가지고 있으며 과학 컴퓨팅을위한 ML 언어 언어 중 가장 실행 가능한 것으로 보입니다.
결론적으로, 나는 다른 사람들이 이것에 대해 경험이 있는지, 그리고 어떤 생각이 있는지 궁금합니다.
편집 : 나는 위에서 논의 한 문제의 맥락에서 직접 경험에 관심이 있습니다. 예를 들어 파이썬과 C ++ (또는 R과 C ++)을 사용하고 좀 더 모호한 언어로 옮겼다면, 나는 당신의 경험에 대해 가장 관심이있을 것입니다.