Java (여전히)는 크로스 플랫폼 언어입니까? [닫은]


20

90 년대에 Java를 사용하기 시작했을 때 첫날부터 " 한 번만 쓰고 어디서나 실행! " 아마 그때는 사실이었고 나는 합창단의 일부였습니다.

다중 플랫폼 런타임 (python, flash, perl, html, php ...)을 사용하는 다른 모든 언어를 고려할 때 더 이상 그것에 대해 어떻게 생각 해야할지 모르겠습니다. 그러나 여전히 크로스 플랫폼 개발에 더 좋기 때문에 Java를 사용해야한다고 주장하는 많은 주장이 있습니다.

그래서, 그 사실 오늘날인가? Java는 여전히 다중 플랫폼 개발에 사용되는 언어입니까?

  • 플랫폼 간 측면에 중점을 두십시오.
  • 일반적인 언어 기능 비교를 요구하지 않습니다.

업데이트 : 지금까지 훌륭한 답변! 대부분의 답변은 Java 또는 웹을 선호하는 것 같습니다. 스크립트 군중의 의견이 있으십니까?



3
이 의견은 문제의 핵심을 다루지는 않지만 고려해야 할 요소입니다. Windows 사용자를 대상으로 한 Java 기반 웹 응용 프로그램은 멀리 떨어져 있습니다. Windows 용 Oracle JVM은 최근 많은 보안 문제를 겪었습니다. 따라서 정통한 사용자는 JVM을 제거했기 때문에 Java 기반 웹 앱을 사용하지 않을 수 있습니다.
poke

귀하의 질문은 심지어 크로스 플랫폼 언어로 선택되었다는 가정에 근거합니다.
Lucas Ramage

답변:


10

파이썬과 같은 스크립팅 스타일 언어는 또한 크로스 플랫폼 개발을 더 쉽게 만듭니다. 이제 파이썬을 좋아하든 다른 언어를 좋아하든 당신에 달려 있으며 여기서 토론을 시작할 필요가 없습니다.

Java는 이식성이있는 코드를 작성하도록 강요하려고하지만 파이썬은 휴대용 코드를 작성할 수 있습니다. 실제 파이썬 언어 자체는 이식 가능하지만 외부 라이브러리는 그렇지 않을 수도 있습니다. 또한 파이썬은 플랫폼 별 서비스에 자유롭게 액세스 할 수 있습니다.

Java가 이점이 있습니까? 어느 경우이든 휴대용 코드를 쉽게 작성할 수 있다고 생각합니다. 즉, 코드를 작성할 수 있으며 일반적으로 다른 플랫폼에서 작동합니다. 그러나 코드를 작성하고 모든 곳에서 작동한다고 가정하면 벗어날 수 없습니다. Windows, Linux 및 Mac 용 버전을 생성하는 python 프로젝트를 수행했으며 크로스 플랫폼 문제가 거의 발생하지 않았습니다. (내가 기억하는 유일한 것은 파이 게임을 사용하는 라이브러리의 버그 때문이었습니다. 이로 인해 Linux에서 드로잉 문제가 발생했습니다.이 문제는 우리가 사용한 파이 게임 버전을 업그레이드하여 수정되었습니다)

또 다른 문제는 배포입니다. 코드를 실행하는 독립형 프로그램을 배포하려면 플랫폼마다 다른 버전을 만들어야합니다. Java의 경우 하나의 버전을 배포하고 사용자가 Java를 설치했거나 설치할 수 있다고 가정 할 수 있습니다. 이 경우 Java는 배치 부서의 단순성에서 승리 할 것입니다.

결국, 나는 당신이 어떤 언어로 작업하기를 좋아하고 어떤 종류의 배포를 수행해야하는지 생각합니다.


18

자바가되지 않을 수 있지만 또는 유일한 실행 가능한 크로스 플랫폼 도구를, 일부 장점이 있습니다 :

  • 매우 빠릅니다.
  • 매우 견고합니다.
  • 이식성이 뛰어납니다 (예 : 10 년 전에 Windows 95에서 컴파일 된 바이트 코드는 오늘날 OS X에서 잘 작동합니다).

그리고 약점 :

  • 핵심 GUI 라이브러리 (Swing ...)의 나이가 표시됩니다 (타사 추가 기능이 여기에 도움이 됨).
  • 언어 자체는 덜 장황 할 수 있습니다 (예 : 확인 된 예외 ...).
  • 시작 시간은 더 빨라질 수 있습니다 (항상 향상되고 있음).

Java 플랫폼 에 대해 구체적으로 이야기 할 때 한 가지 더 있습니다.

  • JVM에서 실행되고 Java 와 상호 운용 되는 언어 가 있습니다 .

19
매우 빠릅니다? 무엇에 비해?
HardCode

18
@HardCode : 해석 된 언어 또는 대부분의 컴파일 된 언어와 비교합니다. C와 C ++는 경우에 따라 더 빨라질 수 있지만 어려워지고 코어 수가 증가 할 때 계속 어려워집니다. Java 동시성 (여러 코어를 효율적으로 활용)을 사용하면 실제로 달성하기가 훨씬 쉽습니다.
Joonas Pulakka

5
@HardCode, 분명히 JVM은 거의 모든 해석 언어에서 사용할 수있는 가장 빠른 런타임입니다 (언어 해커가 만든 언어와 달리)

14

당시와 마찬가지로 오늘날에도 마찬가지입니다. 즉, 완전히 말하지는 않습니다. Java는 한 번 작성되고 어디서나 테스트 및 디버그됩니다. 물론 그것은 완전히 새로운 항구보다 훨씬 적은 작업이지만 일반적으로 우리가 생각한 초기 과장보다 더 많은 작업입니다.

우리 제품에는 Windows 또는 Linux에서 실행되는 Java 서버가 있지만 OS 관련 문제가 있음을 확인했으며 필요한 경우 Linux 및 Windows 서버를 지원 / 테스트 할 수 있는지 확인하십시오. Java UI는 서버보다 더 많은 문제가있는 경향이 있습니다 (많은 것은 외관상 응용 프로그램에 따라 무시 될 수 있습니다).

나에게 꼭 필요한 언어는 아니지만 웹은 선택한 크로스 플랫폼 플랫폼입니다. HTML / JavaScript 프론트 엔드는 응용 프로그램이 거의 모든 클라이언트 플랫폼에서 실행되며 대부분의 경우 실제 목표 인 Mac 또는 PC인지 OS인지 등 걱정하지 않아도됩니다.

물론 일반적으로 여전히 서버 플랫폼을 지시하지만, 대부분의 회사가 이미 Windows와 Linux 서버의 혼합을 지원하는 요즘 사람들이 훨씬 더 융통성있게 될 때.


8
좋은 대답입니다. 물론 모든 다양한 브라우저 버전에서 앱이 올바르게 작동하는지 확인하는 데 어려움이있을 수 있습니다.
Tim Goodman

5
@ 팀 : 좋은 지적입니다. 브라우저 응용 프로그램은 Java 데스크톱 응용 프로그램보다 훨씬 "모든 곳에서 테스트 및 디버깅"한다고 생각합니다.
Joonas Pulakka

5
@ 팀 : +1 웹 애플리케이션 앱을 모든 주요 브라우저에서 동일하게 작동시키는 것은 Java 앱을 여러 OS에서 동일하게 작동시키는 것만 큼 어렵습니다.
예브게니 브릭 만

3
"한 번 작성하고 어디에서나 디버그"하는 것은 제 경험상 사실이 아닙니다. 현명하고 플랫폼 별 종속성을 피하는 한 여러 플랫폼 (GUI 포함)에서 동일한 Java 코드를 실행하는 데 아무런 문제가 없었습니다. 물론 테스트해야하지만 거의 15 년 동안 Java를 코딩하면 실제로 이식성 문제가 발생했다고 생각합니다. !)
mikera

2
@mikera-우리는 Linux와 Windows 사이의 코드와 관련이없는 문제를 보았습니다. 그들은 드물지만 존재합니다.
Jon Hopkins

9

개인적으로 Java는 여전히 크로스 플랫폼 언어로 선택되어 있으며 웹 응용 프로그램과 함께 한동안 거기에있을 가능성이 높습니다. Java 의이 게시물에서 선택한 플랫폼으로 주제에 대해 더 많이 썼지 만 특히 크로스 플랫폼 측면에서 썼습니다 .

  • 의존성에주의를 기울이는 한 (예 : JNI를 사용하여 기본 코드와 인터페이스하는 라이브러리 피하기) 모든 주요 JVM 플랫폼에서 수정되지 않은 상태로 Java를 작성할 수 있습니다.

  • Java는 일반적으로 기계 독립적 바이트 코드로 배포되므로 로컬 JVM 자체가 JIT 컴파일을 기본 코드로 처리하므로 모든 JVM에서 재 컴파일하지 않고 실행할 수 있습니다 . 예를 들어, Windows에서 동일한 jar 파일을 사용하여 개발 한 후 Mac에서 합리적인 복잡한 GUI 응용 프로그램을 처음으로 실행하는 데 성공했습니다 . 일반적으로 다른 라이브러리가 필요하거나 다른 플랫폼에 대한 재 컴파일이 필요한 대부분의 다른 크로스 플랫폼 언어와 대조하십시오.

  • 필요한 많은 핵심 라이브러리 (GUI, 네트워킹, IO 등)는 표준 런타임의 일부이며 크로스 플랫폼 방식으로 작성됩니다. 따라서 크로스 플랫폼 라이브러리를 찾아서 테스트 할 필요가 없으므로 런타임 환경에 필요한 거의 모든 것이 이미 있습니다.


3

나는 당신이 그 선택을 가지고 있다고 생각합니다 :

1)

  • 컴파일 또는
  • 통역 언어.

2) 코드를 어떻게 패키지하고 제공 할 것인가?

  • 하나의 "프론트 엔드", 하나의 이진 / 스크립트?
  • 하나의 "프론트 엔드", 여러 바이너리 / 스크립트?
  • 여러 "프론트 엔드", 여러 바이너리 / 스크립트?

이러한 선택은 성능, 소스 코드 가시성 및 배포에 영향을줍니다.

소스 코드를 알려주시겠습니까? 컴파일 된 언어가 도움이 될 수 있습니다. 컴파일 된 언어는 해석 된 (JITed) 언어보다 마이크로 벤치 마크에서 더 잘 수행되는 것 같습니다. 또한 Java, Python, Ruby 등과 같은 런타임 환경에 의존하는 경우 코드를 배포하기가 어려울 수 있습니다.

가장 널리 사용되는 크로스 플랫폼 데스크탑 응용 프로그램은 C / C ++ 및 크로스 플랫폼 위젯 라이브러리 (예 : 대담, 블렌더, Firefox, Google Earth, OpenOffice, Skype, Songbird, Stellarium, VLC.


당신은 당신의 예제에서 Skype를 나열하는 흥미로운 오류를 만들었지 만,이 초 인기 응용 프로그램은 실제로 Windows에서 Delphi / Pascal로 시작되었고 Linux에서는 C / C ++로, MacOS / iPhone에서는 Objective-C로 포팅되었습니다
Maksee

컴파일 / 해석 된 이분법은 약간 오해의 소지가 있다고 생각합니다 .Java는 배포를 위해 기계 독립적 바이트 코드 (즉, 더 이상 소스 형식이 아님)로 컴파일 된 다음 JIT가 나중에 원시 코드로 컴파일되기 때문에 어느 쪽도 마찬가지입니다. 어떤 기계를 사용하든 완전히 크로스 플랫폼이지만 기본 성능을 제공하며 원치 않는 경우 소스를 배포 할 필요가 없습니다. 승리 / 승리 / 승리.
mikera

0

아니요라고하겠습니다. 파이썬과 루비가 많이 사용되므로 클라이언트와 서버 측 모두에 대해 자바 스크립트가 사용됩니다. 개인적으로 .NET을 사용하며 Mac 및 Linux에서 실행되도록하는 데 아무런 문제가 없습니다 (Windows에서 개발하는 동안)

LLVM이 대중화되고 있지만 여전히 매우 작습니다. 그러면 단일 바이너리에서 크로스 플랫폼 C ++을 사용할 수 있습니다. 분명히 브라우저에서 실행되지만 dom을 수정하거나 javascript를 호출 할 수있는 예제를 보지 못했습니다.


LLVM은 브라우저에서 실행되는 것이 아닙니다 ... emscripten에 대해 이야기하고 있습니까?
Camilo Martin

날짜를 확인하십시오. 4 년 전 emscripten이 존재하지 않았습니다. NativeClient는 작동한다고 가정했지만 운명이 실행되었습니다.

이제 날짜가 표시되지만 여전히 LLVM은 브라우저에 대해 구체적으로 언급 한 적이 없습니다.
Camilo Martin

1
아니. JS 대신 C ++ 또는 다른 언어 LLVM 지원을 작성할 수 있기를 바랍니다.


-1

모바일 플랫폼을 혼합하여 사용하는 경우 최소한 재 컴파일을 포함해야합니다. 예를 들어 안드로이드, j2me.

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