“Sözdizimi” ve “Sözdizimsel Şeker” arasındaki fark nedir


45

Arka fon

Syntactic Sugar hakkındaki Wikipedia sayfası :

Bilgisayar bilimlerinde sözdizimsel şeker, bir şeyleri okumayı veya ifade etmeyi kolaylaştırmak için tasarlanmış bir programlama dili içinde sözdizimidir. Dili, insanların kullanması için "daha tatlı" kılar: işler daha net, daha özdeş ya da bazılarının tercih edebileceği alternatif bir tarzda ifade edilebilir.

Sözdizimsel Şeker ile Sözdizimi arasındaki farkın ne olduğunu gerçekten anlamıyorum.

Şekerli versiyonun daha net, daha özlü, belki de bir kazandan kaynaması olabileceğinin farkındayım. Ancak bazı seviyelerde hissediyorum, tüm sözdizimi, kodun neyin derlendiğine dair bir soyutlama oluşturmak için temelde bunu yapıyor.

Aynı Vikipedi sayfasından:

Derleyiciler, statik analizörler ve benzerleri dahil olmak üzere dil işlemcileri, genellikle "çürütme" adı verilen bir işlem olan şekerli yapıları işlemden önce daha temel yapılara genişletir.

Bir düşünce alıştırması olarak, bu ifadede "sık sık" alırsam "her zaman" anlamına gelir: Eğer fark sadece derleyicinin bir sonraki aşamaya geçmeden önce sözdizimini "terk etmesine" izin verip vermemesiydi? Derleyiciden biliyoruz ya da umurunda Sugar'dekiler nedir ya da değil mi?

Bu sitede çok ilgili bir soru "Sözdizimsel Şeker titiz tanımı?" Başlayan bir cevabı var:

IMHO Sözdizimsel şeker için bir tanımınız olduğunu düşünmüyorum, çünkü cümle BS ve muhtemelen "gerçek işletim sistemlerinde" "gerçek araçlar" kullanan "gerçek programcılar" hakkında konuşan insanlar tarafından kullanılıyor.

Hangi bana belki dili kullanan kodlayıcıda çok büyük bir fark olmadığını söyleyebilir? Belki de fark sadece derleyici yazar tarafından algılanabilir? Sözdizimi Syntaktik Şeker'in kapağının altında ne olduğunu bilmek için dili kullanan kodlayıcı için faydalı olabilecek durumlar olsa da? (Fakat belki de gerçekte konuyla ilgili herhangi bir söylem, terimi alevli yem olarak kullanma eğilimindedir?)

Sorunun kalbi

Yani ... Sorunun kısa versiyonu:

  • Sözdizimi ve Sözdizimsel Şeker arasında gerçek bir fark var mı?
  • Kim için önemli?

Düşünce İçin Ekstra Yiyecek

Konu çelişkileri için bonus:

Wikipedia sayfasında bir örnek verilmiştir:

Örneğin, C dilinde a[i]gösterim, sözdizimsel şekerdir.*(a + i)

Yukarıdaki bağlantılı soruya bir başka cevap ise aynı örnekten bahseder:

Şimdi düşünün a[i] == *(a + i). Dizileri herhangi bir şekilde kullanan herhangi bir C programını düşünün.

Ve şunu özetler:

[]Notasyonu bu soyutlama kolaylaştırır. Sözdizimsel şeker değil.

Aynı örnek için ters sonuç!


9
Anılan soruya cevabım ise bunu açıklamak sözdizimsel şeker bir olan alternatif sözdizimi daha kolay bazı ortak deyimleri ifade etmek yapar ama yeni semantik tanıtmak gelmez (zaten dilin var olduğunu bazı sözdizimi). Bu anlamda, sözdizimsel şeker içeriğe (kullanıldığı dile göre) bağlıdır: aynı gösterim bir dilde normal sözdizimi ve bir dilde sözdizimsel şeker olabilir. Bu açıklama size yardımcı oluyor mu?
Giorgio

7
Bir problem, bazı insanların "sözdizimi şekeri" nin değilken kirli bir kelime olduğunu düşünüyor gibi görünmesidir. Bir sisteme eklediğiniz her işlev veya sınıf "sözdizimsel şeker" olarak kabul edilebilir, çünkü dilde açıkça açıkça ifade edilebilen fikirleri ifade etmeyi biraz (veya çok) kolaylaştırır.
Joris Timmermans

Görünüşe göre, senin için önemli.
SShaheen

11
Sonunda, hepsi elektrik üzerinden sadece syntatic şeker.
Anthony Pegram

Yanıtlar:


34

Ana fark, sözdiziminin bazı işlevleri ortaya çıkarmanıza izin vermek için bir dilde tanımlanmış dilbilgisi olmasıdır. En kısa zamanda bu işlevselliği, herhangi alabilir olarak diğer aynı şeyi şeker kabul edilir yapalım sözdizimi. Elbette ki, bu iki sözdiziminden hangisinin şeker olduğu konusunda garip senaryolar ortaya çıkıyor, özellikle de hangisinin ilk önce geldiği belli değil.

Uygulamada, sözdizimsel şeker yalnızca, ek lhs + rhsharita oluşturmak gibi, kullanım kolaylığını kolaylaştırmak için bir dile eklenen sözdizimini tanımlamak için kullanılır lhs.Add(rhs). C'nin dizi indekslemesinin sözdizimsel şeker olduğunu düşünürdüm.

En önemlisi, zarif tasarımların çoğaltma miktarını sınırlandırma eğiliminde olmasıdır. Sözdizimsel şekere ihtiyaç duymak (veya en azından istemek), bazıları tarafından yapılan tasarım başarısızlığının bir işareti olarak görülür.


“Bu işlevselliğe ulaşır ulaşmaz, aynı şeyi yapmanıza izin veren herhangi bir sözdizimi şeker olarak kabul edilir.”: Bu sözdizimsel şekere sahip olmak yeterli değildir, çünkü aynı işlevi hesaplayan başka bir program sözdizimsel şeker olacaktır. . Şekerli ve şekersiz program aynı semantikaya sahip olmalıdır .
Giorgio

3
@Giorgio "Bu iki program aynı işlevi görür" "bu iki program aynı semantiklere sahip" den farklı mı? Bunun dışında, sözdizimsel unsurlara değil programlara odaklanıyorsunuz. Bütün programlar sözdizimsel şeker olamaz. Bir operatör, bir nevi ifade vb. Sözdizimsel şeker olabilir.

@Giorgio - Aslında, farklı anlambilimde benzer fonksiyonelliklerin farklı fonksiyonellikler olduğunu düşünüyorum. Ve evet, aynı anlambilimine sahip kendi derleyicinizi yazmak ve bu "şekeri" olarak adlandırmak gibi atlama çemberleri olabilir. Açıkçası, böyle gayri resmi bir kavram için resmi bir tanım olmayacak.
Telastyn

1
@Giorgio Yine, benim etim eşitliğe almanızla değil, sözdizimsel şeker kavramını programlara uygulamanızdır. Terim tüm programlara atıfta bulunmaz! Tanımınıza bağlı olarak, ya sadece atomik yapı taşları, ya da sadece kısa program parçaları (ilki>% 80'i kapsıyor gibi görünüyor, ancak genellikle sözdizimsel şeker olarak kabul edilen her şeyi kapsadığından emin değilim).

3
@Giorgio Örneğin, bütün programlar ;-) Veya her iki formülasyonun da ilgisiz dil anahtar kelimeleri içeren yeterince büyük bir şey. Ben sözdizimsel şeker gibi muamele olmamıştım o şey olduğunu if (a) return blah; ...karşı result_type res; if (a) res = blah; else {...}; return res;. Bu programlar arasında herhangi bir fark bulmak için, belirli dilleri varsaymanız ve aşırı derecede dil avukatı-y (genellikle küçük adımlı işlemsel anlambilim noktasına) almanız gerekir.

10

Sözdizimi, bir dil işlemcisinin bir dilin yapısının ne anlama geldiğini anlamak için kullandığı şeydir. Sözdizimsel şeker olarak kabul edilen yapıların da dil işlemcisi tarafından yorumlanması gerekir ve bu nedenle dillerin sözdiziminin bir parçasıdır.

Sözdizimsel şekeri bir dilin söz diziminin diğer bölümlerinden ayıran şey, sözdizimsel şekeri dilden yazılabilecek programları etkilemeden dilden çıkarmak mümkün olacaktır.

Daha formalist bir tanım vermek için söyleyebilirim.

Sözdizimsel şeker, bir dilin sözdiziminin etkileri, dilin diğer sözdizimi yapıları bağlamında tanımlanan bölümleridir.

Bu hiçbir şekilde sözdizimsel şekeri veya buna sahip olan dilleri reddetmek anlamına gelmez, çünkü sözdizimsel şekerin kullanımı genellikle amacı daha anlaşılır olan programlara yol açar.


“Kesin olarak 'bu sözdizimsel şeker ve sözdizimi' demenin bir yolu yoktur, çünkü sözdizimsel şeker bir dilin söz diziminin bir parçasıdır.”: Yanlış. Zaten dilde olan ve bir sözdizimi olan bazı yapılar için sözdizimi bazılarını sözdizimi sunan dil tasarımcısıdır . Sözdizimsel şeker normalde geçicidir (daha az genel) ancak daha okunaklı / kullanımı kolaydır.
Giorgio

@ Giorgio: İlk paragrafımı biraz garip olduğu için yeniden yazdım. Ancak sözdizimsel şekerin normalde geçici olarak eklendiğini kabul etmiyorum. En çok bilinen sözdizimsel şeker biti muhtemelen C ->operatörüdür ve bu operatörün diğerlerinden daha az genel olduğunu görmüyorum.
Bart van Ingen Schenau

1
@Giorgio: Bu durumda, doğrudan tek bir montaj talimatıyla eşleşmeyen her şey, sözdizimsel şeker olarak kabul edilmelidir, çünkü her zaman daha basit parçalara bölünebilir (bu işlevler içerir). Bu görüşü paylaşan çok insan bulamayacağınızı sanmıyorum.
Bart van Ingen Schenau

1
"Geçici", özel, kısıtlı bir durumda kullanıldığı anlamına gelir. Terimin genel olarak olumsuz bir çağrışımı yoktur. Geçici çözüm terimi olumsuz bir çağrışıma sahiptir, çünkü birileri normalde belirli olanları değil (benzer sorunları tekrar tekrar çözmekten kaçınmak için) genel çözümler ister.
Giorgio

1
"Geçici çözümler" genellikle kötü olduğu için, "geçici" nin kendisinin kötü olduğu anlaşılabilir. Ancak AKA fonksiyonunun aşırı yüklenmesi ( en.wikipedia.org/wiki/Ad_hoc_polymorphism ) kötü olmayan "geçici polimorfizm" de var . En azından İtalyanca'da (ana dilimde) Latince "geçici" kullanımın kendisi olumsuz değildir. İngilizce'de olumsuz bir çağrışım varsa, cehaletimi affedin.
Giorgio

6

Diğer cevaplar anahtar bir kavramdan bahsetmemiştir: soyut sözdizimi ; onsuz, "sözdizimsel şeker" terimi bir anlam ifade etmiyor.

Soyut sözdizimi, dillerin öğelerini ve yapılarını ve bu dilin cümlelerinin daha büyük ifadeler oluşturmak için nasıl birleştirilebileceğini tanımlar. Soyut sözdizimi, somut sözdiziminden bağımsızdır. "Sözdizimsel Şeker" terimi, anladığım kadarıyla, somut sözdizimini ifade eder.

Genel olarak, bir dil tasarlarken, soyut sözdiziminizin her bir terimi için somut sözdizimi oluşturmak istersiniz, böylece insanlar kendi dilinizde düz metin kullanarak kod yazabilir.

Şimdi diyelim ki foo için garip bir somut sözdizimi oluşturdunuz . Kullanıcılar şikayet eder ve aynı soyut sözdizimini temsil etmek için yeni bir somut sözdizimi uygularsınız . Sonuç olarak, soyut sözdiziminiz ve anlambiliminiz değişmedi, ancak şimdi aynı soyut sözdizimi için iki somut sözdiziminiz var.

Bunun, insanların "sözdizimsel şeker" dedikleri zaman ne anlama geldiğine inanıyorum - yalnızca somut sözdizimini etkileyen, ancak soyut sözdizimini veya anlambilimi etkilemeyen değişiklikler.

Ve böylece "sözdizimsel şeker" ile "somut sözdizimi" arasındaki fark artık açıktır. Bana göre. :)

Bu yorum aynı zamanda Alan Perlis'in "sözdizimsel şekerin noktalı virgülün kanserine neden olduğunu" söylediğinde ne anlama gelebileceğini açıklamaya da yardımcı olur: dünyadaki bütün somut sözdizimsel şeker zayıf soyut sözdizimini düzeltir ve bu şekeri eklemek için harcadığınız tüm çabayı gerçek sorunla uğraşmak için harcamamanız gereken çaba - soyut sözdizimi.


Ayrıca, bunun sadece benim görüşüm olduğunu; Sadece buna inanıyorum, çünkü bunun benim için anlamlı olduğunu düşündüğüm tek yorum bu.


1
Karşılaştırma özetine karşı somut sözdizimini de düşünmüştüm ama bunun her zaman sözdizimsel şekeri açıkladığından emin değilim. Örneğin, C, bir işaretçi verilen pbir alan içeren bir yapı için xifadeleri yapmak, (*p).xve p->xaynı soyut sözdizimi var? Ama her şey soyut ve somut sözdizimine kaynaştığında harika olacağını düşünüyorum.
Giorgio

@Giorgio ne yazık ki, bunlardan birinin diğeri için sözdizimsel şeker olup olmadığını ya da soyut sözdizimi ağaçlarının nasıl görüneceğini gizlice belirtmek için yeterince C bilmiyorum. Veya C'nin özelliği aslında soyut bir sözdizimi tanımlasa bile. :(

1
İlk ifade .kökünde a olan bir ağaç olarak ayrıştırılabilir . Kökün sol alt düğümü bir *, alt ise p. Kökün sağ alt düğümü x. İkinci ifade için, soyut sözdizimi ağacının ->kökünde bir kökü vardır ve kökün iki çocuğu vardır pve x. Her iki ifadeyi farklı bir şekilde ayrıştırabilmenin mantıklı olup olmadığını anlamaya çalışıyorum, böylece aynı soyut sözdizimi ağacına sahipler, ama şu anda nasıl olduğunu göremiyorum.
Giorgio

3
Bu ayrıştırma ağacının, genellikle bir AST olarak tanımlansa bile, Matt'in bahsettiği soyut sözdizimiyle aynı olduğunu sanmıyorum. Her iki ifade de aynı etkiye sahiptir ( işaretçi türünü referans türüne dönüştürür, sonra üyeye referans alırx )
Yararsız 15

1
"Her iki ifadede de aynı eylem var (işaretçi türünü referans türüne dönüştür, sonra üye x'e referans al)": Bu, soyut sözdizimi değil anlambilimdir. Özet sözdizimi , bir programın gerçek yapısını yansıtan bir ağaç üretmek için somut sözdiziminin ( (veya veya benzeri ;) gereksiz ayrıntılarının bırakılması anlamına gelir (bkz. En.wikipedia.org/wiki/Abstract_syntax_tree ). Ancak, soyut sözdiziminde programın anlambilimi hakkında henüz bir şey söylenmedi.
Giorgio

4

Sözdizimsel şeker, dil sözdiziminin bir alt kümesidir. Temel fikir, aynı şeyi söylemenin birden fazla yolu olduğu.

Ne yapar zor sözdizimsel şeker ve hangi parçalar "saf sözdizimi" dir bu kadar" ya da "o dilin yazarı amaçlanan hangi yolu bilmek zor" ya da "o biçim ilk geldiği söylemek zor" gibi ifadeler hangi parçalar söylemek Hangi formun daha basit olduğuna karar vermek için biraz keyfi bir şekilde ".

Ne yapar kolay saf veya şekerli belirli derleyici veya yorumlayıcı çerçevesinde soru sormak hangi parçaları karar vermek. Saf sözdizimi, derleyicinin doğrudan makine koduna dönüştürdüğü veya tercümanın doğrudan yanıt verdiği öğedir. Şeker, bu doğrudan şeyler gerçekleşmeden önce ilk olarak başka bir sözdizimine dönüşen şeylerdir. Uygulamaya bağlı olarak, bu, yazarın istediği veya dilin belirttiği şey ile aynı olabilir veya olmayabilir.

Uygulamada, konunun gerçekliğine karar verilme şekli budur.


Bu cevap yanlış sözdiziminin uygulanmasını şeker olup olmadığına bağlar. Daha önce hiç bir dilin bir elementinin "şeker" olup olmadığına dair, elementin nasıl uygulandığı ile ilgili olmayan bir tartışma görmedim. Tamamen, farklı, çirkin bir öğeyi sözdizimsel olarak kopyalayıp kopyalamaması ile ilgili.
GreenAsJade,

3

Gerçekten, Vikipedi'den ilk teklifinizde her şey "... okumayı kolaylaştırıyor ...", ".... insanların kullanımı daha tatlı ...." diyor.

Yazarken, "yapma" veya "yapma" gibi kısaltılmış formlar sözdizimsel şeker olarak kabul edilebilir.


(1) “Şimdi gitmeliyim” i (2) “Şimdi gitmeliyim” i düşünün: (1) (2) için sözdizimsel şeker mi?
Giorgio

1
@Giorgio hayır derdim.
ozz

Okunabilirlik nedeniyle ("gerekir", "olması gereken" den daha okunaklı olmamalıdır) veya anlam nedeniyle ("gerekir" ve "olması gereken" farklı anlamlara sahiptir).
Giorgio

@Giorgio yeterince adil :)
ozz

1
Ah görüyorum :) bir bağırsaktan daha fazlası sanırım, bu örnekte birinin diğerinden daha okunaklı olduğunu sanmıyorum
ozz

3

Genellikle sözdizimi şekeri, dilin varolan kısmı (sözdizimi) tarafından genelliği yitirmeksizin ancak açıklık kaybıyla ifade edilebilir. Bazen derleyiciler, kaynak kod tarafından yaratılan AST'yi dönüştüren ve şekere karşılık gelen düğümlerin çıkarılması için basit adımlar uygulayan açık bir çıkarma aşamasına sahiptir.

Örneğin Haskell, tekrarlayan bir şekilde aşağıdaki kuralları uygulayan monadlar için sözdizimi şekerine sahiptir.

do { f }            ~> f
do { g; h }         ~> g >> do h
do { x <- f; h }    ~> f >>= \x -> do h
do { let x = f; h } ~> let x = f in do h

Şu anda tam olarak ne anlama geldiği önemli değil - ancak LHS üzerindeki özel sözdiziminin RHS'de (yani fonksiyon uygulamaları, lambda'lar let) daha temel bir şeye dönüştürülebileceğini görebilirsiniz . Bu adımlar, her iki dünyanın da en iyisini korumayı sağlar:

  1. LHS üzerindeki sözdizimi, mevcut fikirleri daha net bir şekilde ifade eden programcı (sözdizimi şekeri) için daha kolaydır.
  2. Bununla birlikte, RHS yapıları için derleyicideki destek zaten derleyicide mevcut olduğu için, ayrıştırıcı dışında özel bir şey olarak görmesi gerekmiyor (hata bildirme hariç).

Benzer şekilde C'de yeniden yazma kuralını küçültmeyi hayal edebilirsiniz (operatörün aşırı yüklenmesi vs. nedeniyle C ++ için doğru değildir):

f->h ~> (*f).h
f[h] ~> *(f + h)

Bugün tüm bu programları kullanan ->veya []C kullanmadan tüm programları yazmayı hayal edebilirsiniz . Bununla birlikte, programcıların kullanması daha zor olacaktır, bu nedenle sözdizimi şekeri sağladı (sanırım 70'lerde derleyiciler için çalışmayı basitleştirebilir). Aşağıdaki, tamamen geçerli, yeniden yazma kuralını teknik olarak ekleyebileceğiniz için muhtemelen daha az açıktır:

*f ~> f[0] -- * and [] have the same expressiveness 

Sözdizimi şekeri kötü mü? Mutlaka gerekli değil - daha derin bir anlam anlamadan kargo kültü olarak kullanılması tehlikesi var. Örneğin, aşağıdaki işlevler Haskell'de eşdeğerdir, ancak çoğu yeni başlayanlar ilk formu sözdizimi şekeri fazla kullandıklarını anlamadan yazacaklardır:

f1 = do x <- doSomething
        return x
f2 = doSomething

Ek olarak, sözdizimi şekeri dili fazla karmaşıklaştırabilir veya genel deyimli kodlara izin vermeyecek kadar dar olabilir. Ayrıca, dilin belirli şeyleri kolayca yapmak için yeterince güçlü olmadığı anlamına da gelebilir - tasarımla (geliştiricilere daha keskin bir yapı eklemenin diğer hedeflere zarar verebileceği keskin araçlar veya çok özel bir dil vermeyin) veya form sözdizimi şekere kötü bir isim verdi. Dil, sözdizimi şekeri eklemeden başka yapıları kullanabilecek kadar güçlüyse, bunları kullanmak daha zarif olarak kabul edilir.


3

Bence en belirgin örnek, C'deki "+ =" sözdizimi olacaktır.

i = i + 1;

ve

 i +=  1;

tam olarak aynı şeyi yapın ve aynı makine talimatlarını tam olarak derleyin. İkinci form, birkaç karakter yazarak tasarruf sağlar, ancak daha da önemlisi, geçerli değere göre bir değeri değiştirdiğinizi açıkça belirtir.

"++" post / prefix operatörünü kanonik örnek olarak gösterecektim ancak bunun sözdizimsel şekerden daha fazlası olduğunu anladım. ++ i ve i ++ arasındaki farkı tek bir ifadede i = i + 1sözdizimini kullanarak ifade etmenin bir yolu yoktur .


+ = gibi durumlarda kullanışlı olabilir a[f(x)] += 1.
Florian F

1

İlk önce diğer bazı cevapları somut bir örnekle ele alacağım. C ++ 11 aralığı için döngü tabanlı (diğer birçok dilde foreach döngülerine benzer)

for (auto value : container) {
    do_something_with(value);
}

eşittir (yani, şekerli bir versiyon)

for (auto iterator = begin(container); iterator != end(container); ++iterator) {
    do_something_with(*iterator);
}

Şimdi, dile yeni bir soyut sözdizimi veya anlambilim eklememesine rağmen, gerçek bir faydası var.

İlk versiyon, niyeti (bir konteynırdaki her öğeyi ziyaret etmek) açık hale getirir. Aynı zamanda, geçiş sırasında kabı değiştirmek veya iteratorilmek gövdesinde daha fazla ilerlemek veya ilmek koşullarını tamamen yanlış yapmak gibi olağandışı davranışları da yasaklar . Bu, olası hata kaynaklarını önler ve bunu yaparken, kod okuma ve akıl yürütme zorluğunu azaltır.

Örneğin, ikinci sürümde bir karakterlik bir hata:

for (auto iterator = begin(container); iterator <= end(container); ++iterator) {
    do_something_with(*iterator);
}

son bir hata ve tanımsız davranış verir.

Bu nedenle, şekerli versiyon tam olarak kullanışlıdır, çünkü daha kısıtlayıcıdır ve bu nedenle güvenmek ve anlamak kolaydır.


İkincisi, asıl soruya:

Sözdizimi ve Sözdizimsel Şeker arasında gerçek bir fark var mı?

Hayır, "sözdizimsel şeker" (somut) dil sözdizimidir, "şeker" olarak kabul edilir, çünkü dilin soyut sözdizimini veya çekirdek işlevselliğini genişletmez. Matt Fenwick'in bu konudaki cevabını beğendim.

Kim için önemli?

Dilin kullanıcıları için, diğer sözdizimleri kadar önemlidir ve bu şeker, belirli deyimleri desteklemek (ve bir anlamda korusun) için sağlanır.

Sonunda, bonus soru üzerine

[] Notasyonu bu soyutlamayı kolaylaştırır.

bu , sözdizimsel şekerin tanımına çok benziyor : işaretçileri diziler olarak kullanmayı destekler (ve dilin yazarlarına nimetini sağlar). p[i]Form gerçekten daha kısıtlayıcı olmayan *(p+i)tek fark niyet net iletişim (ve hafif okunabilirliği kazanç) bu yüzden.


İlk önce, "[döngü için aralık] tam olarak eşdeğerdir (yani şekerli bir versiyona [başka bir şey]"). Ama sonra farklı olduğunu söylüyorsunuz, bu kabın geçiş sırasında değiştirilmesini yasaklıyor ... ve tanımladığınız basit sözdizimsel dönüşümden daha fazlasını yapan başka farklılıklar da var (örneğin, "konteyner" geçici olduğunda davranış). Bu farklılıklar , sadece sözdizimsel şeker olmadığını , değil mi? Bana öyle geliyor ki belki de bu, sözdizimsel şekere iyi bir örnek değildir.
Don Hatch,

Bazı genel döngülere eşdeğer olduğunu söylemedim , verilen spesifik döngüye eşdeğer olduğunu söyledim . Belirli döngü kabı değiştirmek ve çok yaygın bir deyim temsil etmez - ama hala o ortak bir dil takip ediyor, veya olağandışı bir şey döngü vücutta gizlenen ise olmadığını söylemek için dikkatle her genel döngü okumak gerekir. Yeni döngü, ortak deyim için şekerdir , hem daha az ayrıntılı hem de kullanılan deyimi daha açık bir şekilde iletir. Öyle değil ve asla iddia etmedim, genel olarak bir döngü fikri için bir şekilde şeker.
İşe yaramaz

0

Bu cümlenin orijinal çağrışımı ne olursa olsun, bugünlerde temel olarak aşağılayıcıdır, hemen hemen her zaman "sadece" veya "sadece" sözdizimsel şeker olarak ifade edilir. Hemen hemen sadece işleri okunaksız bir şekilde yapmaktan hoşlanan ve bunu meslektaşlarına haklı çıkarmak için özlü bir yol isteyen programcılar için önemlidir. Günümüzde öncelikli olarak bu terimi kullananların tanımları, kendi bakış açılarından şöyle olabilir:

Dili gerçekten anlamayan programcılar için bir koltuk değneği sağlamak amacıyla, daha yaygın olarak uygulanabilir diğer sözdizimi ile gereksiz olan sözdizimi.

Bu yüzden aynı sözdizimsel eleman için iki karşıt sonuca varıyorsunuz. Dizi gösterimindeki ilk örneğiniz, Bart'ın cevabına benzer bir terimin orijinal pozitif anlamını kullanmaktır. İkinci örneğiniz, pejorative anlamda sözdizimsel şeker olma yüküne karşı dizi gösterimini savunmak. Başka bir deyişle, sözdiziminin bir koltuk değneği yerine kullanışlı bir soyutlama olduğunu savunuyor.


Bence ("sadece sözdizimsel şeker") teriminin anlamsal anlamı, sözdizimsel şekere herhangi bir bilgi eklememekten kaynaklanıyor.
Giorgio

1
O fikirden gelebileceğini sözdizimsel herhangi bir bilgi eklemez , ama bu fikri bir olgu değildir. Niyetle ilgili bilgiler (örneğin, iyi bilinen bir deyimi kullanmak için) hala bilgidir.
Yararsız

@ Yararsız: Bilgiye göre, bir programın sözdizimsel şekerli veya sekersiz olarak aynı davrandığı anlamına geliyordu. Elbette bir avantaj olan sözdizimsel şekerle (okuyucu için bilgi / belge ekler) daha okunabilir.
Giorgio

Sahte. Sözdizimsel şeker bir aşağılayıcı değildir. Onun tuzuna değecek herhangi bir programcı, aynı kodu her yere kopyalayıp yapıştırmak yerine, daha karmaşık görevleri içeren ve basitleştiren kütüphaneler oluşturacaktır. Bu, daha iyi davranışlı, daha iyi korunabilir kodlara yol açar. Temel olarak, sözdizimsel şekerin karmaşık olsa da, karmaşık modelleri basit sözdizimine soyutlayarak başardığı şey budur.
Craig

İnsanların genellikle terimden hakaret ettiği anlamına geldiğini söylüyorum, altta yatan uygulamanın kendisi hakkında yorum yapmıyorum. "Aptal" kelimesini perfore olmak demek bütün insanların aptal olduğu anlamına gelmez. İnsanlar uygulama hakkında olumlu konuşmak istediklerinde, genellikle "soyutlama" veya "kapsülleme" gibi terimler kullanırlar.
Karl Bielefeldt
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.