에서 앤드류 타넨 바움과 논쟁 모 놀리 식 운영 시스템 아키텍처 대 마이크로 커널 이상, 리누스 토발즈는 말했다
이식성은 새로운 프로그램을 작성할 수없는 사람들을위한 것입니다.
그는 무엇을 의미 했습니까?
에서 앤드류 타넨 바움과 논쟁 모 놀리 식 운영 시스템 아키텍처 대 마이크로 커널 이상, 리누스 토발즈는 말했다
이식성은 새로운 프로그램을 작성할 수없는 사람들을위한 것입니다.
그는 무엇을 의미 했습니까?
답변:
Linus가 토론에 글을 쓸 때, 혀가 뺨에 있습니다 (즉, 너무 심각하게 받아 들여서는 안 됨).
그런 다음 그는 이식성이 좋은 반면, 또한 절충이라고 설명합니다. 이식 불가능한 코드는 훨씬 간단 할 수 있습니다. 즉, 코드를 완벽하게 이식 가능하게 만드는 대신 간단하고 이식 가능하게 ( "휴대용 API 준수") 만든 다음 이식해야하는 경우 필요에 따라 다시 작성하십시오. 코드를 완벽하게 이식 가능하게 만드는 것도 조기 최적화의 형태로 간주 될 수 있습니다.
물론 새로운 프로그램을 작성할 수없고 원래 프로그램을 고수 해야하는 경우 불가능합니다. :)
리눅스가 처음 쓰여졌을 때, 그것은 당시 상당히 새롭고 비싼 i386 CPU에서만 사용 가능한 기능을 사용했습니다.
바로 리눅스가하는 일입니다. 다른 커널보다 386 기능의 더 큰 부분 집합 만 사용합니다. 물론 이것은 커널을 이식 할 수 없게 만들지 만 / much / 더 단순한 디자인을 만듭니다. 수용 가능한 트레이드 오프, 그리고 처음부터 리눅스를 가능하게 한 것.
우리가 21 세기에 들어서면서 i386을 독특하게 만든 기능은 완전히 주류가되었으며 Linux는 이식성이 뛰어났습니다.
많은 Java를 해왔고 수년간 주 단위로 "한 번 쓰기, 모든 곳에서 디버그"현상을 경험 한 사람으로서 나는 이것과 완전히 관련 될 수 있습니다.
그리고 Java는 아마도 좋은 예일 것입니다. 심지어 휴대가 불가능한 언어 / 툴킷으로 이식 가능한 코드 기반으로 사람들이 무엇을 시도하는지 상상조차 할 수 없습니다.
현재 직장에서 우리는 모바일 장치 용 제품 중 하나의 라이트 버전을 작성한다는 아이디어를 조사하고 있습니다. J2ME와 Android 모두에서 이식 가능한 버전을 수행하는 방법에 대한 연구를 수행했습니다. 가능한 많은 코드베이스를 공유하려고 시도합니다 (분명히 "이동할 수는 없지만"그 자체의 철학입니다. ). 악몽이다.
그렇습니다. 때로는 주어진 작업에 주어진 도구를 사용하는 관점에서 생각하고 행동하는 것이 좋습니다. 즉, 하나의 단일 모 놀리 식 플랫폼 / 환경에 대해 자유롭게 개발합니다. 그리고 각각 별도의 깨끗한 버전을 작성하십시오.
비록 어떤 사람들은 이식성, 표준 등을 도덕적으로 우월한 것으로 보거나 처리하지만, 실제로 그것이 요약하는 것은 경제학입니다.
이식 가능한 코드를 작성하려면 코드를 이식 가능하게 만들려는 노력이 필요하며, 모든 대상에서 사용할 수없는 일부 기능에 대해서는 앞서 언급했습니다.
이식 불가능한 코드는 새로운 아키텍처에 관심이있을 때 / 경우에 따라 코드를 포팅하는 데 드는 비용과 (종종) 원래 대상에서 사용할 수 없었거나 제공되지 않은 일부 기능에 대해 비용이 많이 듭니다.
큰 한정자는 "새로운 아키텍처에 관심이있는 경우 /있는 경우"입니다. 휴대용 코드를 작성하는 것은 업 정면의 노력이 필요 희망이 거의 없거나 전혀없는 노력으로 새로운 / 다른 아키텍처에 해당 코드를 사용할 수있는의 최종 보수의를. 이식 불가능한 코드를 사용하면 특정 대상으로 실제로 이식해야 할 때까지 (적어도 합리적으로) 포팅에 대한 투자를 지연시킬 수 있습니다.
많은 대상으로 포팅 할 것이라고 미리 확신한다면, 장기 포팅 비용을 최소화하기 위해 선불 투자하는 것이 좋습니다. 코드를 얼마나 많이 포팅해야하는지 확실하지 않은 경우 이식성이없는 코드를 작성하면 선행 비용을 최소화하고 코드 이식성 비용을 지연 시키거나 완전히 피할 수 있습니다.
또한 "휴대용"과 "휴대용이 아닌"에 대해 두 사람 사이에 분명한 구분이있는 것처럼 말한 것도 주목할 가치가 있다고 생각합니다. 실제로 이것은 사실이 아닙니다. 이식성은 완전히 휴대 할 수없는 (예 : 어셈블리 코드)에서 휴대 성이 뛰어난 (예 : Info-zip), 그 사이의 어느 곳에서나 실행되는 연속체입니다.
Tanenbaum은 많은 Linux가 CPU 상호 작용을 구성 요소로 만들기 때문에 당시의 최신 상태 인 386 CPU를 활용하기 위해 비 모듈 식 방식으로 작성되어 매우 쉽게 교환 할 수 있다고 지적합니다. Tanenbaum은 본질적으로 커널이 매우 모 놀리 식이며 386 CPU에 묶여 있다는 사실은 매우 어렵다고 생각합니다.
리눅스 캠프는 몇 가지 점을 지적합니다.
이식 가능한 코드를 작성하려면 이식 가능한 코드를 작성해야합니다.
그게 무슨 소리 야?
디자인은 목적을 반영해야합니다. 예를 들어, 언어가 C 인 경우 작동하려면 최소 코드 줄 수를 변경해야합니다. 이것은 종종 디스플레이와 계산을 분리하는 것을 의미하며, 이는 좋은 설계 철학 (MVC)입니다. 좋은 컴파일러에 액세스 할 수 있다면 대부분의 C 코드는 어디서나 컴파일 할 수 있습니다. 그것을 활용하고 당신이 일반적 일 수있는 한 많이 쓰십시오.
BTW,이 답변은 응용 프로그램에만 적용됩니다. OS와 임베디드은 완전히 다른 동물입니다.
이 말을 "문학적으로"해석하십시오.
Linus의 또 다른 인용문에서 그는 다음과 같이 말했다. "C ++는 모든 잘못된 문제를 해결하려고 노력하고있다. C ++가 해결하는 것은 사소한 것인데, 일부는 진정한 심오한 문제를 해결하기보다는 순전히 C 로의 구문 확장이다."
또한 그의 전기에서 마이크로 커널에 대해 인용하면서 "Just For Fun"리누스는 문제를 '1 / n'의 고유 한 부분으로 나누면 복잡성 'n'에 관한 문제에 대해 다음과 같이 말했다. 'n!' 이것 자체는 그러한 것을 시도하지 않을 정도로 충분한 요소이며, 그러한 복잡한 시스템에서 효율을 추출하는 것은 매우 어려울 것입니다.