Тази статия е огледална статия за машинен превод, моля, кликнете тук, за да преминете към оригиналната статия.

Изглед: 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 way!

Bell Labs е пълен с таланти, а някои други големи играчи се заклеха да открият тази уязвимост, прочетоха C-кодa на Unix и най-накрая намериха задната врата за вход, след като я почистиха, компилираха 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 е написан?
Публикувано в 1.10.2019 г. 23:54:34 ч. |
На какъв език самият C е написан?
Отричане:
Целият софтуер, програмни материали или статии, публикувани от Code Farmer Network, са само за учебни и изследователски цели; Горното съдържание не трябва да се използва за търговски или незаконни цели, в противен случай потребителите ще понесат всички последствия. Информацията на този сайт идва от интернет, а споровете за авторски права нямат нищо общо с този сайт. Трябва напълно да изтриете горното съдържание от компютъра си в рамките на 24 часа след изтеглянето. Ако ви харесва програмата, моля, подкрепете оригинален софтуер, купете регистрация и получете по-добри услуги. Ако има нарушение, моля, свържете се с нас по имейл.

Mail To:help@itsvse.com