Yerli Kod Oluşturma

*Bu içerik, yapay zekâ (beta) kullanılarak çevrildi ve hatalar içerebilir. Sayfayı İngilizce görüntülemek için buraya tıkla.

Yerelleşik kod oluşturma için Luau desteği ile, deneyiminizdeki sunucu tarafı kodlar doğrudan Luau ün işlemci tarafından yürütülen makine kodu talimatlarına derlenebilir, normal olmayan birçok sayısal hesap işlemi olmadan için işleme hızını artırabilirsiniz. Bu özellik, sunucudaki bazı kodlar için işleme hı

Yerelleşikleri Etkifleştirme

Bir Script için kod oluşturma yeteneklerini etkinleştirmek için, üstteki komentarı ekleyin: --!native >


--!yerli
print("Hello from native code!")

Bu, kod üretimini kodun içindeki tüm işlevler için kullanılabilir kodu sağlar ve üst düzey kapsayıcı olarak, ifade edilirse, karlı olarak kabul edilir. Hiçbir ekstra değişiklik gerekmez; kodun doğrudan ifade edilmesi aynıdır. Luau dili ve tüm Roblox API'leri için tüm özellikleri desteklenir.

Alternatif olarak, bir bireysel işlev için yerel kod oluşturma yetkisini etkinleştirmek için @native özelliğine ekleyerek:


@native
local function f(x)
return (x + 1)
end
1 Gelecekte, bazı kodlar kârlı olması için otomatik olarak çalışabilir, ancak manuel olarak yerleştirilen --!native yorumları gerekir.

En İyi Pratikler

Aşağıdaki ipuçları, kod doğumundan en çok yararlanmanızı sağlayacaktır:

  • Bu özelliği Luau'nun doğrudan içinde yapılan çok sayıda hesap işleme içinde etkinleştirmek en iyisidir. Eğer tabloların ve özellikle buffer türlerinde çok sayıda matematiksel işlem varsa, özelliği etkinleştirmek iyi bir aday olabilir.

  • Sadece fonksiyonları kodu derlenir. Üstteki kapsayıcı kod sıklıkla sadece bir kez çalıştırılır ve çoğu kez çağrılan işlevler kadar faydalı değildir. Her kare kadar çok kez çağrılan işlevler için işlevler için işlevler için işlevler için işlevler için işlevler için işlevler için işlevler için i

  • Bir kodlama veya bir işlevin doğal derleme olmadan ne kadar süreceğini ölçmek önerilir, böylece onu kullanmanın en iyi olduğunu kararlaştırabilirsiniz. Kod Gizlice araç, performansı ölçmek için kodları izleyebilir.

  • --!native yorumunu her skript içinde yerleştirmeyi denemek isteyebilir, ancak yerleşik kod yüklenmesinin bazı dezavantajları vardır:

    • Sunucunun başlatma süresini artırabilen kod derleme süresi gerekir.
    • Ekstra bellek, derlenmiş kodu depolamak için kullanılır.
    • Bir deneyimdeki toplam izin verilen kod miktarının sınırı vardır.

Bu sorunlar, @native özelliğinin akıllı kullanımıyla ele alınabilir.

Kodu Kaçırmak

Tüm özelliklerin yerli kod oluşturma etkinleştirilmiş olup olmadığına bağlı olarak aynı davranır, ancak bunlardan bazıları yerli olarak çalışmayabilir veya düzgün çalışmayabilir veya düzgün çalışmayabilir veya düzgün çalışmayabilir. Bunlar arasında şunlar var:

  • Geriye uyulmayan getfenv() / setfenv() çağrılarının kullanımı.
  • Niyet olmayan argelerle math.asin() gibi varsayılan çeşitli Luau işlevlerinin kullanımı.
  • Yanlış yazılmış parametreleri yazılı fonksiyonlara geçiş yapmak, örneğin foo(true) çağrılırken foo olarak kullanılırken dikkatli olun. function foo(arg: string) kullanılırken daima doğru 2> yazılış şemaları2> kullanın.

Kodlayıcı profil kullanırken, işlevin normal versiyonuna göre kullanım süresini karşılaştırabilirsiniz. Bir --!native içindeki kod veya işaretlenmiş #number1 kodunun dışında içinde bulunan birkaç faktör dü- optimizasyonu tetikley

Tip Anotasyonlarını Kullanma

Kod yerelleştirme deneyleri, kod yollarını optimize etmek için belirli bir değişken için en olası tipi tahmin etmeye çalışır. Örneğiniz,

Yerli kod oluşturma herhangi bir yazdestekleyeceğinden, yanlış tahminler yanlış işlemleri tetikleyebilir ve bunun sonucunda daha yavaş kod çalıştırılır.

Bazı yaygın sorunları çözmek için, Luau işlev argümanlarına anotasyonlar yazıyor, ancak özellikle Vector3 argümanlarına anotasyon yapılması önerilir:


--!yerli
-- “v” bir tablo olması gerekir; işlev, tablo kontrolleri nedeniyle daha yavaş çalışır
local function sumComponentsSlow(v)
return v.X + v.Y + v.Z
end
-- “v” bir Vector3 olarak ilan edilmiştir; vektörler için kod üretilir
local function sumComponentsFast(v: Vector3)
return v.X + v.Y + v.Z
end

Stüdyo Aletleri

Aşağıdaki Studio araçları --!native 脚本leri ve 0>#number10> işlevleri için desteklenir.

Hata ayıklama

Genel debugging scriptleri desteklenir, ancak yerel/upvalues için görüntüler tamamlanmış olabilir ve yerel arazi kaynaklarından gelen görüntüler tamamlanmış olabilir.

Ayrıca, seçilmiş kodu derleme için bozulma noktaları yerleştirerek, bu işlevler için yerelleştirmeyi devre dışı bırakacaktır.

Kod Değerlendirici

In the Kod Gözücüsü , kodların doğal olarak <native> yanında gösteren işlevleri vardır:

Example of native functions flagged in the Script Profiler

Eğer bir işlev marki @native veya --!native içindeki bir number1 anotasyonunu gösteremezse, bu işlev 1> 4>kırık noktası4> yerleştirimi, kullanılan 7>teşvik edilmeyen

Luau Heap

Luau Heap profilinde, kullanıcı tarafından alınan bellek, grafikteki [native] elemanları olarak görüntülenir.

Example of native memory usage flagged in the Luau Heap profiler

Boyut Analizi

Her yerelleşik olarak derlenmiş senaryo belleği tüketir. Kompilasyon büyüklüğü, derlenmiş kodun özel sınırına ulaştığında, yerelleşik derleme durur ve geri kalan kod yerelleşik olarak çalıştırılır. Bu, yerelleşik derleme için senaryoları dikkatlice seçmeniz gerektiğini gerektirir.

Belirli fonksiyonların ve kodların kaynağını izlemek için:

  1. Make sure you're in Server view through the client/server toggle button.
  2. Command Bar から debug.umpCodesize() を çağırın.

Çıkış penceresinde, kodlanmış olarak nokta nereye çağrıldığına kadar, belleği tüketen kodların toplam sayısını ve 1>kod boyutu1> sınırını göreceksiniz. Özeti takiben, kodlanmış her kodun kod boyutu limiti için bir tablosu görürsünüz.

Example of native code size displayed in the Output window.

Her kript için çıktı, derlenen fonksiyon sayısını ve kaynak kod belleği tüketimini gösterir. Her k fonksiyonu, sonra kod boyutu boyutu sırasıyla gösterilir ve kaynak kod tüketimini [anonymous] olarak gösterilir. Son sütun, kodun fonksiyon b

Sınırlar ve Troubleshooting

Belirli bir CPU için kodu özelleştirilmiş bir hale getirmek için ekstra depolama gerektirir. Ayrıca, karmaşık işlevler için optimizasyonlar çok fazla zaman alabilir. Dahili bir sınıra vurmak Studio'nun Çıkış penceresinde bir hata rapor edecektir, bunlar:

Kod bloklarının sınırını aşan 'f' işlevi 20. satırda aştı

Bu hata, kullanılan bir işlevin 64K'den fazla talimat içeren tek bir kod blokunun dışında anlamlıdır. Bu, işlevi basitleştirerek veya bir dizi daha küçük işlevlere bölerek önlenebilir.

Kod 20. satırda 'f' işlevi kod bloğu sınırını aştı

Bu hata, tek bir işlevinizin 32K'den fazla kod içerikli dahili bloklarını içeriyor anlamına gelir. Kod blokları, kontrol akışı bloklarınızda doğrudan harita etmez, ancak bu hata, işlevi basitleştirerek veya bölümleri daha küçük işlevlere bölerek kontrol akışınızı basitleştirerek önlenebilir.

Yüksek kapasiteli modül için 'f' işlevi 200. satırda aştı

Bu hata, toplamda, işlevin tüm senaryoda 1 milyon talimatına ulaştığını gösterir. Bazı durumlarda, rapor edilen işlevin kendisi çok talimatı olabilir veya sınır erken bir şekilde i

*20. satırda 'f' işlevi, dahili bir azaltma hatalı bulundu *(veya) Kodlanmış kod üretimi başarısız (yapısal azaltma)

Bazen bir işlevde, yerli kod derleyicisi şu anda işleyemeyeceği karmaşık kod parçaları bulunur. Bu hatayı önlemek için, kodun işlemlerini incelemek veya bölmek veya basitleştirmek için onları birleştirmeyi, ancak ayrıca bu nedenle hata raporunu bir örnekle açmayı da düşünün.

Yerleşik kod oluşturma için hafıza ayrımı sınırına ulaşıldı

Bu hata, kaynak kodu verileri için genel bellek sınırının ulaşıldığını gösterir. Bunu önlemek için, daha az belleğe sahip kodların limit altında daha küçük kodları yerleştirmeyi deneyin. Aksi takdirde, genel modül içindeki büyük veya sıkça çağrılan işlevleri bir ayrı modüle taşıyın