Ôi Chúa, Cuối Cùng C Cũng Bắt Đầu Hỗ Trợ Closure Rồi
Lạy Chúa, cuối cùng ngôn ngữ C cũng đã bắt đầu hỗ trợ closure rồi! Thật là phiền phức khi phải làm việc với những ngôn ngữ không hỗ trợ closure. Cách đây không lâu, một đồng nghiệp của tôi đã cố gắng dùng thử boost và muốn tạo một struct ẩn danh để biến tấu thành functor mô phỏng closure. Kết quả thật đáng xấu hổ - hắn phải đối mặt với một núi lỗi template khi biên dịch. Tôi, kẻ đã lâu không đụng đến C++, đứng bên cạnh mà thấy sướng rơn. Mặc dù phần nào cũng do hắn chưa hiểu rõ các ngóc ngách trong C++ gây ra, nhưng nếu chuyện này xảy ra vài năm trước, có lẽ tôi đã lấy nó làm đề thi chuyên sâu khi tuyển dụng rồi. Còn bây giờ, tôi chỉ biết chửi thề: Tại sao lại thiết kế ngôn ngữ theo kiểu này?
Việc thêm các tính năng mới cho ngôn ngữ không phải chuyện đáng sợ. Mục tiêu cuối cùng vẫn là giải quyết vấn đề mà thôi. Một ví dụ tuyệt vời là sự bổ sung Blocks vào C/C++ của Apple. Nói đơn giản thì đây chính là cách thêm hỗ trợ closure cho ngôn ngữ C. Thứ này gần như không thể thực hiện chỉ bằng thư viện thuần túy (dù boost có thể mô phỏng theo cách thần kỳ thế nào đi nữa thì vẫn tồn tại khiếm khuyết cố hữu). Clang đã triển khai hỗ trợ blocks kèm theo phần runtime tương ứng, và g++ trông cũng sẽ sớm cập nhật tính năng này. Còn mấy thằng như Visual C++ thì tôi chẳng buồn quan tâm - đã nhiều năm trôi qua kể từ ngày tôi dùng compiler đóng (closed-source).
Có thể nói Blocks chính là bước đệm cách mạng hóa cách chúng ta viết code bất đồng bộ. Nếu trước đây phải vật lộn với con trỏ hàm và struct mang theo dữ liệu trạng thái, thì nay closure giúp đóng gói cả logic và ngữ cảnh chỉ trong vài dòng code gọn gàng. Đặc biệt với các project đa nền tảng, việc clang và gcc cùng hỗ trợ Blocks mở ra triển vọng thống nhất mã nguồn mà không cần phụ thuộc vào công cụ của hãng A hay hãng B. Đây có lẽ chính là minh chứng rõ ràng nhất cho việc một ngôn ngữ lập trình muốn sống sót qua thời đại mới cần phải biết tiến hóa như thế nào!