Sintaktički šećer: definicija, porijeklo i primjeri

U računarstvu, sintaktički šećer je lingvistika u programskom jeziku. Dizajniran je da kôd učini lakšim, čitljivijim i izražajnijim. Ovaj šećer čini jezik "slađim" za ljudsku upotrebu. Odnosno, stvari se mogu izraziti jasno, kratko ili u alternativnom stilu koji neki možda preferiraju.

Sintaktički šećer: šta je to?

Sintaktički šećer, definicija

Mnogi programski jezici pružaju poseban odjel gramatike za ažuriranje elemenata. Apstraktno, referenca na dati objekat je procedura od dva argumenta: niza i indeksa, koji se mogu izraziti kao get_array(niz, vektor(i, j)). Umjesto toga, mnogi jezici daju sintaksu kao što su Niz [i, j]. Slično tome, ažuriranje elementa niza, na primjer, set_array(niz, vektor(i, j), vrijednost), je procedura sa tri argumenta, ali mnogi stručnjaci daju kod kao što su Niz[i, j] = vrijednost.

Konstrukt u jeziku naziva se" sintaktički šećer " ako se može ukloniti iz programa bez ikakvog uticaja na funkcionalnost i izražajnost.

Različiti procesori, uključujući kompajlere i statičke analizatore, često proširuju zaslađene konstrukcije na fundamentalnije uređaje prije obrade. Ovaj proces se zove "desagering".

Porijeklo

Termin" sintaktički šećer " skovao je Peter J. Landin je 1964. godine opisao odjel površinske gramatike jednostavnog ALGOLA, programskog jezika koji je semantički definiran u smislu aplikativnih izraza lambda računa usmjerenih na leksičku zamjenu λ sa"gdje".

Kasniji programski jezici kao što su CLU, ML i shema proširili su pojam kako bi označili izvedenicu u jeziku koji se može definirati kao sintaktički šećer sa stanovišta jezgre osnovnih konstrukcija. Praktične funkcije višeg nivoa mogu se "razvrstati" i razložiti u podskup. Ovo je, u stvari, uobičajena matematička praksa izgradnje od Primitiva.

Oslanjajući se na Landinovu razliku između osnovnih jezičkih konstrukcija i sintaksičkih svojstava šećera, Mathias Fellaisen je 1991.godine predložio kodifikaciju "izražajne moći" koja odgovara raširenim vjerovanjima u književnosti. Definisao je to kao "značajnije" znači da bez dotičnih jezičkih konstrukcija program mora biti potpuno reorganiziran.

Poznati primjeri sintaktičkog šećera

Sintaktički šećer, primjeri

U jeziku COBOL, mnoge od posrednih ključnih riječi su "slatke", odnosno po želji se mogu izostaviti. Na primjer, rečenica pomjera A B. i pomjeri A na B. izvršite potpuno istu funkciju, ali druga čini radnju koja se izvodi jasnijom.

Operatori proširenog složenog dodjele: na primjer, A + =B je ekvivalentan a = a+ b U C i sličnim jezicima, pretpostavljajući da a nema nuspojava, na primjer, a je redovna varijabla ako.

U Perlu, osim ako (uslov) {...} je sintaktički ako (nije uslov) {...}. Pored toga, svaka izjava može biti praćena uslovom da izjava ako je uslov je ekvivalentno to if (uslov) {izjava}, ali prvi je prirodnije formatiran u jednom redu.

U jeziku C, pokazivači na početak memorijskog elementa mogu se napisati bez upotrebe posebnih sintaksi: *(a + i). Iako postoji posebna sintaksa za ovaj proces na ovom jeziku: a[i]. Slično, za->x, zapis je sintaktički šećer za pristup članovima pomoću operatora dereferencije (*a). x.

Koristeći

Izjava u C# osigurava da se neki objekti pravilno odlažu. Kompajler proširuje izjavu u Pokušajte-konačno blokirajte.

Jezik C # omogućava vam da varijable deklarirate kao gdje x = expr, što omogućava kompajleru da emituje tip x iz izraza expr, umjesto da zahtijeva eksplicitnu deklaraciju.

Liste također sadrže Python sintaktički šećer (na primjer, [x * x za x u rasponu (10)] za popis kvadrata) i dekoratora (@staticmethod).

U Haskellu je niz označen navodnicima semantički ekvivalentan broju znakova.

U rvest paket , javlja oznaka %>% , i označava da će podaci (ili izlaz funkcije) koji prethode služiti kao prvi argument sljedećeg alata. Ovo pruža linearniji protok i dizajn manipulacije podacima. Tidyverse je napisan za postavljanje vrijednosti.

Kritika

sintaktička svojstva šećera

Neki programeri smatraju da ove mogućnosti korištenja sintakse ili nisu važne, ili jednostavno nisu ozbiljne. Važno je napomenuti da posebni jezički oblici čine jezik manje monotonim, a njegova specifikacija složenijom i mogu uzrokovati probleme kako programi postaju veliki. Ova reprezentacija je posebno rasprostranjena u Lisp zajednici, jer ima vrlo jednostavnu, redovnu i površnu sintaksu koja se lako može promijeniti.

Izvedeni uslovi

sintaktički šećer šta je to

Sintaktička sol. Metafora je proširena uvođenjem ovog pojma, koji označava funkciju dizajniranu da otežava pisanje lošeg koda. Konkretno, sintaktička sol je obruč kroz koji programeri moraju da pređu da bi dokazali da znaju šta se dešava, a ne da izraze akciju programa. Na primjer, u Javi i Pascalu, dodjeljivanje vrijednosti s pomičnom tačkom varijabli deklariranoj kao int bez eksplicitne dodatne sintakse, ta namjera rezultiraće greškom kompajliranja, dok C i C++ automatski skraćuju sve brojeve sa pomičnim zarezom dodijeljene int-u. Međutim, ovo nije sintaksa, već semantika.

U C#, kada skrivate naslijeđenog člana klase, izdaje se upozorenje kompajlera osim ako se ključna riječ ne koristi da označi da je skrivanje namjerno. Ovo je neophodno kako bi se izbjegle moguće greške zbog sličnosti prekidača sintaksnog izraza sa C ili C++, C # zahtijeva prekid za svaku nepraznu oznaku kućišta prekidača, čak i ako ne dozvoljava implicitni pad.

Sintaktička sol može narušiti svoju svrhu, čineći kod nečitljivim i na taj način narušavajući njegov kvalitet. U ekstremnim slučajevima, većina može biti kraća od općih troškova uvedenih kako bi se ispunili jezički zahtjevi.

Alternativa ovom konceptu je generiranje upozorenja kompajlera kada postoji velika vjerovatnoća da se čini da je kod rezultat greške, što je praksa uobičajena u modernim C / C kompajlerima ++.

Sintaktički saharin

šolja kafe sa vrhnjem

Još jedno proširenje je takođe sirup. Baš kao i saharin, to znači bezrazložnu sintaksu koja ne olakšava programiranje.

Možda se čini čudno nazvati jezik "slatko", ali ako radite u Rubyistu, biće opravdano. U ovom programu ima više sintaksičkog šećera nego na mnogim jezicima, jer se fokusira na ljudsko razumijevanje, a ne na razumijevanje računara. Ruby creator, Yukihiro Matsumoto, želio je jezik učiniti ne samo efikasnim, već i fascinantnim. Prevodioci i tumači mogu se svidjeti tako visoko strukturirano, nedvosmisleno gramatičko odjeljenje, ali ljudima može biti teško razumjeti ga. Tu se pojavljuje sintaktički šećer — čini jezik "slađim" i u pisanju i u čitanju.

Pisanje koda

sintaktički šećerni piton

Mora se imati na umu da "sintaktički šećer" nije tehnički izraz, već konstrukcija dizajnirana da pomogne u opisu načina izražavanja jezika. Jednostavno rečeno, ovaj izraz podrazumijeva optimizirani kod za ljude. Cilj je pojednostaviti sintaksu tako da je laka za čitanje, čak i ako smanjuje određenu tehničku jasnoću. Naravno, pisanje slatkog koda ne znači, da možeš preskočite važnu fazu razumijevanja.

Kao i u stvarnom životu, važno je znati koliko se šećera koristi za opšte zdravlje . Šećer čini kod jednostavnim i izražajnim, ali i izaziva dvosmislenost. To je obično posljedica činjenice da ne znaju svi i ne primjenjuju takav koncept u programiranju.