การสร้างรหัสเดิม

*เนื้อหานี้แปลโดยใช้ AI (เวอร์ชัน Beta) และอาจมีข้อผิดพลาด หากต้องการดูหน้านี้เป็นภาษาอังกฤษ ให้คลิกที่นี่

ด้วยการสนับสนุน Luau สำหรับการเก็บรวบรุมข้อมูลด้วยรหัสเค้าโครงของเครื่องเข้าสู่คำสั่งของเครื่องโดยตรงโดยไม่ต้องใช้บาทเบาจาก Luau VM ที่ดำเนินการบน หน่วยควา

เปิดใช้งานในระดับที่สูงขึ้น

เพื่อเปิดใช้งานการเก็บรหัสเดิมสำหรับ Script ให้เพิ่ม --!native เพิ่มความคิดเห็นที่ด้านบน:¹


--!เนทีฟ
print("Hello from native code!")

นี่ช่วยให้การเก็บรหัสเดิมสำหรับทุกฟังก์ชันในสคริปต์และมุมมองระดับสูงสุดหากเป็นไปได้ ไม่จำเป็นต้องทำการเปลี่ยนแปลงใด ๆ เพิ่มเติม; การทำงานของสคริปต์ที่เรียกตัวเอง

นอกจากนี้คุณยังสามารถเปิดใช้งานการเก็บรหัสด้วยค่านิยม @native เพื่อให้สามารถใช้งานได้สำหรับฟังก์ชันเดียวโดยการเพิ่มค่านิยม สำหรับรหัสที่เก็บไว้ ในแนวคิด Thai:นอกจากนี้คุณยังสามารถเปิดใช้งานการเก็บรห


@native
local function f(x)
return (x + 1)
end
1 ในอนาคตบางสคริปต์อาจเริ่มทำงานได้อย่างอัตโนมัติหากกำหนดว่าเป็นไปได้เพื่อให้กำไร แต่ต้องวางความคิดเห็นของ --!native ในปัจจุบันนี้จำเป็นต้องเปิดใช้งานอย่าง手動ก่อน

ดีที่สุด การฝึกอบรม

เคล็ดลับต่อไปนี้จะช่วยให้คุณได้รับประโยชน์สูงสุดจากการเก็บรวบรวมโค้ดเริ่มต้น:

  • ดีกว่าจะเปิดใช้งานคุณสมบัตินี้ในสคริปที่ประมวลผลจำนวนมากโดยตรงใน Luau หากคุณมีจำนวนมากของการดำเนินการทางคณิตศาสตร์บนตารางและเป็นตัวอย่าง buffer มาก

  • เฉพาะการทำงานของสคริปต์เท่านั้นที่ถูกคอมพิลเตอร์ในระดับต้นไป ฟังก์ชัน จะถูกคอมพิลเตอร์โดยตรง โค้ดในด้านบนของ ขอบเขต มักจะถูกประมวลผลเฉพาะครั้งเดียว และไม่ได้รั

  • มันเป็นสิ่งสำคัญที่คุณวัดเวลาที่ใช้เวลาของสคริปหรือฟังก์ชันด้วยการแปลงแบบดั้งเดิมเพื่อพิจารณาเมื่อใดที่ดีที่สุดที่จะใช้มัน เครื่องมือ เครื่องมือการวิเคราะห์สคริปต์ สามา

  • อาจเป็นเรื่องยั่งยืนที่จะวางความคิดเห็น --!native ใน ทุก สคริปต์เพียงเพื่อให้แน่ใจว่าบางส่วนจะดำเนินการเร็วขึ้น แต่การเก็บรหัสเดิมมีข้อบกพร่องบางอย่าง:

    • เวลาการเคลื่อนย้ายรหัสจะต้องเพิ่มเวลาเริ่มต้นของเซิร์ฟเวอร์
    • หน่วยความจำเพิ่มเติมจะถูกเก็บไว้เพื่อเก็บรหัสที่เรียกใช้แบบขั้นสูง
    • มีขีดจำกัดสำหรับจำนวนเงินที่อนุญาตให้ใช้งานในประสบการณ์

ปัญหาเหล่านี้สามารถแก้ไขได้โดยการใช้คุณสมบัติที่เหมาะสมของคุณสมบัติ @native

รหัสที่จะหลีกเลี่ยง

ขณะที่คุณสมบัติทั้งหมดจะปฏิสัมพันธ์กันเหมือนกันกับหรือโดยไม่มีการเปิดใช้งานโค้ดเจ้าของ, บางคุณสมบัติจะไม่รุ่นตามธรรมชาติและอาจทำให้เกิดการปฏิสัมพันธ์ที่ไม่เหมาะสมหรือการแก้ไขคืน

  • การใช้งานของ deprecated getfenv() / setfenv() คอลล์.
  • การใช้งานของต่างๆ Luau ฟังก์ชันสร้างขึ้นในที่เรียบร้อยด้วยอาร์กุณะที่ไม่ใช่ตัวเลขด้วย Use of various Luau built-in functions like math.asin() with non-numeric arguments.
  • การส่งพารามิเตอร์ที่ไม่ถูกต้องมาเป็นฟังก์ชันที่ถูกต้อง เช่น การเรียก foo(true) เมื่อ foo ได้รับการประกาศเป็น function foo(arg: string) นั่นคือการใช้ 1> type annotations1> ที่ถ

เมื่อใช้ โปรไฟล์สคริปต์ คุณสามารถเปรียบเทียบเวลาที่ใช้ในการดำเนินงานของรุ่นปกติของฟังก์ชันกับรุ่นที่เรียบร้อยแล้ว หากฟังก์ช

ใช้ Type Annotations

การสร้างโค้ดเริ่มต้นพยายามที่จะให้เป็นประเภทที่เป็นไปได้สูงสุดสำหรับตัวแปรที่

พิมพ์ๆ โดยไม่จำเป็นต้องทำการตรวจสอบที่จำเป็น ซึ่งทำให้เกิดการประมวลผลโค้ดช้า

เพื่อแก้ปัญหาบางอย่าง, Luau ตรวจสอบการอธิบายการทำงานในตัวอนุกรม, แต่มันเป็นเรื่องแนะนำอย่างมากที่จะอธิบาย Vector3 อาร์กุณหมาละ:


--!เนทีฟ
-- “v” ถือเป็นตาราง; ฟังก์ชันทำงานช้าลงเนื่องจากการตรวจสอบตาราง
local function sumComponentsSlow(v)
return v.X + v.Y + v.Z
end
-- “v” ได้รับการประกาศเป็น Vector3 โค้ดสำหรับเวกเตอร์จะถูกสร้างขึ้น
local function sumComponentsFast(v: Vector3)
return v.X + v.Y + v.Z
end

Studio เครื่องมือ

ต่อไปนี้เครื่องมือใน Studio สนับสนุนสำหรับ --!native เครื่องมือและฟังก์ชัน #number สคริปต์และฟังก์ชัน Thai:ต่อไปนี้เครื่องมือใน Studio สนับสนุนสำหรับ --!native เครื่องมือและฟังก์ชัน #number สค

การดีบั๊ก

การดีบั๊กสคริปต์ ทั่วไป ของสคริปต์ได้รับการสนับสนุน แต่มุมมองสำหรับผู้ใช้น้องๆ/upvalues อาจไม่สมบูรณ์และขาดตัวแปรจาก คอลล์สแต็ค ที่ดำเนินการโดยตรง

โปรดทราบว่าเมื่อดีบั๊กโค้ดที่เลือกสำหรับการแปลงแบบต้นฉบับโดยการวาง จุดหยุด จะปิดการดีบั๊กสำหรับฟังก์ชันเหล่านั้น

โปรไฟลเลอร์สคริปต์

ใน โปรไฟล์สคริปต์ ฟังก์ชันที่เป็นตัวแทนจะแสดงผล <native> รวมกับพวกเขา:

Example of native functions flagged in the Script Profiler

หากคุณสมบัติที่มีเครื่องหมาย @native หรือภายในสคริปต์ --!nat

กองหิน Luau

ใน Luau Heap โปรไฟล์เนอร์หน่วยความจำที่ได้รับโดยฟังก์ชันเริ่มต้นจะปรากฏเป็น [native] องค์ประกอบในกราฟิก

Example of native memory usage flagged in the Luau Heap profiler

วิเคราะห์ขนาด

ทุกสคริปต์ที่เรียบร้อยอย่างแน่นอนใช้หน่วยความจำ เมื่อขนาดของโค้ดที่เรียบร้อยถึงขีดจำกัดที่กำหนดไว้แล้ว การแปลงรุ่นจะหยุดและเรียบร้อย และคอดที่เหลือจะประมวลผลโดยไม่เปิดเผย

เพื่อตรวจสอบขนาดของโค้ดเรื่มต้นของสคริปต์และฟังก์ชันต่างๆ

  1. ให้แน่ใจว่าคุณอยู่ใน เซิร์ฟเวอร์ ดูผ่านปุ่ม เปิด/ปิดผ่านลูกศร / ปุ่มลูกศรของลูกศร
  2. เรียก debug.dumpcodesize() จาก บาร์คําสั่ง

ใน หน้าต่างการออก คุณจะเห็นจำนวนเงินสคริปต์และการใช้งานทั้งหมดที่ถูกเรียกใช้จนถึงจุดเรียกใช้ ขนาดหน่วยความจำที่กล่าวถึงในรหัสเดิมของพวกเขา และขีดจำ

Example of native code size displayed in the Output window.

สำหรับแต่ละสคริปต์ออกมาแสดงจำนวนฟังก์ชันที่ได้รับการคอมปิลและความจำหน่ายเมมโมริตอร์ของคอมพิลเนเตอร์ สำหรับแต่ละฟังก์ชัน

ข้อจํากัดและการแก้ปัญหา

การเรียนรู้วิธีการเขียนโค้ดให้เป็นคำสั่งสำหรับประเภทของ CPU ต้องใช้หน่วยความจำเพิ่มเติม นอกจากนี้การปรับปรุงสำหรับคุณสมบัติที่ซับซ้อนอาจใช้เวลานานเกินไปในการดำเนินการ การกดคุณสมบั

ฟังก์ชัน 'f' ในตำแหน่งที่ 20 เกินขีดจำกัดการใช้งานโค้ดเดียว

ข้อผิดพลาดนี้หมายถึงว่าบล็อกโค้ดเดียวภายในฟังก์ชันใช้คำสั่งมากกว่า 64K คำสั่ง สิ่งนี้สามารถหลีกเลี่ยงได้โดยการเรียบเรียงฟังก์ชันหรือแบ่งออกเป็นบล็อกโค้ดขนาดเล็ก

ฟังก์ชัน 'f' ในตำแหน่งที่ 20 เกินขีดจำกัดโค้ดฟังก์ชัน

รหัส32K บล็อกภายในของโค้ด บล็อกภายในของโค้ดไม่สมบูรณ์แบบตรงไปยังบล็อกการไหลของคุณสมบัติ แต่ข้อผิดพลาดนี้สามารถหลีกเลี่ยงได้โดย

ฟังก์ชัน 'f' ในตารางอันที่ 200 เกินขีดจำกัดการใช้งานโมดูลทั้งหมด

ข้อผิดพลาดนี้หมายถึงว่าในทั้งหมดว่าฟังก์ชันได้ถึงขีดจำกัดของ 1 ล้านคำสั่งสำหรับทั้งหนังส

*ฟังก์ชัน 'f' ในตำแหน่งที่ 20 พบข้อผิดพลาดการลดลงภายในเกิดขึ้น *(หรือ) ความผิดพลาดภายใน: การเรียกร้องรหัสสมุดใหม่ (การเรียกร้องรหัสสมุด) ไม่สำเร็จ

ในบางครั้งฟังก์ชันอาจมีข้อมูลที่ซับซ้อนของโค้ดที่เครื่องคอมพิวเตอร์เดิมของคุณไม่สามารถจัดการได้ เพื่อหลีกเลี่ยงข้อผิดพลาดนี้ให้ตรวจสอบข้อมูลที่ซับซ้อนในโค้ดและแบ่งออกหรือเรียบ

เข้าถึงขีดจำกัดการจัดเก็บหน่วยความจำสำหรับการเรียกใช้โค้ดเริ่มต้น

ข้อผิดพลาดนี้หมายถึงว่าขีดจำกัดหน่วยความจำสำหรับข้อมูลโค้ดเรื่มต้นได้ถึงขีดจำกัดแล้ว เพื่อหลีกเลี่ยงสิ่งนี้ ลองลบ --!translate จากสคริปที่มีการใช้ห