Как стать автором
Обновить

Комментарии 77

А какую проблему решает данная модель языка? Или какие предсказания она позволяет делать( продолжая аналогию с Периодической таблицей элементов)?
Проблема: изучение программирования с места в карьер начинается с изучения языка, его выражений, функций и прочего. Если же весь язык, даже такой заковыристый, как Си, можно лениво рассказать за час, то преподаватели перестанут ставить телегу впереди лошади, и начнут наконец говорить студентам про суть программы. Это первостепенный и незаслуженно пропускаемый вопрос.

Предсказания… Можно таким считать речевую модель программы. Она также крута и революционна, даже экстремальна, как модель Резерфорда в 1911. Но если смотреть вдаль, то вдруг у программирования появится один или несколько законов. А то как-то скучно без них. Пригодится ли здесь Матрёшка, я не знаю.
вдруг у программирования появится один или несколько законов

Дональд Кнут — «Искусство программирования»

Ознакомьтесь и не изобретайте велосипедов. Иначе вы будете выглядеть как какой-нибудь провинциальный инженер, который решил придумать очередную «Единую теорию всего» и пришёл с ней на форум физиков-теоретиков.
Тогда сообщите провинциалу что-нибудь простенькое, вроде 3-х законов Ньютона.
что-нибудь простенькое

Вот в этом и ваша проблема и проблема подобных вам — хочется чего-то «попроще!» Но нет. Так не бывает. Займитесь получением систематических знаний по теме. Или примите как факт, что это — не ваше, но если мир алгоритмов и кода вас привлекает just for fun — просто пишите программы на том языке, который вам нравится.
Вы правы, законов нет. Знания меряются килограммами.
Ну, ваш сарказм, как это предсказуемо в таких случаях и бывает, маскирует простое нежелание учиться. (А ведь можно было бы начать, например, с MIT'овского курса: Daniel P. Friedman, Mitchell Wand — «Essentials of Programming Languages»… Но о чём это я, вы же всё равно читать не станете.)
Провинциальный, подобный многим, сарказм, неграмотный. Не устали?
Законов нет, от чтения ваших книгах они не появятся.
от чтения ваших книгах они не появятся

Что после распарсинга значит: «многобукаф, ниасилил!».

Прокомментируйте пожалуйста любой из функциональных языков программирования с помощью матрёшки.

Не приходилось работать с ними. Но вот, например, плюсы с точки зрения матрёшки отличаются добавлением нескольких строчек в первый столбец — образы/подборка/отдельные поля. Это главное, есть и другие добавления. То, что Строструп расписывает в толстой книге, сводится к нескольким строчкам в паре мест, и просьбе не перевозбуждаться от слова ООП. Язык ЯваСкрипт — более запутан и сам по себе, и с точки зрения системы, но и его можно выразить готовыми строками, и потом объяснить как нормальный язык. Уверен, с функциональным такой номер тоже пройдёт.
вычисление (Вч) — отражает изменение свойств предмета.

Придумывание своей неудачной терминологии — путь в никуда.
В чего бы это вдруг вычисление стало изменением свойств? А если у нас рассчитывается длиннющая формула и результат сразу выводится на экран — т. е. никакие свойства объектов в программе не изменяются — вычислений не происходит, что ли? Неинтуитивная у вас какая-то терминология.

Если происходит изменение свойств — логично назвать сие действо изменением свойств. Если у нас происходит передача управления — логично назвать это действо передачей управления.
Я хотел сделать приятное кафедрам «Вычислительной техники и вычислительных методов». А как бы вы назвали выражение такого вида: x = x + 1;?
В правой части — выражением (х+1 — это выражение), в общем — присваиванием.
Предлагаете назвать выражение «выражение»? И «присваивание»? Система нужна, чтобы сократить число сущностей, в данном случае — выражений, а также их составляющих единиц. И перейти к действительно важным вопросам.
Уже есть общепринятая терминология, которая существует не просто так — она отражает различающиеся «сущности».
Какой вы скучный. Вместо разговора по сути предлагаете не нарушать приличий.
Общепринятая терминология — как раз и предназначена для «по сути».
Нет, суть и слова — разные вещи. И когда-то все оперировали общепринятым понятием «теплород».
Изложите внятно, чем вас не устраивает, допустим, общепринятое понятие присваивания.
Ну, наконец.
Присвоение (меньше букв) — образец знака действия — род слов — входит в выражение вычисление (Вч).
Называть выражения по каждому знаку действия — ячеек не напасёшься.
И вы моментально упускаете фундаментальное различие присваивания и равенства.
ячеек не напасёшься

Пытаться подгонять исследуемое под свою сверхидею — определенно не научная методология.

UPD — если вам так нужна «периодическая таблица», вот, например:

www.info.ucl.ac.be/~pvr/paradigmsDIAGRAMeng108.pdf
И братства. Операции «равенства» не существует. Есть «проверка равенства» (==).

Систематизация — не сверх-идея. Это создание порядка ради него самого и для дальнейших целей, например, преподавания. Когда ваша систематизация насчитывает 27 делений (одного уровня) — это просто плохая систематизация.
Операции «равенства» не существует.

Ну, формулировка «equality operator» используется совершенно спокойно (посмотрите, например, Microsoft Docs), при этом изучающим тему понятно, что речь идёт об операции сравнения.
это просто плохая систематизация

… или просто систематизация, которую оказалось сложно понять лично вам.

формулировка «equality operator» используется совершенно спокойно


Неточности свойственны всем, даже МС. Бумажный математический термин «равно» не подходит для программы.

систематизация, которую оказалось сложно понять лично вам

Предлагаю не переходить дальше на личное.
не переходить дальше на личное

Констатация, что кто-то чего-то не понимает и/или намеренно отказывается попытаться понять — это не «переход на личное».
Когда ваша систематизация насчитывает 27 делений (одного уровня) — это просто плохая систематизация.
Почему, собственно говоря? В классификации животных, например, есть и побольше делений одного уровня и наоборот — какой-нибудь род, в котором только один вид.

Меньше — лучше.

Присвоение (меньше букв) — образец знака действия — род слов — входит в выражение вычисление (Вч).

Пока что ваше «объяснение» звучит как намеренная попытка все запутать.
Боюсь, закончится так же, как и у других изобретателей «своих терминологий» — настойчивыми советами «сначала изучите все, что я написал, а потом вам все сразу станет понятно».
Я кратко ответил на вопрос.

Но даже если бы ответил иначе: «смотрите всё» — это только одна страница, даже без соединительных стрелочек.
Присвоение (меньше букв) — образец знака действия — род слов — входит в выражение вычисление (Вч).


А теперь давайте сравним эту «крутую и революционную» инновацию с традиционным (простым и вполне понятным) определением:

"Присваивание — механизм связывания в программировании, позволяющий динамически изменять связи имён объектов данных (как правило, переменных) с их значениями. Строго говоря, изменение значений является побочным эффектом операции присваивания, и во многих современных языках программирования сама операция также возвращает некоторый результат (как правило, копию присвоенного значения). На физическом уровне результат операции присвоения состоит в проведении записи и перезаписи ячеек памяти или регистров процессора."
Присваивание — операция записи значения в ячейку переменной.

Существует три вида п.: прямое (=), межслойное (беззнаковое, аргумент/параметр) и косвенное (*x=)
Кстати, судя по фотографиям, на СтивДжобса похож!

И я так полагаю, теперь у нас два Дмитрия: Менделеев и Кольцов ))
Какая-то вода от гумманитария, для гумманитария, а это — порочный круг.
В каком-то смысле, вы правы, и для гуманитариев. Но программирование — не только для суровых технарей. Это моё преподавательское кредо. Не считаю нужным хранить секреты от блондинок.
Красивый Си

В далеком 1988 году мне удалось приобрести корию книги Эндрю Таненбаума «Operating Systems: Design and Implementation». И в ней было дано описание языка Си, которое занисало всего пару страниц (кстати, столько же занимало описание ассемблера). Это было очень красиво. И я всегда ставлю в пример именно это описание языка Си.

Такое хорошее? Могу почитать в публичке. А что в нём зацепило?

ПС. Просмотрел оригинальную pdf — не нашел про языки. Суровый тысячестраничник про Юникс.

Ну сурового ничего там нет. Вы смотрели оригинальную версию, но наверное третье издание. В оригинальном первом издании 1987 года в приложениях (appendix) даны были описания Си и ассемблера. Тогда Си только начинал свою поступь (в Советском Союзе многие и слышать про него не хотели — даешь PL/1). В третьем издании эти приложения могли и убрать (я тоже их там не увидел), т.к. Си уже знали все, но я посмотрю в своих бумагах.

Спасибо! Поищу 1е издание. На английском? В библиотеке 2-е на русском.

Да, на английском. И это была именно копия, сделанная на ксероксе. Такие были времена.

Не такая ценная считается книга, чтобы была в публичке в оригинале и по изданиям. К/Р — взял первое издание, надо было сравнить. Может быть, библиограф подскажет, как получить. А если найдете у себя — не сочтите за труд, если всего 2 страницы…

Да, я посмотрю.

Камрад ниже дал ссылку, дай ему Бог здоровья. Прочитал. Неплохо, неполно. Сложно предположить, что кто-то, взявшийся за разбор ОС, будет пользоваться таким кратким описанием, даже без «типа» double/float. Но хорошая попытка сжать и без того краткий К/Р. Было приятно, что мы с автором начали описание примерно одинаково:
Вот у нас есть программа. Она состоит из модулей. Модули состоят из подпрограмм и подборок (structure). Подпрограммы состоят из отдельных выражений: объявлений, вычислений...

Пустячок, а приятно. Ключевое слово "неплохо", а как я уже говорил здорово (напомню, год 1986). А неполно, так всегда можно пополнить.
А Камраду DoctorMoriarty — спасибо.

Здорово — что показано стремление сократить уже короткое. В 1986, когда нас уже завалили кирпичами. «То, о чём так долго гова'или большевики, свершилось!»

Не поверите, рылся в бумагах, ища копию книги, и попалась газета Правда от 29 января 1987 года (в нее была вложена одна из моих рукописей) с информационным сообщением о Пленуме ЦК КПСС "О перестройке и кадровой политике партии", после которого все и началось.
Но ведь мы с вами начали с языка Си. Спасибо.

Большое спасибо!
Правильно ли я понимаю, что ваша схема это набор единиц языка C (ключевых слов, выражений и т. д.) сгруппированных и переименованных особым образом?

Возможно ли при помощи вашей системы построить модель другого языка, например Rust, Pascal или Python, без увеличения количества терминов?

И как вы думаете, на сколько реально будет студенту, обучавшемуся по вашей модели, успешно пройти собеседование, оперируя на таковом терминами вашей модели, особенно если проверяющая сторона знакома только с общепринятой моделью?
Спасибо. Я об этом писал.

Поэтому начинать изучение языков программирования следует с языка Си и двигаться дальше в порядке появления языков семейства Си.

То же самое касается описания языков. Разные языки имеют совпадающий, или меньший набор родов единиц, чем язык Си. Число видов и образцов может отличаться в обе стороны: у Си++ видов больше, чем у Си, у ЯваСкрипт — меньше.


Сдавать экзамен и собеседование нужно по правилам вуза/компании, конечно. В 15 веке вы должны были бы твердо отвечать, что Солнце вращается вокруг земли (плоской).

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

Вы пишите «простое» и «правильное», за счёт чего оно простое и каким правилам соответствует?
Я так понимаю, что модель еще не проверена на практике, на реальных людях?
Выше есть пример: два определения операции присваивание. Скажите, какое содержательнее, проще и «правильнее»? habr.com/ru/post/452328/#comment_20169308
С точки зрения изучения языка они одинаково сложны.

В вашем меньше слов за счёт «упаковки» лишних слов в термины «ячейка переменной», «межслойное», «беззнаковое» и т. д., подозреваю, что после раскрытия этих терминов, за которыми возможно стоят еще и другие термины, количество слов в обоих определениях будет примерно одинаковым.
Вы уровняли определение 1) из 61 слова и 2) из 7. Правда? Это какая-то высшая математика.

Про виды присвоения 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-х влияние русского языка на английский было примерно нулевым. Уж в области вычислительной техники — точно.
«Dereference» — новояз, «разыменование» — думаю, извратились именно потому, что новояз. Постеснялись, что в русском такое слово уже есть. Неудобно перед западными хозяевами дум.
А есть ли у вас какие-либо подтверждения своих заявлений, или все столь категорично заявленное — плод ваших размышлений?
Если рассматривать присвоение, как операцию (записи значения в ячейку), то у неё есть три вида:

3. косвенный (*s=, по ссылке (reference) s...

Но то, что вы написали, — *s= — это именно два независимых действия:
1) Получение ячейки по адресу — *s.
2) Запись в ячейку — [результат *s]=.

«Разыменование» же можно использовать и без записи: x = *s + *p.
Отличный способ запутать несложный предмет — изобрести новую терминологию, которую никто не поймёт — ни программист, ни математик, ни лингвист. Ещё лучше, если привычные всем слова приобретут совершенно неожиданные значения. Вы пишете:
Выбор слов должен быть точным и ясным…

Отражение выполняют два рода выражений:

вычисление (Вч) — отражает изменение свойств предмета. Свойство предмета выражается числом, тогда действие над свойством — это действие над числом — операция.
Если я вычисляю площадь круга, то предметом является круг? Какие же его свойства я при этом изменяю? Или предметом является регистр процессора, где хранится площадь? Тогда ваш «предмет» не входит в традиционно понимаемую «предметную область». Более того, вычислять площадь я могу и в уме. Тогда предметом окажутся нейроны мозга?
подчинение (Пч) — отражает изменение порядка действий. Прообразом Пч является речевое сложноподчиненное предложение, поэтому большинстве видов Пч начинается с подчинительных союзов «если», «иначе», «пока», «для». Другие виды Пч их дополняют.
Подчинение — это зависимость одного предмета от другого. Какое отношение это имеет к изменению порядка действий? Сложноподчинённое предложение называется так не потому, что «изменяет порядок действий», а потому что придаточное предложение теряет смысл без главного. Интересно, порядок каких действий изменяется в сложноподчинённом предложении «Хочу, чтобы сегодня было солнечно»? Или аналогия здесь уже не работает? Наконец, «для» — это предлог, а не союз.
Прикладная математика, то есть язык Си, разделяет виды чисел, но объединяет операции
В вашу прикладную математику не входит решение уравнений физики на бумаге?

В общем, определения превращены в кашу из неясных понятий и некорректных аналогий. Гипотетическим первокурсникам остаётся только посочувствовать. Хуже всего, что читать нормальную литературу после такого «введения» они смогут лишь с очень большим трудом.
Давайте сначала разберемся, а потом будем сочувствовать.

вычисление (Вч) — отражает изменение свойств предмета

Вы вырвали мысль из логической цепочки и начали её обсуждать. На каком курсе научились? Начало мысли здесь:

Умозаключения программиста, выраженные речью, преобразуются в кодовый численный вид. Это преобразование следует назвать отражением...

Вычисление отражает основные действия, или изменение свойств предметов (ставим мяч в начало — свойство положение Х — x= 1; ). Это очень действенный подход написания кода, если конечно, не брать обсчёт готовых формул. Тут он не нужен — код уже готов.

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

Наконец, «для» — это предлог, а не союз.

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

А что за теории категорий и типов? Уже существуют, или в процессе открытия? Сорри, гугл же. Теория типов хороша для пьянки. Каждое предложение звучит как продвинутый тост. Истина точно будет найдена в ней, но не скоро.
Это да, куда уж нам в калашный ряд.
А что за теории категорий и типов?

Знаете, вы всё больше напоминаете мне одного топикстартера здесь, на Хабре, который тоже изобрёл одну, хм, принципиально новую теорию, а когда ему напоминали о существовании математики и академической науки вообще, упирал на их «непонятность» и пытался отпускать саркастические замечания по их поводу.
Больше десятка людей поставили свои плюсы моей статье. Может быть, кто-то выскажется в положительном ключе, а то игра чёрными начинает утомлять.
НЛО прилетело и опубликовало эту надпись здесь
Зарегистрируйтесь на Хабре, чтобы оставить комментарий

Публикации