-1

Каковы языки высочайшего уровня, которые могут быть скомпилированы для исполняемых файлов? Когда я говорю, скомпилированный для исполняемого файла, я имею в виду не байт-код, а собственный код сборки, как в смысле C, C++.Каковы языки самого высокого уровня, которые могут быть скомпилированы?

EDIT: Одна из проблем, с которыми я столкнулась, заключается в том, что у клиентов есть доступ к SSH на мой сервер с доступом к лимиту доступа. Им нужно запустить некоторые из моих сценариев, но я не хочу, чтобы они видели исходный код. Сценарий Python (или любой другой скрипт) не может быть выполнен без разрешения на чтение в отличие от изначально скомпилированной программы, которая требует только привилегий выполнения.

+0

Я бы спросил, «какой высокий уровень может быть скомпилирован для исполняемых файлов». Является ли COBOL/FORTRAN/... более высоким языком, чем Java/Scala/...? – PeterMmm

+0

Возможно, вы могли бы спросить об обфускации? –

ответ

1

Мое голосование будет за Java + GCJ. Более подробную информацию о GCJ можно найти по адресу:

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

Он может пропустить байткод и компилировать непосредственно в машинный код.

+0

Спасибо! Я не знал, что есть реализация Java, которая полностью пропускает JVM, плавающий вокруг. – jairajs89

+0

+1 заставляет меня хотеть пойти на Java. –

+0

Пока вы его используете.Если он не будет значительно улучшен с тех пор, как я его последний раз использовал, двоичные файлы, которые он генерирует, невыносимо медленны, поскольку предположительно являются машинным кодом. – cHao

2

Любой язык может потенциально скомпилирован. .net содержит встроенный генератор кода (NGEN), который переводит байт-код в собственный код и потенциально может быть использован для создания собственных двоичных файлов. И действительно, любой язык, который компилируется в байт-код, может иметь одинаковую возможность.

Это начинает усложняться, когда вы переходите на языки сценариев (Python, PHP, Perl и т. Д.). В них обычно проще связывать скрипт с интерпретатором в одном исполняемом файле. Но ничто не мешает кому-либо писать компилятор PHP или Perl, за исключением того, что функции «eval» для обоих языков в значительной степени потребуют возможности синтаксического анализа и выполнения текста, а это означает, что вы получите переводчика, по крайней мере связанного с программой так или иначе.

Большой вопрос: «На каком уровне он перестает стоить того, чтобы его компилировать?». На это я бы ответил «когда вы используете код, который должен быть способен интерпретировать себя». IE: я бы не стал пытаться скомпилировать любой язык, на котором есть «eval» statement/function, если только мне не разрешили удалить оператор/функцию.

+0

Единственная проблема, с которой я столкнулся, заключается в том, что у клиентов есть ssh-доступ к моему серверу в личном доступе доступа. Им нужно запустить некоторые из моих сценариев, но я не хочу, чтобы они видели исходный код. Сценарий Python (или любой другой скрипт) не может быть выполнен без разрешения на чтение в отличие от изначально скомпилированной программы, которая требует только привилегий выполнения. – jairajs89

+0

Если это проблема, возможно, у вас может быть программа «бегуна», единственная цель которой - запустить ваш скрипт. Это может быть setuid, и скрипт может быть ограничен, чтобы только пользователь программы «бегун» мог его прочитать. Единственная проблема заключается в том, что произойдет, если потребуется написать выходные файлы, поскольку они обычно принадлежат владельцу программы бегуна, а не пользователю, который запустил программу. – cHao

+0

Это основная функция - написать выходные файлы, к которым клиенты могут получить доступ ... – jairajs89

0

Вы в замешательстве. Точка языков компьютерного программирования заключается в том, что они могут быть автоматически выполнены, и в конечном итоге это всегда означает компиляцию машинных инструкций. Поэтому по определению программы на каждом языке в принципе могут быть превращены в исполняемые файлы. Некоторые из них фактически не принимают этот шаг и не довольствуются интерпретированным байтовым кодом, но на большинстве языков есть переводчики для собственного кода (даже Java, например, имеет JIT-компиляторы, которые производят коды операций, специфичные для процессора, вместо байтового кода).

Единственное отличие состоит в том, что более высоким языкам требуется немного больше инфраструктуры компилятора для включения в исполняемые файлы; ни один компилятор не может избавиться от механизма сбора мусора или информации о типе времени выполнения, иначе это не будет той же самой программой. Но компьютерный язык программирования, который не может быть автоматически переведен на что-то запущенное, будет довольно бессмысленным.

Помимо намеренно дисфункциональных языков, как Malbolge, или, конечно, где написание «Привет мир» был попыткой многолетней ...

+0

Хе-хе, простите, я не понял свой вопрос. Прочтите мое редактирование. – jairajs89

+1

Нет, традиционные переводчики не скомпилировали свой язык, и можно создавать языки, которые невозможно скомпилировать (например, пакетные файлы MSDOS не могут быть скомпилированы, так как вы можете переписать пакетный файл во время его выполнения). –

+0

@pete И что? Компилятор может вставить себя в скомпилированную программу и повторно выполнить компиляцию командного файла после изменений. Компиляция никогда не бывает невозможной, просто бессмысленной. Большинство lisps несут компилятор примерно так же. –

1

Многих Лиспов диалектов имеют собственные компилятор кода, как и Haskell, OCaml и Standard ML.

Смежные вопросы