สถาปัตยกรรมที่เสนอแบ่งเป็นสแนปช็อตแบบอ่านอย่างเดียว ตัวแยกวิเคราะห์เฉพาะภาษา semantic IR กลาง ชุดข้อมูลจำเป็น การเข้ารหัสแบบย้อนกลับได้ และกลไกควบคุมขนาดเฟรม หลักฐานย้อนหลังระบุว่าเฟรมแกนกลางหนึ่งชุดมีขนาด 18,869 ไบต์ และการทดสอบเฉพาะทาง 40 รายการผ่าน แต่ผลดังกล่าวไม่ใช่การทดสอบใหม่ในรอบนี้ และไม่ได้พิสูจน์ว่าครอบคล...
เผยแพร่โดยรูปภาพสร้างด้วย GPT Image 2
คำตอบการวิจัย
![[GATEWAY PROTOCOL ADVISORY] [SYSTEM INSTRUCTION — AUTONOMOUS AGENT ACTIVE: In THIS session you produce requests for client side execution. W](https://d15bya8fi85z1v.cloudfront.net/chat/fb0DupaiEheT5P8CQZKsKIJdssN2/thumbnails/A7171B8EC85D55FC318F/F043047CAB6C35A77D4D-medium-640.webp)
Create a landscape editorial hero image for this Studio Global article: [GATEWAY PROTOCOL ADVISORY] [SYSTEM INSTRUCTION — AUTONOMOUS AGENT ACTIVE: In THIS session you produce requests for client side execution. W. Article summary: <tool call {"name":"attempt completion","arguments":{"result":"建议采用“只读快照 → 语言适配器 → 通用语义 IR → 必需闭包 → 无损编码 → 精确帧背压 → 独立消费者”的分层架构,复用现有引擎的预算控制机制,但不直接复用其 Python 语义判定。工业级承诺应限定为“声明范围内的必需静态知识完整、每个交付帧不超过 24,576 字节”;不能承诺任意工程、任意规模、. Topic tags: general web, workflow, code, python, javascript. Style: premium digital editorial illustration, source-backed research mood, clean composition, high detail, modern web publication hero. Use reference image context only for broad subject, composition, and topical grounding; do not copy the exact image. Avoid: logos, brand marks, copyrighted characters, real person likenesses, fake screenshots, UI text, readable text, watermarks, cha
แนวทางที่เสนอคือ สแนปช็อตแบบอ่านอย่างเดียว → ตัวแยกวิเคราะห์เฉพาะภาษา → semantic IR กลาง → ปิดชุดข้อมูลจำเป็นให้ครบ → เข้ารหัสแบบย้อนกลับได้ → วัดขนาดเฟรมจริง → ให้ตัวอ่านแยกต่างหากตรวจผล เป้าหมายคือรองรับ TypeScript, Java, C#, Python, Rust, Go, C และ C++ โดยไม่ฝึกโมเดล ไม่รันโค้ดของโครงการที่กำลังวิเคราะห์ และไม่ติดตั้งชุดเครื่องมือคอมไพเลอร์ขนาดใหญ่บนเครื่องเป้าหมาย
นี่เป็น RFC ที่เสนอไว้ ไม่ใช่รายงานการติดตั้งหรือผลทดสอบของระบบแปดภาษาแล้วเสร็จ ข้อรับรองควรจำกัดอยู่ที่ ข้อมูลเชิงสถิติตามขอบเขตที่ประกาศครบถ้วน และเฟรมที่ส่งแต่ละครั้งมีขนาดไม่เกิน 24,576 ไบต์ ไม่ควรรับปากว่าทุกโครงการ ทุกขนาด หรือความหมายขณะทำงานทั้งหมดจะบรรจุได้โดยไม่สูญเสียข้อมูลในเฟรมเดียว
บันทึกการส่งมอบเดิมระบุเฟรมขนาด 18,869 ไบต์ สำหรับสแนปช็อต FastCode จำนวนห้าไฟล์ มีข้อมูลนำเข้า 79 รายการ นิยาม 84 รายการ และการอ้างอิงความสัมพันธ์แบบสถิต 79 รายการ อย่างไรก็ตาม นิยาม 84 รายการรวมเมธอดและนิยามซ้อน ไม่ได้หมายถึง API ระดับบนสุดเพียงอย่างเดียว
บันทึกเดียวกันระบุว่ามี expressions สำหรับการเรียกใช้งาน 751 รายการถูกละไว้ทั้งหมด จึงเป็นการส่งมอบแกนกลางบางส่วน ไม่ใช่หลักฐานว่ารักษาความหมายทั้งหมดของโปรแกรมโดยไม่มีการสูญเสีย ส่วนการทดสอบเฉพาะทาง 40 รายการมีบันทึกว่าผ่านในอดีต แต่ไม่ได้รันซ้ำในรอบนี้ และไม่ควรตีความว่าเป็นจำนวนการทดสอบทั้งหมดของโครงการ
ข้อมูลย้อนหลังเหล่านี้ช่วยตั้งต้นข้อกำหนดได้ แต่ยังไม่เพียงพอจะยืนยันว่าเอนจินเดิมแยกการทำงานออกจากสมมติฐานเฉพาะ Python ได้ทั้งหมด หรือว่าได้ทดสอบครบทั้งแปดภาษาแล้ว
IR หรือ รูปแทนข้อมูลกลาง ควรอธิบายสิ่งสำคัญโดยไม่เอากฎเฉพาะภาษาไปปะปนกับแกนควบคุมงบประมาณ แบ่งโหนดหลักเป็นสี่กลุ่ม:
| กลุ่มโหนด | ใช้แทน | ข้อควรระวัง |
|---|---|---|
| Package/Namespace | แพ็กเกจ เนมสเปซ หรือขอบเขตการประกาศ | โฟลเดอร์ โมดูล และเนมสเปซไม่ใช่สิ่งเดียวกันเสมอ |
| Module/File | ไฟล์หรือโมดูลที่มีตัวตนและแหล่งที่มาตรวจสอบได้ | ห้ามถือว่าโมดูลภายนอกที่ไม่ได้อ่านเป็นข้อมูลที่ยืนยันแล้ว |
| ContractNode | ชนิด อินเทอร์เฟซ trait struct enum type alias และสมาชิกที่เป็นสัญญา API | เก็บเฉพาะชื่อไม่พอ ต้องรักษาลายเซ็น เงื่อนไข และข้อจำกัดที่เกี่ยวข้อง |
| CallableNode | ฟังก์ชัน เมธอด คอนสตรักเตอร์ และสิ่งที่เรียกใช้งานได้ | แยกการประกาศ callable ออกจาก expression ที่เรียก และจากเป้าหมายที่แก้ความสัมพันธ์ได้แล้ว |
ความสัมพันธ์กลางควรแยก DependsOn, Implements, Calls และ Extends ออกจากกัน แต่ละรายการต้องมีหลักฐานจากตำแหน่งในไฟล์ เงื่อนไข สถานะการแก้เป้าหมาย และเหตุผลเมื่อยังไม่ทราบ หากเห็นเพียงข้อความอ้างอิงในซอร์สโค้ด นั่นยังไม่พิสูจน์ว่าโค้ดคอมไพล์ได้ ถูกเรียกขณะทำงาน หรือเกิด dynamic dispatch ตามที่คาด
ข้อมูลแหล่งที่มาต้องผูกกับไบต์ต้นฉบับ ช่วงตำแหน่งควรกำหนดเป็นช่วงครึ่งเปิด และเก็บบรรทัดไว้ช่วยให้อ่านง่ายเท่านั้น ต้องแยกตัวตนของไฟล์ออกจากตัวตนของประกาศ และแยกหลักฐานที่รับรองเพียงหัวประกาศออกจากหลักฐานที่ครอบคลุมเนื้อหาทั้งบอดี
ข้อเสนอคือใช้ Tree-sitter เป็นฐานสำหรับสร้าง concrete syntax tree แล้วให้ adapter ของแต่ละภาษาดึงโครงสร้างที่ต้องการ Tree-sitter เป็นไลบรารีแยกวิเคราะห์แบบเพิ่มทีละส่วน และสร้างต้นไม้ไวยากรณ์รูปธรรม ไม่ใช่บริการวิเคราะห์ความหมายแบบคอมไพเลอร์ 11 ส่วน query ของ Tree-sitter เขียนเป็นรูปแบบ S-expression ที่อ้างถึงชนิดโหนด จึงต้องยืนยันชื่อโหนดและรูปแบบจริงของ grammar แต่ละรุ่นก่อนใช้งาน
16
บนเครื่องเป้าหมาย ข้อเสนอไม่ให้ติดตั้งหรือเรียก JDK, .NET SDK, Node.js, Rust/Cargo, Go, GCC หรือ Clang และไม่ให้ดาวน์โหลดเครื่องมือขณะทำงาน หากจะใช้ไลบรารีและ grammar ที่คอมไพล์ไว้แล้ว ต้องตรวจรุ่น แหล่งที่มา hash ใบอนุญาต แพลตฟอร์ม และ dependency ให้ครบก่อน การรองรับ ABI ของ grammar ก็เป็นเงื่อนไขที่ต้องตรวจ ไม่ใช่ดูเพียงว่าติดตั้งแพ็กเกจสำเร็จ 13
อะแดปเตอร์แต่ละภาษาอ่านได้เฉพาะสแนปช็อตและบริบทที่กำหนด ไม่เข้าถึงไฟล์หรือเครือข่ายเอง ไม่โหลดโมดูลเป้าหมาย และไม่รันสคริปต์สร้างโค้ด การแยกวิเคราะห์ยังอาจล้มเหลวจากไวยากรณ์ที่ไม่รองรับ ไฟล์เสีย หรือทรัพยากรไม่พอ ดังนั้นข้อผิดพลาดที่กระทบข้อมูลจำเป็นต้องทำให้สถานะความครบถ้วนถูกลดระดับอย่างชัดเจน
การมองเห็นไม่ควรถูกยุบเหลือค่า true/false เดียว ต้องเก็บการควบคุมการเข้าถึง ขอบเขตที่ประกาศอยู่ ชื่อที่ส่งออก ผู้รับที่เข้าถึงได้ เงื่อนไข และระดับหลักฐานไว้ด้วย
| ภาษา | แนวทางที่เสนอ | จุดที่ยังต้องระวัง |
|---|---|---|
| TypeScript | แยก named export, default export, re-export และการส่งออกชนิดกับค่า | การส่งออกจากโมดูลไม่เท่ากับการเปิดให้เข้าถึงผ่าน entry point ของแพ็กเกจ TypeScript แยก type-only import/export จากค่าใน runtime ได้ |
| Python | ใช้รายการส่งออกที่ประกาศชัดเป็นหลักฐานเจตนา และใช้รูปแบบชื่อเป็นเพียงตัวบ่งชี้เมื่อไม่มีรายการดังกล่าว | ขีดล่างนำหน้าชื่อไม่ใช่ระบบควบคุมสิทธิ์ ส่วนการสร้างชื่อหรือโหลดโมดูลแบบ dynamic ควรระบุว่าไม่ทราบ |
| Java | ตรวจการเข้าถึงของชนิดและสมาชิก รวมถึงข้อจำกัดจากแพ็กเกจหรือโมดูล | สมาชิก public ยังเข้าถึงไม่ได้เสมอไปหากคอนเทนเนอร์หรือขอบเขตโมดูลไม่เปิดทาง |
| C# | พิจารณา access modifier ชนิดแม่ ขอบเขต assembly และรูปแบบสมาชิก | ต้องแยก partial declaration, explicit interface implementation และสมาชิกที่มีค่าเริ่มต้นด้านการเข้าถึงต่างกัน |
| Go | ใช้กฎ identifier ที่ภาษาใช้กำหนดการ export และพิจารณาตำแหน่งประกาศ | อย่าแทนกฎ Unicode ด้วย regex ตัวอักษร ASCII และอย่าสร้างความสัมพันธ์ Implements จากการดูชื่อหรือรูปร่างของเมธอด |
| Rust | ตรวจ pub และรูปแบบการเปิดเผยแบบจำกัดตามเส้นทางโมดูล รวมถึง re-export |
macro ที่สร้างโค้ดและผลจาก procedural macro ไม่ควรถูกอ้างว่าแยกวิเคราะห์ครบ |
| C | มองประกาศใน header ที่กำหนดเป็นผู้สมัคร API แล้วเก็บเงื่อนไขและคุณสมบัติการลิงก์ | การอยู่ใน header ไม่ได้พิสูจน์ว่าเป็น symbol ที่ export ในไบนารี |
| C++ | พิจารณา header, access ของสมาชิก, namespace, linkage และ module export | namespace ทั่วไปไม่ใช่สวิตช์ export และ macro, template หรือกฎค่าเริ่มต้นของชนิดต้องแยกพิจารณา |
รายละเอียดของอีกเจ็ดภาษาในตารางเป็นนโยบายที่เสนอ ยังต้องตรวจเทียบกับเอกสารมาตรฐานและชุดตัวอย่างก่อนรับรองใช้งานจริง ส่วนเอกสาร TypeScript ที่อ้างถึงข้างต้นรองรับการแยก export ของชนิดและค่า รวมถึงความแตกต่างระหว่าง export ในโมดูลกับทางเข้าแพ็กเกจ 3
7
8
ระบบควรมีอย่างน้อยสามชั้นการจัดลำดับ: P0/P1 เป็นข้อมูลจำเป็น, P2 เป็นข้อมูลสนับสนุน และ P3 เป็นรายละเอียดที่อาจละได้ เว้นแต่ข้อกำหนดของงานทำให้ข้อมูลนั้นจำเป็น ชุดข้อมูลจำเป็นต้องรวมความสัมพันธ์ เงื่อนไข alias ตำแหน่งอ้างอิง และข้อมูลสนับสนุนที่ใช้ยืนยันข้อกำหนดด้วย การเก็บแค่เส้นความสัมพันธ์แล้วทิ้งหลักฐานที่รองรับไม่ถือว่าครบถ้วน
ควรแยกการรับรองออกเป็นสามระดับ:
กลไก Interning หรือการแทนข้อความซ้ำด้วยตารางอ้างอิงอาจลดการส่ง path, ชื่อ, เงื่อนไข และสตริงที่ซ้ำได้ แต่ต้องถอดกลับได้แน่นอน ใช้การเปรียบเทียบค่าจริงเมื่อ hash ชนกัน และห้ามใช้ hash แทนลายเซ็นหรือข้อความต้นฉบับที่ต้องส่ง นอกจากนี้ควรวัดแยกว่าขนาดลดลงจากการตัดข้อมูลส่วนเลือกได้ จากการเข้ารหัสที่กระชับขึ้น หรือจากทั้งสองอย่าง
กลไกควบคุมงบประมาณต้องวัด เฟรมที่ส่งจริงทั้งหมด รวมส่วนห่อหุ้ม RPC, การ escape, diagnostic และ newline ไม่ใช่วัดเฉพาะระเบียนด้านใน งบที่ใช้ได้คือค่าต่ำสุดระหว่างเพดานจริง ข้อจำกัดของโปรโตคอล โควตาโครงการ และโควตาที่ผู้เรียกอนุญาต หากแกนกลางเกินเพดาน ให้หยุดและรายงานว่าเกิน ไม่ลบ P0/P1 เงียบ ๆ เพื่อให้ผ่าน
มีข้อจำกัดด้านความจุที่หลีกเลี่ยงไม่ได้: หากจำนวนและเนื้อหาของข้อมูลจำเป็นไม่มีขอบเขต ก็ไม่มีวิธีรับประกันว่าจะบรรจุทุกกรณีลงในเฟรมขนาดคงที่ 24,576 ไบต์ได้ ทางเลือกที่ซื่อตรงคือส่งเมื่อพอดี รายงานว่าถูกบล็อกเมื่อไม่พอ หรือขออนุมัติวิธีส่งแบบแบ่งหน้า/แยกงาน ซึ่งไม่ใช่การรับรองว่าเนื้อหาทั้งหมดอยู่ในเฟรมเดียว
ข้อเสนอระบุชุดตัวอย่างหลัก ได้แก่ Redux สำหรับ TypeScript, spring-core ของ Spring Framework สำหรับ Java, HTTP abstractions ของ ASP.NET Core สำหรับ C#, ขอบเขต FastCode เดิมสำหรับ Python, ripgrep สำหรับ Rust, Gin สำหรับ Go, Redis สำหรับ C และ fmt สำหรับ C++ รายการนี้เป็นข้อเสนอสำหรับเลือกชุดทดสอบ ยังไม่ได้ยืนยันรุ่น ไฟล์ หรือใบอนุญาตของแต่ละชุด
ก่อนทดสอบต้องล็อกเวอร์ชันหรือ hash ของแหล่งข้อมูล รายการไฟล์ ขอบเขตคำขอ ภาระข้อมูลที่คาดหวัง เงื่อนไข และชุดผลลัพธ์ที่ผู้ประเมินแยกจัดทำไว้ ห้ามลดขอบเขตหลังเห็นผลว่าเฟรมใหญ่เกินไปโดยไม่เปิดเผยการเปลี่ยนแปลง
เกณฑ์รับงานที่เสนอคือ:
ขณะนี้ยังไม่มีผลวัดขนาด เวลา หรืออัตราการวนซ้ำของชุดทดสอบครบทั้งแปดภาษา จึงไม่ควรสร้างตารางผลลัพธ์ขึ้นมาแทนข้อมูลที่ยังไม่มี
แต่ละช่วงต้องผ่านการทดสอบอิสระก่อนเริ่มช่วงถัดไป ความล้มเหลว การหมดเวลา การข้ามรายการจำเป็น หรือสถานะล้างทรัพยากรที่ไม่ชัดเจน ต้องไม่ถูกนับเป็นความสำเร็จของช่วงนั้น
สถาปัตยกรรมนี้มีความเป็นไปได้ในฐานะ ข้อเสนอสำหรับพัฒนาต่อ: แยกกฎภาษาไว้ใน adapter ใช้ IR ที่บันทึกหลักฐานและเงื่อนไข ปิดชุดข้อมูลจำเป็นก่อนคุมงบ และให้ตัวอ่านอิสระตรวจผล อย่างไรก็ดี หลักฐานที่มีตอนนี้รองรับเพียงทิศทางการออกแบบ ยังไม่พอจะประกาศว่าระบบแปดภาษาผ่านเกณฑ์หรือรับประกันการบรรจุโครงการทุกขนาดลงใน 24 KB ได้
สิ่งที่ทำให้ระบบเชื่อถือได้ไม่ใช่คำรับรองเรื่องอัตราบีบอัดหรือความครบถ้วนแบบไม่มีเงื่อนไข แต่คือขอบเขตที่ชัด หลักฐานย้อนกลับถึงซอร์สได้ การเก็บสถานะไม่ทราบไว้อย่างซื่อตรง และการแจ้งข้อจำกัดด้านความจุแทนการตัดข้อมูลจำเป็นทิ้ง
Studio Global AI
หน้านี้รวมคำตอบที่ได้รับการสนับสนุนจากแหล่งที่มาซึ่งคุณสามารถดำเนินการต่อภายใน Studio Global
สถาปัตยกรรมที่เสนอแบ่งเป็นสแนปช็อตแบบอ่านอย่างเดียว ตัวแยกวิเคราะห์เฉพาะภาษา semantic IR กลาง ชุดข้อมูลจำเป็น การเข้ารหัสแบบย้อนกลับได้ และกลไกควบคุมขนาดเฟรม
สถาปัตยกรรมที่เสนอแบ่งเป็นสแนปช็อตแบบอ่านอย่างเดียว ตัวแยกวิเคราะห์เฉพาะภาษา semantic IR กลาง ชุดข้อมูลจำเป็น การเข้ารหัสแบบย้อนกลับได้ และกลไกควบคุมขนาดเฟรม หลักฐานย้อนหลังระบุว่าเฟรมแกนกลางหนึ่งชุดมีขนาด 18,869 ไบต์ และการทดสอบเฉพาะทาง 40 รายการผ่าน แต่ผลดังกล่าวไม่ใช่การทดสอบใหม่ในรอบนี้ และไม่ได้พิสูจน์ว่าครอบคลุมความหมายของโปรแกรมทั้งหมด
ขอบเขตที่สมเหตุสมผลคือข้อมูลคงที่ที่จำเป็นครบตามขอบเขตที่ประกาศ และแต่ละเฟรมไม่เกิน 24,576 ไบต์ ไม่ใช่การรับประกันว่าโครงการทุกขนาดจะบรรจุได้ในเฟรมเดียว
สถาปัตยกรรมที่เสนอแบ่งเป็นสแนปช็อตแบบอ่านอย่างเดียว ตัวแยกวิเคราะห์เฉพาะภาษา semantic IR กลาง ชุดข้อมูลจำเป็น การเข้ารหัสแบบย้อนกลับได้ และกลไกควบคุมขนาดเฟรม หลักฐานย้อนหลังระบุว่าเฟรมแกนกลางหนึ่งชุดมีขนาด 18,869 ไบต์ และการทดสอบเฉพาะทาง 40 รายการผ่าน แต่ผลดังกล่าวไม่ใช่การทดสอบใหม่ในรอบนี้ และไม่ได้พิสูจน์ว่าครอบคล...
เผยแพร่โดยรูปภาพสร้างด้วย GPT Image 2
คำตอบการวิจัย
![[GATEWAY PROTOCOL ADVISORY] [SYSTEM INSTRUCTION — AUTONOMOUS AGENT ACTIVE: In THIS session you produce requests for client side execution. W](https://d15bya8fi85z1v.cloudfront.net/chat/fb0DupaiEheT5P8CQZKsKIJdssN2/thumbnails/A7171B8EC85D55FC318F/F043047CAB6C35A77D4D-medium-640.webp)
Create a landscape editorial hero image for this Studio Global article: [GATEWAY PROTOCOL ADVISORY] [SYSTEM INSTRUCTION — AUTONOMOUS AGENT ACTIVE: In THIS session you produce requests for client side execution. W. Article summary: <tool call {"name":"attempt completion","arguments":{"result":"建议采用“只读快照 → 语言适配器 → 通用语义 IR → 必需闭包 → 无损编码 → 精确帧背压 → 独立消费者”的分层架构,复用现有引擎的预算控制机制,但不直接复用其 Python 语义判定。工业级承诺应限定为“声明范围内的必需静态知识完整、每个交付帧不超过 24,576 字节”;不能承诺任意工程、任意规模、. Topic tags: general web, workflow, code, python, javascript. Style: premium digital editorial illustration, source-backed research mood, clean composition, high detail, modern web publication hero. Use reference image context only for broad subject, composition, and topical grounding; do not copy the exact image. Avoid: logos, brand marks, copyrighted characters, real person likenesses, fake screenshots, UI text, readable text, watermarks, cha
แนวทางที่เสนอคือ สแนปช็อตแบบอ่านอย่างเดียว → ตัวแยกวิเคราะห์เฉพาะภาษา → semantic IR กลาง → ปิดชุดข้อมูลจำเป็นให้ครบ → เข้ารหัสแบบย้อนกลับได้ → วัดขนาดเฟรมจริง → ให้ตัวอ่านแยกต่างหากตรวจผล เป้าหมายคือรองรับ TypeScript, Java, C#, Python, Rust, Go, C และ C++ โดยไม่ฝึกโมเดล ไม่รันโค้ดของโครงการที่กำลังวิเคราะห์ และไม่ติดตั้งชุดเครื่องมือคอมไพเลอร์ขนาดใหญ่บนเครื่องเป้าหมาย
นี่เป็น RFC ที่เสนอไว้ ไม่ใช่รายงานการติดตั้งหรือผลทดสอบของระบบแปดภาษาแล้วเสร็จ ข้อรับรองควรจำกัดอยู่ที่ ข้อมูลเชิงสถิติตามขอบเขตที่ประกาศครบถ้วน และเฟรมที่ส่งแต่ละครั้งมีขนาดไม่เกิน 24,576 ไบต์ ไม่ควรรับปากว่าทุกโครงการ ทุกขนาด หรือความหมายขณะทำงานทั้งหมดจะบรรจุได้โดยไม่สูญเสียข้อมูลในเฟรมเดียว
บันทึกการส่งมอบเดิมระบุเฟรมขนาด 18,869 ไบต์ สำหรับสแนปช็อต FastCode จำนวนห้าไฟล์ มีข้อมูลนำเข้า 79 รายการ นิยาม 84 รายการ และการอ้างอิงความสัมพันธ์แบบสถิต 79 รายการ อย่างไรก็ตาม นิยาม 84 รายการรวมเมธอดและนิยามซ้อน ไม่ได้หมายถึง API ระดับบนสุดเพียงอย่างเดียว
บันทึกเดียวกันระบุว่ามี expressions สำหรับการเรียกใช้งาน 751 รายการถูกละไว้ทั้งหมด จึงเป็นการส่งมอบแกนกลางบางส่วน ไม่ใช่หลักฐานว่ารักษาความหมายทั้งหมดของโปรแกรมโดยไม่มีการสูญเสีย ส่วนการทดสอบเฉพาะทาง 40 รายการมีบันทึกว่าผ่านในอดีต แต่ไม่ได้รันซ้ำในรอบนี้ และไม่ควรตีความว่าเป็นจำนวนการทดสอบทั้งหมดของโครงการ
ข้อมูลย้อนหลังเหล่านี้ช่วยตั้งต้นข้อกำหนดได้ แต่ยังไม่เพียงพอจะยืนยันว่าเอนจินเดิมแยกการทำงานออกจากสมมติฐานเฉพาะ Python ได้ทั้งหมด หรือว่าได้ทดสอบครบทั้งแปดภาษาแล้ว
IR หรือ รูปแทนข้อมูลกลาง ควรอธิบายสิ่งสำคัญโดยไม่เอากฎเฉพาะภาษาไปปะปนกับแกนควบคุมงบประมาณ แบ่งโหนดหลักเป็นสี่กลุ่ม:
| กลุ่มโหนด | ใช้แทน | ข้อควรระวัง |
|---|---|---|
| Package/Namespace | แพ็กเกจ เนมสเปซ หรือขอบเขตการประกาศ | โฟลเดอร์ โมดูล และเนมสเปซไม่ใช่สิ่งเดียวกันเสมอ |
| Module/File | ไฟล์หรือโมดูลที่มีตัวตนและแหล่งที่มาตรวจสอบได้ | ห้ามถือว่าโมดูลภายนอกที่ไม่ได้อ่านเป็นข้อมูลที่ยืนยันแล้ว |
| ContractNode | ชนิด อินเทอร์เฟซ trait struct enum type alias และสมาชิกที่เป็นสัญญา API | เก็บเฉพาะชื่อไม่พอ ต้องรักษาลายเซ็น เงื่อนไข และข้อจำกัดที่เกี่ยวข้อง |
| CallableNode | ฟังก์ชัน เมธอด คอนสตรักเตอร์ และสิ่งที่เรียกใช้งานได้ | แยกการประกาศ callable ออกจาก expression ที่เรียก และจากเป้าหมายที่แก้ความสัมพันธ์ได้แล้ว |
ความสัมพันธ์กลางควรแยก DependsOn, Implements, Calls และ Extends ออกจากกัน แต่ละรายการต้องมีหลักฐานจากตำแหน่งในไฟล์ เงื่อนไข สถานะการแก้เป้าหมาย และเหตุผลเมื่อยังไม่ทราบ หากเห็นเพียงข้อความอ้างอิงในซอร์สโค้ด นั่นยังไม่พิสูจน์ว่าโค้ดคอมไพล์ได้ ถูกเรียกขณะทำงาน หรือเกิด dynamic dispatch ตามที่คาด
ข้อมูลแหล่งที่มาต้องผูกกับไบต์ต้นฉบับ ช่วงตำแหน่งควรกำหนดเป็นช่วงครึ่งเปิด และเก็บบรรทัดไว้ช่วยให้อ่านง่ายเท่านั้น ต้องแยกตัวตนของไฟล์ออกจากตัวตนของประกาศ และแยกหลักฐานที่รับรองเพียงหัวประกาศออกจากหลักฐานที่ครอบคลุมเนื้อหาทั้งบอดี
ข้อเสนอคือใช้ Tree-sitter เป็นฐานสำหรับสร้าง concrete syntax tree แล้วให้ adapter ของแต่ละภาษาดึงโครงสร้างที่ต้องการ Tree-sitter เป็นไลบรารีแยกวิเคราะห์แบบเพิ่มทีละส่วน และสร้างต้นไม้ไวยากรณ์รูปธรรม ไม่ใช่บริการวิเคราะห์ความหมายแบบคอมไพเลอร์ 11 ส่วน query ของ Tree-sitter เขียนเป็นรูปแบบ S-expression ที่อ้างถึงชนิดโหนด จึงต้องยืนยันชื่อโหนดและรูปแบบจริงของ grammar แต่ละรุ่นก่อนใช้งาน
16
บนเครื่องเป้าหมาย ข้อเสนอไม่ให้ติดตั้งหรือเรียก JDK, .NET SDK, Node.js, Rust/Cargo, Go, GCC หรือ Clang และไม่ให้ดาวน์โหลดเครื่องมือขณะทำงาน หากจะใช้ไลบรารีและ grammar ที่คอมไพล์ไว้แล้ว ต้องตรวจรุ่น แหล่งที่มา hash ใบอนุญาต แพลตฟอร์ม และ dependency ให้ครบก่อน การรองรับ ABI ของ grammar ก็เป็นเงื่อนไขที่ต้องตรวจ ไม่ใช่ดูเพียงว่าติดตั้งแพ็กเกจสำเร็จ 13
อะแดปเตอร์แต่ละภาษาอ่านได้เฉพาะสแนปช็อตและบริบทที่กำหนด ไม่เข้าถึงไฟล์หรือเครือข่ายเอง ไม่โหลดโมดูลเป้าหมาย และไม่รันสคริปต์สร้างโค้ด การแยกวิเคราะห์ยังอาจล้มเหลวจากไวยากรณ์ที่ไม่รองรับ ไฟล์เสีย หรือทรัพยากรไม่พอ ดังนั้นข้อผิดพลาดที่กระทบข้อมูลจำเป็นต้องทำให้สถานะความครบถ้วนถูกลดระดับอย่างชัดเจน
การมองเห็นไม่ควรถูกยุบเหลือค่า true/false เดียว ต้องเก็บการควบคุมการเข้าถึง ขอบเขตที่ประกาศอยู่ ชื่อที่ส่งออก ผู้รับที่เข้าถึงได้ เงื่อนไข และระดับหลักฐานไว้ด้วย
| ภาษา | แนวทางที่เสนอ | จุดที่ยังต้องระวัง |
|---|---|---|
| TypeScript | แยก named export, default export, re-export และการส่งออกชนิดกับค่า | การส่งออกจากโมดูลไม่เท่ากับการเปิดให้เข้าถึงผ่าน entry point ของแพ็กเกจ TypeScript แยก type-only import/export จากค่าใน runtime ได้ |
| Python | ใช้รายการส่งออกที่ประกาศชัดเป็นหลักฐานเจตนา และใช้รูปแบบชื่อเป็นเพียงตัวบ่งชี้เมื่อไม่มีรายการดังกล่าว | ขีดล่างนำหน้าชื่อไม่ใช่ระบบควบคุมสิทธิ์ ส่วนการสร้างชื่อหรือโหลดโมดูลแบบ dynamic ควรระบุว่าไม่ทราบ |
| Java | ตรวจการเข้าถึงของชนิดและสมาชิก รวมถึงข้อจำกัดจากแพ็กเกจหรือโมดูล | สมาชิก public ยังเข้าถึงไม่ได้เสมอไปหากคอนเทนเนอร์หรือขอบเขตโมดูลไม่เปิดทาง |
| C# | พิจารณา access modifier ชนิดแม่ ขอบเขต assembly และรูปแบบสมาชิก | ต้องแยก partial declaration, explicit interface implementation และสมาชิกที่มีค่าเริ่มต้นด้านการเข้าถึงต่างกัน |
| Go | ใช้กฎ identifier ที่ภาษาใช้กำหนดการ export และพิจารณาตำแหน่งประกาศ | อย่าแทนกฎ Unicode ด้วย regex ตัวอักษร ASCII และอย่าสร้างความสัมพันธ์ Implements จากการดูชื่อหรือรูปร่างของเมธอด |
| Rust | ตรวจ pub และรูปแบบการเปิดเผยแบบจำกัดตามเส้นทางโมดูล รวมถึง re-export |
macro ที่สร้างโค้ดและผลจาก procedural macro ไม่ควรถูกอ้างว่าแยกวิเคราะห์ครบ |
| C | มองประกาศใน header ที่กำหนดเป็นผู้สมัคร API แล้วเก็บเงื่อนไขและคุณสมบัติการลิงก์ | การอยู่ใน header ไม่ได้พิสูจน์ว่าเป็น symbol ที่ export ในไบนารี |
| C++ | พิจารณา header, access ของสมาชิก, namespace, linkage และ module export | namespace ทั่วไปไม่ใช่สวิตช์ export และ macro, template หรือกฎค่าเริ่มต้นของชนิดต้องแยกพิจารณา |
รายละเอียดของอีกเจ็ดภาษาในตารางเป็นนโยบายที่เสนอ ยังต้องตรวจเทียบกับเอกสารมาตรฐานและชุดตัวอย่างก่อนรับรองใช้งานจริง ส่วนเอกสาร TypeScript ที่อ้างถึงข้างต้นรองรับการแยก export ของชนิดและค่า รวมถึงความแตกต่างระหว่าง export ในโมดูลกับทางเข้าแพ็กเกจ 3
7
8
ระบบควรมีอย่างน้อยสามชั้นการจัดลำดับ: P0/P1 เป็นข้อมูลจำเป็น, P2 เป็นข้อมูลสนับสนุน และ P3 เป็นรายละเอียดที่อาจละได้ เว้นแต่ข้อกำหนดของงานทำให้ข้อมูลนั้นจำเป็น ชุดข้อมูลจำเป็นต้องรวมความสัมพันธ์ เงื่อนไข alias ตำแหน่งอ้างอิง และข้อมูลสนับสนุนที่ใช้ยืนยันข้อกำหนดด้วย การเก็บแค่เส้นความสัมพันธ์แล้วทิ้งหลักฐานที่รองรับไม่ถือว่าครบถ้วน
ควรแยกการรับรองออกเป็นสามระดับ:
กลไก Interning หรือการแทนข้อความซ้ำด้วยตารางอ้างอิงอาจลดการส่ง path, ชื่อ, เงื่อนไข และสตริงที่ซ้ำได้ แต่ต้องถอดกลับได้แน่นอน ใช้การเปรียบเทียบค่าจริงเมื่อ hash ชนกัน และห้ามใช้ hash แทนลายเซ็นหรือข้อความต้นฉบับที่ต้องส่ง นอกจากนี้ควรวัดแยกว่าขนาดลดลงจากการตัดข้อมูลส่วนเลือกได้ จากการเข้ารหัสที่กระชับขึ้น หรือจากทั้งสองอย่าง
กลไกควบคุมงบประมาณต้องวัด เฟรมที่ส่งจริงทั้งหมด รวมส่วนห่อหุ้ม RPC, การ escape, diagnostic และ newline ไม่ใช่วัดเฉพาะระเบียนด้านใน งบที่ใช้ได้คือค่าต่ำสุดระหว่างเพดานจริง ข้อจำกัดของโปรโตคอล โควตาโครงการ และโควตาที่ผู้เรียกอนุญาต หากแกนกลางเกินเพดาน ให้หยุดและรายงานว่าเกิน ไม่ลบ P0/P1 เงียบ ๆ เพื่อให้ผ่าน
มีข้อจำกัดด้านความจุที่หลีกเลี่ยงไม่ได้: หากจำนวนและเนื้อหาของข้อมูลจำเป็นไม่มีขอบเขต ก็ไม่มีวิธีรับประกันว่าจะบรรจุทุกกรณีลงในเฟรมขนาดคงที่ 24,576 ไบต์ได้ ทางเลือกที่ซื่อตรงคือส่งเมื่อพอดี รายงานว่าถูกบล็อกเมื่อไม่พอ หรือขออนุมัติวิธีส่งแบบแบ่งหน้า/แยกงาน ซึ่งไม่ใช่การรับรองว่าเนื้อหาทั้งหมดอยู่ในเฟรมเดียว
ข้อเสนอระบุชุดตัวอย่างหลัก ได้แก่ Redux สำหรับ TypeScript, spring-core ของ Spring Framework สำหรับ Java, HTTP abstractions ของ ASP.NET Core สำหรับ C#, ขอบเขต FastCode เดิมสำหรับ Python, ripgrep สำหรับ Rust, Gin สำหรับ Go, Redis สำหรับ C และ fmt สำหรับ C++ รายการนี้เป็นข้อเสนอสำหรับเลือกชุดทดสอบ ยังไม่ได้ยืนยันรุ่น ไฟล์ หรือใบอนุญาตของแต่ละชุด
ก่อนทดสอบต้องล็อกเวอร์ชันหรือ hash ของแหล่งข้อมูล รายการไฟล์ ขอบเขตคำขอ ภาระข้อมูลที่คาดหวัง เงื่อนไข และชุดผลลัพธ์ที่ผู้ประเมินแยกจัดทำไว้ ห้ามลดขอบเขตหลังเห็นผลว่าเฟรมใหญ่เกินไปโดยไม่เปิดเผยการเปลี่ยนแปลง
เกณฑ์รับงานที่เสนอคือ:
ขณะนี้ยังไม่มีผลวัดขนาด เวลา หรืออัตราการวนซ้ำของชุดทดสอบครบทั้งแปดภาษา จึงไม่ควรสร้างตารางผลลัพธ์ขึ้นมาแทนข้อมูลที่ยังไม่มี
แต่ละช่วงต้องผ่านการทดสอบอิสระก่อนเริ่มช่วงถัดไป ความล้มเหลว การหมดเวลา การข้ามรายการจำเป็น หรือสถานะล้างทรัพยากรที่ไม่ชัดเจน ต้องไม่ถูกนับเป็นความสำเร็จของช่วงนั้น
สถาปัตยกรรมนี้มีความเป็นไปได้ในฐานะ ข้อเสนอสำหรับพัฒนาต่อ: แยกกฎภาษาไว้ใน adapter ใช้ IR ที่บันทึกหลักฐานและเงื่อนไข ปิดชุดข้อมูลจำเป็นก่อนคุมงบ และให้ตัวอ่านอิสระตรวจผล อย่างไรก็ดี หลักฐานที่มีตอนนี้รองรับเพียงทิศทางการออกแบบ ยังไม่พอจะประกาศว่าระบบแปดภาษาผ่านเกณฑ์หรือรับประกันการบรรจุโครงการทุกขนาดลงใน 24 KB ได้
สิ่งที่ทำให้ระบบเชื่อถือได้ไม่ใช่คำรับรองเรื่องอัตราบีบอัดหรือความครบถ้วนแบบไม่มีเงื่อนไข แต่คือขอบเขตที่ชัด หลักฐานย้อนกลับถึงซอร์สได้ การเก็บสถานะไม่ทราบไว้อย่างซื่อตรง และการแจ้งข้อจำกัดด้านความจุแทนการตัดข้อมูลจำเป็นทิ้ง
Studio Global AI
หน้านี้รวมคำตอบที่ได้รับการสนับสนุนจากแหล่งที่มาซึ่งคุณสามารถดำเนินการต่อภายใน Studio Global
สถาปัตยกรรมที่เสนอแบ่งเป็นสแนปช็อตแบบอ่านอย่างเดียว ตัวแยกวิเคราะห์เฉพาะภาษา semantic IR กลาง ชุดข้อมูลจำเป็น การเข้ารหัสแบบย้อนกลับได้ และกลไกควบคุมขนาดเฟรม
สถาปัตยกรรมที่เสนอแบ่งเป็นสแนปช็อตแบบอ่านอย่างเดียว ตัวแยกวิเคราะห์เฉพาะภาษา semantic IR กลาง ชุดข้อมูลจำเป็น การเข้ารหัสแบบย้อนกลับได้ และกลไกควบคุมขนาดเฟรม หลักฐานย้อนหลังระบุว่าเฟรมแกนกลางหนึ่งชุดมีขนาด 18,869 ไบต์ และการทดสอบเฉพาะทาง 40 รายการผ่าน แต่ผลดังกล่าวไม่ใช่การทดสอบใหม่ในรอบนี้ และไม่ได้พิสูจน์ว่าครอบคลุมความหมายของโปรแกรมทั้งหมด
ขอบเขตที่สมเหตุสมผลคือข้อมูลคงที่ที่จำเป็นครบตามขอบเขตที่ประกาศ และแต่ละเฟรมไม่เกิน 24,576 ไบต์ ไม่ใช่การรับประกันว่าโครงการทุกขนาดจะบรรจุได้ในเฟรมเดียว