Беседа о синтаксическом сахаре тут произошла
https://t.me/AGIRussia_SCA/13412 =====================================
Viktor Sirotin, [24.03.2022 17:49]
Функция или параметры, что вперёд?
Когда мы предлагаем другому человеку что-то сделать или сами планируем свои действия, мы можем сначала указать название действия (налей чаю) или наоборот - перечислить объекты и потом сказать, что с ними сделать (эти чашки поставь вон туда).
В математике принято при задании функции сначала указывать функцию, а потом аргумент: sin(0.2).
В программировании функции используют как правило нотацию близкую к математической. А вот другие конструкции (циклы, стримы) сначала перечисляют аргументы, в потом называют функцию:
List.map(…)
Любопытно, что в Ansible применяют другой (близкий к математическому) подход: сначала называют функцию а потом её аргументы:
- name: install apt packages
apt: pkg={{ item }} update_cache=yes cache_valid_time=3600
become: True
with_items:
- git
- libjpeg-dev
- libpq-dev
- memcached
- nginx
- postgresql
- python-dev
- python-pip
- python-psycopg2
- python-setuptools
- python-virtualenv
- supervisor
ALEX BUR, [24.03.2022 22:47]
Дело удобства видимо и традиций.
По моим воззрениям любой синтаксис это синтаксический сахар.
Atar, [24.03.2022 22:57]
- налей чаю
- эти чашки поставь вон туда
в русском такое прокатывает, в других языках - не обязательно
Viktor Sirotin, [24.03.2022 23:01]
[В ответ на ALEX BUR]
А не могли бы вы попробовать дать конструктивное определение понятия «синтаксический сахар»?
Например, в разных языках программирования можно встретить такие выражения для операции сложения:
с = a + b
c = plus(a,b)
plus: (a,b)->c
Мой вопрос: где здесь сахар.
Если пример неудачный, можете привести поясняющий пример?
ALEX BUR, [24.03.2022 23:03]
Конструктивное формальное понятие тут не дашь, имхо.
Синтаксический сахар (англ. syntactic sugar) в языке программирования - это синтаксические возможности, применение которых не влияет на поведение программы, но делает использование языка более удобным для человека.
(вики)
ALEX BUR, [24.03.2022 23:04]
В итоге все сводится к командам машины Тьюринга, к алгоритмам Маркова и иным универсальным моделям универсальных вычислителей.
А вот всё, что над ними, это и есть синт.сахар в моем понимании.
Я так вижу ситуацию.
Viktor Sirotin, [24.03.2022 23:05]
[В ответ на Atar]
Пример на русском языке я привёл для ввода в тему. Речь идёт о формальных языках программирования или конфигурации, как Ansible.
Atar, [24.03.2022 23:09]
с = c + 1
c++
Вот сахар. В вике правильно написано - "делает использование языка более удобным для человека"
c++ удобнее с = c + 1
* а удобство - это дело вкуса
ALEX BUR, [24.03.2022 23:10]
Язык программирования позволяет написать программу для того или иного универ.вычислителя (обычно с промежуточным переводчиком - компилятор/интерпретатор).
Программа выражает алгоритм, является описанием алгоритма. Сам алгоритм это система стрелочек - конечный автомат.
Ну и в итоге получаем, что любой алгоритм это комплекс стрелок типа псевдографа. А конкретные языки и конкретные универсльные вычислители, только конкретные представления универсальной сущности - алгоритма, комплекса стрелок.
ALEX BUR, [24.03.2022 23:12]
Сами стрелки выражают взаимосвязи между состояниями. Есть состояние, есть действие/преобразование, есть следующее состояние.
И этого достаточно для описания мира, для описания мышления, для описния всего.
ALEX BUR, [24.03.2022 23:12]
Что брать первым, действие или состояние, объект или функцию? зависит от предметной области... и т.п.
ALEX BUR, [24.03.2022 23:13]
Вот таки примерно вижу. ))
Viktor Sirotin, [24.03.2022 23:14]
[В ответ на ALEX BUR]
Я думаю, что пример Алексея отражает распространённую трактовку термина «синтаксический сахар».
А для вашего случая наверное больше подходит термин Интерпретация.
ALEX BUR, [24.03.2022 23:15]
Соглашусь.
ALEX BUR, [24.03.2022 23:15]
Ну вот конкретная интерпретация - конкретный синтаксический сахар.
Так нормально?
Atar, [24.03.2022 23:20]
В сахаре прячут сложность. Обычно визуальную. Мне не встречалось ввода сахара по другим причинам.
ALEX BUR, [24.03.2022 23:20]
Ну вот в рамках конкретного языка, две разные синтаксические конструкции выражающие один тот же результат - синтаксический сахар.
Но уже тут несколько расширенно трактую.
Т.е. по идее прибавление 1 к числу можно очень разной последовательностью ассемблерных команд выразить. Т.е. формально их нельзя считать эквивалентными, т.е. синт.сахаром.
Atar, [24.03.2022 23:21]
data.map() кстати, это не сахар. Это конструкция из функциональных языков.
Viktor Sirotin, [24.03.2022 23:22]
[В ответ на ALEX BUR]
Для меня - нет.
Вот такая аналогия:
Я могу чай с сахаром и без него попить. 😉
А Вы говорите, что мой сахар - это набор молекул.
Конкретнее:
Можно написать
с = c + 1
а можно
с++
Оба выражения на одном «уровне», в одном языке.
А Вы говорите о переводе с = c + 1 в команды ассемблера.
Поэтому - нет.
ALEX BUR, [24.03.2022 23:23]
Я согласен, что расширенно трактую, очень расширенно.
Viktor Sirotin, [24.03.2022 23:29]
[В ответ на Atar]
Да. Разумно называть синтаксическим сахаром такие конструкции языка, когда в том же языке существуют более длинные или неудобные или труднозапоминаемые конструкции.
Я в одном своём языке использовал вместо
data.filter(…)
конструкцию
data#(…)
Символ решётки хорошо ассоциируется на ментальном уровне с фильтром.
Ну вот, мы и к ментальным моделям пришли😉
Viktor Sirotin, [24.03.2022 23:41]
[В ответ на ALEX BUR]
Ваша идея сама по себе очень глубока. Но для её поименования надо либо подобрать или придумать новый подходящий термин, либо каждый раз перед использованием давать определение, чтобы не сбивать с толку людей, привыкших к другой трактовке этого термина.
Так что если придумаете название - сообщите. Подискутируем.😉
ALEX BUR, [24.03.2022 23:43]
(убежал, завтра прочту не спеша) ))
ALEX BUR, [25.03.2022 9:14]
компилятор x86-64 gcc 11.2
==========
int main()
{
int a=0,b=0;
a=a+1;
b++;
}
=========
push rbp
mov rbp, rsp
mov DWORD PTR [rbp-4], 0
mov DWORD PTR [rbp-8], 0
add DWORD PTR [rbp-4], 1
add DWORD PTR [rbp-8], 1
mov eax, 0
pop rbp
ret
======
Viktor Sirotin, [25.03.2022 9:30]
Очень хороший пример, показывающий, что «сахарные» и обычные конструкции языка МОГУТ отображаться в одинаковые конструкции ассемблера.
Тут приходит в голову два замечания.
Первое - это воля разработчика компилятора, что так получилось, а не следствие фундаментальных законов.
Второе - в тему нашего канала. Ментальные модели «растворяются» при интерпретации конструкций языка на языке нижнего уровня.
Я на эту тему подумаю и напишу поподробнее.
А пока - наша дискуссия мне нравится и представляется полезной.
ALEX BUR, [25.03.2022 9:49]
x64 msvc v19.latest
===
int main()
{
int a=0;
int b=0;
a=a+1;
b++;
}
=================
a$ = 0
b$ = 4
main PROC
$LN3:
sub rsp, 24
mov DWORD PTR a$[rsp], 0
mov DWORD PTR b$[rsp], 0
mov eax, DWORD PTR a$[rsp]
inc eax
mov DWORD PTR a$[rsp], eax
mov eax, DWORD PTR b$[rsp]
inc eax
mov DWORD PTR b$[rsp], eax
xor eax, eax
add rsp, 24
ret 0
main ENDP
============
ALEX BUR, [25.03.2022 9:59]
А вот и возникает вопрос.
===
int a=0,b=0;
эквивалентно
int a=0;
int b=0;
====
a=a+1;
эквивалентно
a++;
====
Одинаковые компиляторы, обеспечивают в данном случае даже одинаковый ассемблерный код.
Разные компиляторы могут обеспечивать в общем случае разный ассемб.код.
Но эквивалентные результаты.
ALEX BUR, [25.03.2022 10:02]
***Ментальные модели «растворяются» при интерпретации конструкций языка на языке нижнего уровня.
На мой взгляд мы просто выписываем их структуру более подробно, с самими моделями ничего не происходит.
И возникает вопрос, что вообще считать эквивалентными алгоритмами?
Близко опять же и к синтаксическому сахару в узком определении и в моих более широких интерпретациях.
ALEX BUR, [25.03.2022 10:03]
Какие ментальные модели считать эквивалентными?
Вопрос примерно того же характера.
ALEX BUR, [25.03.2022 10:08]
Как это делается в математике или в логике?
Какие конструкции считаются эквивалентными?
Пример логики.
Конъюнктивная нормальная форма
Дизъюнктивная нормальная форма
Совершенная конъюнктивная нормальная форма
Совершенная дизъюнктивная нормальная форма
ALEX BUR, [25.03.2022 10:10]
Если совсем кратко.
То эквивалентно то, что попадает в один класс эквивалентности с точностью до некоторого класса преобразований.
Все слышали фразу: с точностью до изоморфизма.
Atar, [25.03.2022 10:11]
Сахар видит только человек, он для визуальной простоты. Компилятор же разворачивает a++ обратно в a = a + 1, а потом компилирует, поэтому и ассемблерный код одинаковый.
ALEX BUR, [25.03.2022 10:12]
Ну вот да, производит эквивалентные преобразования.
Atar, [25.03.2022 10:13]
Это типа внутренних макросов, где одна строчка перед тем как пойдёт на компиляцию, автозаменяется на другую.
#define a++ a = a + 1
ALEX BUR, [25.03.2022 10:15]
Проблема эквивалентности немного в иных областях
Беседа в телеге о сопоставлении и слиянии онтологий.
https://deep-econom.livejournal.com/905445.html Примерно.
Тоже самое про эквивалентность алгоритмов.
Тоже самое про эквивалентность синтаксиса.
ALEX BUR, [25.03.2022 10:17]
И вот опять, почему эти вопросы упоминаю?
О границах лексики, синтаксиса и семантики
https://deep-econom.livejournal.com/884033.html ALEX BUR, [25.03.2022 10:17]
Вопрос границ!
ALEX BUR, [25.03.2022 10:17]
А в моем понимании - всё есть синтаксис.
Этого просто пока человечество не понимат, имхо. Ну а я не авторитетен. Потом будут ссаться по поводу когото известного, кто нечто подобное выскажет. ))
Поэтому и говорил, что любые языковые конструкции - суть синтаксический сахар.
ALEX BUR, [25.03.2022 10:19]
И получается, сам синт.сахар можно по уровням классифицировать, так сказать уровни сахарный конструкций, сахарных надстроек.
ALEX BUR, [25.03.2022 10:25]
[Переслано от ALEX BUR]
Раскрыл один черновик на тему.
===
Мысль: нужна единая унифицированная форма представлений алгоритмов.
Нужно преобразование алгоритмов записанных на разных языках для разных машин на язык нашей выделенной машины и далее както избавляться от второстепенного (лишнего, несущественно, от обфускаций) и преобразовывать к единой "нормальной"/"стандартной" форме и уже затем сравнивать.
Алгоритм - это граф вычислений.
Соответственно, требуется система преобразования графов и приведение их к "нормальной"/"стандартной" форме и затем стоит задача выяснения изоморфизма графов.
Что такое алгоритм?
https://deep-econom.livejournal.com/863019.html===
==================================