Меня всегда удивляет почему многие компиляторы/интерпретаторы языков программирования (и среды для них и софт) написаны на С, С++ , а не на них самих. Почем так редко применяют раскрутку компилятора? или я неправо? К тому же там где применяют не редко остаётся ядро на С.
Неужели это свидетельствует о их слабости или недоразвитости? или просто на остальных ЯВУ трудно писать компиляторы?
Единственно вижу что на хаскеле пишут другие языки, но он опять же частично написан на С. Есть другие примеры?
Буду программировать и переводить с японского за еду. Предложения принимаются.
A>Меня всегда удивляет почему многие компиляторы/интерпретаторы языков программирования (и среды для них и софт) написаны на С, С++ , а не на них самих. Почем так редко применяют раскрутку компилятора? или я неправо? К тому же там где применяют не редко остаётся ядро на С. A>Неужели это свидетельствует о их слабости или недоразвитости? или просто на остальных ЯВУ трудно писать компиляторы? A>Единственно вижу что на хаскеле пишут другие языки, но он опять же частично написан на С. Есть другие примеры?
Действительно, неужели это о чём-то вообще свидетельствует? Какая у вас проблема с ядром на си/++?
Здравствуйте, Temoto, Вы писали:
A>>Меня всегда удивляет почему многие компиляторы/интерпретаторы языков программирования (и среды для них и софт) написаны на С, С++ , а не на них самих. Почем так редко применяют раскрутку компилятора? или я неправо? К тому же там где применяют не редко остаётся ядро на С. A>>Неужели это свидетельствует о их слабости или недоразвитости? или просто на остальных ЯВУ трудно писать компиляторы? A>>Единственно вижу что на хаскеле пишут другие языки, но он опять же частично написан на С. Есть другие примеры?
T>Действительно, неужели это о чём-то вообще свидетельствует? Какая у вас проблема с ядром на си/++?
может и так.. Просто мне это кажется странным. особенно для очень развитых представителей.
Мне кажется что наличие исходников языка на самом себе показывает как минимум его самодостаточность..
Буду программировать и переводить с японского за еду. Предложения принимаются.
Здравствуйте, anokata, Вы писали:
A>Здравствуйте, Temoto, Вы писали:
T>>Действительно, неужели это о чём-то вообще свидетельствует? Какая у вас проблема с ядром на си/++?
A>может и так.. Просто мне это кажется странным. особенно для очень развитых представителей. A>Мне кажется что наличие исходников языка на самом себе показывает как минимум его самодостаточность..
А что с ней делать с этой самодостаточностью?
Здравствуйте, anokata, Вы писали:
A>Меня всегда удивляет почему многие компиляторы/интерпретаторы языков программирования (и среды для них и софт) написаны на С, С++ , а не на них самих. Почем так редко применяют раскрутку компилятора? или я неправо? К тому же там где применяют не редко остаётся ядро на С.
Ядро на Си или близком к тому языке необходимо потому, что средства взаимодействия с внешней средой (ОС и прочее), как правило, реализованы в первую очередь в интерфейсе для Си. Особенно это характерно для Unix мира.
Вообще общего правила нет. Например, Erlang использует самораскрутку: для компиляции его рабочего кода используются уже собранные в поставке beam'ы компилятора. С другой стороны, С сам по себе сейчас обычно использует самораскрутку процентов на 99.9, легче сделать кросс-компилятор для первого внедрения, чем рисовать всё это на ассемблере.
A>Неужели это свидетельствует о их слабости или недоразвитости? или просто на остальных ЯВУ трудно писать компиляторы?
Может, это просто не их целевая ниша?
Не вопрос написать такой компилятор и среду, но им может чего-то не хватать.
T>>Действительно, неужели это о чём-то вообще свидетельствует? Какая у вас проблема с ядром на си/++?
A>может и так.. Просто мне это кажется странным. особенно для очень развитых представителей. A>Мне кажется что наличие исходников языка на самом себе показывает как минимум его самодостаточность..
Показывает. А вот насчёт "как минимум" — тут всё зависит от целей, которые преследовали авторы. Для практичных языков самодостаточность — последнее дело, они и так уже решают поставленные задачи. Языкам "ради искусства" и "двигающим науку вперед" self-hosted компилятор, конечно, необходим в качестве аргумента в споре "кто круче".
Здравствуйте, anokata, Вы писали:
A>Меня всегда удивляет почему многие компиляторы/интерпретаторы языков программирования (и среды для них и софт) написаны на С, С++ , а не на них самих. Почем так редко применяют раскрутку компилятора? или я неправо? К тому же там где применяют не редко остаётся ядро на С. A>Неужели это свидетельствует о их слабости или недоразвитости? или просто на остальных ЯВУ трудно писать компиляторы?
1. не всякий язык хорошщо подходит для написания трансляторов. а про фп языки вообще говорят, что единственная серьёзная программа которую на таком языке пишут обычно — собственный транслятор
2. большинство языков работают медленней С, но позволяют программировать быстрее. т.е. они подходят для программ, имеющих небольшой тираж
3. компиляторы пишут очень квалифицированные специалисты
A>Единственно вижу что на хаскеле пишут другие языки, но он опять же частично написан на С. Есть другие примеры?
ghc вроде целиком на хаскеле написан. на C там RTS
Здравствуйте, anokata, Вы писали:
A>Меня всегда удивляет почему многие компиляторы/интерпретаторы языков программирования (и среды для них и софт) написаны на С, С++ , а не на них самих. Почем так редко применяют раскрутку компилятора? или я неправо? К тому же там где применяют не редко остаётся ядро на С. A>Неужели это свидетельствует о их слабости или недоразвитости? или просто на остальных ЯВУ трудно писать компиляторы? A>Единственно вижу что на хаскеле пишут другие языки, но он опять же частично написан на С. Есть другие примеры?
Потому что Си (а также С++, D, ObjC, Java, C#, Delphi и т.п.) — нормальные языки, понятные и удобные для реального, практического, старого доброго программирования.
А хаскели и прочее — это абстрактная околоматематическая сущность. Вроде матлаба или чего-то типа того. ИМХО, в большинстве случаев это даже не "языки программирования", а скорее средства компьютерного моделирования какой-то математической парадигмы или теории. По крайней мере, их разработчики точно не ставят целью создание языка, на котором можно писать к примеру ядра операционных систем или навороченные GUI приложения.
Разумеется, в них есть польза, и немалая — например, что с их помощью можно создавать, исследовать и обкатывать новые концепции и парадигмы, которые затем можно встроить в нормальные языки (пример тому — функциональное программирование — лямбды и прочее, которое уже "обкатано" и сейчас прекрасно вписывается в старую добрую классическую модель реального, практического программинга).
Здравствуйте, x-code, Вы писали:
XC>А хаскели и прочее — это абстрактная околоматематическая сущность. Вроде матлаба или чего-то типа того. ИМХО, в большинстве случаев это даже не "языки программирования", а скорее средства компьютерного моделирования какой-то математической парадигмы или теории. По крайней мере, их разработчики точно не ставят целью создание языка, на котором можно писать к примеру ядра операционных систем
это точно. как-то не самая частая задача
XC>или навороченные GUI приложения.
Здравствуйте, samius, Вы писали:
A>>может и так.. Просто мне это кажется странным. особенно для очень развитых представителей. A>>Мне кажется что наличие исходников языка на самом себе показывает как минимум его самодостаточность.. S>А что с ней делать с этой самодостаточностью?
Это как минимум отличный тест компилятора. Компиляторы не мальенькие по объему программы.
Потом автор языка (если он сам пишет компилятор) получает неоценимый опыт использования языка. А это положительно влияет на дизайн языка. В него реже попадают вещи для галочки, и чаще появляются нужные и удобные вещи.
Есть логика намерений и логика обстоятельств, последняя всегда сильнее.
Здравствуйте, netch80, Вы писали:
N>Ядро на Си или близком к тому языке необходимо потому, что средства взаимодействия с внешней средой (ОС и прочее), как правило, реализованы в первую очередь в интерфейсе для Си. Особенно это характерно для Unix мира.
О — это так надо для компилятора, которому для работы нужно уметь читать и писать файлы. Их же на других языках ведь не прочитаешь .
Есть логика намерений и логика обстоятельств, последняя всегда сильнее.
Здравствуйте, anokata, Вы писали:
A>Меня всегда удивляет почему многие компиляторы/интерпретаторы языков программирования (и среды для них и софт) написаны на С, С++ , а не на них самих. Почем так редко применяют раскрутку компилятора? или я неправо? К тому же там где применяют не редко остаётся ядро на С. A>Неужели это свидетельствует о их слабости или недоразвитости? или просто на остальных ЯВУ трудно писать компиляторы? A>Единственно вижу что на хаскеле пишут другие языки, но он опять же частично написан на С. Есть другие примеры?
Все очень просто. Бутстрапинг — это геморрой в начальной стадии проекта. Ведь очень легко получить компилятор которым нельзя будет скомпилировать самого себя. По сему нужна многопроходная (хотя бы двупроходная) компиляция. Усиленное тестирование.
Вторая причина — это сложность переноса на другие платформы. Если компилятор написан на С и это нэйтив-компилятор, то перенести его на другую платформу (в идеале) можно тупой перекомпиляцией.
Но все же главная причина — дурь. Те кто не использует бутсрапинга (и при этом пытается создать новый язык который будет удобен другим) делает огромную ошибку, на мой взгляд.
Бутстрапинг очень полезен по двум причинам.
1. Это отличный тест самого компилятора. Причем тест который постоянно развивается.
2. Это возможность создателям языка больше использовать этот самый язык. А без этого трудно сделать язык который был бы нужен другим.
На самом деле почти все популярные сегодня языки когда-то бутсрапились или стремятся к этому. Вот тут
товарищ перечислял "нормальные языки", по его мнению, языки (С++, D, ObjC, Java, C#, Delphi). Так среди них только C# и D не бутстрапились. Причем для C# уже пишется компилятор на C#, а D в этот список явно попал случайно (так как под нормальными языками явно понимаются популярные ныне или в недавнем прошлом).
А вот с D все сложнее. Его автор хотел создать лучшего потомка С, но пока что народ его не воспринимает. И, возможно, что от части происходит это потому, что D не пишется на D.
Есть логика намерений и логика обстоятельств, последняя всегда сильнее.
товарищ перечислял "нормальные языки", по его мнению, языки (С++, D, ObjC, Java, C#, Delphi). Так среди них только C# и D не бутстрапились. Причем для C# уже пишется компилятор на C#, а D в этот список явно попал случайно (так как под нормальными языками явно понимаются популярные ныне или в недавнем прошлом).
Разве дельфи бутстрапили?? Его компилер на плюсах же написан. IDE — да, на дельфи, а компилер на плюсах.
On 23.05.2011 14:59, x-code wrote:
> Потому что Си (а также С++, D, ObjC, Java, C#, Delphi и т.п.) — нормальные > языки, понятные и удобные для реального, практического, старого доброго > программирования. > А хаскели и прочее — это абстрактная околоматематическая сущность. Вроде матлаба
Ты вспомни эти свои слова, когда всякие хаскели будут стрелять в 200 ядер со
скоростью заоблачной, а С в это время только успеет скомпилироваться (на одном
ядре).
>> Потому что Си (а также С++, D, ObjC, Java, C#, Delphi и т.п.) — нормальные >> языки, понятные и удобные для реального, практического, старого доброго >> программирования. >> А хаскели и прочее — это абстрактная околоматематическая сущность. Вроде матлаба
MZ>Ты вспомни эти свои слова, когда всякие хаскели будут стрелять в 200 ядер со MZ>скоростью заоблачной, а С в это время только успеет скомпилироваться (на одном MZ>ядре).
Здравствуйте, VladD2, Вы писали:
VD>Здравствуйте, samius, Вы писали:
A>>>может и так.. Просто мне это кажется странным. особенно для очень развитых представителей. A>>>Мне кажется что наличие исходников языка на самом себе показывает как минимум его самодостаточность.. S>>А что с ней делать с этой самодостаточностью?
VD>Это как минимум отличный тест компилятора. Компиляторы не мальенькие по объему программы.
Вот допустим, ушел в монастырь писать компилятор блаб на блаб-е. Написал, вышел, кому стало легче?
VD>Потом автор языка (если он сам пишет компилятор) получает неоценимый опыт использования языка. А это положительно влияет на дизайн языка. В него реже попадают вещи для галочки, и чаще появляются нужные и удобные вещи.
Нужные и удобные для написания компилятора? А если язык создавался с другой целью, то именно вещи для компилятора будут для галочки, а нужные и удобные будут слиты.
Здравствуйте, samius, Вы писали:
S>Вот допустим, ушел в монастырь писать компилятор блаб на блаб-е. Написал, вышел, кому стало легче?
Я вот не могу понять, что ты тут на русском написал, что уж там о блабах то говоить.
VD>>Потом автор языка (если он сам пишет компилятор) получает неоценимый опыт использования языка. А это положительно влияет на дизайн языка. В него реже попадают вещи для галочки, и чаще появляются нужные и удобные вещи. S>Нужные и удобные для написания компилятора? А если язык создавался с другой целью, то именно вещи для компилятора будут для галочки, а нужные и удобные будут слиты.
Можно поинтересоваться какие из специализированных фич для написания компиляторов ты знаешь? Другими словами, о чем идет речь то?
Компилятор — это такая же программа как и все другие. Если ее удобно писать, то будет удобно писать и многие другие программы.
Есть логика намерений и логика обстоятельств, последняя всегда сильнее.
Здравствуйте, VladD2, Вы писали:
VD>Здравствуйте, samius, Вы писали:
S>>Вот допустим, ушел в монастырь писать компилятор блаб на блаб-е. Написал, вышел, кому стало легче?
VD>Я вот не могу понять, что ты тут на русском написал, что уж там о блабах то говоить.
Не могу понять, что ты не смог на русском понять.
VD>>>Потом автор языка (если он сам пишет компилятор) получает неоценимый опыт использования языка. А это положительно влияет на дизайн языка. В него реже попадают вещи для галочки, и чаще появляются нужные и удобные вещи. S>>Нужные и удобные для написания компилятора? А если язык создавался с другой целью, то именно вещи для компилятора будут для галочки, а нужные и удобные будут слиты.
VD>Можно поинтересоваться какие из специализированных фич для написания компиляторов ты знаешь? Другими словами, о чем идет речь то?
Про специализированные я ничего не говорил, а вот удобными были бы АлгТД, ПМ, лямбды.
VD>Компилятор — это такая же программа как и все другие. Если ее удобно писать, то будет удобно писать и многие другие программы.
Язык прежде всего должен делать удобным то, для чего он предназначен. И чем уже его предназначение, тем неудобнее будет на нем писать что-либо другое, и наоборот. Хаскель удобен для написания компилятора, но почему-то скрипты для винды пишут на повершеле а геймдев на С++ в своем большинстве.