Форум программистов, компьютерный форум, киберфорум
steelcraft
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск  

Ошибка №2. Незнание истории языка.

Запись от steelcraft размещена 18.06.2024 в 17:29
Показов 2721 Комментарии 25

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

Максимально кратко приведу, что хотел бы услышать от кандидата.

В конце 1960-х сотрудник Bell Labs Кен Томпсон разрабатывал операционную систему для мини-ЭВМ PDP-7. Разумеется, на ассемблере. Спустя некоторое время с Деннисом Ритчи они перешли на другую модель - PDP-11. Эта модель была настолько другой, что даже разрядность не совпадала с предшествующей. Идеи ОС (которая в итоге превратилась в UNIX) остались в голове, а вот ассемблерный код пришлось переписывать.

Вполне логично возникла идея создать язык специально для этой цели. Он должен был обладать довольно противоречивыми свойствами: быть низкоуровневым (максимально приближенным к уровню оборудования) и весьма эффективным - и одновременно быть машинно-независимым (свойство языков высокого уровня), то есть позволять портирование кода на другие платформы. Результат мы видим даже полвека спустя: написанные на C UNIX-подобные системы довольно быстро портируются на новые платформы.

Главный вывод из вышесказанного: C позволяет писать код, максимально независимый от платформы и по этой причине легко переносимый. Но есть и плохие новости: это достигается не автоматически, нужно специально постараться. Не любой код является переносимым только лишь потому, что написан на C. Впрочем, это уже тема дальнейшей беседы.
Размещено в Без категории
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Всего комментариев 25
Комментарии
  1. Старый комментарий
    Запись от Croessmah размещена 18.06.2024 в 21:03 Croessmah вне форума
  2. Старый комментарий
    [QUOTE]язык (как инструмент) - вторичен[/QUOTE]
    это придумал не я.
    Запись от Hrethgir размещена 18.06.2024 в 21:21 Hrethgir вне форума
  3. Старый комментарий
    Цитата Сообщение от Hretgir
    это придумал не я.
    Самый важный, но также и неуловимый аспект любого инструмента - это его влияние на привычки тех, кто обучается его использованию. Если инструмент является языком программирования, это влияние, нравится нам это или нет, влияет на наши привычки мышления.
    ...
    Язык программирования - это инструмент, который оказывает глубокое влияние на наши привычки мышления.
    Об использовании языка: невозможно заточить карандаш тупым топором. Точно так же тщетно пытаться делать это с десятью тупыми топорами.
    Допускаю, что это тоже придумали не Вы.
    Запись от steelcraft размещена 19.06.2024 в 01:20 steelcraft вне форума
  4. Старый комментарий
    > Кен Томпсон разрабатывал операционную систему для мини-ЭВМ PDP-7. Разумеется, на ассемблере

    Бонусный вопрос: (вне конкурса)
    Где Кен взял ассемблер для мини-ЭВМ PDP-7 ?
    Запись от politoto размещена 19.06.2024 в 11:43 politoto вне форума
  5. Старый комментарий
    Цитата Сообщение от politoto
    > Кен Томпсон разрабатывал операционную систему для мини-ЭВМ PDP-7. Разумеется, на ассемблере

    Бонусный вопрос: (вне конкурса)
    Где Кен взял ассемблер для мини-ЭВМ PDP-7 ?
    Возможно, в верхнем ящике своего письменного стола. Впрочем, если даже и в нижнем, это мало что изменит по сути.
    Запись от steelcraft размещена 19.06.2024 в 12:30 steelcraft вне форума
  6. Старый комментарий
    [QUOTE=steelcraft;bt34550]Допускаю, что это тоже придумали не Вы.[/QUOTE]
    разумеется, но вы путаете навык с характером. Навык может повлиять на поведение в среде, но характер это
    [QUOTE]Хара́ктер (от др.-греч. χαρακτήρ «примета, отличительная черта, знак») — структура стойких, сравнительно постоянных психических свойств, определяющих особенности отношений и поведения личности. Когда говорят о характере, то обычно подразумевают под этим именно такую совокупность свойств и качеств личности, которые накладывают определённую печать на все её проявления и деяния. Черты характера составляют те существенные свойства человека, которые определяют тот или иной образ поведения, образ жизни[/QUOTE]
    тоже придумал не я.

    И не правильно заменять навыком характер, это применимо только к тупому автоматическому исполнителю - не живому. А навык - не способен влиять на человека разумного глобально так, чтобы тот стал допускать глупые ошибки. Допустить ошибку может каждый, но это именно от того, что не любит пользоваться разумом и предпочитает действовать автоматически.
    Запись от Hrethgir размещена 19.06.2024 в 16:49 Hrethgir вне форума
  7. Старый комментарий
    что хотел бы услышать от кандидата
    В ответ на какой вопрос?
    Запись от politoto размещена 20.06.2024 в 13:09 politoto вне форума
  8. Старый комментарий
    Цитата Сообщение от politoto
    В ответ на какой вопрос?
    Откуда взялся C? Зачем потребовалось придумывать еще один язык? Языков тогда было поменьше, чем сейчас, но все равно уже довольно много. Если понимать, что основными целями были эффективность и независимость от оборудования (портабельность), становятся понятны многие особенности языка, почему что-то реализовано именно так, а не иначе.

    Ответ "не знаю", конечно, не является критическим и не означает автоматически конец собеседования. Но если кандидат задумывался над этим, обычно он оказывается гораздо более эрудированным и подкованным в других, более технических вопросах. Часто такие дотягивают до уровня миддла.
    Запись от steelcraft размещена 20.06.2024 в 15:43 steelcraft вне форума
  9. Старый комментарий
    Аватар для sporta1982
    Где Кен взял ассемблер для мини-ЭВМ PDP-7 ?
    Поэтому Томпсон использовал кросс-ассемблер GECOS, умеющий формировать ленты , читаемые PDP-7,
    и создал необходимы инструментарий самостоятельно.

    Техника отладки программ без исходных кодов. Крис Касперски. стр. 30
    Запись от sporta1982 размещена 20.06.2024 в 17:20 sporta1982 вне форума
  10. Старый комментарий
    Аватар для AlexProgramm
    А как же Брайан Керниган?
    Запись от AlexProgramm размещена 23.06.2024 в 10:07 AlexProgramm вне форума
  11. Старый комментарий

    Brian Wilson Kernighan

    А дедушка Брайан - популяризатор по призванию.

    И изобретатель множества полезных маленьких языков и утилит.
    https://wolfram.schneider.org/... qn/eqn.pdf
    Запись от politoto размещена 23.06.2024 в 11:10 politoto вне форума
  12. Старый комментарий
    Цитата Сообщение от steelcraft
    быть низкоуровневым (максимально приближенным к уровню оборудования)
    Аппаратное вычитание адресов многобайтовых объектов обычно не работает так, как вычитание pointer'ов на многобайтные объекты работает в Си. В частности, оно не работает так на PDP-11, машине под управлением UNIX, на которой. Аппаратное масштабирование индексов (на размер операнда или на явно закодированный в инструкции множитель) при адресации на некоторых платформах встречается.

    Машинно-независимость для Денниса Ритчи тогда была не на первом плане: Си в то время развивался на единственной аппартной платформе. Если что, на sizeof можно поделить явно, портированию на другие платформы это бы не помешало.
    Запись от politoto размещена 24.06.2024 в 10:18 politoto вне форума
  13. Старый комментарий
    Цитата Сообщение от politoto
    Аппаратное вычитание адресов многобайтовых объектов обычно не работает так, как вычитание pointer'ов на многобайтные объекты работает в Си.
    Так ведь и не должно, поскольку указатель - это не адрес. Впрочем, до этой темы еще доберемся, указатели - неисчерпаемый источник провалов на собеседованиях (да и не только).
    Запись от steelcraft размещена 25.06.2024 в 01:39 steelcraft вне форума
  14. Старый комментарий
    Цитата Сообщение от steelcraft
    не должно, поскольку указатель - это не адрес.
    Не должно не значит, что не может.

    Дедушка-популяризатор запутывал своих неопытных читателей?
    Цитата Сообщение от Brian W. Kernighan
    16. Pointers
    A pointer in C is the address of something.
    Kernighan, B. W. ‘‘Programming in C− A Tutorial.’’ Bell Laboratories, 1974
    https://www.bell-labs.com/usr/dmr/www/ctut.pdf
    Изобретатель языка явно не называл pointer'ы адресами в своём справочнике по достандартному, но уже достаточно развитому Си:
    Цитата Сообщение от Dennis M. Ritchie
    7.4.2 expression − expression

    ...

    If two pointers to objects of the same type are subtracted, the result is converted (by division by the length of the object) to an int representing the number of objects separating the pointed-to objects. This conversion will in general give unexpected results unless the pointers point to objects in the same array, since pointers, even to objects of the same type, do not necessarily differ by a multiple of the object-length.
    Цитата Сообщение от Dennis M. Ritchie
    7.14.1 lvalue = expression

    The value of the expression replaces that of the object referred to by the lvalue. The operands need not have the
    same type, but both must be int, char, float, double, or pointer. If neither operand is a pointer, the assignment takes place as expected, possibly preceded by conversion of the expression on the right.

    When both operands are int or pointers of any kind, no conversion ever takes place; the value of the expression is simply stored into the object referred to by the lvalue. Thus it is possible to generate pointers which will cause addressing exceptions when used.
    Dennis M. Ritchie. "C Reference Manual" (Bell Laboratories).
    https://www.bell-labs.com/usr/dmr/www/cman.pdf

    Аналогичные пункты есть в более ранней версии справочника:
    https://www.bell-labs.com/usr/dmr/www/cman74.pdf

    Но унарный оператор & dmr описывает словами как address-of operator.
    Цитата Сообщение от dmr
    Also the address-of operator & cannot be applied to such identifiers
    Цитата Сообщение от dmr
    14.1 Structures

    There are only two things that can be done with a structure: pick out one of its members (by means of the . or
    −> operators); or take its address (by unary &)
    Запись от politoto размещена 25.06.2024 в 11:21 politoto вне форума
  15. Старый комментарий
    С тех пор много воды утекло.

    If two pointers to objects of the same type are subtracted, the result is converted (by division by the length of the object) to an int representing the number of objects separating the pointed-to objects.
    На 64-разрядной платформе разрядность адреса обычно 64, а разрядность int может быть 32, поэтому разность 64-битных указателей может не уместиться в int. Сегодня для этого используется другой тип, специально предназначенный для этого, - ptrdiff_t.

    Поскольку операции над указателями - самая провальная тема на собеседованиях, о них стоит поговорить отдельно. Пока могу предложить интересные статьи на эту тему:

    Pointers Are Complicated, or: What's in a Byte?
    Pointers Are Complicated II, or: We need better language specs
    Pointers Are Complicated III, or: Pointer-integer casts exposed

    , а также книгу: Richard Martin Reese, Understanding and Using C Pointers. O'Reilly Media, 2013. ISBN: 978-1449344184
    Запись от steelcraft размещена 25.06.2024 в 12:17 steelcraft вне форума
  16. Старый комментарий
    Аватар для AlexProgramm
    А мне указатели нравятся, в Си с ними легко достатосно
    Запись от AlexProgramm размещена 25.06.2024 в 14:34 AlexProgramm вне форума
  17. Старый комментарий
    Да, указатели это - супер!
    Запись от testuser2 размещена 25.06.2024 в 14:54 testuser2 на форуме
  18. Старый комментарий
    Цитата Сообщение от AlexProgramm
    А мне указатели нравятся, в Си с ними легко достатосно
    Все-таки есть нюансы. Скоро как раз до них дойдет очередь, они достаточно интересны.
    Запись от steelcraft размещена 26.06.2024 в 16:35 steelcraft вне форума
  19. Старый комментарий
    Аватар для CoderHuligan
    Спасибо за ссылки. Интересные статьи. Но я не понял почему описание поинтера должно быть: адрес + смещение. Это наверно в rust так? А почему не: адрес + тип? Ведь тип однозначно определяет размер области памяти на которую указывает указатель. Причем если эта информация будет доступна функциям в ран-тайм, то это открывает дополнительные возможности. В Си эта информация не доступна в ран-тайм. То есть узнать тип указателя во время исполнения невозможно. То есть код сам ничего о себе не знает и не может контролировать сам себя.. Вот такие вот они, статически-типизированные языки..
    Запись от CoderHuligan размещена 26.06.2024 в 17:49 CoderHuligan вне форума
  20. Старый комментарий
    Аватар для CoderHuligan
    Указатель должен быть привязан только к типу. Код не должен быть как амеба: ничего не знаю ничего не вижу, а только тупо делаю.. Он должен знать о себе всё. То есть должно существовать описание всех типов и сущностей в коде в особой области данных. Как словарь forth. Тогда можно сказать: да это тварь что-то о себе знает, значит она что-то из себя представляет, не так ли? Она может даже менять самое себя, развиваться. Но это уже совсем другая тема. Поразмышляю как-нибудь в своем блоге.
    Запись от CoderHuligan размещена 26.06.2024 в 18:03 CoderHuligan вне форума
 
Новые блоги и статьи
Когда логика программы не спасает от человеческих ошибок
Maks 18.08.2026
В последнее время всё чаще и чаще сталкиваюсь с таким явлением, как абсолютная невнимательность (или глупость) пользователей. Проявляется это чаще всего на работе в коллективе. Допустим, человек с. . .
Лето уходит
kumehtar 17.08.2026
Мысли в слух
kumehtar 17.08.2026
Забавно, насколько сейчас стала доступна информация. Например о магии, духовном развитии, медитациях, и других подобных направлениях, ранее зачастую тайных, передаваемых от учителя к ученику. Хотя. . .
Перемещение строк из ТЧ в другой документ с учетом текущего пробега
Maks 17.08.2026
Реализация из решения ниже выполнена на примере нетипового документа "Автозапчасти", с ТЧ "Шины". За основу взят алгоритм отсюда: https:/ / www. cyberforum. ru/ blogs/ 359708/ 10838. html Задача: . . .
Саморегулирующийся социальный контракт для сервера cross-section.
Hrethgir 14.08.2026
С кодом конечно таких глубоких размышлений пока не было, впрочем я уже привык к алгоритмизации. Суть предмета записи: снова в диалоге с нейросетью (я взял пока себе ник для учётки админа - Rector). . . .
Часы электронные
Uhbif79 12.08.2026
Выкладываю программу часов. Программа позволяет: 1. Использовать системное время и дату, 2. Есть возможность вводить время и дату вручную. 3. Реализованы 2 будильника: начало и конец рабочего дня. . . .
Часы с будильником на основе класса QLCDNumber
Uhbif79 12.08.2026
Всем добрый день, выкладываю программу часов с будильником на основе класса QLCDNumber. Здесь я пробовал самостоятельно создавал классы, впервые столкнулся с видимостью переменной одного класса из. . .
Установка MinGW GCC 16.2 и CMake
8Observer8 10.08.2026
VK Видео: https:/ / vkvideo. ru/ video-240781534_456239017 YouTube: eY5-5PyI9NM Текстовая версия
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru