Синтактична захар: определение, произход и примери

В компютърните науки синтактичната захар е лингвистиката на даден език за програмиране. Тя е създадена, за да направи кода по-лесен, по-четим и по-изразителен. Тази захар прави езика "по-сладък" за човешка употреба. Това означава, че нещата могат да бъдат изразени ясно, кратко или в алтернативен стил, който някои хора могат да предпочетат.

Синтактична захар: какво представлява?

Синтактична захар, определение

Много езиците за програмиране предоставят специален раздел за граматика за актуализиране на елементите. Абстрактно, препратката към даден обект е процедура от два аргумента: масив и долен индекс, която може да се изрази като get_array(масив, вектор(i, j)). Вместо това много езици предлагат синтаксис като Масив [i, j]. По подобен начин актуализирането на елемент в масив, напр, set_array(Array, vector(i, j), value), е процедура с три аргумента, но много професионалисти предоставят такъв код като Array[i, j] = стойност.

Една конструкция в даден език се нарича "синтактична захар", ако може да бъде премахната от програмата, без това да се отрази на функционалността и изразителността.

Различни процесори, включително компилатори и статични парсери, често разширяват подсладените конструкции до по-основни устройства, преди да ги обработят. Такъв процес се нарича "desaging".

Произход

Терминът "синтактична захар" е въведен от Питър Дж.Х.Уолш. Ландин през 1964 г., за да опише отдела за повърхностна граматика на простия ALGOL, език за програмиране, който е дефиниран семантично по отношение на апликативни изрази от ламбда-изчислението, като се фокусира върху лексикалната замяна на λ с "където".

По-новите езици за програмиране, като CLU, ML и Scheme, разшириха обхвата на понятието, за да го отнесат към деривация в даден език, която може да се определи като синтактична захар по отношение на ядрото от основни конструкции. Удобните функции от по-високо ниво могат да бъдат "дезагрегирани" и разложени на подмножество. Всъщност това е обичайната математическа практика за изграждане на примитиви.

Въз основа на разграничението на Ландин между основните езикови конструкции и свойствата на синтактичната захар, през 1991 г. Матиас Фелайзен предлага кодификация на "експресивната сила", която да съответства на широко разпространените в литературата схващания. Той определя като "по-смислена", за да се посочи, че без въпросните езикови конструкции програмата трябва да бъде напълно реорганизирана.

Известни примери за синтактична захар

Синтактична захар, примери

В COBOL много от междинните ключови думи са "сладки", т.е. могат да бъдат пропуснати, ако желаете. Например, изречението MOVE A B. и MOVE A TO B. изпълнява точно същата функция, но втората прави действието, което трябва да се извърши, по-ясно.

Разширени оператори за съставно присвояване: напр. a += b е еквивалентно на a = a + b в C и други подобни езици, като се приема, че a няма странични ефекти, напр. a е обикновена променлива, ако.

В Perl, unless (condition) {...} е синтактично if (not condition) {...}. Освен това всеки оператор може да бъде последван от условие, което декларация if условие е еквивалентно на if (условие) {твърдение}, но първото е по-естествено форматирано на един ред.

В езика C указатели към началото на елемент от паметта могат да се записват без специални синтаксиси: *(a + i). Въпреки че в този език има специален синтаксис за този процес: a[i]. По същия начин, a->x, е синтактична захар за достъп до членовете с помощта на оператора за препращане (*a). x.

Използване на

Изявление в C # гарантира, че някои обекти се изхвърлят правилно. Компилаторът разширява декларацията в блока try-finally.

Езикът C # ви позволява да декларирате променливи като var x = expr, което позволява на компилатора да изведе типа x от израза expr, вместо да се изисква изрична декларация.

Списъците съдържат и синтактична захар на Python (напр, [x*x за x в обхвата (10) за списък с квадрати) и декоратори (@staticmethod).

В Haskell низ, обозначен с кавички, е семантично еквивалентен на броя символи.

В пакета rvest можете да намерите обозначението %>% и казва, че данните (или изходът на функцията), които го предхождат, ще служат като първи аргумент на следващия инструмент. Това осигурява по-линейно проектиране на потока и манипулирането на данни. Tidyverse е написан, за да поставя стойности.

Критиката

синтактично свойство захар

Някои програмисти смятат, че тези възможности за синтаксис са или маловажни, или просто несериозни. Особено важно е, че специалните езикови форми правят езика по-малко монотонен, а спецификацията по-сложна и могат да доведат до проблеми, когато софтуерът стане голям. Това представяне е особено разпространено в общността на Lisp, тъй като има много прост, правилен и недълбок синтаксис, който може лесно да се променя.

Производни термини

какво представлява синтактичната захар

Синтактична сол. Метафората беше разширена с въвеждането на този термин, който се отнася до функция, предназначена да затрудни писането на лош код. По-специално, синтактичната сол е обръч, който програмистите трябва да прескочат, за да докажат, че знаят какво се случва, а не изразява действието на програмата. Например в Java и Pascal присвояването на стойност с плаваща запетая на променлива, декларирана като int, без допълнителен синтаксис, който изрично да посочва, намерение ще доведе до грешка по време на компилация, докато езиците C и C ++ автоматично съкращават всички числа с плаваща запетая, присвоени на int. Това обаче не е синтаксис, а семантика.

В езика C # скриването на наследен член на класа дава предупреждение на компилатора, освен ако не се използва ключовата дума, която показва, че скриването е умишлено. Това се прави, за да се избегнат възможни грешки поради сходството на синтаксиса на командата switch с този на C или C ++, C # изисква прекъсване за всеки непълен случай на етикета switch, дори ако не позволява имплицитно връщане назад.

Синтактичната сол може да наруши целта на кода, като го направи нечетим и по този начин влоши качеството му. В екстремни случаи основната част може да бъде по-кратка от режийната част, въведена, за да отговори на езиковите изисквания.

Алтернативата е да се генерират предупреждения от компилатора, когато има голяма вероятност кодът да е резултат от грешка - практика, разпространена в съвременните C/C компилатори ++.

Синтактичен захарин

чаша кафе и сметана

Друго разширение също е сироп. Подобно на захарина, то означава и неразумен синтаксис, който не улеснява програмирането.

Може да ви се струва странно да го наречете "сладко", но ако работите в Rubyist, това е оправдано. Тази програма има повече синтактични захари от много други езици, защото набляга на човешкото разбиране, а не на компютърното. Създателят на Ruby, Юкихиро Мацумото, е искал да направи езика не само ефективен, но и забавен. Компилаторите и интерпретаторите може да харесат този високоструктуриран, недвусмислен отдел на граматиката, но хората може да го намерят за труден за разбиране. Тук се появява синтактичната захар - тя прави езика "по-сладък" както за писане, така и за четене.

Писане на код

захар за синтаксиса на питон

Важно е да се помни, че "синтактична захар" не е технически термин, а конструкция, която има за цел да опише начина на изразяване на езика. Казано по-просто, терминът означава оптимизиран код за хора. Целта е да се опрости синтаксисът, така че да е лесен за четене, дори ако това намалява част от техническата яснота. Разбира се, писането на сладък код не означава, какво е възможно пропускат важна стъпка от разбирането.

Както и в реалния живот, да се знае колко захар се използва е важно за цялостно здраве здраве. Sugar опростява кода и го прави изразителен, но също така води до двусмислие. Обикновено това се дължи на факта, че не всички познават и прилагат тази концепция в програмирането.

Статии по темата