LINUX.ORG.RU

компилятор ЯП на самом ЯП

 ,


0

3

Почему все так ... на эту фразу? В достоинствах многих языков программирования пишут что «компилятор этого яп сам написан на этом яп». яп от этого автоматически становится лучше? какие выводы из этого надо делать?

★★★★★

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

unC0Rr ★★★★★
()

яп от этого автоматически становится лучше?

От этого становится лучше компилятор.

E ★★★
()

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

KblCb ★★★★★
()

В достоинствах многих языков программирования пишут что «компилятор этого яп сам написан на этом яп». яп от этого автоматически становится лучше?

фанаты этого языка — могут использовать этот язык для улучшения этого языка :-) ...и при этом продолжать фанатеть от этого процесса :)

user_id_68054 ★★★★★
()

Зрелый компилятор – серьёзная большая программа. Если он написан на своём языке, это значит, что на этом языке есть хотя бы одна большая прогамма во-первых, и что авторы не будут витать в облаках хелловорлдов и надуманных программок, продумывая дальнейшее развитие языка.

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

Legioner ★★★★★
()
Ответ на: комментарий от TDrive

Быстрее и эффективнее генерирует код. Плюс становится меньше зависимостей от всяких ненужных цэ и плюсов. Больше ничем.

E ★★★
()
Ответ на: комментарий от E

Быстрее и эффективнее генерирует код.

если язык быстрый — то да. (например если быстрее чем C/C++).

становится меньше зависимостей от всяких ненужных цэ и плюсов. Больше ничем.

а вот тут как раз проблема.

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

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

как это сделать?

в каком порядке компилировать зависимости?

user_id_68054 ★★★★★
()
Последнее исправление: user_id_68054 (всего исправлений: 1)

яп от этого автоматически становится лучше?

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

Aswed ★★★★★
()

E KblCb Legioner Aswed
Компилятор в качестве примера крупной программы это ок, но далеко не все яп пригодны для написания компиляторов, особенно высокоуровневые, это вроде не мешает им существовать и развиваться. Спрошу так, вы лично когда выбираете какой нибудь яп для себя обращаете внимание на то, что у какого то яп компилятор написан сам на себе? Или это такой маркетинговый ход для продвижения яп на ранней стадии развития?

TDrive ★★★★★
() автор топика
Ответ на: комментарий от user_id_68054

а вот тут как раз проблема.

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

TDrive ★★★★★
() автор топика
Ответ на: комментарий от TDrive

но далеко не все яп пригодны для написания компиляторов, особенно высокоуровневые

Читать файл может? Писать в файл может? Значит пригоден.

anonymous
()
Ответ на: комментарий от user_id_68054

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

Обычно эту всю работу проводят сами разработчики, так что тебе достаточно просто скачать скомпилированный на компиляторе компилятор.

E ★★★
()
Ответ на: комментарий от E

компилятором компилятор

Кажется, я немного запутался

Можно с примером?
Например, есть у меня компилятор C++03 а я хочу собрать компилятор C++11 компилятором C++11 (код с использованием новых фишек, само собой)

Как это происходит?

Uter
()
Ответ на: комментарий от anonymous

Читать файл может? Писать в файл может? Значит пригоден.

скорость компиляции не маловажна. особенно если авторы языка создают яп для написания крупных проектов.

TDrive ★★★★★
() автор топика
Ответ на: комментарий от Uter

Это выглядит как-то так в общем случае:

old_compiler -o new_compiler new_compiler.cpp
new_compiler -o new_compiler new_compiler.cpp

E ★★★
()

Ну единственный(но огромный) плюс что я вижу - сорцы являются понятной документацией.

Debasher ★★★★★
()
Ответ на: комментарий от TDrive

скорость компиляции не маловажна

Кто-то говорил про скорость компиляции?

anonymous
()
Ответ на: комментарий от TDrive

Спрошу так, вы лично когда выбираете какой нибудь яп для себя обращаете внимание на то, что у какого то яп компилятор написан сам на себе?

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

это вряд ли для кого-то маркетинговый ход. основные причины перечислены в первом комменте

MyTrooName ★★★★★
()
Ответ на: комментарий от user_id_68054

а вот тут как раз проблема.

Никогда не собирал GCC из сорцов?

DarkEld3r ★★★★★
()
Ответ на: комментарий от TDrive

Или это такой маркетинговый ход для продвижения яп на ранней стадии развития?

Вот как раз на ранней стадии развития, обычно, с этим «всё плохо». Из примеров можно на D взглянуть. Правда я за ситуацией не слежу, так что могу и соврать, но раньше помню говорили, что компилятор или/и стандартная библиотека написаны на С/С++ и «качество кода оставляет желать лучшего». Грозились переписать всё на D и обещали разные бонусы: стабильность, лёгкость разработки и т.д. Если посмотреть на гитхаб, то процесс не завершён. Впрочем, стандартная библиотека почти вся на D.

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

Для меня это не играет решающую роль, но небольшим плюсом является.

DarkEld3r ★★★★★
()
Ответ на: комментарий от MyTrooName

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

java? C#? Delphi? Basic?

TDrive ★★★★★
() автор топика
Ответ на: комментарий от TDrive

особенно высокоуровневые,

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

DarkEld3r ★★★★★
()
Ответ на: комментарий от TDrive

скорость компиляции не маловажна.

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

DarkEld3r ★★★★★
()
Ответ на: комментарий от TDrive

У фрибасика компилятор написан на фрибасике, например.

PolarFox ★★★★★
()
Ответ на: комментарий от leave

А ,кстати, как там в Джентушечке из ебилда собираются компиляторы — те которые компилируют сами себя?

(GCC не в счёт.. И те которые уже в stage-архив засунули — тоже НЕ в счёт)

user_id_68054 ★★★★★
()
Последнее исправление: user_id_68054 (всего исправлений: 1)

Это врожденое свойство людей — дрочить на подобные несущественные вещи.

crowbar
()
Ответ на: комментарий от TDrive

вы лично когда выбираете какой нибудь яп для себя обращаете внимание на то, что у какого то яп компилятор написан сам на себе?

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

KblCb ★★★★★
()
Ответ на: комментарий от user_id_68054

фанаты этого языка — могут использовать этот язык для улучшения этого языка :-) ...и при этом продолжать фанатеть от этого процесса :)

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

unt1tled ★★★★
()
Ответ на: комментарий от Legioner

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

Перебирая все возможные способы получения языков, такой язык уже получили. Называется prolog.

unt1tled ★★★★
()
Ответ на: комментарий от TDrive

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

Язык общего назначения не может быть непригоден для написания компилятора. Компилятор это модуль парсинга (работа со строками, работа с рекурсивными структурами), оптимизация (преобразование рекурсивных структур), генерация промежуточного представления. Разве что какой ущербный DSL может с такой задачей не справиться.

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

Для меня это знак, что язык не совсем уж игрушечный.

Legioner ★★★★★
()
Ответ на: комментарий от TDrive

java?

Компилятор openjdk на Java.

C#?

AFAIK у Mono компилятор на C#. У микрософта были планы переписывать на C#, не знаю, как сейчас.

Delphi?

Разве не на Delphi он?

Basic?

Basic это большое семейство языков и реализаций. Среди них уж точно найдутся компиляторы на Basic.

Legioner ★★★★★
()
Ответ на: комментарий от unt1tled

Перебирая все возможные способы получения языков, такой язык уже получили. Называется prolog.

Сомнительно что-то. Не слыхал про большое использование пролога в компиляторостроении.

Legioner ★★★★★
()

метрика Никлауса Вирта

просто для многих недоязычков самая серьёзная программа, на нём написанная  — это компилятор его самого.

что символизирует.

anonymous
()
Ответ на: комментарий от Legioner

его и не используют, потому что он дико медленный

но он реально больше не для чего не подходит; парсеры на нем хорошо получаются и деревья

unt1tled ★★★★
()
Ответ на: комментарий от TDrive

скорость компиляции не маловажна.

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

antares0 ★★★★
()

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

a1batross ★★★★★
()

«компилятор этого яп сам написан на этом яп». яп от этого автоматически становится лучше?

Никогда не видел как скриптописатели пишут, мягко говоря, не быстрый код потому как переписать критичные участки умений/желания не хватает? Это вот разрыв между системщиками которые не хотят и прикладниками которым надо но не могут. И чем шире становится область применения, тем ширше становится пропасть между ними :) В случае «один ЯП, один компилятор» пытаемся единым порывом этот разрыв смыкать. Иначе никак.

antares0 ★★★★
()

яп от этого автоматически становится лучше

This! Ну, по крайней мере, так считают создатели D.

Unicode4all ★★★★★
()
Ответ на: комментарий от TDrive

java-то сюда как угодила?

C# на чем написан, не знаю, но я не делаю различий между языками платформы .NET

Delphi - я о таком и не знаю, класса с 10 забыл и больше не надо

Basic - бывают разные. о каких речь?

MyTrooName ★★★★★
()
Ответ на: комментарий от TDrive

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

java? C#? Delphi?

Java и Delphi если мне не изменяет память именно сами на себе написаны, в смысле логики работы и библиотеки. Некоторые количества С-шного рантайма врдяли делает погоду. С# по идее тоже должен.

antares0 ★★★★
()
Последнее исправление: antares0 (всего исправлений: 1)
Ответ на: комментарий от TDrive

Компилятор в качестве примера крупной программы это ок, но далеко не все яп пригодны для написания компиляторов, особенно высокоуровневые

Што?

Парсить код и генерить код как раз таки удобнее именно на высокоуровневом языке, да. Особенно если он ML-подобный :)

yoghurt ★★★★★
()
Ответ на: комментарий от yoghurt

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

ilammy ★★★
()
Ответ на: комментарий от ilammy

Вот не думаю, что ТС именно это имел в виду :)

yoghurt ★★★★★
()

А еще есть программы «печатающие» свой текст. Думаю, смысл тот же что и subj.

Deleted
()
Ответ на: комментарий от Uter

Кажется, я немного запутался

google://compiler bootstrapping

Если нет лютой ненависти к википедии - можно почитать тут, для начала сгодится

Ну и как же без соответствующей цитаты :-)

Pinkbyte ★★★★★
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.