Bence sözdizimsel şeker terimi aynı temel anlambilimi ifade etmek için alternatif bir sözdizimini belirtir.
Örneğin sum
, keyfi uzunluktaki tamsayıların bir listesini toplayabilen bir işleme sahip bir programlama dili A'yı ele alalım . Bu dilde ifadeleri yazabiliriz
sum []
sum [3, 4, 5, 1]
sum [2, 7]
sonuçları sırasıyla 0, 13 ve 9'dur.
Şimdi, sum
iki argümanla kullandığımız zamanların% 90'ının farkında olduğumuzu varsayalım ve bu nedenle, kolaylık sağlamak için yeni gösterimi sunuyoruz
2 + 7
hangi adildir sözdizimsel şeker için sum [2, 7]
.
Şimdi hiçbir ek işlemi olmayan ikinci bir B dili alın . Biz operatörler gibi olabilir <
, =
bize numaralarını karşılaştırmak için izin, ancak hiçbir şekilde eklemek numaralar. B dilinin 2. sürümünde , sözdizimi ile yeni bir ekleme işlemi sunuyoruz
2 + 7
her zamanki gibi sayı ekler.
A dili bağlamında, +
gösterim sözdizimsel şekerdir (gösterim yerine kullanılabilen alternatif, basitleştirilmiş ve geçici bir sum [...]
gösterimdir). Benzer şekilde, Hoa Long Tam'ın cevabında da belirtildiği gibi, C'de gösterim p->field
sözdizimsel şekerdir (*p).field
.
B dili bağlamında, +
gösterim sözdizimsel şeker değildir (toplam işlemi için kullanılan tek geçerli sözdizimidir). Benzer şekilde, C, yapı üyelerine yalnızca işaretçilerle erişebiliyorsa (*p).field
ve gösterime sahip p->field
olmasaydı , gösterim sözdizimsel şeker olmazdı.
Kanımca, sözdizimsel şeker konusunda programlama dili anlambilimiyle ilgili bir karışıklığa kadar izlenebilen yanlış anlaşılmalar var. Akıl yürütme şöyle gider:
- Bir programın anlambilimi, bir programın hesapladığı şeydir.
- Bir programlama dilinin ifade gücü, o dilde tanımlanabilecek hesaplamalar ile temsil edilir.
- Tüm hesaplanabilir işlevleri (Turing makineleri kullanılarak tanımlandığı gibi) tanımlayabilen iki programlama dili aynı ifade gücüne sahiptir ...
- ... ve bu yüzden sadece sözdiziminde farklılık gösterir.
- Sonuç: Turing-complete dilinin herhangi bir uzantısı sadece sözdizimidir (sözdizimsel şeker) çünkü dilin ifade gücünü değiştirmezsiniz.
Yukarıdaki akıl yürütme çizgisi, "sözdizimsel şeker doğru bir şekilde tanımlanamaz", "bir zevk meselesi" veya "her programlama dili özelliği her şeyden önce sadece sözdizimsel şeker" gibi genel iddialara yol açar.
Yukarıdaki argümandaki temel problem, anlambilimin sadece bir program tarafından neyin hesaplanabileceği değil, aynı zamanda nasıl hesaplandığı , yani hangi ilkel yapıların kullanıldığı ve bunların nasıl birleştirildiği ile ilgili olduğudur.
Örneğin, nesneler altta yatan bit konfigürasyonları ve bit dönüşümleri için sözdizimsel şeker değildir, veri ve işlemleri modellemeye ve hesaplamaları tanımlamaya izin veren bir yapıdır. Nesneler, yöntemler, yöntem çağrıları ile hesaplama, baytlarla, işlemci kayıtlarıyla, bellek adresleriyle hesaplama ile aynı değildir (iki hesaplama aynı sonuca sahip olsa ve ilk hesaplama için ikinci hesaplama kullanılsa bile).
Bu açıklamayı biraz uzun yaptım, ancak diğer cevaplarda ele alınmadığını gördüğüm önemli bir unsur olduğunu düşünüyorum.
Alt satır: sözdizimsel şeker, zaten bir dilde olan ve zaten iyi tanımlanmış bir sözdizimi ve semantiğe sahip bir yapı için alternatif (muhtemelen daha uygun) bir sözdizimidir. Yeni sözdizimi (sözdizimsel şeker) mevcut olandan farklıdır, ancak aynı semantiğe sahiptir . Bir dilde yeni bir yapı ve bunun için yeni bir sözdizimi eklerseniz, sözdizimsel şekeriniz yoktur.