Giriş
Bu Ecma Standardı, ECMAScript 2027 Dilini tanımlar. ECMAScript Dil Belirtiminin on sekizinci baskısıdır. ECMAScript, en bilinenleri JavaScript (Netscape) ve JScript (Microsoft) olan birkaç köken teknolojiye dayanır. Dil, Netscape'te Brendan Eich tarafından geliştirilmiş ve ilk olarak bu şirketin Navigator 2.0 tarayıcısında ortaya çıkmıştır. En çok web tarayıcılarına gömülü bir dil olarak bilinse de, tarayıcı dışında sunucu ve gömülü uygulamalar da dahil olmak üzere yaygın biçimde benimsenmiş ve dünyanın en yaygın kullanılan genel amaçlı programlama dillerinden biri haline gelmiştir.
ECMAScript Dil Belirtiminin geliştirilmesine Kasım 1996'da başlanmıştır. Bu Ecma Standardının ilk baskısı, Haziran 1997'deki Ecma Genel Kurulunda kabul edilmiştir.
Bu Ecma Standardı, hızlı izleme prosedürüyle benimsenmek üzere ISO/IEC JTC 1'e sunulmuş ve Nisan 1998'de uluslararası standart ISO/IEC 16262 olarak onaylanmıştır. Haziran 1998'deki Ecma Genel Kurulu, ECMA-262'nin ikinci baskısını, ISO/IEC 16262 ile tam uyumlu olacak biçimde onaylamıştır. Birinci ve ikinci baskılar arasındaki değişiklikler yazım düzeltmeleri niteliğindedir.
Standardın üçüncü baskısı, güçlü düzenli ifadeler, daha iyi dizgi işleme, yeni denetim deyimleri, try/catch kuraldışı durum yönetimi, hataların daha sıkı tanımlanması, sayısal çıktı biçimlendirmesi ve ilerideki dil büyümesine yönelik küçük değişiklikler getirmiştir. ECMAScript standardının üçüncü baskısı, Aralık 1999'daki Ecma Genel Kurulunda kabul edilmiş ve Haziran 2002'de ISO/IEC 16262:2002 olarak yayımlanmıştır.
Üçüncü baskının yayımlanmasının ardından, ECMAScript, World Wide Web ile birlikte kitlesel bir benimsenme kazanmış ve bu ortamda temel olarak tüm web tarayıcıları tarafından desteklenen programlama dili haline gelmiştir. ECMAScript'in dördüncü baskısını geliştirmek için önemli çalışmalar yapılmıştır. Ancak bu çalışma tamamlanıp ECMAScript'in dördüncü baskısı olarak yayımlanmamış; bir kısmı altıncı baskının geliştirilmesine dahil edilmiştir.
ECMAScript'in beşinci baskısı (ECMA-262 5inci baskı olarak yayımlanmıştır), tarayıcı gerçekleştirimleri arasında yaygınlaşan dil belirtiminin fiili yorumlarını kodlamış ve üçüncü baskının yayımlanmasından sonra ortaya çıkan yeni özellikler için destek eklemiştir. Bu özellikler arasında erişimci özellikleri, nesnelerin yansımalı oluşturulması ve incelenmesi, özellik niteliklerinin program aracılığıyla denetlenmesi, ek dizi işleme işlevleri, JSON nesne kodlama biçimi desteği ve gelişmiş hata denetimi ile program güvenliği sağlayan katı kip bulunur. Beşinci baskı, Aralık 2009'daki Ecma Genel Kurulunda kabul edilmiştir.
Beşinci baskı, hızlı izleme prosedürüyle benimsenmek üzere ISO/IEC JTC 1'e sunulmuş ve uluslararası standart ISO/IEC 16262:2011 olarak onaylanmıştır. ECMAScript Standardının 5.1 Sürümü, küçük düzeltmeleri içermekte olup ISO/IEC 16262:2011 ile aynı metindir. 5.1 Sürümü, Haziran 2011'deki Ecma Genel Kurulunda kabul edilmiştir.
Altıncı baskının odaklı geliştirilmesine, beşinci baskının yayıma hazırlandığı 2009 yılında başlanmıştır. Ancak bu çalışmanın öncesinde, üçüncü baskının 1999'da yayımlanmasına dayanan önemli deneyimleme ve dil geliştirme tasarım çabaları yer almıştır. Gerçek anlamda, altıncı baskının tamamlanması on beş yıllık bir çabanın doruk noktasıdır. Bu baskının hedefleri arasında büyük uygulamalara, kütüphane oluşturmaya ve ECMAScript'in diğer diller için derleme hedefi olarak kullanılmasına daha iyi destek sağlamak bulunur. Başlıca iyileştirmelerinden bazıları modüller, sınıf bildirimleri, sözcüksel blok kapsamı, yineleyiciler ve üreteçler, eşzamansız programlama için sözler, yapıbozum desenleri ve düzgün kuyruk çağrılarıdır. ECMAScript yerleşik kütüphanesi; eşlemeler, kümeler ve ikili sayısal değer dizileri gibi ek veri soyutlamalarının yanı sıra dizgilerde ve düzenli ifadelerde Unicode tamamlayıcı karakterler için ek desteği kapsayacak biçimde genişletilmiştir. Yerleşikler ayrıca alt sınıflama yoluyla genişletilebilir hale getirilmiştir. Altıncı baskı, düzenli ve artımlı dil ve kütüphane iyileştirmelerinin temelini sağlar. Altıncı baskı, Haziran 2015'teki Genel Kurulda kabul edilmiştir.
ECMAScript 2016, Ecma TC39'un yeni yıllık yayın döngüsü ve açık geliştirme süreci kapsamında yayımlanan ilk ECMAScript sürümüdür. ECMAScript 2015 kaynak belgesinden, tamamen GitHub üzerinde daha ileri geliştirme için taban oluşturacak bir düz metin kaynak belge oluşturulmuştur. Bu standardın geliştirildiği bir yıl boyunca, binlerce hata düzeltmesi, yazım düzeltmesi ve diğer iyileştirmeleri temsil eden yüzlerce çekme isteği ve sorun bildirimi yapılmıştır. Ayrıca, bu çabaya yardımcı olmak amacıyla Ecmarkup, Ecmarkdown ve Grammarkdown da dahil olmak üzere çok sayıda yazılım aracı geliştirilmiştir. ES2016 ayrıca yeni bir üs alma işleci ve Array.prototype üzerinde includes adında yeni bir yöntem desteği içermiştir.
ECMAScript 2017, Eşzamansız İşlevler, Paylaşımlı Bellek ve Atomiklerin yanı sıra daha küçük dil ve kütüphane iyileştirmeleri, hata düzeltmeleri ve yazım güncellemeleri getirmiştir. Eşzamansız işlevler, söz döndüren işlevler için sözdizimi sağlayarak eşzamansız programlama deneyimini iyileştirir. Paylaşımlı Bellek ve Atomikler, paralel CPU'larda bile iyi tanımlanmış bir yürütme sırası sağlayan atomik işlemleri kullanarak çoklu etmen programlarının iletişim kurmasına olanak tanıyan yeni bir bellek modeli sunar. Ayrıca Object üzerinde yeni statik yöntemler içermiştir: Object.values, Object.entries ve Object.getOwnPropertyDescriptors.
ECMAScript 2018, eşzamansız yineleyici protokolü ve eşzamansız üreteçler aracılığıyla eşzamansız yineleme desteği getirmiştir. Ayrıca dört yeni düzenli ifade özelliği içermiştir: dotAll bayrağı, adlandırılmış yakalama grupları, Unicode özellik kaçışları ve geriye bakma savları. Son olarak, nesne kalan ve yayma özelliklerini içermiştir.
ECMAScript 2019, birkaç yeni yerleşik işlev sunmuştur: dizileri düzleştirmek için Array.prototype üzerinde flat ve flatMap, Object.entries dönüş değerini doğrudan yeni bir Object'e dönüştürmek için Object.fromEntries ve yaygın biçimde gerçekleştirilmiş ancak standart olmayan String.prototype.trimLeft ve trimRight yerleşiklerine daha iyi adlandırılmış alternatifler olarak String.prototype üzerinde trimStart ve trimEnd. Bunlara ek olarak, sözdizimi ve anlambilimde birkaç küçük güncelleme içermiştir. Güncellenmiş sözdizimi, isteğe bağlı catch bağlama parametrelerini ve JSON ile uyum sağlamak için dizgi değişmezlerinde U+2028 (SATIR AYIRICI) ve U+2029 (PARAGRAF AYIRICI) karakterlerine izin verilmesini kapsar. Diğer güncellemeler arasında Array.prototype.sort işlevinin kararlı bir sıralama olmasını zorunlu kılmak, JSON.stringify işlevinin girdiden bağımsız olarak iyi biçimlendirilmiş UTF-8 döndürmesini zorunlu kılmak ve Function.prototype.toString işlevinin karşılık gelen özgün kaynak metni ya da standart bir yer tutucuyu döndürmesini zorunlu kılarak açıklığa kavuşturmak yer alır.
ECMAScript 2020, 11inci baskı, küresel bir düzenli ifade tarafından üretilen tüm eşleşme nesneleri için bir yineleyici üretmek üzere Dizgiler için matchAll yöntemini; dinamik bir belirteçle Modülleri eşzamansız olarak içe aktarmak için import() sözdizimini; keyfi duyarlıklı tamsayılar ile çalışmak için yeni bir sayı ilkel türü olan BigInt'i; kısa devre yapmayan yeni bir Promise birleştiricisi olan Promise.allSettled'ı; evrensel this değerine erişmek için globalThis'i; modüller içinde kullanılmak üzere export * as ns from 'module' sözdizimini; for-in numaralandırma sırasının daha fazla standartlaştırılmasını; Modüllerde kullanılabilen ve Modül hakkında bağlamsal bilgi içerebilen konak tarafından doldurulan bir nesne olan import.meta'yı; ayrıca "nullish" (undefined veya null) değerlerle çalışmayı iyileştirmek için iki yeni sözdizimi özelliği sunmuştur: nullish birleştirme, bir değer seçme işleci ve erişilecek/çağrılacak değer nullish ise kısa devre yapan isteğe bağlı zincirleme, bir özellik erişimi ve işlev çağırma işleci.
ECMAScript 2021, 12nci baskı, Dizgiler için replaceAll yöntemini; bir girdi değeri gerçekleştiğinde kısa devre yapan bir Promise birleştiricisi olan Promise.any'yi; aynı anda birden fazla hatayı temsil etmek için yeni bir Hata türü olan AggregateError'ü; mantıksal atama işleçlerini (??=, &&=, ||=); bir hedef nesneyi çöp toplamadan korumaksızın ona başvurmak için WeakRef'i ve hedef nesneler çöp toplandığında gerçekleştirilen temizleme işlemlerinin kaydını ve kayıt silmeyi yönetmek için FinalizationRegistry'yi; sayısal değişmezler için ayırıcıları (1_000); ve gerçekleştirim tanımlı bir sıralama düzeni ile sonuçlanan durumların sayısını azaltarak Array.prototype.sort işlevini daha kesin hale getirmeyi sunmuştur.
ECMAScript 2022, 13üncü baskı, modüllerin en üst seviyesinde kullanılmasına izin veren en üst seviye await anahtar sözcüğünü; yeni sınıf öğelerini: genel ve özel örnek alanları, genel ve özel statik alanlar, özel örnek yöntemleri ve erişimcileri ile özel statik yöntemler ve erişimcileri; sınıf başına değerlendirme başlatması gerçekleştirmek için sınıflar içinde statik blokları; nesneler üzerinde özel alanların varlığını sınamak için #x in obj sözdizimini; eşleşen alt dizgiler için başlangıç ve bitiş indislerini sağlayan /d bayrağı aracılığıyla düzenli ifade eşleşme indislerini; hatalarda bir nedensellik zinciri kaydetmek için kullanılabilen Error nesneleri üzerindeki cause özelliğini; göreli indislemeye izin veren Dizgiler, Diziler ve TypedArray'ler için at yöntemini; ve Object.prototype.hasOwnProperty yerine kullanışlı bir alternatif olan Object.hasOwn'ı sunmuştur.
ECMAScript 2023, 14üncü baskı, Array.prototype ve TypedArray.prototype üzerinde toSorted, toReversed, with, findLast ve findLastIndex yöntemlerinin yanı sıra Array.prototype üzerinde toSpliced yöntemini sunmuş; çalıştırılabilir ECMAScript dosyalarını daha iyi kolaylaştırmak için dosyaların başında #! yorumlarına destek eklemiş; ve çoğu Symbol'ün zayıf koleksiyonlarda anahtar olarak kullanılmasına izin vermiştir.
ECMAScript 2024, 15inci baskı, ArrayBuffer'ları ve SharedArrayBuffer'ları yeniden boyutlandırma ve aktarma olanakları eklemiş; dizgi kümeleriyle çalışmak için daha gelişmiş özelliklere sahip RegExp'ler oluşturmak için yeni bir RegExp /v bayrağı eklemiş; ve Promise'ler oluşturmak için Promise.withResolvers kolaylık yöntemini, veri kümelemek için Object.groupBy ve Map.groupBy yöntemlerini, paylaşımlı bellekteki bir değişikliği eşzamansız olarak beklemek için Atomics.waitAsync yöntemini ve dizgilerin yalnızca iyi biçimlendirilmiş Unicode içerdiğini denetlemek ve sağlamak için String.prototype.isWellFormed ve String.prototype.toWellFormed yöntemlerini sunmuştur.
ECMAScript 2025, 16ncı baskı, yineleyicilerle çalışmak için ilgili statik ve prototip yöntemleriyle birlikte yeni bir Iterator küresel nesnesi eklemiş; Kümeler üzerinde yaygın işlemleri gerçekleştirmek için Set.prototype'a yöntemler eklemiş; JSON modüllerinin içe aktarımı desteğinin yanı sıra içe aktarılan modüllerin niteliklerini bildirmek için sözdizimi eklemiş; bir dizgiyi düzenli ifadede güvenle kullanılmak üzere kaçırmak için RegExp.escape yöntemini eklemiş; düzenli ifadeler içinde değiştirici bayraklarını satır içinde etkinleştirmek ve devre dışı bırakmak için sözdizimi eklemiş; bir Promise döndürebilen veya döndürmeyen işlevleri çağırmak ve sonucun her zaman bir Promise olmasını sağlamak için Promise.try yöntemini eklemiş; ve yeni bir Float16Array TypedArray türünün yanı sıra ilgili DataView.prototype.getFloat16, DataView.prototype.setFloat16 ve Math.f16round yöntemlerini eklemiştir.
ECMAScript 2026, 17nci baskı, farklı büyüklükteki Sayıları toplarken duyarlık kaybını en aza indirerek bir yinelenebilir Sayılar topluluğunu toplamak için Math.sumPrecise; yineleyicileri sıralamak için Iterator.concat; eşzamansız yinelenebilirlerden ve diğer eşzamansız kaynaklardan Diziler oluşturmak için Array.fromAsync; hata nesnelerini tanımlamak için Error.isError; bir anahtar henüz mevcut değilken erişim sırasında kullanılmak üzere varsayılan bir değer sağlamak için Map.prototype ve WeakMap.prototype'a yöntemler; onaltılık ve base64 kodlu ikili veri dizgilerine ve bu dizgilerden dönüşüm için Uint8Array'e yöntemler; JSON.parse canlandırıcılarına JSON kaynağının eşleşen bölümüne erişim sağlayan bir parametre; ve ilkel değerler için JSON.stringify çıktısı üzerinde ince denetim sağlamak üzere JSON.rawJSON eklemiştir.
Birçok kuruluşu temsil eden çok sayıda kişi, Ecma TC39 bünyesinde bu baskının ve önceki baskıların geliştirilmesine çok önemli katkılarda bulunmuştur. Ayrıca, TC39'un ECMAScript çabalarını destekleyen canlı bir topluluk ortaya çıkmıştır. Bu topluluk, sayısız taslağı gözden geçirmiş, binlerce hata bildirimi yapmış, gerçekleştirim deneyleri yürütmüş, test takımları katmış ve dünya çapındaki geliştirici topluluğunu ECMAScript hakkında eğitmiştir. Ne yazık ki, bu çabaya katkıda bulunan her kişi ve kuruluşu belirlemek ve takdir etmek olanaksızdır.
Allen Wirfs-Brock ECMA-262, Proje Editörü, 6ncı Baskı
Brian Terlson ECMA-262, Proje Editörü, 7nci ila 10uncu Baskılar
Jordan Harband ECMA-262, Proje Editörü, 10uncu ila 12nci Baskılar
Kevin Gibbons ECMA-262, Proje Editörü, 12nci ila 17nci Baskılar
Shu-yu Guo ECMA-262, Proje Editörü, 12nci ila 18inci Baskılar
Michael Ficarra ECMA-262, Proje Editörü, 12nci ila 18inci Baskılar
Richard Gibson ECMA-262, Proje Editörü, 18inci Baskı
Ron Buckton ECMA-262, Proje Editörü, 18inci Baskı
Nicolò Ribaudo ECMA-262, Proje Editörü, 18inci Baskı
Linus Groh ECMA-262, Proje Editörü, 18inci Baskı