При изучении скомпилированного языка, такого как C или C++, вы познакомитесь с компилятором. Чтобы запустить код, сначала его необходимо скомпилировать. Компиляция вашего кода переводит его из текстового представления во что-то, что может быть выполнено. Полученный код очень быстрый и может использовать препроцессоры и тому подобное.Почему существует такое четкое сокращение между интерпретируемыми и скомпилированными языками?
При изучении динамического языка, такого как Python, Matlab или Ruby, вы узнаете интерпретатор. Чтобы запустить код, просто введите его в интерпретатор. Таким образом, вы можете играть со своим кодом во время выполнения и изменять поведение вашей программы на лету. Недостатком этого является то, что интерпретируемые языки довольно медленные, и отсутствие четкого времени компиляции, по-видимому, делает препроцессоры невозможными.
Тогда есть компиляторы «точно в срок», которые используются как интерпретируемые языки, но с меньшим дефицитом производительности по сравнению с компилируемыми языками. Но они обычно не занимаются препроцессорами и не выводят готовые исполняемые файлы.
И затем я изучил Lisp, который может быть скомпилирован, интерпретирован и что у вас есть, все время будучи быстрым и обладающим мощной системой предварительной обработки (макросами). Это кажется здравым смыслом в мире Лиспа, но нигде больше.
Почему нет популярных интерпретаторов для C или компиляторов для Python? Почему сильный разрыв между интерпретируемыми и скомпилированными языками? (Я знаю, что существуют некоторые проекты, которые могут скомпилировать Python или интерпретировать C, но в целом они, похоже, не очень популярны).
Есть переводчики для C: http://root.cern.ch/drupal/content/cint. – Max
Я хотел бы бросить вызов некоторым частям вашего помещения. Препроцессоры * полностью разделены * и могут запускаться задолго до любого компилятора или интерпретатора (и они работают с исходным кодом, а не с двоичными файлами). Языки, совместимые с C и C, имеют встроенный специальный препроцессор, но у него есть другие причины (стремление к дешевым абстракциям во время компиляции). И, как вы признаете в следующем предложении, ** ** являются компиляторами Python и интерпретаторами C. Они, похоже, не являются мейнстримом, но есть сообщества, которые их используют. И в любом случае «никакие интерпретаторы/компиляторы» явно не соответствуют действительности. – delnan
@delnan Правда, «никакие интерпретаторы/компиляторы» неверны. Я это исправил. Спасибо, что указали это. Что касается препроцессоров: многие скомпилированные языки, похоже, имеют встроенные (в частности, все C-производные), но у немногих интерпретируемых языков есть один. За исключением Lisp, который компилируется и интерпретируется и имеет препроцессор. И это * полезно *, так почему же на других языках нет всего этого? – bastibe