Главная
Блог разработчиков phpBB
 
+ 17 предустановленных модов
+ SEO-оптимизация форума
+ авторизация через соц. сети
+ защита от спама

Интервью с Бьерном Страуструпом о языке C

Anna | 24.06.2014 | нет комментариев
image
Считанные часы остались до Нового 2014-го года, в котором в числе прочего каждому нам был обещан новейший эталон C 14. Впрочем он будет не огромным независимым обновлением, а лишь доработкой C 11, багфиксом, тот, что придаст нынешней версии языка законченный вид. На этом фоне Уильям Вонг (англ. William Wong) от источника electronicdesign.com взял интервью у Бьерна Страуструпа(дат. Bjarne Stroustrup), создателя C . Беседа затронула несколько тем: от истории разработки C и особенностей эталона C 11 до задачи обучения этому языку программирования.Некоторые термины и представления из этого интервью мне прежде встречались экстраординарно в английском варианте (скажем, словечко embedded в контексте IT), и мне не неизменно получалось обнаружить общепризнанный перевод, в котором я не был бы уверен сам. В таких и других неоднозначных случаях я указывал английский вариант термина в скобках либо совсем оставлял его непереведенным.

В конце статьи приведены ссылки и мои примечания. Обладатели указанного источника вежливо позволили мне перевести это интервью и опубликовать перевод на Прогре, впрочем настояли, Дабы я указал первоисточник определенным методом. Не обессудьте. Сразу позже ссылки идет собственно перевод.

Translated from an article produced by Electronic Design, October 29, 2013, electronicdesign.com/dev-tools/interview-bjarne-stroustrup-discusses-c


На сегодняшний день языки программирования C и C являются самыми актуальными в области встраиваемых (embedded) систем, а также в задачах построения платформ для сторонних приложений. Автором C является Бьерн Страуструп. Он и доныне принимает энергичное участие в разработке эталонов этого языка программирования, в том числе последнего — C 11. Многое об этом языке он писал в своих книгах, скажем, в“Programming: Principles and Practice using C ” . Бьерн Страуструп вежливо согласился ответить на несколько вопросов о самом языке C и о его разработке.

Как вы пришли к разработке C ?

Я работал над планом, тот, что дозволил бы поделить ядро Unix на несколько частей, исполняемых мультипроцессором либо высокопроизводительной локальной сетью. И мне понадобился инструмент, тот, что дозволил бы трудиться с аппаратной частью, обеспечивал бы отменную продуктивность для задач системного программирования, а также мог бы применяться для работы над системой со трудной архитектурой. Впрочем на тот момент (1979-1980 гг.) ни один из существующих языков программирования не удовлетворял каждому трем условиям сразу. Следственно я решил добавить к C доктрину классов — подобно той, что была в Simula. Сначала я реализовал проверки и реформирования доводов функций (позднее они стали прототипами функций), конструкторы, деструкторы, а также простейшее наследование. Первая версия языка C именовалась «C with Classes». Кстати, любознательно, что для примитивной поддержки обобщенного программирования (generic programming) в ней применялись макросы. В последующем я осознал, что такой подход не обеспечивает надлежащей масштабируемости, и взамен макросов добавил образцы.

Я совершенствовал архитектуру и реализацию языка C следующие несколько лет, вплотную до его торгового релиза в 1985 году. В то время продуктивность и скорость обращения к аппаратной части были дюже главными колляциями, однако, как и сегодня. Я счел нужным реализовать в C все вероятности языка C, причем сделать их не менее результативными. Скажем, на ранних этапах я нашел, что конструкции, используемые для реализации конструктора копирования, занимали на 3% огромнее памяти, чем в C. Я решил, что так быть не должно, и к концу недели все поправил. Дабы программистам не пришлось отказываться от классов без какой-либо потери процессорного времени, были также добавлены встраиваемые (inline) функции. Я вообще был уверен в том, что используемые средства обязаны быть не только колоритными, но и довольно результативными, Дабы их дозволено было применять в приложениях с самыми высокими требованиями.

К чему вы тяготились при разработке языка C ?

К тому, Дабы C мог трудиться с аппаратной частью как минимум настоль же результативно, как это делал C. Кроме того, мне показалась крайне главной доктрина абстракций, которая дозволила бы программистам выражать свои самые храбрые идеи без каких-либо временных расходов либо утрат памяти, с которыми они скорее каждого столкнулись бы в независимой реализации.

Это требование влечет за собой применение суровой статической типизации, в различие от слабой типизации в C.

Язык C разрабатывался для людей, занимающихся программированием серьезно, то есть, для специалистов своего дела. Он может применяться — и применяется — новичками, но Зачастую это приводит к различным недоразумениям и претензиям на то, что не всякому дано обучиться программировать на C и что есть вещи, которые дюже трудно реализовать на этом языке. Разумеется, не существует универсального языка программирования для каждого и каждая, C и не создавался таким. Впрочем данный язык крайне результативен в тех областях, для которых он был разработан, как то системное программирование либо программирование программ с серьезными ограничениями на источники компьютера. C нет равных там, где его мощь подлинно необходима, и меня не крепко заботит, что взамен этого дозволено написать простенькое веб-приложение на JavaScript либо Ruby. C по своей сути не предуготовлен для решения задач средней трудности, с нестрогими требованиями к продуктивности и безопасности программы, равно как он не предуготовлен для применения не дюже опытными программистами со средненькими навыками разработки. Безоговорочно, он может применяться в таких условиях и сегодня это обширно практикуется, но существует уйма других языков программирования, которые подошли бы для этого гораздо отменнее.

О ключевых тезисах, которых я придерживался при разработке C , я рассказал в своей книге«The Design and Implementation of C » и в 2-х статьях, написанных для конференции «History Of Programming Languages». Если лаконично, то я ставил такие цели:

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

Если в всеобщем, C призван подмогнуть в написании добротного программного кода. Высокопрофессиональные программисты в реальной жизни сталкиваются со трудными задачами, и данный язык программирования во многом упрощает их жизнь.

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

Вы принимали участие в разработке эталона языка C с самого начала. Крепко ли он изменился со временем? Кто занимается разработкой новых эталонов?

Трудно сказать. Разработка формального эталона — это дюже непростое и, как правило, муторное дело. Им занимаются люди с огромным навыком, впрочем все они — эксперты по абсолютно различным областям программирования, и всякий имеет свое видение эталона. Так что прийти к цельному суждению может быть трудно и убыточно по времени, но это нужно: удовлетворить каждому требованиям сразу не получится, а принуждать программистов пользоваться твердо новыми инструментами невозможно. Прогресс происходит только когда в эталон включаются дополнения, значимость которых общепризнана. Невозможно принимать участие в комитете и при этом непрерывно зацикливаться на мелочах. Необходимо уметь видеть всю картину в целом и приходить к всеобщему суждению с остальными. По моим подсчетам, в комитет входит около сотни организаций и, может, огромнее трехсот собственно разработчиков. Это в два-три раза огромнее, чем было прежде. Только на последних собраниях присутствовало около ста человек.

В 2014 году мы планируем выпустить новейший эталон, C 14. В нем будут минимальные нововведения, а также несколько исправлений, за их надобность теснее проголосовало множество комитета. Я рассчитываю, что в 2014 году все теснее будут применять C 14, а позже этого мы планируем выпустить C 17 в 2017 году. Но это обновление будет теснее гораздо существенней, так что здесь трудно судить о сроках.

Комитет по разработке эталонов ISO C сам по себе не распредполагает какими-либо источниками, будь то деньги либо штатные разработчики. Он всецело основан на средствах его участников. Скажем, Дабы входить в состав комитета, они платят 1200 баксов годично. Каждый может заявить, что, мол, в C нет типичной библиотеки для создания графических интерфейсов либо типичной поддержки параллелизма задач. Да, мы в курсе. Чем жалиться, отменнее бы помогли довести эти задачи до ума. У нас дюже немного прикладных программистов, и Зачастую получается так, что нововведения создаются в угоду интересов одного определенного разработчика.

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

Совсем нет. Если вы придерживаетесь C-жанра программирования, то C окажется нисколько не труднее C, причем он тоже подходит для разработки под аппаратное обеспечение. И уж верно C гораздо результативнее, чем C. Я никогда не видел такой программы на C , которую дозволено было бы так переписать на C, что у нее будет меньший объем кода, она будет продуктивней, она будет отменнее сопровождаться — в всеобщем, будет результативнее. Не верю, что такое допустимо.

Миф о том, что «C отменнее C », сбивает с толку дюже многих начинающих программистов. Так, скажем, когда они сталкиваются с задачами, они непрерывно пытаются что-то придумывать и использовать абсолютно нетривиальные вещи, а не применять примитивные и сильные инструменты. В конце концов, у них получается дюже трудный и замороченный код, тот, что они в силу своих заблуждений принимают за стандарт. Каждая эта обстановка меня легко удивляет. Если человек берется за что-то, а ему непрерывно твердят, что это дюже трудно и напрасно, то у него в результате ничего и не получится. Исключительная вразумительная повод, из-за которой, как я знаю, применяют чистый C, а не C , — это ограниченные вероятности определенной платформы.

Впрочем студентов и вообще новичков в постижении C невозможно винить, потому что их ошибки Зачастую зарождаются в процессе освоения университетского курса программирования. Некогда, лет десять назад, мне довелось вести его у первокурсников. Я заглянул в учебники — и легко поразился: взамен внятных и примитивных в применении конструкций C в книгах в начале рассматривалась куча различных неочевидных мелочей языка C, а инструменты С преподносились как что-то дюже трудное. Это не отпугивало только тех, кто хотел серьезно заниматься программированием.

Вот серьезно, скажите: неужто вектора из стандартной библиотеки труднее массивов из C? Либо, скажем, отчего студентов приучают к функции qsort(), правда sort() и результативнее, и универсальнее? У C больше суровая типизация, чем у C, за счет этого объектный код обрабатывается стремительней.

Еще в учебниках Зачастую описывают C как провалившуюся попытку создания чистого объектно-ориентированного языка программирования. Такое заявление как правило иллюстрируется целой простыней кода, в которой фактически каждая зодчество разбита на запутанную иерархию классов, унаследованных друг от друга. В результате получается абсолютно не характерная для C связанность. Такой код напоминает скорее программу на Java, и, что самое грустное, работает он традиционно медлительно.

Мне тоже не нравится C таким, каким его представляют авторы тех учебников. В результат я написал свою книгу для студентов и самоучек — «Programming: Principles and Practice using C ». Для ее постижения навык программирования не непременен, впрочем она вызвала интерес и среди опытных разработчиков. Только если вам необходим легко обзор C 11, то эта книга будет достаточно огромный. Для этой цели я порекомендовал бы книгу «A Tour of C ». В ней описаны все ключевые моменты ISO C и стандартной библиотеки каждого на 180 страницах. Эталон C 11 всецело поддерживается компиляторами Clang и GCC, Отчасти — Microsoft C и многими другими, правда, опасаюсь, на менее знаменитых платформах он может выполняться некорректно.

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

Для работы с потоками мне непрерывно доводилось пользоваться сторонними библиотеками. Они были отменны, но последние 15 лет я хотел добавить поддержку потоков именно в эталон, чего мы наконец и достигли. С точки зрения параллельного программирования ключевые новшества C 11 состоят в организации памяти (которую, к сл!

void test()
{
string m {"Mary had a little lamb"};

for (const auto p : find_all(m,'a'))            // p is a char*
    if (*p!='a')
        cerr << "string bug!\n";

vector<string> v {"Mary”, “lamb", “Mary”, “mary”, “wolf”};

for (const auto p : find_all(v,”Mary”))    // p is a string*
    if (*p!=”Mary”)
        cerr << "vector<string> bug!\n";
}

Испробуйте написать тот же код без использования образцов и новшеств C 11 и сравните итоги.


На эту тему рекомендую прочесть «A Tour of C », за деталями же обратитесь к четвертому изданию книги«The C Programming Language».

Какие Зачастую встречаемые у современных C -программистов ошибки вы можете подметить?

Они отчего-то Зачастую думают, что обязаны выбирать между результативным и изысканным кодом. Они либо ограничивают себя низкоуровневыми вероятностями языка (ради «результативности»), либо выстраивают большую архитектуру «на все случаи жизни» (предполагая такой код крайне изящным). На мой же взор, идеал состоит в сочетании максимальной результативности и особенно оптимальной архитектуры. Так происходит, когда решение программиста самым оптимальным образом удовлетворяет условиям задачи, но это, разумеется, не неизменно допустимо. Редко получается добиться этого с первой попытки, но так случается достаточно Зачастую, насколько это допустимо для идеала.

Раньше чем отказываться от вероятностей C , как бы классов либо образцов, испробуйте сперва разглядеть их базовое использование и попрактиковаться. Обоснованный выбор приведет вас гораздо дальше, чем шаги, предпринятые наугад. Не обязывайте себя сооружать большие иерархии классов либо писать замороченный мета-код с поддержкой образцов: некоторые из самых сильных вероятностей C дюже примитивны. Наилучший путь к написанию результативного кода — не усложнять его без необходимости.

Чем вы любите заниматься в свободное время?

Мне увлекательно путешествовать по различным местам. Еще я люблю выходить на пробежки. Также я увлекаюсь фотографией, мне нравится слушать музыку и читать — художественную и историческую литературу. Время усердствую проводить с родными и близкими. Само собой, программирование мне тоже порой доставляет много удовольствия, но вопрос, должно быть, не о работе. Мне нравится заниматься изысканиями, собирать трудные программные системы. Как кто-то сказал, «не могу уверовать, что мне за это еще и платят!»

Примечания переводчика
  1. «Программирование. Тезисы и практика применения C » в переводе Дмитрия Клюшина, издательство «Вильямс». назад
  2. О типизации см. статью Ликбез по типизации в языках программированияназад
  3. Видимо, тут все-таки имеется в виду книга «The Design and Evolution of C » — «Дизайн и эволюция C » в переводе издательства «Питер». назад
  4. Модель памяти C 11 детально рассмотрена в статье Lock-free конструкции данных. Основы: Модель памятиназад
  5. Короткий обзор move semantics в C 11 приведен в статье Move semantics в C 11 и STL-контейнерыназад
  6. В целом ключевые нововвдения C 11 (в том числе и вышеупомянутые) освещены в статье Десять вероятностей C 11, которые должен применять всякий C разработчик.
  7. В русском переводе Николая Мартынова, издательство «Бином», книга именуется «Язык программирования C », впрочем я сумел разыскать только перевыпуск бородатого, неактуального издания 2001-го года. Других переводов не обнаружил совсем. назад

Источник: programmingmaster.ru

Оставить комментарий
Форум phpBB, русская поддержка форума phpBB
Рейтинг@Mail.ru 2008 - 2017 © BB3x.ru - русская поддержка форума phpBB