Merhaba değerli e-bergi okurları. Bugün sizlere asm.js dilinden bahsedeceğim. asm.js 21 Mart 2013 tarihinde Mozilla tarafından çıkarılmış bir JavaScript alt kümesidir. Bildiğimiz üzere, yüksek kaynak isteyen uygulamaları, özellikle de büyük oyunları web ortamında çalıştırmak JavaScript’in yavaşlığından dolayı sorun oluyordu, hatta imkansızdı. asm.js tam olarak bu yüzden yapıldı: Bu tip uygulamaları web ortamına taşımak için.

Büyük uygulamalar genellikle düşük seviyeli dillerle yazılırlar. Eğer bu uygulamaları yüksek seviyeli JavaScript’e taşımaya kalkarsanız çok kötü bir performansla karşılaşırsınız. Ama artık, bu tip uygulamalar düşük seviyeli dillerden bir kaynaktan kaynağa derleyici vasıtasıyla asm.js’e çevriliyor ve oldukça yüksek performans elde ediliyor. Peki asm.js bu yüksek performansı nasıl sağlıyor?

Bu yüksek performans iki yolla sağlanıyor, bunlardan biri JavaScript’teki dinamik tipli değişkenler yerine statik tipli değişkenlerin kullanılması, diğeri ise çöp toplama yerine baştan ayrılmış çok büyük bir belleğin kullanılması.

Statik tiplerden bahsedecek olursak, bir değişkeni tam sayı yapmak için bit veya işleci kullanmak, kayan noktalı sayı yapmak için başına + koymak gerekiyor.

Birkaç örnek verecek olursak:

C kodu:

size_t strlen(char *ptr) {
    char *curr = ptr;
    while (*curr != 0) {
        curr++;
    }
    return (curr - ptr);
}

asm.js kodu:

function strlen(ptr) {
    ptr = ptr|0; // tam sayı yapılmış
    var curr = 0;
    curr = ptr;
    while (MEM8[curr]|0 != 0) {
        curr = (curr + 1)|0; // tam sayı yapılmış
    }
    return (curr – ptr)|0; // tam sayı yapılmış
}

C kodu:

int f(int i) {
    return i + 1;
}

asm.js kodu:

function f(i) {
    i = i|0; // tam sayı yapılmış
    return (i + 1)|0; // tam sayı yapılmış
}

C kodu:

double square(double x) {
    return x*x;
}

asm.js kodu:

function square(x) {
    x = +x; // double yapılmış
    return +(x*x); // double yapılmış
}

“İyi de bu dil gerçek hayatta ne işimize yarayacak?” dediğinizi duyar gibiyim. Açıkçası gerçek hayatta işimize yaramaya başladı bile. Şimdiden Unreal Engine 4 asm.js sayesinde web’e taşındı. İleride de birçok büyük program, oyun ve oyun motoru asm.js sayesinde web’e taşınacak. Hatta FTL, Super Hexagon, Osmos, Aaaaa...!!! For the Awesome gibi bağımsız oyun klasikleri şimdiden asm.js ile uyumlu hale getirildi.

Tahminimce özellikle oyun konusunda çok büyük gelişmeler yaşanacak. Belki de 5-10 yıl içinde en ağır oyunlarımızı bile web’de oynamaya başlayacağız, ama şimdilik bu kadarı var elimizde. Benden şimdilik bu kadar, başka bir sayıda görüşmek üzere, hoşçakalın!

Kaynakça: