2009-10-31 2 views
2

Можно создать дубликат:
What’s with the love of dynamic LanguagesВ чем преимущества интерпретируемого языка в отношении скомпилированного языка?

Я уже прочитал this, но я не понимаю.

Какое использование делает ваш собственный интерпретатор. Кроме того, он говорит о независимости платформы. Ведь степень независимости платформы ограничена тем, на чем могут работать все платформы, на которых может работать ваш интерпретатор. Поэтому я не вижу никакого преимущества.

Кроме того, я не знаю даже одного хорошего использования dynamic typing. Мне это бесполезно. Конечно, я ошибаюсь, потому что там так много динамически типизированных языков.

Может ли кто-нибудь помочь мне здесь? Благодарю.

+0

Этот вопрос довольно враждебный. Вы, кажется, уже решили. Если вы переписываете его, чтобы быть менее эмоциональным, вы, вероятно, получите больше ответов. –

+1

Что такое * враждебное * об этом? Я думаю, что это разумный вывод ** Конечно, я ошибаюсь, потому что там так много динамически типизированных языков. Может ли кто-нибудь помочь мне здесь? ** – Nifle

+1

Педантичная точка: технически нет такой вещи, как «скомпилированный язык» или «интерпретируемый язык». Язык может иметь интерпретируемую реализацию, а также скомпилированную интерпретацию. – ctford

ответ

2

Динамические языки очень удобны для простых вещей. Допустим, вы хотите написать небольшую программу, которая будет отличаться между двумя файлами. В Python, что вы делаете:

file1 = open(<filename>) 
file1.read() 
file1.split('\n') 
#same for file2 
for line in file1: 
    if line not in file2: 
     print line 

так file1 будет начать как FD. Затем он превращается в строку. И, наконец, список. Одна и та же 9-кодовая программа займет как минимум в два раза больше строк на java.

Проблема начинается, когда вы хотите написать очень большие программы и работать в команде. Управление API-интерфейсами и интерфейсами намного проще в Java.

0

Для меня это быстрое прототипирование. Хотя в наши дни я больше погружался в «серьезный» Python, я в основном использовал его только для того, чтобы выработать концепции, которые я позже переписал на C. Я считаю, что автор Minix проповедовал большинство программ на C обычно рождаются (не предназначены для каламбуров) в качестве сценариев оболочки.

Я использую PHP для веб-приложений, а также услуги прототипирования, которые делают серьезный бизнес с базой данных, которые также переделаны на C, как только у меня есть концепция, которой я доволен.

Как я уже сказал, я больше доверяю Python (и моему умению использовать его), поэтому некоторые вещи, рожденные на Python, просто останутся такими. Но это не относится к моей точке зрения, я упоминаю об этом просто так, чтобы я не раздражал энтузиастов Python :)

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

За некоторыми исключениями я бы выбрал C или C++, если бы я писал что-то абсолютно критическое, особенно там, где время/время было первостепенным.

+0

В чем смысл прототипирования? Разве это не просто накладные расходы? Почему бы не создать вместо этого рабочее ПО? –

+1

@jpartogi: зависит от того, где вы работаете и над чем работаете. В зависимости от сложности погружение прямо в нечто сложное с строго типизированным языком может быть плохим. Кроме того, я предпочел бы прототипировать панель управления для маршрутизатора на PHP, прежде чем катанировать встроенный веб-сервер в C. –

0

Просто проще написать интерпретатор, чем компилятор. Существует (как правило) меньше кода для записи.

Для выполнения программы на языке вам необходимо (1) прочитать исходный код, чтобы вы могли представлять его в некотором внутреннем формате (обычно это дерево), и вам нужна (2) система времени выполнения. Эти вещи необходимы, если вы используете компилятор или интерпретатор.

Если вы пишете переводчик для своего языка, довольно просто добавить фактический шаг выполнения. Если вы просто выполняете древовидное представление вашей программы, оно не требует большого количества кода.(Но это будет будет намного медленнее, чем другие подходы.)

Для компилятора вам необходимо перевести на (обычно) совершенно другой язык, а также (как правило) вставить инфраструктуру для управления потоком и ресурсами программы. Это гораздо больше работы.

+0

@Thomas, если компилятор больше работает, зачем использовать их вообще? – Moeb

+0

@hanifr: В основном для эффективности. Быстрее, а также более мелкие программы для распространения. Плюс, иногда, вы хотите обфускацию распространения скомпилированного кода вместо источника. –

0

Интерактивная оболочка - одно из преимуществ интерпретируемого языка. Это позволяет оценивать и тестировать код по мере его написания. Скорее «просто написать код» гораздо быстрее, чем на языке, который ожидает, что вы напишете целую программу, а затем сначала скомпилируйте ее. В строках кода разница может быть не очень большой, но процесс разработки отличается.

Вам не обязательно выбирать между интерпретированными и скомпилированными. Некоторые языки имеют как интерпретированную реализацию, так и скомпилированные реализации, например. Python/Jython/IronPython. Это позволяет использовать преимущества интерпретатора и преимущества производительности и портативности виртуальной машины (JRE/CLR).

0

преимущества Википедия говорит о преимуществе для языка реализатор, а не пользовательязыка. Для пользователя языка наиболее важным недостатком является медленная скорость выполнения интерпретируемого кода. Преимущество состоит в том, что код может быть выполнен немедленно: вам не нужно ждать завершения компиляции. Это не является преимуществом, если у вас есть быстрый инкрементный компилятор & (например, компиляторы Lisp, F # interactive). Компиляция и последующее выполнение выполняется быстрее, чем интерпретация кода, который выполняется более нескольких миллисекунд. Если ваш код занимает меньше времени, он чувствует мгновение в любом случае.

На компилированном языке возможно динамическое типирование, динамическое масштабирование, eval и автоматическое управление памятью REPL. Например, C# имеет динамическую типизацию & автоматическое управление памятью, F # & OCaml имеет REPL, автоматическое управление памятью и Lisp имеет все вышеперечисленное.

1

Какое использование делает ваш собственный интерпретатор. Кроме того, он говорит о независимости платформы. Ведь степень независимости платформы ограничена тем, на чем могут работать все платформы, на которых может работать ваш интерпретатор. Поэтому я не вижу никакого преимущества.

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

Однако, если вы написали компилятор, вам самому придется написать генератор кода для каждой платформы. Так, например, если вы написали свой компилятор, чтобы он работал отлично для вас в Windows, когда я пытаюсь запустить его в Linux, он генерирует код для Windows, а не Linux, поэтому он не будет работать. Вам нужно будет сделать дополнительную работу, добавив генератор кода для Linux, прежде чем я смогу его использовать.

Кроме того, я не знаю даже одного хорошего использования динамического набора. Мне это бесполезно. Конечно, я ошибаюсь, потому что там так много динамически типизированных языков.

Я считаю, что динамические языки популярны по двум причинам.

Во-первых, их легче написать. Для систем типа требуется дополнительная работа, чтобы получить право.

Во-вторых, поскольку пользователям динамического языка не нужно понимать систему статического типа, многие люди считают, что динамические языки проще в использовании. Так много людей предпочитают их.

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

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