-1

실행 파일로 컴파일 할 수있는 최상위 언어는 무엇입니까? 내가 실행 파일을 컴파일 할 때 바이트 코드를 언급하지 않고 C, C++ 같은 네이티브 어셈블리 코드를 언급한다.컴파일 할 수있는 최상위 언어는 무엇입니까?

편집 : 한 가지 문제는 클라이언트가 제한 액세스 액세스에서 내 서버에 대한 ssh 액세스 권한을 갖고 있다는 것입니다. 그들은 내 스크립트 중 일부를 실행해야하지만 소스 코드를 보지 못하게해야합니다. 파이썬 스크립트 (또는 다른 스크립트)는 실행 권한 만 필요로하는 기본적으로 컴파일 된 프로그램과 달리 읽기 권한 없이는 실행할 수 없습니다.

+0

"실행 파일로 컴파일 할 수있는 상위 레벨"을 묻습니다. COBOL/FORTRAN/... Java/Scala/...보다 상위 언어입니까? – PeterMmm

+0

아마도 난독 처리에 대해 물어볼 수 있습니까? –

답변

1

내 투표는 Java + GCJ에 대한 것입니다.

http://en.wikipedia.org/wiki/Gcj

그것은 바이트 코드를 생략하고 기계 코드에 직접 컴파일 할 수 GCJ에 대한 자세한 정보는에서 찾을 수 있습니다.

+0

감사합니다. JVM을 완전히 건너 뛴 Java 구현이 있다는 것을 몰랐습니다. – jairajs89

+0

+1하면 자바가되고 싶습니다. –

+0

사용할 때까지.내가 마지막으로 사용한 이후로 크게 개선되지 않는 한, 생성하는 바이너리는 기계 코드라고 생각되면 느려집니다. – cHao

2

어떤 언어로도 이 될 수 있습니다. .net에는 바이트 코드를 네이티브 코드로 변환하는 네이티브 코드 생성기 (NGEN)가 포함되어 있으며 네이티브 바이너리를 만드는 데 잠재적으로 사용될 수 있습니다. 실제로 바이트 코드로 컴파일되는 언어는 동일한 기능을 수행 할 수 있습니다.

스크립팅 언어 (Python, PHP, Perl 등)에 들어갈 때 까다로워지기 시작합니다. 그 중에서도 일반적으로 스크립트를 하나의 실행 파일에 인터프리터로 묶는 것이 더 쉽습니다. 그러나 두 언어의 "eval"함수가 텍스트를 구문 분석하고 실행할 수있는 능력을 필요로한다는 것을 제외하면 PHP 또는 Perl 컴파일러 작성을 방해하는 요소는 없습니다. 따라서 최소한 프로그램과 연결된 통역사가 필요합니다 어쨌든.

더 큰 질문은 "컴파일 할 가치가있는 수준은 어느 정도입니까?"입니다. 이를 위해, "스스로 해석 할 수 있어야하는 코드를 실행할 때"라고 대답 할 것입니다. IE : 문장/함수를 제거 할 수 없다면 "eval"문/함수가있는 언어를 컴파일하려고하지 않아도됩니다.

+0

한 가지 문제는 클라이언트가 제한된 액세스 권한으로 내 서버에 대한 ssh 액세스 권한을 갖고 있다는 것입니다. 그들은 내 스크립트 중 일부를 실행해야하지만 소스 코드를 보지 못하게해야합니다. 파이썬 스크립트 (또는 다른 스크립트)는 실행 권한 만 필요로하는 기본적으로 컴파일 된 프로그램과 달리 읽기 권한 없이는 실행할 수 없습니다. – jairajs89

+0

문제가 있다면 스크립트를 실행하는 것이 유일한 목적 인 "러너"프로그램을 사용할 수 있습니다. 그것은 setuid 일 수 있으며 스크립트는 "러너"프로그램의 사용자 만 읽을 수 있도록 제한 될 수 있습니다. 유일한 문제는 일반적으로 프로그램을 시작한 사용자가 아닌 러너 프로그램 소유자가 소유하고 있기 때문에 출력 파일을 작성해야하는 경우 발생합니다. – cHao

+0

주요 기능은 클라이언트가 액세스 할 수있는 파일을 출력하는 것입니다. – jairajs89

0

혼란 스럽습니다. 컴퓨터 프로그래밍 언어의 요점은 자동으로 실행될 수 있다는 것이고 궁극적으로는 항상 기계 명령어로 컴파일하는 것을 의미합니다. 따라서 정의상 모든 언어의 프로그램은 기본적으로 실행 파일로 변환 될 수 있습니다. 일부는 실제로 그 단계를 수행하지 않고 해석 된 바이트 코드로 내용을 나타내지 만 대부분의 언어는 원시 코드 용 번역기를 가지고 있습니다 (예를 들어 Java는 바이트 코드 대신 프로세서 고유의 opcode를 생성하는 JIT 컴파일러를가집니다).

유일한 차이점은 높은 언어의 경우 컴파일러 인프라가 실행 파일에 포함되어야한다는 것입니다. 컴파일러는 가비지 콜렉션 메커니즘이나 런타임 유형 정보를 제거 할 수 없으며 더 이상 동일한 프로그램이 될 수 없습니다. 그러나 자동으로 실행 가능한 것으로 변환 될 수없는 컴퓨터 프로그래밍 언어는 꽤 무의미합니다. 그렇다 쓰기에 "Hello World"는 다년간의 노력이었다 말레 볼제, 또는 물론, 같은 의도적 기능 장애 언어의

... 하스켈, OCaml로, 그리고 표준처럼

+0

Hehe, 미안 해요, 제 질문으로 분명하지 않았습니다. 내 편집 내용을 읽으십시오. – jairajs89

+1

아니요, 전통적인 통역사는 자신의 언어를 컴파일하지 않았으며 컴파일 할 수없는 언어를 만들 수 있습니다 (예 : MSDOS 배치 파일은 실행되는 동안 배치 파일을 다시 작성할 수 있으므로 컴파일 할 수 없음). –

+0

@pete 그래서 뭐? 컴파일러는 자신을 컴파일 된 프로그램에 삽입하고 변경 후 배치 파일의 컴파일을 다시 실행할 수 있습니다. 컴파일은 결코 불가능하지 않으며 때로는 무의미합니다. 대부분의 리스프는 비슷한 방식으로 컴파일러를 가지고 있습니다. –

1

많은 리스프 방언, 네이티브 코드 컴파일러가 ML.

관련 문제