태그 보관물: portability

portability

왜 Java가 C ++과 같은 다른 언어보다 이식성이 높은 것으로 간주됩니까?

Java 개발자를위한 “각 플랫폼에 대한 특정 JRE 작성”과 C ++ 개발자를위한 “각 플랫폼에 대한 C ++ 컴파일러 작성”의 차이점은 무엇입니까?



답변

Java는 언제 어디서나 실행됩니다. C ++은 언제 어디서나 컴파일됩니다.


답변

“각 플랫폼에 대해 특정 JRE를 작성하는 것은”매번 수행하는 것이 아닙니다. JRE를 새 플랫폼으로 이식하는 것은 한 번만 수행하면됩니다. 이 작업은 일반적으로 프로그램 및 / 또는 플랫폼의 핵심 관리자 / 개발자가 수행합니다. 누가 그리고 어떻게 JRE를 포팅 할 것인지 결정할 때 많은 요인들이 작용할 수 있습니다. 무엇보다도, 그것은 아래에 게시 된 라이센스에 달려 있습니다 (Java가 오픈 소스라고 들으니 누구나 할 수 있다고 생각합니다). 재밌는 일화, Steve Jobs는 약 1 년 전에 Mac 에서 Java를 포팅하는 것을 원하지 않는 것에 대해 큰 일을했습니다.

요점은 JRE를 어떻게 또는 누가 포팅하는 것이 아니라 일단 포팅되면 모든 Java 애플리케이션이 이론적으로 새로운 머신에서 쉽게 실행될 수 있다는 사실입니다. 그런 의미에서 JRE는 추상화 계층을 형성하여 시스템을 완전히 숨기고 쉽게 이식 할 수 있습니다.

그러나 현실이 항상 이와 같은 것은 아닙니다. 나는 이식성을 “신화”라고 부르지 않을 것이다. 그러나 그것이 완벽하지 않다는 것은 사실이다. 예를 들어, Java에는 JNIJRE를 우회하여 기본 호출을 보낼 수 있는 패키지가있어 Java 팬이 “한 번만 쓰기”라고 부르는 완벽한 완벽한 이식성을 방지합니다.

주석에서 언급했듯이 C ++의 이식성 접근 방식은 다릅니다. 한편으로는 컴파일 된 언어이며이 바이너리는 거의 항상 플랫폼마다 다릅니다. 따라서 C ++ 실행 파일은 Java와 달리 이식성이 없습니다. 반면에 컴파일러를 이식하는 것으로 충분할 수 있습니다. 커뮤니티는 컴파일러와 언어의 일부 핵심 라이브러리를 이식함으로써 소스 코드 (이진 아님)를 이식 할 수 있음을 발견했습니다.

그러나 C ++는 컴파일러, 커널, 실시간 시스템, 임베디드 시스템 등과 같은 중요한 시스템에서 널리 사용됩니다. 이식성에 대해 이야기 할 때 간과 할 수없는 C ++의 “낮은 수준”측면이 있습니다.


답변

언어 일뿐 아니라 도서관입니다.

Java와 C ++ 모두 크로스 플랫폼 라이브러리를 제공합니다. Java는보다 풍부한 세트를 제공합니다.


답변

차이점은 Java는 재 컴파일 하지 않고 모든 플랫폼에서 실행된다는 것 입니다. 각 플랫폼마다 C ++ 컴파일러가있는 것은 전혀 다릅니다.


답변

“차이는 …”로 시작하는 모든 대답, 또는 매우 유사한 것은 기본적으로 잘못되었습니다 (죄송하지만 인생은 그런 것입니다). 둘 사이에는 실제로 두 가지 차이점이 있습니다.

하나는 (많은 언급 되었음) 컴파일 된 Java 프로그램은 모든 적합한 Java 구현에서 실행될 수 있거나 최소한 컴파일해야하므로 컴파일 후에도 다시 컴파일하지 않고도 한 플랫폼에서 다른 플랫폼으로 Java 프로그램을 옮길 수 있습니다 . C ++ (적어도 보통)은 각 대상 플랫폼에 대해 다시 컴파일해야합니다.

다른 하나는 Java (적어도 시도)는 올바르게 작성된 모든 Java를 이식 가능하게하는 것입니다. 적어도 이론 상으로는 이식성이없는 코드를 작성할 수 없어야합니다.

C ++을 사용하면 이식성이없는 몇 가지 작업을 수행 할 수 있습니다. C ++ 표준에는 이식성이없는 많은 것들에 대한 “경고”가 포함되어 있습니다 (예 : 구현 정의 동작 또는 정의되지 않은 동작을 얻을 수 있다고 말함). . 예를 들어, PCI 버스를 사용하는 하드웨어 용 운영 체제를 작성하려면 PCI 구성 메모리를 읽거나 써야합니다. 이것은 분명히 PCI 버스가없는 시스템에는 이식성이 없지만 PCI 버스가있는 하드웨어 용 운영 체제를 작성하는 경우에는 거의 필요합니다. C ++은 이식성이 없어도 가능합니다.


답변

당신은 구내를 오해했습니다. JVM은 표준 동작을 동일하게 보장하므로 Java 프로그램 은 이식성이 뛰어납니다. C ++ 프로그램은 실제 하드웨어에 비해 환경이 덜 표준화되어 있으므로 int 크기, 단어 정렬 등과 ​​같은 다양한 플랫폼 별 세부 사항을 처리 할 수 ​​있어야합니다.

JVM 자체는 이식성이 떨어집니다. 고성능 JVM을 다른 플랫폼 또는 CPU 아키텍처로 이식하는 것은 어려운 작업입니다.


답변

차이점은 Java (약어가 아님) 프로그램은 JVM이 설치된 모든 컴퓨터에서 실행할 수있는 형태로 배포 될 수 있지만 C ++은 일반적으로 매우 사용자 친화적이지 않은 소스 코드 또는 번들로 배포됩니다 다른 플랫폼에 대한 다른 바이너리의.