Ошибка №2. Незнание истории языка.
Запись от steelcraft размещена 18.06.2024 в 17:29
Показов 2721
Комментарии 25
|
Знание истории языка, который вы изучаете (или думаете, что уже изучили) - это не блажь. Из знания, когда, где, кем, при каких обстоятельствах и с какой целью разрабатывался язык, становятся очевидными многие его детали. Максимально кратко приведу, что хотел бы услышать от кандидата. В конце 1960-х сотрудник Bell Labs Кен Томпсон разрабатывал операционную систему для мини-ЭВМ PDP-7. Разумеется, на ассемблере. Спустя некоторое время с Деннисом Ритчи они перешли на другую модель - PDP-11. Эта модель была настолько другой, что даже разрядность не совпадала с предшествующей. Идеи ОС (которая в итоге превратилась в UNIX) остались в голове, а вот ассемблерный код пришлось переписывать. Вполне логично возникла идея создать язык специально для этой цели. Он должен был обладать довольно противоречивыми свойствами: быть низкоуровневым (максимально приближенным к уровню оборудования) и весьма эффективным - и одновременно быть машинно-независимым (свойство языков высокого уровня), то есть позволять портирование кода на другие платформы. Результат мы видим даже полвека спустя: написанные на C UNIX-подобные системы довольно быстро портируются на новые платформы. Главный вывод из вышесказанного: C позволяет писать код, максимально независимый от платформы и по этой причине легко переносимый. Но есть и плохие новости: это достигается не автоматически, нужно специально постараться. Не любой код является переносимым только лишь потому, что написан на C. Впрочем, это уже тема дальнейшей беседы. |
Размещено в Без категории
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Всего комментариев 25
Комментарии
-
Запись от Croessmah размещена 18.06.2024 в 21:03
-
[QUOTE]язык (как инструмент) - вторичен[/QUOTE]
это придумал не я.Запись от Hrethgir размещена 18.06.2024 в 21:21
-
Сообщение от Hretgir
Допускаю, что это тоже придумали не Вы.Запись от steelcraft размещена 19.06.2024 в 01:20
-
> Кен Томпсон разрабатывал операционную систему для мини-ЭВМ PDP-7. Разумеется, на ассемблере
Бонусный вопрос: (вне конкурса)
Где Кен взял ассемблер для мини-ЭВМ PDP-7 ?Запись от politoto размещена 19.06.2024 в 11:43
-
Возможно, в верхнем ящике своего письменного стола. Впрочем, если даже и в нижнем, это мало что изменит по сути.
Сообщение от politoto
Запись от steelcraft размещена 19.06.2024 в 12:30
-
[QUOTE=steelcraft;bt34550]Допускаю, что это тоже придумали не Вы.[/QUOTE]
разумеется, но вы путаете навык с характером. Навык может повлиять на поведение в среде, но характер это
[QUOTE]Хара́ктер (от др.-греч. χαρακτήρ «примета, отличительная черта, знак») — структура стойких, сравнительно постоянных психических свойств, определяющих особенности отношений и поведения личности. Когда говорят о характере, то обычно подразумевают под этим именно такую совокупность свойств и качеств личности, которые накладывают определённую печать на все её проявления и деяния. Черты характера составляют те существенные свойства человека, которые определяют тот или иной образ поведения, образ жизни[/QUOTE]
тоже придумал не я.
И не правильно заменять навыком характер, это применимо только к тупому автоматическому исполнителю - не живому. А навык - не способен влиять на человека разумного глобально так, чтобы тот стал допускать глупые ошибки. Допустить ошибку может каждый, но это именно от того, что не любит пользоваться разумом и предпочитает действовать автоматически.Запись от Hrethgir размещена 19.06.2024 в 16:49
-
В ответ на какой вопрос?Запись от politoto размещена 20.06.2024 в 13:09
-
Откуда взялся C? Зачем потребовалось придумывать еще один язык? Языков тогда было поменьше, чем сейчас, но все равно уже довольно много. Если понимать, что основными целями были эффективность и независимость от оборудования (портабельность), становятся понятны многие особенности языка, почему что-то реализовано именно так, а не иначе.
Сообщение от politoto
Ответ "не знаю", конечно, не является критическим и не означает автоматически конец собеседования. Но если кандидат задумывался над этим, обычно он оказывается гораздо более эрудированным и подкованным в других, более технических вопросах. Часто такие дотягивают до уровня миддла.Запись от steelcraft размещена 20.06.2024 в 15:43
-
Запись от sporta1982 размещена 20.06.2024 в 17:20
-
Запись от AlexProgramm размещена 23.06.2024 в 10:07
-
Brian Wilson Kernighan
А дедушка Брайан - популяризатор по призванию.
И изобретатель множества полезных маленьких языков и утилит.
https://wolfram.schneider.org/... qn/eqn.pdfЗапись от politoto размещена 23.06.2024 в 11:10
-
Аппаратное вычитание адресов многобайтовых объектов обычно не работает так, как вычитание pointer'ов на многобайтные объекты работает в Си. В частности, оно не работает так на PDP-11, машине под управлением UNIX, на которой. Аппаратное масштабирование индексов (на размер операнда или на явно закодированный в инструкции множитель) при адресации на некоторых платформах встречается.
Сообщение от steelcraft
Машинно-независимость для Денниса Ритчи тогда была не на первом плане: Си в то время развивался на единственной аппартной платформе. Если что, на sizeof можно поделить явно, портированию на другие платформы это бы не помешало.Запись от politoto размещена 24.06.2024 в 10:18
-
Так ведь и не должно, поскольку указатель - это не адрес. Впрочем, до этой темы еще доберемся, указатели - неисчерпаемый источник провалов на собеседованиях (да и не только).
Сообщение от politoto
Запись от steelcraft размещена 25.06.2024 в 01:39
-
Не должно не значит, что не может.
Сообщение от steelcraft
Дедушка-популяризатор запутывал своих неопытных читателей?
Kernighan, B. W. ‘‘Programming in C− A Tutorial.’’ Bell Laboratories, 1974
Сообщение от Brian W. Kernighan
https://www.bell-labs.com/usr/dmr/www/ctut.pdf
Изобретатель языка явно не называл pointer'ы адресами в своём справочнике по достандартному, но уже достаточно развитому Си:
Сообщение от Dennis M. Ritchie
Dennis M. Ritchie. "C Reference Manual" (Bell Laboratories).
Сообщение от Dennis M. Ritchie
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
Сообщение от dmr
Запись от politoto размещена 25.06.2024 в 11:21
-
С тех пор много воды утекло.
На 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
-
Запись от AlexProgramm размещена 25.06.2024 в 14:34
-
Да, указатели это - супер!Запись от testuser2 размещена 25.06.2024 в 14:54
-
Все-таки есть нюансы. Скоро как раз до них дойдет очередь, они достаточно интересны.
Сообщение от AlexProgramm
Запись от steelcraft размещена 26.06.2024 в 16:35
-
Спасибо за ссылки. Интересные статьи. Но я не понял почему описание поинтера должно быть: адрес + смещение. Это наверно в rust так? А почему не: адрес + тип? Ведь тип однозначно определяет размер области памяти на которую указывает указатель. Причем если эта информация будет доступна функциям в ран-тайм, то это открывает дополнительные возможности. В Си эта информация не доступна в ран-тайм. То есть узнать тип указателя во время исполнения невозможно. То есть код сам ничего о себе не знает и не может контролировать сам себя.. Вот такие вот они, статически-типизированные языки..Запись от CoderHuligan размещена 26.06.2024 в 17:49
-
Указатель должен быть привязан только к типу. Код не должен быть как амеба: ничего не знаю ничего не вижу, а только тупо делаю.. Он должен знать о себе всё. То есть должно существовать описание всех типов и сущностей в коде в особой области данных. Как словарь forth. Тогда можно сказать: да это тварь что-то о себе знает, значит она что-то из себя представляет, не так ли? Она может даже менять самое себя, развиваться. Но это уже совсем другая тема. Поразмышляю как-нибудь в своем блоге.Запись от CoderHuligan размещена 26.06.2024 в 18:03



