사람들이 일부 라이브러리를 여러 프로그래밍 언어로 다시 쓰는 이유는 무엇입니까?


13

Java로 작성된 100 % 순수 Java 와 같은 Lucene 과 같이 여러 프로그래밍 언어로 작성된 버전으로 제공되는 라이브러리 가 있지만 C ++, C, Perl로 버전이 있습니다. , Ruby, Lisp 및 기타 언어. 그리고 FFI 인터페이스 뿐만 아니라 이러한 언어로 구현 하는 것에 대해 이야기하고 있습니다.

사람들은 왜 그렇게합니까? 프로젝트의 종속성이 적을 때 배포 및 배포 (및 아마도 개발도)가 더 쉬워집니다. 그러나 다른 것이 있습니까? 어떤 상황에서 가치가 있습니까?


4
실행 환경의 경계를 넘어 통신하는 것은 매우 비쌀 수 있습니다 .

1
@Thor : 그러나 일부 언어 / 환경은 자연 경계를 넘나 드는 것을 긍정적으로 권장합니다 (C는 이에 대한 일반적인 예이며 Tcl 프로그래머에게는 강력한 주제입니다). 주로 메모리 관리 (때로는 다른 리소스) 관리와 관련이 있다고 생각합니다. 같은 프로세스에 두 개의 메모리 관리자를 두는 것은 좋지 않습니다. 특히 공존하도록 설계되지 않은 경우에는 더욱 그렇습니다. 결국, 나는 당신이 어떤 가정을하고 어떤 조작을 허용하지 않는지에 대해 생각합니다.
Donal Fellows

답변:


16

내가 한 몇 가지 이유 (내 경우에는 Haskell에서 C 코드를 다시 작성하십시오) :

  • 더 쉬운 배포 : 하나의 빌드 체인 만
  • 더 적은 종속성 (더 많은 채택을 얻기 위해)
  • 코드가 고급 언어 인 경우 더 이식성 (예 : Windows)
  • 낮은 수준의 C에서는 쉽게 수행 할 수없는 병렬 처리 지원 추가
  • resoures로 코드를 조금 더 안전하게 만들기 위해
  • 코드를보다 쉽게 ​​신뢰할 수 있도록
  • 더 관용적 (강력한 유형, 더 간단한 API, 더 많은 재사용)

19

일반적으로 라이브러리를 특정 플랫폼에 "기본"으로 다시 구현하면 다음이 가능합니다.

  • 간단한 배포 및 배포
  • 보다 쉬운 디버깅
  • 정확한 플랫폼에 적합한 더 관용적 API
  • 종종 더 나은 성능 (플랫폼 interop이 고통 스러울 수 있음)
  • 호환성을 위해 원래 있던 디자인 문제 해결

예를 들어, 나는 Joda Time 포트로 Noda Time 프로젝트를 시작했습니다 . .NET 내에서 직접 Joda Time을 사용하는 것은 실용적이지 않습니다 ... 날짜와 시간 계산을 위해 JVM을 스핀 업 할 필요는 없습니다. 둘. 자동화 된 포트 (la J #) 가능 했을 수도 있지만 최종 결과는 C #에서 사용하기에 유쾌하고 관용적 인 API가 아니 었습니다.


11

어떤 사람들은 새로운 언어를 배우기 위해 그것을합니다. 그들은 이전 언어로 친숙한 도서관을 고르고, 새로운 언어로 그것을 필요로하는 것을보고 그것을 포팅하기 시작합니다.

친숙한 것을 포팅하는 것은 새로운 언어의 언어 부분에만 초점을 맞추고 문제 영역에 대해 실제로 걱정하지 않는 가장 좋은 방법입니다.

또한 책이나 튜토리얼에서 발견되는 많은 샘플 프로젝트와 같은 코드를 버리지 않는 추가 이점이 있습니다. 실제로 커뮤니티가 사용할 수 있고, 추가하고, 리팩토링하고, 토론하는 등의 일이 될 수 있습니다.


0

때로는 소프트웨어가 작성된 도구 (Lucene의 경우 Java)가 옵션이 아닌 플랫폼을 개발 중입니다. 코드를 처음부터 다시 엔지니어링하지 않고 기능을 원하면 코드를 이식하십시오.

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.