Các mô hình học máy có tạo ra các kiểu TypeScript có thể kiểm tra kiểu không?
Author
Venue
Hội nghị Châu Âu về Lập trình Hướng Đối tượng (ECOOP) 2023
Abstract
Di chuyển kiểu là quá trình thêm kiểu vào mã không có kiểu để đảm bảo tính chính xác tại thời điểm biên dịch. TypeScript và các hệ thống kiểu dần dần khác hỗ trợ quá trình di chuyển kiểu bằng cách cho phép lập trình viên bắt đầu với các kiểu không chính xác và dần dần củng cố chúng. Tuy nhiên, việc thêm kiểu là một công việc thủ công và một số dự án di chuyển trên các cơ sở mã nguồn lớn trong ngành đã được báo cáo là mất vài năm. Trong cộng đồng nghiên cứu, đã có sự quan tâm đáng kể đến việc sử dụng học máy để tự động hóa quá trình di chuyển kiểu TypeScript. Các mô hình học máy hiện có báo cáo độ chính xác cao trong việc dự đoán các chú thích kiểu TypeScript riêng lẻ. Tuy nhiên, trong bài báo này, chúng tôi lập luận rằng độ chính xác có thể gây hiểu lầm, và chúng ta nên tập trung vào một câu hỏi khác: liệu công cụ di chuyển kiểu tự động có thể tạo ra mã nguồn vượt qua trình kiểm tra kiểu TypeScript hay không? Chúng tôi giới thiệu TypeWeaver, một công cụ di chuyển kiểu TypeScript có thể sử dụng với bất kỳ mô hình dự đoán kiểu nào. Chúng tôi đánh giá TypeWeaver với ba mô hình từ văn liệu: DeepTyper, một mạng thần kinh tái phát; LambdaNet, một mạng thần kinh đồ thị; và InCoder, một mô hình biến đổi đa ngôn ngữ đa năng hỗ trợ các tác vụ điền vào giữa. Công cụ của chúng tôi tự động hóa các bước cần thiết để sử dụng mô hình dự đoán kiểu, (1) nhập các kiểu cho các phụ thuộc của dự án; (2) chuyển đổi các mô-đun JavaScript sang cú pháp TypeScript; (3) chèn các chú thích kiểu được dự đoán vào chương trình để tạo ra TypeScript khi cần thiết; và (4) loại bỏ các dự đoán không phải kiểu khi cần thiết. Chúng tôi đánh giá TypeWeaver trên bộ dữ liệu gồm 513 gói JavaScript, bao gồm cả các gói chưa từng được định kiểu trước đây. Với mô hình dự đoán kiểu tốt nhất, chúng tôi nhận thấy chỉ 21% gói vượt qua kiểm tra kiểu, nhưng đáng khích lệ hơn, 69% tệp đã vượt qua kiểm tra kiểu thành công.
