avva: (Default)
[personal profile] avva
На этой неделе умер один из моих кумиров, изобретатель языка C и один из авторов операционной системы Unix, Деннис Ритчи.

Обычным пользователям его имя неизвестно. Но профессионалы-компьютерщики знают, что трудно найти кого-то из живущих людей, кто больше Ритчи повлиял на компьютерный мир, а через него и на весь мир вокруг нас. Написанные на языке C программы управляют практически всеми компьютерами в современном мире, включая сюда отнюдь не только коробку под вашим столом или ноутбук у вас на коленях, но и телефон, на котором вы проверяете почту, и микроконтроллер, который управляет вашей микроволновой печью. Любая современная операционная система - ядро компьютера, которое организует запуск и нормальную работу всех программ - написана на C или потомке этого языка; бесчисленное количество самих программ-приложений - тоже. А книга о языке C, которую Ритчи написал в соавторстве с Керниганом, и 35 лет спустя остается эталоном учебника программирования - по полноте, ясности и одновременно краткости изложения - с которым сравнивают все другие.

Особенностью языка C было то, что он является языком программирования "высокого уровня", т.е. позволяет программисту писать программу, не заботясь об особенностях устройства каждой отдельной модели компьютера, процессора, итд.; - и в то же самое время позволяет программисту, когда ему это действительно нужно, использовать эти особенности и подстраиваться под них. Программисты называют это свойство C "близость к железу", подразумевая под железом метафорически устройство и особенности конкретной модели компьютера. До Ритчи практически единственным языком, "близким к железу", был ассемблер - язык машинных инструкций, собственно указывающих компьютеру, что делать - очень подробный язык, язык "низкого уровня", а главное - разный для разных моделей компьютеров. До Ритчи считалось само собой разумеющимся, что операционная система, организующая работу компьютера, должна быть написана на ассемблере отдельно и заново для каждой модели - и то же самое считалось необходимым для любой программы, которой нужно было пользоваться "близостью к железу". Были, конечно, языки "высокого уровня", но на них можно было решать задачи тоже только "высокого уровня", а чтобы сделать что-нибудь близкое к железу, но необходимое для пользователя, переходили на ассемблер.

Ритчи сделал что-то, что казалось очевидно безнадежным - он нашел золотую середину, изобрел язык программирования, который может одновременно абстрагироваться от конкретных деталей "железа", и подлаживаться под них, когда необходимо. Над этим не работало много других специалистов - потому, что почти никто не мог представить, что это должно быть именно так; а он представил и сделал. Изобретенный им язык лег в основу всего "системного" (т.е. "близкого к железу") программирования, и остается его основой до сих пор. А изобретенная им вместе с Томпсоном операционная система Unix до сих пор (пройдя сквозь много вариантов и версий) используется на значительной части компьютеров в мире, а также оказала огромное влияние на все остальные современные операционные системы.

Ритчи не просто создал что-то новое и полезное, чего раньше не было (к чему стремится любой программист); его изобретения помогли миллионам других людей добиться этой цели.
Page 1 of 3 << [1] [2] [3] >>

Date: 2011-10-14 03:47 pm (UTC)
From: [identity profile] hervejoncour.livejournal.com
книжка Риччи по C читана года так в 90, кажется .... классная была книжка.

Date: 2011-10-14 03:50 pm (UTC)
From: [identity profile] tetushka.livejournal.com
Жаль. Его книга была самой тоненькой из всех книг по программированию, которые мне попадались в жизни - и самой лучшей, особенно тогда, в начале.

Date: 2011-10-14 03:52 pm (UTC)

Date: 2011-10-14 04:53 pm (UTC)
From: [identity profile] ygam.livejournal.com
А кто тебя на самолете катал, я забыл?

курица вс яйцо

Date: 2011-10-14 04:59 pm (UTC)
From: [identity profile] french-man.livejournal.com
Толя, вот есть нечто, чего я не понимаю. Все говорят, что юникс написан на Си. Но чтоб оттранслировать этот написанный на си юникс, нужно его погрузить в какую-то уже готовую среду. Эта среда юниксом быть не может. Что она тогда?

Вот ещё отличная статья

Date: 2011-10-14 05:01 pm (UTC)
From: [identity profile] dmarck.livejournal.com
"Dennis Ritchie: The Shoulders Steve Jobs Stood On"
http://www.wired.com/wiredenterprise/2011/10/thedennisritchieeffect/

Date: 2011-10-14 05:11 pm (UTC)
From: [identity profile] avva.livejournal.com
Томпсон.

Date: 2011-10-14 05:17 pm (UTC)

Re: курица вс яйцо

Date: 2011-10-14 05:20 pm (UTC)
From: [identity profile] dimrub.livejournal.com
Это называется cross compilation: когда компилятор для некоего языка, который должен производить машинный код для архитектуры X, сам бежит на архитектуре Y. Всегда, когда разрабатывают новую архитектуру или новую операционку, сначала пишут кросс-компилятор (затем иногда компилируют им самого его, и полученный код является уже не кросс- а нативным компилятором).

Re: курица вс яйцо

Date: 2011-10-14 05:23 pm (UTC)
From: [identity profile] french-man.livejournal.com
компилируют им самого его

Этого я уже совсем не понимаю.

Re: курица вс яйцо

Date: 2011-10-14 05:30 pm (UTC)
From: [identity profile] dimrub.livejournal.com
Компилятор - это программа как любая другая программа. В частности, ее можно скомпилировать. Соответственно, если нам нужен компилятор, который бежит на архитектуре X и генерирует код для нее же (а у нас есть только компилятор, который генерирует код для архитектуры X, который бежит на архитектуре Y, назовем его C(Y->X)), мы берем код компилятора, и компилируем его имеющимся компилятором C(Y->X). Получившийся бинарный код - это компилятор C(X->X).

Еще интересней, когда пишут компилятор для совсем нового языка. Тогда первый компилятор пишут на каком-то другом языке (в случае C это был ассемблер), затем пишут этот компилятор уже на новом языке, затем первым компилятором его компилируют.

По этому поводу очень интересно коллега Ричи однажды выступил: http://cm.bell-labs.com/who/ken/trust.html

Date: 2011-10-14 05:34 pm (UTC)
From: [identity profile] amigofriend.livejournal.com
Да, в общем-то Ритчи для компьютеров был как Лес Пол для музыки. RIP

Date: 2011-10-14 05:44 pm (UTC)
From: [identity profile] burrru.livejournal.com
Очень хорошие и правильные слова. Светлая память.

Date: 2011-10-14 06:10 pm (UTC)
From: [identity profile] sinm.livejournal.com
Доступно написано. Кажется, что немало времени потратил на этот текст. Спасибо.

Date: 2011-10-14 07:03 pm (UTC)

Re: курица вс яйцо

Date: 2011-10-14 07:22 pm (UTC)
From: [identity profile] kodt-rsdn.livejournal.com
А это уже называется bootstrapping (http://en.wikipedia.org/wiki/Bootstrapping_%28compilers%29) (или раскрутка (http://ru.wikipedia.org/wiki/%D0%A0%D0%B0%D1%81%D0%BA%D1%80%D1%83%D1%82%D0%BA%D0%B0_%D0%BA%D0%BE%D0%BC%D0%BF%D0%B8%D0%BB%D1%8F%D1%82%D0%BE%D1%80%D0%B0).

- берём ассемблер А (для конкретной среды исполнения Е - железо и ось)
- пишем самый примитивный компилятор С на ассемблере и компилируем посредством А
- получаем С.Е - готовый компилятор, работающий в среде Е
- пишем компилятор С на С (абстрагируясь от среды, насколько это возможно)
- компилируем посредством С.Е, настраивая его для среды Е* (если Е!=Е*, эта фаза называется кросс-компиляцией)
- получаем готовый компилятор С.Е*, дальше забываем про его ассемблерную версию
- теперь мы можем компилировать компилятор в любых средах для любых других сред, а также писать на С новые версии компилятора, исправленные и дополненные :)

[Под "самым примитивным" я подразумеваю, что здесь не стоит задача делать оптимизации, и даже не стоит задача поддержать всю спецификацию языка - достаточно ровно то подмножество, на котором будет написан сам компилятор.]

В некотором роде bootstrapping похож на quine: программа, порождающая саму себя (непосредственно в машинных кодах). :)

Date: 2011-10-14 07:39 pm (UTC)
From: [identity profile] oleg96345.livejournal.com
Странно, неужели никто в то время не сделал какой-то другой вариант такого языка, с такими же достоинствами?

Date: 2011-10-14 07:51 pm (UTC)
From: [identity profile] ygam.livejournal.com
PL/360, основанный на безумном языке PL/I.
PL/M

Date: 2011-10-14 08:07 pm (UTC)

Re: курица вс яйцо

Date: 2011-10-14 08:15 pm (UTC)
From: [identity profile] avva.livejournal.com
Дима верно говорит. Основная идея в том, что машинный код
этого юникса из его исходников на C можно создать, запустив кросс-компилятор на совсем другой машине и возможно даже другой операционной системе.

Re: курица вс яйцо

Date: 2011-10-14 08:22 pm (UTC)
From: [identity profile] norian.livejournal.com
есть ещё bootstrap - сначала пишецца маленькая часть в машкодах, потом побольше на ассемблере, потом простой компилятор, который может собрать сам себя

но кросс-компиляция намного быстрее и проще

Date: 2011-10-14 08:24 pm (UTC)
From: [identity profile] vasja-iz-aa.livejournal.com
В то время... До сих по не сделал.

Re: курица вс яйцо

Date: 2011-10-14 09:29 pm (UTC)
From: [identity profile] french-man.livejournal.com
Ну, в общем примерно так я и представлял, но думал, что там какое-то волшебство есть. Вот нет, таки все по ступенькам.

Date: 2011-10-14 10:36 pm (UTC)
From: [identity profile] malaya-zemlya.livejournal.com
Pascal, Forth

Date: 2011-10-14 10:37 pm (UTC)
From: [identity profile] ygam.livejournal.com
Forth - да.Паскаль - не низкоуровневый язык. На нем нельзя написать

*(unsigned char *)0xF7239900 |= 0x20;
Page 1 of 3 << [1] [2] [3] >>

December 2025

S M T W T F S
  123 4 56
78 9 10 11 1213
1415 1617181920
21 22 23 24 2526 27
28293031   

Most Popular Tags

Style Credit

Expand Cut Tags

No cut tags
Page generated Dec. 30th, 2025 05:21 am
Powered by Dreamwidth Studios