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

Вид: 14293|Ответ: 2

[C] Язык C настолько мощный, на каком языке он написан?

[Скопировать ссылку]
Опубликовано 28.09.2019 16:51:21 | | |
«На каком языке написана сама C?»

С другой стороны, это так: перед запуском языка C его нужно скомпилировать, так откуда взялся компилятор языка C? На каком языке она написана? Если письмо написано на самом C, сначала есть яйцо или курица?

1

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

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

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

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

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

Ладно, после такого слоя я наконец-то получил компилятор, написанный на C, что действительно проблематично.

На этом этапе компилятор C, написанный предыдущим пакетом, может быть оставлен.

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

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

2

Вот интересная легенда о компиляторе:

По легенде, Кен Томпсон, один из изобретателей Unix, с уверенностью заходил на любую Unix-машину в Bell Labs, вводил своё имя пользователя и пароль, и мог войти в root-систему!

Bell Labs полна талантов, и другие крупные специалисты поклялись найти эту уязвимость, они прочитали исходный код Unix на C и наконец нашли бэкдор для входа, после очистки бэкдора скомпилировали Unix и запустили его, но Томпсон всё равно смог войти.

Некоторые считают, что проблема может быть с компилятором, и при компиляции Unix был имплантирован бэкдор, поэтому компилятор переписали на C и снова скомпилировали Unix с новым компилятором.

Но это всё равно не работает, Томпсон всё ещё может войти через root, что очень тяжело!

Позже сам Томпсон раскрыл секрет, это был первый компилятор C, у которого возникла проблема, этот компилятор, конечно, будет имплантирован в бэкдор при компиляции исходного кода Unix, этого недостаточно, что ещё лучше — если вы пишете новый компилятор на языке C, его обязательно нужно скомпилировать в бинарный код, что компилировать, используйте только первый компилятор, написанный Томпсоном, хорошо, компилятор, который вы написали, будет загрязнен, ваш компилятор скомпилирует Unix, Также внедрю бэкдор :-)

Кстати, я вспоминаю инцидент с XcodeGhost несколько лет назад, который просто означает, что в Xcode (скачанный с неофициальных каналов) был внедрён троянский конь, так что iOS-приложения, скомпилированные XCode, были загрязнены, и эти приложения могли использоваться хакерами для незаконных действий.

Хотя этот XCodeGhost далёк от Томпсона, он напоминает нам, что при скачивании программного обеспечения следует использовать официальные каналы, скачать с официального сайта, искать стандарт HTTPS сайта и даже проверять контрольную сумму.

3

Некоторые могут спросить: я использую Hui для написания абзаца Hello World, а кто-то может использовать его для создания сложного компилятора? Это возможно?

Конечно, когда разрабатывалось первое поколение Unix, не существовало языка C, и Кен Томпсон с Деннисом Ритчи печатали Unix на конвейерах.   Первую версию WPS написал Цю Боцзюнь на хуэй, а компилятор Turbo Pascal также был написан Андерсом на хуэй, и способности богов невозможно представить обычным людям.

Для компиляторов также возможно развивать в виде «снежного кома»:

Взяв язык C в качестве примера, первая версия может выбрать подмножество языка C, поддерживая только базовые типы данных, операторы управления процессами и вызовы функций...... Мы называем это подмножество C0.

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

Язык C0 работает, а затем расширяем это подмножество, добавляя структуры, указатели ...... и вызывая новый язык C1.

Кто пишет компилятор для языка C1?   Естественно, это C0.

Когда C1 работает, снова расширяйте функции языка, пишите компилятор на C1 и получайте C2.

Затем есть C3, C4......  Наконец, вы получаете полный язык на C.

Этот процесс называется bootstrapping, а на китайском — bootstrapping.





Предыдущий:Новая версия .NET Core выпускает исполняемый файл с одним файлом
Следующий:Почему программисты работают бесконечно сверхурочно?
Опубликовано 29.09.2019 9:27:54 |
На каком языке написана сама C?
Опубликовано 01.10.2019 23:54:34 |
На каком языке написана сама C?
Отказ:
Всё программное обеспечение, программные материалы или статьи, публикуемые Code Farmer Network, предназначены исключительно для учебных и исследовательских целей; Вышеуказанный контент не должен использоваться в коммерческих или незаконных целях, иначе пользователи несут все последствия. Информация на этом сайте взята из Интернета, и споры по авторским правам не имеют отношения к этому сайту. Вы должны полностью удалить вышеуказанный контент с компьютера в течение 24 часов после загрузки. Если вам нравится программа, пожалуйста, поддержите подлинное программное обеспечение, купите регистрацию и получите лучшие подлинные услуги. Если есть нарушение, пожалуйста, свяжитесь с нами по электронной почте.

Mail To:help@itsvse.com