나는 언어의 기본 제공 데이터 구조, 함수 및 클래스 중 일부를 여러 번 다시 구현했습니다. 임베디드 개발자로서 내가 할 수있는 주된 이유는 속도 나 효율성 때문입니다. 표준 라이브러리 및 유형은 다양한 상황에서 유용하도록 설계되었지만 현재 플랫폼의 기능 및 제한 사항을 활용하도록 사용자 정의 된보다 특수화 된 버전을 만들 수있는 경우가 많이 있습니다. 언어가 기존 클래스를 열고 수정할 수있는 방법을 제공하지 않는다면 (예를 들어 Ruby 에서처럼) 클래스/함수/구조를 다시 구현하는 것이 유일한 방법 일 수 있습니다.
예를 들어, 제가 연구 한 한 시스템은 32 비트 숫자로 작업 할 때 빠르지 만 작은 것들로 작업 할 때는 느린 MIPS CPU를 사용했습니다. 필자는 16 비트 정수 대신 32 비트 정수를 사용하는 몇 가지 데이터 구조와 함수를 다시 작성하고 필드를 32 비트 경계에 맞춰 정렬하도록 지정했습니다. 그 결과는 소프트웨어의 다른 부분에 병목을 일으키는 코드 부분에서 눈에 띄는 속도 향상이었습니다.
그것은 말하자면, 그것은 사소한 과정이 아니 었습니다. 그 구조를 사용하는 모든 함수를 수정해야하고 결국 몇 가지 표준 라이브러리 함수도 다시 작성해야했습니다. 이 특별한 경우에는 그 이점이 작업을 능가했습니다. 그러나 일반적인 경우에는 일반적으로 문제가되지 않습니다. 디버그하기 어려운 문제에 대한 큰 잠재력이 있으며, 항상 보이는 것보다 더 많은 작업이 있습니다. 기존 구조/클래스가 충족시키지 못하는 특정 요구 사항이나 제한 사항이없는 경우이를 다시 구현하지 말 것을 권장합니다.
Michael이 언급했듯이 결코 그렇게하지 않더라도 구조를 다시 구현하는 방법은 실제로 을 알아두면 유용합니다. 앞으로도 기존 데이터 구조에 사용 된 원칙과 기술을 적용하여 해결할 수있는 문제점을 발견 할 수 있습니다.
출처
2010-10-19 18:49:17
bta
LinkedList의 add() 및 iterator.remove()와 함께 ArrayList의 임의 액세스를 결합하여 여행하는 세일즈맨에게보다 효율적인 솔루션을 얻는 것이 좋을까요? 예를 들어 – Jason
...하지만 pls는 정말 좋은 구현을 만드는 방법을 아는 것이 그렇게 쉽지는 않다는 것을 잊지 않습니다. 성능, 인터페이스 복잡성 한계, 동시성 및 다른 것들을 염두에 두어야 할 수도 있습니다. 좋은 운동이지만 상황에 따라 대부분의 경우 언어 표준 라이브러리를 다시 구현하지 마십시오. 대부분의 경우 시간이 오래 걸릴 수 있습니다. 자바에서 예제를 찾고 있다면 Google Collections는 자신의 특정 구현을 가지고 있습니다. –