Inside the Go Playground
Bài tóm tắt Go 2013 2. Tăng trưởng Độ khó: Nâng cao
Go · 2013 · 2. Tăng trưởng · Độ khó: Nâng cao — bài gốc
Dự án ngôn ngữ mã nguồn mở. Bài tự ghi chú là không còn mô tả bản Playground hiện tại.
Bối cảnh
- Playground (9/2010) cho chạy chương trình Go bất kỳ từ trình duyệt, dùng trong tài liệu, tour, slide. Ba phần: backend trên máy của Google (compile + chạy, trả output qua RPC), frontend trên App Engine (nhận HTTP, gọi backend, có cache), client JavaScript.
- Chạy code không tin cậy phải cách ly khỏi hạ tầng Google: backend chạy chương trình trong Native Client (NaCl), giới hạn CPU, RAM, không có mạng hay file system. Nhưng Go nổi bật ở concurrency và mạng; bản đầu thì giờ đứng yên ở 10/11/2009 và
time.Sleepkhông có tác dụng.
Thay đổi chính
- Thời gian giả: chương trình bị giới hạn cả thời gian thật (mỗi chương trình giữ tài nguyên ở backend và các tầng giữa, và để chống DoS). Runtime riêng cho Playground giữ một đồng hồ nội bộ; scheduler sửa để khi mọi goroutine đều bị chặn (deadlock) mà còn timer chờ, đồng hồ nhảy tới timer sớm nhất và đánh thức. Chương trình "ngủ" mà thực tế xong gần như tức thì.
- Phát lại output: mỗi lần ghi stdout/stderr kèm header (thời điểm giả + độ dài); frontend tách thành danh sách sự kiện có độ trễ, client JavaScript phát lại theo đúng nhịp, nên người xem thấy như chạy thật.
- File system và mạng giả cài ở tầng
syscallcho bản build NaCl: file system trong bộ nhớ, mạng giả trong process, để ví dụ về file và mạng chạy được mà không chạm vào máy thật.
Vì sao
- Cách ly an toàn và tính năng của ngôn ngữ mâu thuẫn nhau; thay vì nới cách ly, giả lập các tài nguyên bị cấm ở tầng runtime và syscall.
Bài học cho SWE
- Chạy code không tin cậy: cách ly mạnh ở tầng thực thi, rồi giả lập tài nguyên cần thiết ở tầng thấp nhất của runtime để chương trình không biết khác biệt.
- Đồng hồ giả nhảy khi hệ "rảnh" (mọi luồng đều chờ) biến chờ thời gian thành tức thì; đây cũng là ý tưởng của gói kiểm thử
synctestsau này.
Liên quan
- Bảo mật hạ tầng và quản lý secret · Đổi ngôn ngữ và runtime
- Cùng ý đồng hồ giả: Go 2025
- Cùng dự án: Go 2024
#Go Playground#sandbox#Native Client#untrusted code#fake time#scheduler#deadlock detection#playback output#fake file system#fake network#App Engine
Được nhắc tới trong
Công ty (1)