JavaScript'in Tarihçesi: ECMAScript, TC39 ve ötesi

JavaScript sürekli yeni özellikler ekleyen canlı bir dildir. Bu yazıda yapmak istediğim, bu süreci yıkmak ve yeni bir özelliğin basit bir fikirden resmi şartnamenin bir kısmına geçmesi için gerekli adımları göstermektir. Bunu yapmak için üç şeyi ele almamız gerekecek: ECMA, ECMAScript ve TC39.

Bunu izlemeyi tercih ederseniz, bu makalenin video sürümünü de kaydettiğimi unutmayın:

1995'e geri dönelim. Kült klasik Ağır Ağırlıklar tiyatrodaydı, Nicolas Cage bir Oscar kazandı ve web siteleri böyle bir şeye benziyordu. Şimdi, oranlar bu web sitesini Netscape Navigator ile görüntüleme şeklinizdir.

O zamanlar Netscape Navigator neredeyse% 80 pazar payı ile en popüler web tarayıcısıydı. Netscape Navigator'ın arkasındaki şirket olan Netscape'in kurucusu Mark Andreessen idi. Web'in geleceği için bir vizyonu vardı ve bu sadece belgeleri paylaşmanın ve dağıtmanın bir yoluydu. Müşteri tarafında etkileşimli daha dinamik bir platform tasarladı - hem tasarımcılar hem de geliştiriciler tarafından kullanımı kolay bir çeşit “tutkal dili”.

Brendan Eich burada devreye giriyor. Şema programlama dilini Netscape Navigator'a gömmek amacıyla Netscape tarafından işe alındı. Ancak başlamadan önce, Netscape, Sun Microsystems ile işbirliği yaparak, gelecekteki programlama dilini Java'yı tarayıcıda kullanılabilir hale getirdi. Şimdi bu, “Java zaten uygun bir dilse, Brendan'ı neden başka bir dil yaratmaya getirelim?” Sorusunu gündeme getiriyor.

Netscape'in hedefini hatırlarsanız, tasarımcılar ve amatörler için yeterince basit bir komut dosyası dili istediler - Java bu değildi. Böylece fikir Java'nın profesyoneller tarafından kullanılabileceği ve JavaScript'in ilk adı olan “Mocha” nın herkes tarafından kullanılabileceği fikri ortaya çıktı.

Diller arasındaki bu işbirliği nedeniyle Netscape, Mocha'nın Java'ya iltifat etmesi gerektiğine ve nispeten benzer bir sözdizimine sahip olması gerektiğine karar verdi. Ardından, sadece 10 gün içinde Brendan, hala Scheme'den, SmallTalk'ın nesne yönelimi ve Java sözdiziminden bazı işlevleri olan Mocha'nın ilk sürümünü yarattı. Sonunda Mocha adı LiveScript olarak değişti ve daha sonra LiveScript, Java hype'ı sürmek için bir pazarlama aracı olarak JavaScript olarak değiştirildi. Bu noktada, JavaScript tarayıcı için bir betik dili olarak pazarlandı - hem amatörler hem de tasarımcılar tarafından erişilebilir, Java zengin web bileşenleri oluşturmak için profesyonel bir araçtır.

Şimdi, bu olayların ne zaman gerçekleştiğini anlamak önemlidir. Microsoft, Nicolas Cage'ın Oscar kazanmasının yanı sıra Internet Explorer üzerinde de çalışıyordu. JavaScript web'in kullanıcı deneyimini temelden değiştirdiğinden, rakip bir tarayıcı olsaydınız, henüz standartlaştırılmadığı için kendi JavaScript uygulamanızı bulmaktan başka seçeneğiniz yoktu. Yani, Microsoft tam olarak bunu yaptı ve buna JScript adını verdiler.

Bu, internet tarihinde oldukça ünlü bir soruna yol açar. JScript, JavaScript ile aynı kullanım durumunu doldurdu, ancak uygulaması farklıydı. Bu, bir web sitesi oluşturamayacağınız ve hem Internet Explorer hem de Nestscape Navigator'da çalışmasını bekleyemeyeceğiniz anlamına geliyordu. Aslında, iki uygulama o kadar farklıydı ki, “Netscape'te en iyi görüntülenen” ve “Internet Explorer'da en iyi görüntülenen” logoları, her iki uygulama için inşa edemeyen çoğu şirket için yaygın hale geldi.

Ecma burada devreye giriyor. Ecma International, “bilgi ve iletişim sistemlerinin standardizasyonuna adanmış 1961 yılında kurulmuş bir endüstri derneğidir”. 1996 yılının Kasım ayında Netscape, standart bir şartname oluşturmak için Ecma'ya JavaScript gönderdi.

Bunu yaparak, diğer uygulayıcılara dilin gelişiminde bir ses verdi ve ideal olarak diğer uygulamaları tarayıcılar arasında tutarlı tutacaktır. Şimdi Ecma'nın nasıl çalıştığına bakalım.

Her yeni spesifikasyon bir standart ve bir komite ile birlikte gelir. JavaScript durumunda, standart ECMA-262'dir ve ECMA-262 standardında çalışan komite TC39'dur. ECMA262 standardına bakarsanız, “JavaScript” teriminin asla kullanılmadığını göreceksiniz. Bunun yerine, resmi dil hakkında konuşmak için “EcmaScript” terimini kullanıyorlar. Bunun nedeni, Oracle'ın “JavaScript” terimi için ticari markanın sahibi olması, dolayısıyla yasal sorunları önlemek için Ecma'nın EcmaScript terimini kullanmasıdır.

Gerçek dünyada, ECMAScript genellikle resmi standart olan EMCA-262'ye atıfta bulunurken, JavaScript pratikte dil hakkında konuşurken kullanılır. Daha önce de belirtildiği gibi, Ecma262 standardının gelişimini denetleyen komite, Teknik Komite 39'u temsil eden TC39'dur.

TC39, tipik olarak tarayıcı satıcıları ve Facebook ve PayPal gibi web'e yoğun yatırım yapan büyük şirketlerden oluşan "üyelerden" oluşur. Toplantılara katılmak için “üyeler” (yine büyük şirketler ve tarayıcı satıcıları) söz konusu şirketi veya tarayıcıyı temsil etmek üzere “delegeler” gönderecektir. Dil teklifleri oluşturmak, onaylamak veya reddetmekten sorumlu olan bu delegelerdir.

Yeni bir teklif oluşturulduğunda, bu teklif resmi şartnamenin bir parçası haline gelmeden önce belirli aşamalardan geçmelidir. Herhangi bir teklifin bir aşamadan diğerine geçebilmesi için TC39 arasında bir fikir birliğine varılması gerektiğini unutmamak gerekir. Bu, büyük bir çoğunluğun hemfikir olması gerektiği anlamına gelirken, kimse belirli bir teklifi veto edecek kadar güçlü bir şekilde katılmıyor.

Her yeni teklif 0. Aşama'da başlar. Bu aşamaya Strawman aşaması denir. Aşama 0 teklifleri, “TC39 şampiyonu tarafından komiteye sunulması planlanan veya komiteye sunulmuş ve kesin olarak reddedilmemiş, ancak henüz 1. aşamaya geçme kriterlerinden hiçbirini gerçekleştirmemiş tekliflerdir.” Dolayısıyla, Aşama 0 teklifi olmak için tek gereklilik belgenin bir TC39 toplantısında gözden geçirilmesi gerektiğidir. Kod tabanınızda bir Aşama 0 özelliğini kullanmanın iyi olduğunu, ancak resmi spesifikasyonun bir parçası olmaya devam etse bile, neredeyse kesinlikle birkaç iterasyondan geçeceğini unutmayın.

Yeni bir teklifin vadesinde bir sonraki aşama Aşama 1'dir. Aşama 1'e ilerlemek için TC39'un bir parçası olan resmi bir “şampiyon” tanımlanmalı ve tekliften sorumlu olmalıdır. Ayrıca, teklifin çözdüğü sorunu tanımlaması, açıklayıcı kullanım örnekleri, yüksek düzeyde bir API olması ve olası endişeleri ve uygulama zorluklarını tanımlaması gerekir. Komite, aşama 1 için bir teklifi kabul ederek, teklife daha derinlemesine bakmak için kaynak harcamaya istekli olduklarını bildirir.

Bir sonraki aşama Aşama 2'dir. Bu noktada, bu özelliğin sonunda resmi şartnamenin bir parçası olması daha olasıdır. Aşama 2'ye geçebilmek için, teklifin resmi dilde, yeni özelliğin sözdizimi ve anlambilimi hakkında bir açıklaması olmalıdır. Başka bir deyişle, resmi şartnamede olacakların taslağı veya ilk versiyonu yazılır. Bu, özelliğin tüm yönlerini gerçekten kilitleme aşamasıdır. Gelecekteki değişiklikler yine de gerçekleşebilir, ancak bunlar sadece küçük, artımlı değişiklikler olmalıdır.

Sıradaki aşama Aşama 3'tür. Bu noktada teklif çoğunlukla bitmiştir ve şimdi daha fazla ilerlemek için uygulayıcıların ve kullanıcıların geri bildirimlerine ihtiyaç duymaktadır. Aşama 3'e ilerlemek için özellik metni bitirilmeli ve en az iki özellik uyumlu uygulama oluşturulmalıdır.

Son aşama Aşama 4'tür. Bu noktada, teklif resmi şartnameye dahil edilmeye hazırdır. Aşama 4'e ulaşmak için testlerin yazılması, iki spesifik uyumlu uygulamanın bu testleri geçmesi, üyelerin yeni özellikte önemli pratik deneyime sahip olması ve EcmaScript özellik düzenleyicisinin spesifikasyon metninde oturumu kapatması gerekir. Temel olarak bir teklif 4. aşamaya geçtikten sonra, bir teklif olmayı bırakıp resmi şartnameye girmeye hazırdır. Bu, tüm bu süreç hakkında bilmeniz gereken son şeyi getiriyor ve TC39s yayın programı.

2016 yılı itibariyle, ECMAScript'in her yıl o anda hazır olan özelliklerle birlikte yeni bir sürümü yayınlanmaktadır. Bunun anlamı, yeni bir sürüm gerçekleştiğinde mevcut olan Aşama 4 tekliflerinin o yılki sürüme dahil edilmesidir. Bu yıllık yayın döngüsü nedeniyle, yeni özellikler çok daha artımlı ve benimsenmesi daha kolay olmalıdır.

Bu, tylermcginnis.com “Modern JavaScript” kursumun bir parçasıdır.