Что вы думаете о интерпретаторе обычно скомпилированных языков? - PullRequest
0 голосов
/ 28 января 2010

Я работал с интерпретатором C ++ (CINT), и мой опыт был катастрофическим. Он полон ошибок, странного поведения, а не стандартов ... и я пришел к выводу: неправильно создавать интерпретатор языка, родившегося для компиляции, потому что я думаю, что дизайн языка строго ограничен фактом что он будет интерпретирован или скомпилирован.

Что вы думаете об этом?

Ответы [ 6 ]

3 голосов
/ 28 января 2010

Единственная разница между компилятором и интерпретатором - это производительность. Конечно, один конкретный интерпретатор C ++ содержит ошибки, но это не означает, что все интерпретаторы C ++ должны содержать ошибки. Я думаю, что это в меньшей степени связано с тем, «C ++» «предназначен» для компиляции (кем?), И больше связано с тем, что C ++ является чрезвычайно сложным языком для компиляции для начала.

(Пока мы думаем, я думаю, что C ++ не следует ни компилировать, ни интерпретировать, а переводить на другой язык. Но это только я.)

2 голосов
/ 29 января 2010

Неправильно создавать интерпретатор языка, рожденного для компиляции.

Нет такого животного. C ++ был рожден, чтобы быть препроцессором для C, тогда как раньше он назывался «C with Classes». Любой когда-либо созданный язык может быть скомпилирован или интерпретирован, хотя есть случаи динамических языков, которые очень сложно эффективно скомпилировать. Поэтому я мог бы купить идею «рожден, чтобы быть интерпретированным», но никогда не «рожден, чтобы быть скомпилированным».

Если серьезно, неправильно создавать дерьмовые интерпретаторы , так же как неправильно создавать дерьмовые компиляторы. Полная остановка.

Что вы думаете о интерпретаторе обычно компилируемых языков?

Одной из лучших систем, которые я когда-либо использовал, была система Sabre-C : интерпретатор языка C, язык, который, как вы могли бы сказать, был создан для компиляции. Это было здорово. Я все еще скучаю по нему.

1 голос
/ 28 января 2010

Если они были написаны для компиляции, то зачем вам плыть против течения:)

1 голос
/ 28 января 2010

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

Кроме того, IIRC спецификация C # призывает к тому, что спецификация предполагает использование с компилятором, но это не является обязательным требованием и что возможна легальная интерпретируемая версия.

1 голос
/ 28 января 2010

Ну, я думаю, что это очень возможно. Я думаю, что вы столкнулись с явной сложностью интерпретируемого языка. В C ++ есть все виды граничных условий и других причуд, даже когда они компилируются, не говоря уже о том, чтобы их интерпретировать.

Более простые языки (например, Boo , F # ), хотя и являются компилируемыми языками, все еще могут интерпретироваться.

0 голосов
/ 28 января 2010

Нет, это не так, но зачем вам. Такие языки, как C и C ++, построены очень близко к машине. Поэтому, если вы хотите создать интерпретатор, вы должны создать полноценную виртуальную машину. Что не так, но есть и другие полезные проекты.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...