Комментарии 77
Предсказания… Можно таким считать речевую модель программы. Она также крута и революционна, даже экстремальна, как модель Резерфорда в 1911. Но если смотреть вдаль, то вдруг у программирования появится один или несколько законов. А то как-то скучно без них. Пригодится ли здесь Матрёшка, я не знаю.
вдруг у программирования появится один или несколько законов
Дональд Кнут — «Искусство программирования»
Ознакомьтесь и не изобретайте велосипедов. Иначе вы будете выглядеть как какой-нибудь провинциальный инженер, который решил придумать очередную «Единую теорию всего» и пришёл с ней на форум физиков-теоретиков.
что-нибудь простенькое
Вот в этом и ваша проблема и проблема подобных вам — хочется чего-то «попроще!» Но нет. Так не бывает. Займитесь получением систематических знаний по теме. Или примите как факт, что это — не ваше, но если мир алгоритмов и кода вас привлекает just for fun — просто пишите программы на том языке, который вам нравится.
Прокомментируйте пожалуйста любой из функциональных языков программирования с помощью матрёшки.
вычисление (Вч) — отражает изменение свойств предмета.
Придумывание своей неудачной терминологии — путь в никуда.
В чего бы это вдруг вычисление стало изменением свойств? А если у нас рассчитывается длиннющая формула и результат сразу выводится на экран — т. е. никакие свойства объектов в программе не изменяются — вычислений не происходит, что ли? Неинтуитивная у вас какая-то терминология.
Если происходит изменение свойств — логично назвать сие действо изменением свойств. Если у нас происходит передача управления — логично назвать это действо передачей управления.
Присвоение (меньше букв) — образец знака действия — род слов — входит в выражение вычисление (Вч).
Называть выражения по каждому знаку действия — ячеек не напасёшься.
ячеек не напасёшься
Пытаться подгонять исследуемое под свою сверхидею — определенно не научная методология.
UPD — если вам так нужна «периодическая таблица», вот, например:
www.info.ucl.ac.be/~pvr/paradigmsDIAGRAMeng108.pdf
Систематизация — не сверх-идея. Это создание порядка ради него самого и для дальнейших целей, например, преподавания. Когда ваша систематизация насчитывает 27 делений (одного уровня) — это просто плохая систематизация.
Операции «равенства» не существует.
Ну, формулировка «equality operator» используется совершенно спокойно (посмотрите, например, Microsoft Docs), при этом изучающим тему понятно, что речь идёт об операции сравнения.
это просто плохая систематизация
… или просто систематизация, которую оказалось сложно понять лично вам.
формулировка «equality operator» используется совершенно спокойно
Неточности свойственны всем, даже МС. Бумажный математический термин «равно» не подходит для программы.
систематизация, которую оказалось сложно понять лично вам
Предлагаю не переходить дальше на личное.
Когда ваша систематизация насчитывает 27 делений (одного уровня) — это просто плохая систематизация.Почему, собственно говоря? В классификации животных, например, есть и побольше делений одного уровня и наоборот — какой-нибудь род, в котором только один вид.
Присвоение (меньше букв) — образец знака действия — род слов — входит в выражение вычисление (Вч).
Пока что ваше «объяснение» звучит как намеренная попытка все запутать.
Боюсь, закончится так же, как и у других изобретателей «своих терминологий» — настойчивыми советами «сначала изучите все, что я написал, а потом вам все сразу станет понятно».
Но даже если бы ответил иначе: «смотрите всё» — это только одна страница, даже без соединительных стрелочек.
Присвоение (меньше букв) — образец знака действия — род слов — входит в выражение вычисление (Вч).
А теперь давайте сравним эту «крутую и революционную» инновацию с традиционным (простым и вполне понятным) определением:
"Присваивание — механизм связывания в программировании, позволяющий динамически изменять связи имён объектов данных (как правило, переменных) с их значениями. Строго говоря, изменение значений является побочным эффектом операции присваивания, и во многих современных языках программирования сама операция также возвращает некоторый результат (как правило, копию присвоенного значения). На физическом уровне результат операции присвоения состоит в проведении записи и перезаписи ячеек памяти или регистров процессора."
И я так полагаю, теперь у нас два Дмитрия: Менделеев и Кольцов ))
Красивый Си
В далеком 1988 году мне удалось приобрести корию книги Эндрю Таненбаума «Operating Systems: Design and Implementation». И в ней было дано описание языка Си, которое занисало всего пару страниц (кстати, столько же занимало описание ассемблера). Это было очень красиво. И я всегда ставлю в пример именно это описание языка Си.
ПС. Просмотрел оригинальную pdf — не нашел про языки. Суровый тысячестраничник про Юникс.
Ну сурового ничего там нет. Вы смотрели оригинальную версию, но наверное третье издание. В оригинальном первом издании 1987 года в приложениях (appendix) даны были описания Си и ассемблера. Тогда Си только начинал свою поступь (в Советском Союзе многие и слышать про него не хотели — даешь PL/1). В третьем издании эти приложения могли и убрать (я тоже их там не увидел), т.к. Си уже знали все, но я посмотрю в своих бумагах.
Да, на английском. И это была именно копия, сделанная на ксероксе. Такие были времена.
Да, я посмотрю.
Вот у нас есть программа. Она состоит из модулей. Модули состоят из подпрограмм и подборок (structure). Подпрограммы состоят из отдельных выражений: объявлений, вычислений...
Пустячок, а приятно. Ключевое слово "неплохо", а как я уже говорил здорово (напомню, год 1986). А неполно, так всегда можно пополнить.
А Камраду DoctorMoriarty — спасибо.
Не поверите, рылся в бумагах, ища копию книги, и попалась газета Правда от 29 января 1987 года (в нее была вложена одна из моих рукописей) с информационным сообщением о Пленуме ЦК КПСС "О перестройке и кадровой политике партии", после которого все и началось.
Но ведь мы с вами начали с языка Си. Спасибо.
Возможно ли при помощи вашей системы построить модель другого языка, например Rust, Pascal или Python, без увеличения количества терминов?
И как вы думаете, на сколько реально будет студенту, обучавшемуся по вашей модели, успешно пройти собеседование, оперируя на таковом терминами вашей модели, особенно если проверяющая сторона знакома только с общепринятой моделью?
Поэтому начинать изучение языков программирования следует с языка Си и двигаться дальше в порядке появления языков семейства Си.
То же самое касается описания языков. Разные языки имеют совпадающий, или меньший набор родов единиц, чем язык Си. Число видов и образцов может отличаться в обе стороны: у Си++ видов больше, чем у Си, у ЯваСкрипт — меньше.
Сдавать экзамен и собеседование нужно по правилам вуза/компании, конечно. В 15 веке вы должны были бы твердо отвечать, что Солнце вращается вокруг земли (плоской).
Но простое и правильное объяснение тоже полезно. Например, сначала понять, как оно устроено, а потом выучить легенду для гестапо.
Вы пишите «простое» и «правильное», за счёт чего оно простое и каким правилам соответствует?
Я так понимаю, что модель еще не проверена на практике, на реальных людях?
В вашем меньше слов за счёт «упаковки» лишних слов в термины «ячейка переменной», «межслойное», «беззнаковое» и т. д., подозреваю, что после раскрытия этих терминов, за которыми возможно стоят еще и другие термины, количество слов в обоих определениях будет примерно одинаковым.
Про виды присвоения 1) даже не заикается.
Что касается придуманных вами «видов присвоения» — это попытка увидеть то, чего нет. Нет никаких «межслойных» присваиваний, есть подстановка аргументов. Нет никаких «косвенных» присваиваний, поскольку для присваивания нет никакой разницы, каким образом адресован объект — по имени, по адресу, по ссылке или еще как.
Операция — это записываемое выражение, а не состояние ваших мыслей. Присвоение записывается тремя способами, которые перечислены в обзоре. Добавьте четвертый, уберите третий или «молчите навек».
Операция — это записываемое выражение, а не состояние ваших мыслей.
Мы говорили про присваивание. Вы его теперь уже «операцией» называете?
Присвоение записывается тремя способами, которые перечислены в обзоре.
Упорствуете в ереси? Ну-ну. :)
Добавьте четвертый, уберите третий или «молчите навек».
Добавляю четвертый: memcpy().
Убираю третий: нет никакого «косвенного присваивания», т.к. *a = b; полностью эквивалентно 0[a] = b;
Молчать навек, извините, не буду.
Не промолчали — и хорошо. Попробуйте «сорвать свадьбу» ))
«Четвертый: memcpy()». Любопытный случай. Но всё-таки это не операция присвоения, а некоторая произвольная операция, которая в том числе выполняет ряд внутренних присвоений. Произвольные операции надо описывать отдельно от основных. Основных присвоений — три.
Косвенное присвоение (dereference, почему то переведенное как «разыменование», хотя очевидно, что «отсылка») имеет два совмещенных вида: а) отсылка со смещением и б) отсылка к полю. Вы написали вырожденный вид отсылки (косвенного присвоения) со смещением. *x = *(x + 0 ) = x[0] = 1;
«Все ходы записаны».
Косвенное присвоение (dereference, почему то переведенное как «разыменование», хотя очевидно, что «отсылка»)
Reference — это отсылка, ссылка, указание на что-то.
Dereference — это убирание отсылки (т.е. разыменование указателя). Разыменование — да, перевод не дословный, но термин вполне устоявшийся.
Так вот, разыменование — это отдельная операция. Причем есть обратная ей операция — взятие адреса (& в си). Присваивание — еще одна отдельная операция. А то, что вы написали как «косвенное присваивание» — это две операции вместе: разыменование указателя и присваивание.
1. прямой (=)
2. межслойный (беззнаковый, когда аргумент присваивается параметру)
3. косвенный (*s=, по ссылке (reference) s, которую англичане назвали отсылкой (dereference), как я полагаю, под влияние именно русского языка).
Последний вид — подобие прямой пары операций извлечение/присвоение (x/x=). Хотя её можно рассматривать, как две операции, но лучше так не делать. Иначе x[0]= придётся рассматривать как 3 операции, а просто x[0] — как две. Неравновесно.
по ссылке (reference) s, которую англичане назвали отсылкой (dereference), как я полагаю, под влияние именно русского языка
Вы сами себя феерически запутали да еще и навыдумывали каких-то «влияний».
Конвенционная русскоязычная терминология с пояснениями (известная статья с Хабра):
habr.com/ru/post/251091
Конвенционная англоязычная терминология с пояснениями:
en.wikipedia.org/wiki/Dereference_operator
stackoverflow.com/questions/57483/what-are-the-differences-between-a-pointer-variable-and-a-reference-variable-in
stackoverflow.com/questions/4955198/what-does-dereferencing-a-pointer-mean
Изучайте то, что есть на самом деле.
Очень помогает спрятаться за иностранными словами: (...) для англичан — за французскими (subroutine)
Никто за словами не «прячется», либо используются синонимы
"In computer programming, a subroutine is a sequence of program instructions that performs a specific task, packaged as a unit. This unit can then be used in programs wherever that particular task should be performed.
Subprograms may be defined within programs, or separately in libraries that can be used by many programs. In different programming languages, a subroutine may be called a procedure, a function, a routine, a method, or a subprogram. The generic term callable unit is sometimes used."
(— кстати, вполне простое и понятное объяснение) либо, как в случае терминов «полиморфизм», «инкапсуляция» и т.п. вводятся новые понятия, которые проще оставить как есть, в заимствованном виде (ООП, видите ли, создано не русскоязычными программистами), нежели изобретать мокроступы вместо галош.
Вы сами себя феерически запутали да еще и навыдумывали каких-то «влияний».
Dereference — новояз, такого слова в инглише не было. А в русском — было («отсылка»). Вполне могли взять.
Всё остальное старо и скучно́. Не надо мне открывать Америку, пожалуйста.
А в русском — было
Вы ещё и в лингвистике решили порядок навести?..
Dereference — новояз, такого слова в инглише не было.
Не больший новояз, чем «разыменование» в русском.
3. косвенный (*s=, по ссылке (reference) s, которую англичане назвали отсылкой (dereference), как я полагаю, под влияние именно русского языка).
Что-то мне подсказывает, что в 1960-х влияние русского языка на английский было примерно нулевым. Уж в области вычислительной техники — точно.
Если рассматривать присвоение, как операцию (записи значения в ячейку), то у неё есть три вида:
…
3. косвенный (*s=, по ссылке (reference) s...
Но то, что вы написали, — *s= — это именно два независимых действия:
1) Получение ячейки по адресу — *s.
2) Запись в ячейку — [результат *s]=.
«Разыменование» же можно использовать и без записи: x = *s + *p.
Выбор слов должен быть точным и ясным…Если я вычисляю площадь круга, то предметом является круг? Какие же его свойства я при этом изменяю? Или предметом является регистр процессора, где хранится площадь? Тогда ваш «предмет» не входит в традиционно понимаемую «предметную область». Более того, вычислять площадь я могу и в уме. Тогда предметом окажутся нейроны мозга?
Отражение выполняют два рода выражений:
вычисление (Вч) — отражает изменение свойств предмета. Свойство предмета выражается числом, тогда действие над свойством — это действие над числом — операция.
подчинение (Пч) — отражает изменение порядка действий. Прообразом Пч является речевое сложноподчиненное предложение, поэтому большинстве видов Пч начинается с подчинительных союзов «если», «иначе», «пока», «для». Другие виды Пч их дополняют.Подчинение — это зависимость одного предмета от другого. Какое отношение это имеет к изменению порядка действий? Сложноподчинённое предложение называется так не потому, что «изменяет порядок действий», а потому что придаточное предложение теряет смысл без главного. Интересно, порядок каких действий изменяется в сложноподчинённом предложении «Хочу, чтобы сегодня было солнечно»? Или аналогия здесь уже не работает? Наконец, «для» — это предлог, а не союз.
Прикладная математика, то есть язык Си, разделяет виды чисел, но объединяет операцииВ вашу прикладную математику не входит решение уравнений физики на бумаге?
В общем, определения превращены в кашу из неясных понятий и некорректных аналогий. Гипотетическим первокурсникам остаётся только посочувствовать. Хуже всего, что читать нормальную литературу после такого «введения» они смогут лишь с очень большим трудом.
вычисление (Вч) — отражает изменение свойств предмета
Вы вырвали мысль из логической цепочки и начали её обсуждать. На каком курсе научились? Начало мысли здесь:
Умозаключения программиста, выраженные речью, преобразуются в кодовый численный вид. Это преобразование следует назвать отражением...
Вычисление отражает основные действия, или изменение свойств предметов (ставим мяч в начало — свойство положение Х — x= 1; ). Это очень действенный подход написания кода, если конечно, не брать обсчёт готовых формул. Тут он не нужен — код уже готов.
Подчинение отражает зависимость одних действий от других. В этом отношении их понимают и русский язык, и Си. Если вам нравится другая зависимость, например, предметов от предметов, напишите об этом.
Наконец, «для» — это предлог, а не союз.
В сложноподчиненных предложениях «для» — подчинительный союз, синоним слова «если». «Для такой погоды — лучше носить панамки».
Порядок в программировании будет наводить математика, а именно теория категорий и теория типов. Там открывают настоящую суть программирования и только там возможно концептуальное его упрощение.
Это да, куда уж нам в калашный ряд.
А что за теории категорий и типов?
Знаете, вы всё больше напоминаете мне одного топикстартера здесь, на Хабре, который тоже изобрёл одну, хм, принципиально новую теорию, а когда ему напоминали о существовании математики и академической науки вообще, упирал на их «непонятность» и пытался отпускать саркастические замечания по их поводу.
Матрёшка Си. Слойная система языка программы