Как на самом деле формируется / создается новый язык программирования? - PullRequest
13 голосов
/ 30 апреля 2010

Fortran-> Algol-> Cpl-> Bcpl-> C-> C ++ -> Java .....

Похоже, что каждый язык построен на языке предка. Мой вопрос: новые языки расширяют родительские или есть какая-то хитрость?

например. System.out.print () в Java; это на самом деле printf () в C и так далее (printf на самом деле .. в Cpl)?

Если так, разве это не делает каждый следующий язык медленнее и требует больше памяти? Что отличает новый язык от фреймворка?

Ответы [ 12 ]

0 голосов
/ 30 апреля 2010

Языковые дизайнеры должны учитывать популярность. Я не сомневаюсь, что большая часть популярности C # связана с тем, что нет особой разницы с синтаксисом Java, который не слишком отличается от C, и так далее.

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

Что касается скорости, то это зависит не от языка, а от компилятора, используемого для преобразования этого языка в другой язык, который может быть прямым машинным кодом или сборкой, или в случае C #, Java и т. Д., Байтом код, который затем запускается на виртуальной машине.

Ваш последний вопрос также интересен. C # и .NET - совершенно разные звери. Когда язык (например, C #) является предназначенным для .NET, создается компилятор, который может преобразовать этот язык в байт-код, который может работать на этой виртуальной машине. Это означает, что код C # .net вполне может вызывать сборки, написанные, например, на VB.NET.

То же самое относится к Java и Scala, оба написаны для JVM. Scala - это функциональный язык, в то время как Java - это язык ООП, но оба они могут с радостью вызывать друг друга, поскольку, в конце концов, это всего лишь байт-код, работающий на ВМ.

Надеюсь, это ответит на ваш вопрос.

0 голосов
/ 30 апреля 2010

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

Я не думаю, что было бы правильным сделать общее заявление о том, что все языки построены на каком-то другом языке, который предшествовал ему. Разработчик нового языка, безусловно, должен иметь опыт использования нескольких существующих языков, понимать их сильные и слабые стороны для конкретной цели, а затем разрабатывать свой новый язык, чтобы включать в себя все сильные стороны / великие идеи других и избегать слабых сторон других в той же степени, что и другие. возможный. Учитесь у других успехов и неудач. (Те, кто игнорирует историю, обречены ее повторять)

Как отмечалось в других ответах, создание нового языка никоим образом не связано с эффективностью реализации других языков. Новые языки и новые реализации одного и того же языка обычно заменяют, а не расширяют предыдущие примеры. Даже производительность одной реализации языка по сравнению с другой может значительно отличаться: рассмотрите компиляторы Borland C ++, которые вращались вокруг других компиляторов C ++ той же эпохи, или сравните производительность среды выполнения виртуальной машины Java 1.0 с последующими реализациями, которые добавили производительность повышается, как компилятор горячей точки.

В качестве примера использования автомобиля: поскольку Ford Model T был автомобилем с изрыганным черным дымом, а Tesla Roadster - автомобилем, выпущенным после Model T, верно ли, что Tesla Roadster также должен изрыгать черный дым просто потому, что это машина и пришла она после Model T? Конечно, нет. Тесла - это совсем другая реализация идеи автомобиля. Его дизайн отражает многое из того, что было изучено с момента создания модели Т, но это не модель Т.

...