Я хотел подобрать это:
Почти все существующие языки
реализовано / написано в некоторых небольших
количество языков низкого уровня? За
Например, большинство языков написано на
C? C ++ написан на C?
Насколько я знаю, на практике почти все языки, которые возникли после C, написаны на C из-за огромной популярности C в течение определенного периода времени, пока они не будут готовы реализовать свои собственные компиляторы. Большинство языков, которые компилируются в нативный код, реализуют сами себя, то есть современные компиляторы C ++ написаны на C ++. Это достигается путем компиляции нового компилятора с предыдущей версией компилятора, которая, как известно, является хорошей, - компилятором LKG или «Last Known Good». Я точно знаю, что компилятор Visual C ++ сделан таким образом, и я вспоминаю, что есть IDE на Haskell, которые также выполняются, и даже PROLOG. Первоначальный компилятор C ++ был написан на C-, но, поскольку C ++ стал мощным языком общего назначения, люди написали на нем компиляторы C ++.
Конечно, этот процесс невозможен для языков, которые не компилируются с нативным кодом, так как они всегда должны иметь некоторый базовый интерпретатор или виртуальную машину для выполнения своего кода, который не может быть написан на этом языке, что делает невозможным аннулирование нативных языков с управляемыми или интерпретированными языками.
Есть ли какая-то связь между
отношение реализации и
понятие подмножества / надмножества
языки?
Да, есть. Если вы внедряете C #, зачем отказываться от многолетнего опыта C ++ по быстрому вызову полиморфных функций? Проще всего было бы просто вернуться к этой реализации, и, насколько я понимаю, в C #, работающем на платформе .NET, именно так и происходит - они используют реализацию, взятую в основном из C ++. Если вы реализуете языковую функцию, которая уже существует на определенном языке, вы теряете опыт и инновации, если внедряете новую реализацию с нуля. Конечно, это отличается, если эти реализации являются частными или что-то в этом роде, но в целом.
Есть ли другие аспекты, которые
охарактеризовать связь между
языки?
Да, есть. Наиболее очевидным является синтаксический - рассмотрим синтаксические отношения между C, C ++, C # и Java, хотя Java и C # явно не являются надмножествами C. Затем рассмотрим подход к основным проблемам в разработке программного обеспечения. Например, Java и C # являются статически типизированными языками для сборки мусора, основанными на виртуальных машинах. Тогда вы могли бы рассмотреть ошибки дизайна. На мой взгляд, ошибки проектирования - это один из самых больших намеков на то, что два языка гораздо более тесно связаны, чем они должны быть. Здесь вы можете снова рассмотреть Java и C #. Ковариантные массивы сломаны. Giraffe[]
не является Animal[]
, но и Java, и C # допускают преобразование. Это явная ошибка проектирования, но оба языка имеют ее, что является признаком того, что они слишком тесно связаны.
Конечно, C ++ занимает здесь немного уникальную позицию, я не знаю ни одного языка, который бы непосредственно заменял другой язык, подобный этому, и C / C ++ - самая близкая вещь, которую вы когда-либо найдете в надмножестве языков. , Комитет по стандартизации C ++ по-прежнему стандартизирует функции в C ++ исключительно для обеспечения совместимости с C99.