Trong một diễn biến bất ngờ thách thức chính định nghĩa về lập trình, cuộc thi International Obfuscated C Code Contest năm 1994 đã trao giải thưởng Lạm dụng luật tệ nhất cho một chương trình tự sao chép nhỏ nhất thế giới - một tệp tin trống rỗng.
Szymon Rusinkiewicz , một lập trình viên đến từ Hoa Kỳ, đã gửi một bài dự thi phi truyền thống này và từ đó đã làm dấy lên các cuộc tranh luận về bản chất của chương trình C hợp lệ và ranh giới của việc làm rối mã nguồn.
Nghịch lý của mã nguồn rỗng
Bài dự thi của Rusinkiewicz , có tên là smr.c
, về cơ bản là một tệp tin trống rỗng. Mặc dù thoạt nhìn có vẻ như một bài dự thi đùa, nó đặt ra những câu hỏi thú vị về bản chất của ngôn ngữ lập trình và hành vi của trình biên dịch.
Ban giám khảo lưu ý rằng mặc dù smr.c
không phải là một chương trình C hợp lệ theo nghĩa đen, nhưng nó cũng không phải là không hợp lệ. Một số trình biên dịch C sẽ biên dịch một tệp tin trống thành một chương trình không làm gì cả, điều này thực sự khiến nó trở thành một chương trình hợp lệ, dù là ở mức tối thiểu.
Hành vi của trình biên dịch và tiêu chuẩn
Bài dự thi độc đáo này đã khơi mào các cuộc thảo luận giữa các lập trình viên về tiêu chuẩn ngôn ngữ C và hành vi của trình biên dịch. Theo tiêu chuẩn C89 , một đơn vị dịch phải có ít nhất một khai báo bên ngoài. Tuy nhiên, tiêu chuẩn không yêu cầu rõ ràng phải có hàm main()
, trái ngược với những gì nhiều lập trình viên thường nghĩ.
Một số trình biên dịch, như GCC (GNU Compiler Collection) , từ chối các tệp tin trống với thông báo ISO C cấm đơn vị dịch rỗng. Sự khác biệt trong hành vi của trình biên dịch này làm tăng thêm một tầng phức tạp cho cuộc tranh luận xung quanh bài dự thi của Rusinkiewicz .
Tác động đến các cuộc thi trong tương lai
Sự khéo léo của bài dự thi này đã dẫn đến thay đổi trong luật của cuộc thi. Những phiên bản tiếp theo của International Obfuscated C Code Contest sẽ quy định yêu cầu kích thước tối thiểu lớn hơn một ký tự so với bài dự thi này, ngăn chặn hiệu quả những bài dự thi tương tự trong tương lai.
Định nghĩa lại về tự sao chép
Điều làm cho bài dự thi này đặc biệt thú vị là tuyên bố của nó về việc là một chương trình tự sao chép. Khi thực thi, đầu ra của chương trình khớp hoàn toàn với mã nguồn của nó - có nghĩa là, nó không xuất ra gì cả. Điều này thách thức hiểu biết thông thường của chúng ta về các chương trình tự sao chép và đặt ra các câu hỏi mang tính triết học về bản chất của sự sao chép trong bối cảnh phần mềm.
Kết luận
Bài dự thi tệp tin rỗng của Rusinkiewicz như một lời nhắc nhở về tầm quan trọng của các định nghĩa chính xác trong khoa học máy tính và những cách bất ngờ mà các quy tắc có thể được diễn giải. Nó chứng minh rằng ngay cả trong một lĩnh vực nghiêm ngặt như lập trình, vẫn còn chỗ cho sự sáng tạo, hài hước và suy ngẫm triết học.
Khi chúng ta tiếp tục mở rộng ranh giới của những điều có thể trong lập trình, những bài dự thi như thế này nhắc nhở chúng ta phải đặt câu hỏi về những giả định của mình và suy nghĩ ngoài khuôn khổ - hoặc trong trường hợp này, bên trong một tệp tin trống.