Zig programlama dili hakkında ne düşünüyorsunuz?

Bence syntax'ı biraz zor ve daha popülerlik kazanması için çok yol alması lazım.Muhtemelen Bun.js ile olan desteği biterse hiç hatırlanmaz bile ama insanlar yine de C/C++'a göre çok hızlı olduğunu söylüyor.
 
Bence syntax'ı biraz zor ve daha popülerlik kazanması için çok yol alması lazım.Muhtemelen Bun.js ile olan desteği biterse hiç hatırlanmaz bile ama insanlar yine de C/C++'a göre çok hızlı olduğunu söylüyor.
C/C++'a göre çok hızlı büyük bir iddia. Merak ettim şimdi. Bir deneyeyim.

C/C++'a göre çok hızlı büyük bir iddia. Merak ettim şimdi. Bir deneyeyim.
Sığ bir değerlendirme olacak ama aşağıdaki iki kodu derledim ve çalıştırıp zaman kıyaslaması yaptım. Zig 1.5 kat yavaş. Yeterli bir kıyas değil fakat kodlar birbirlerine yakın olsun diye uğraştım.

Aşağı yukarı fikirlerimi belirteyim. Zig 52~ saniye de çalıştırdı kodu. C ise 34~ saniyede. İkiside ağırlıklı olarak unoptimized code (eğer zig'de debug optimizasyonları kapatıyorsa). Bunun arkasındaki sebebin runtime libraryden ve compilerın daha az optimize olmasından kaynaklanabileceğini düşünüyorum. Ama oturup daha detaylı uzun uzun bakmam lazım net bir şey söyleyebilmem için.

Sığ kıyasımda, zig baya yavaş kaldı kısaca. Tabii gerçek programlarda ptr vesaire işin içine dahil olduğunda aradaki fark bu kadar olmayabilir. Zig gerçekten daha hızlı olabilir. Emin değilim.

1715382193495.png
1715382857964.png

Kod:
const std = @import("std");

pub fn is_prime(n: usize) bool {
    if (n == 2) {
        return true;
    }
    if ((n < 2) or (@mod(n, 2) == 0)) {
        return false;
    }

    var i: usize = 3;
    while (i * i <= n) : (i += 2) {
        if (@mod(n, i) == 0) {
            return false;
        }
    }

    return true;
}

pub fn main() !void {
    const out = std.io.getStdOut().writer();
    var ret: bool = true;
    for(0..100000000) |i| {
        ret = is_prime(i);
    }
    try out.print("{}", .{ret});
    
}

C:
#include <stdio.h>

bool is_prime(int n) {
    if(n == 2) {
        return true;
    }
    if(n < 2 or n % 2 == 0) {
        return false;
    }

    for(int i = 3; (i * i) <= n; i += 2) {
        if (n % i == 0) {
            return false;
        }
    }
    return true;
}

int main(void) {
    bool ret = false;
    for(int i = 0; i < 100000000; i++) {
        ret = is_prime(i);
    }
    printf("%d", ret);
    return 0;
}

Dilin syntaxı kötü değil bu arada. For loopların kullanımı beğenmedim. Ek olarak logic operatörleri && ve || 'i devre dışı bırakmışlar. Bunlar yerine kelimeyle yazmanız lazım Python'daki gibi. Python'da bu operatörlerin bu karakterlere kullanılması syntax dizayn prensipleriyle çelişiyordu, dolayısıyla kaldırıldığını anlayabiliyorum. Fakat gördüğüm kadarıyla Zig'in syntax'ı tam olarak kod okunurluğu konusunda python gibi bir takıntıya da sahip değil.

Compiler'ı güzel ve entegre testler olması güzel. test <test_name> { ... } yazarak direkt testleri belirleyebiliyorsunuz ve zig test dediğinizde test olarak belirlenmiş kısımları sırayla çalıştırıyor. Amacı C'nin type-safety problemleri olmadan işletim sistemleri seviyesinde bir dil olmaya çalışmak, aynı Rust gibi yani. Kötü durmuyor. Üşenmediğim bir ara TCP local http server denerim. Deneyimlerimi paylaşırım.
 
Son düzenleme:

Geri
Yukarı