RIP Dennis Ritchie (1941-2011)
Oct. 14th, 2011 05:39 pmНа этой неделе умер один из моих кумиров, изобретатель языка C и один из авторов операционной системы Unix, Деннис Ритчи.
Обычным пользователям его имя неизвестно. Но профессионалы-компьютерщики знают, что трудно найти кого-то из живущих людей, кто больше Ритчи повлиял на компьютерный мир, а через него и на весь мир вокруг нас. Написанные на языке C программы управляют практически всеми компьютерами в современном мире, включая сюда отнюдь не только коробку под вашим столом или ноутбук у вас на коленях, но и телефон, на котором вы проверяете почту, и микроконтроллер, который управляет вашей микроволновой печью. Любая современная операционная система - ядро компьютера, которое организует запуск и нормальную работу всех программ - написана на C или потомке этого языка; бесчисленное количество самих программ-приложений - тоже. А книга о языке C, которую Ритчи написал в соавторстве с Керниганом, и 35 лет спустя остается эталоном учебника программирования - по полноте, ясности и одновременно краткости изложения - с которым сравнивают все другие.
Особенностью языка C было то, что он является языком программирования "высокого уровня", т.е. позволяет программисту писать программу, не заботясь об особенностях устройства каждой отдельной модели компьютера, процессора, итд.; - и в то же самое время позволяет программисту, когда ему это действительно нужно, использовать эти особенности и подстраиваться под них. Программисты называют это свойство C "близость к железу", подразумевая под железом метафорически устройство и особенности конкретной модели компьютера. До Ритчи практически единственным языком, "близким к железу", был ассемблер - язык машинных инструкций, собственно указывающих компьютеру, что делать - очень подробный язык, язык "низкого уровня", а главное - разный для разных моделей компьютеров. До Ритчи считалось само собой разумеющимся, что операционная система, организующая работу компьютера, должна быть написана на ассемблере отдельно и заново для каждой модели - и то же самое считалось необходимым для любой программы, которой нужно было пользоваться "близостью к железу". Были, конечно, языки "высокого уровня", но на них можно было решать задачи тоже только "высокого уровня", а чтобы сделать что-нибудь близкое к железу, но необходимое для пользователя, переходили на ассемблер.
Ритчи сделал что-то, что казалось очевидно безнадежным - он нашел золотую середину, изобрел язык программирования, который может одновременно абстрагироваться от конкретных деталей "железа", и подлаживаться под них, когда необходимо. Над этим не работало много других специалистов - потому, что почти никто не мог представить, что это должно быть именно так; а он представил и сделал. Изобретенный им язык лег в основу всего "системного" (т.е. "близкого к железу") программирования, и остается его основой до сих пор. А изобретенная им вместе с Томпсоном операционная система Unix до сих пор (пройдя сквозь много вариантов и версий) используется на значительной части компьютеров в мире, а также оказала огромное влияние на все остальные современные операционные системы.
Ритчи не просто создал что-то новое и полезное, чего раньше не было (к чему стремится любой программист); его изобретения помогли миллионам других людей добиться этой цели.
Обычным пользователям его имя неизвестно. Но профессионалы-компьютерщики знают, что трудно найти кого-то из живущих людей, кто больше Ритчи повлиял на компьютерный мир, а через него и на весь мир вокруг нас. Написанные на языке C программы управляют практически всеми компьютерами в современном мире, включая сюда отнюдь не только коробку под вашим столом или ноутбук у вас на коленях, но и телефон, на котором вы проверяете почту, и микроконтроллер, который управляет вашей микроволновой печью. Любая современная операционная система - ядро компьютера, которое организует запуск и нормальную работу всех программ - написана на C или потомке этого языка; бесчисленное количество самих программ-приложений - тоже. А книга о языке C, которую Ритчи написал в соавторстве с Керниганом, и 35 лет спустя остается эталоном учебника программирования - по полноте, ясности и одновременно краткости изложения - с которым сравнивают все другие.
Особенностью языка C было то, что он является языком программирования "высокого уровня", т.е. позволяет программисту писать программу, не заботясь об особенностях устройства каждой отдельной модели компьютера, процессора, итд.; - и в то же самое время позволяет программисту, когда ему это действительно нужно, использовать эти особенности и подстраиваться под них. Программисты называют это свойство C "близость к железу", подразумевая под железом метафорически устройство и особенности конкретной модели компьютера. До Ритчи практически единственным языком, "близким к железу", был ассемблер - язык машинных инструкций, собственно указывающих компьютеру, что делать - очень подробный язык, язык "низкого уровня", а главное - разный для разных моделей компьютеров. До Ритчи считалось само собой разумеющимся, что операционная система, организующая работу компьютера, должна быть написана на ассемблере отдельно и заново для каждой модели - и то же самое считалось необходимым для любой программы, которой нужно было пользоваться "близостью к железу". Были, конечно, языки "высокого уровня", но на них можно было решать задачи тоже только "высокого уровня", а чтобы сделать что-нибудь близкое к железу, но необходимое для пользователя, переходили на ассемблер.
Ритчи сделал что-то, что казалось очевидно безнадежным - он нашел золотую середину, изобрел язык программирования, который может одновременно абстрагироваться от конкретных деталей "железа", и подлаживаться под них, когда необходимо. Над этим не работало много других специалистов - потому, что почти никто не мог представить, что это должно быть именно так; а он представил и сделал. Изобретенный им язык лег в основу всего "системного" (т.е. "близкого к железу") программирования, и остается его основой до сих пор. А изобретенная им вместе с Томпсоном операционная система Unix до сих пор (пройдя сквозь много вариантов и версий) используется на значительной части компьютеров в мире, а также оказала огромное влияние на все остальные современные операционные системы.
Ритчи не просто создал что-то новое и полезное, чего раньше не было (к чему стремится любой программист); его изобретения помогли миллионам других людей добиться этой цели.
no subject
Date: 2011-10-14 03:47 pm (UTC)no subject
Date: 2011-10-14 03:50 pm (UTC)no subject
Date: 2011-10-14 03:52 pm (UTC)no subject
Date: 2011-10-14 04:53 pm (UTC)курица вс яйцо
Date: 2011-10-14 04:59 pm (UTC)Вот ещё отличная статья
Date: 2011-10-14 05:01 pm (UTC)http://www.wired.com/wiredenterprise/2011/10/thedennisritchieeffect/
no subject
Date: 2011-10-14 05:11 pm (UTC)no subject
Date: 2011-10-14 05:17 pm (UTC)Re: курица вс яйцо
Date: 2011-10-14 05:20 pm (UTC)Re: курица вс яйцо
Date: 2011-10-14 05:23 pm (UTC)Этого я уже совсем не понимаю.
Re: курица вс яйцо
Date: 2011-10-14 05:30 pm (UTC)Еще интересней, когда пишут компилятор для совсем нового языка. Тогда первый компилятор пишут на каком-то другом языке (в случае C это был ассемблер), затем пишут этот компилятор уже на новом языке, затем первым компилятором его компилируют.
По этому поводу очень интересно коллега Ричи однажды выступил: http://cm.bell-labs.com/who/ken/trust.html
no subject
Date: 2011-10-14 05:34 pm (UTC)no subject
Date: 2011-10-14 05:44 pm (UTC)no subject
Date: 2011-10-14 06:10 pm (UTC)no subject
Date: 2011-10-14 07:03 pm (UTC)Re: курица вс яйцо
Date: 2011-10-14 07:22 pm (UTC)- берём ассемблер А (для конкретной среды исполнения Е - железо и ось)
- пишем самый примитивный компилятор С на ассемблере и компилируем посредством А
- получаем С.Е - готовый компилятор, работающий в среде Е
- пишем компилятор С на С (абстрагируясь от среды, насколько это возможно)
- компилируем посредством С.Е, настраивая его для среды Е* (если Е!=Е*, эта фаза называется кросс-компиляцией)
- получаем готовый компилятор С.Е*, дальше забываем про его ассемблерную версию
- теперь мы можем компилировать компилятор в любых средах для любых других сред, а также писать на С новые версии компилятора, исправленные и дополненные :)
[Под "самым примитивным" я подразумеваю, что здесь не стоит задача делать оптимизации, и даже не стоит задача поддержать всю спецификацию языка - достаточно ровно то подмножество, на котором будет написан сам компилятор.]
В некотором роде bootstrapping похож на quine: программа, порождающая саму себя (непосредственно в машинных кодах). :)
no subject
Date: 2011-10-14 07:39 pm (UTC)no subject
Date: 2011-10-14 07:51 pm (UTC)PL/M
no subject
Date: 2011-10-14 08:07 pm (UTC)Re: курица вс яйцо
Date: 2011-10-14 08:15 pm (UTC)этого юникса из его исходников на C можно создать, запустив кросс-компилятор на совсем другой машине и возможно даже другой операционной системе.
Re: курица вс яйцо
Date: 2011-10-14 08:22 pm (UTC)но кросс-компиляция намного быстрее и проще
no subject
Date: 2011-10-14 08:24 pm (UTC)Re: курица вс яйцо
Date: 2011-10-14 09:29 pm (UTC)no subject
Date: 2011-10-14 10:36 pm (UTC)no subject
Date: 2011-10-14 10:37 pm (UTC)*(unsigned char *)0xF7239900 |= 0x20;