Ai đã làm async / chờ đợi đầu tiên?


20

Python đã thêm các cấu trúc async / await vào 3.5 vào năm 2015. Cộng đồng Javascript đã thực hiện các bước hướng tới nó trong một tỷ năm và cuối cùng đã thêm một triển khai rất giống với dự thảo trong ES8 được phát hành vào năm 2017 (Theo hiểu biết của tôi). Bản mô tả cũng đã thêm các phương thức async vào năm 2015 trong phiên bản 1.7 để mắt không được nhìn giống hệt như các phương thức async của js.

Các phương thức async được thêm vào năm 2012 trông giống như tất cả các triển khai khác của async / await và dựa trên các quy trình làm việc không đồng bộ tương tự nhưng khác nhau của F # đã được giới thiệu trong F # 2.0 vào năm 2010. Đây là ví dụ sớm nhất tôi biết về ngôn ngữ được xây dựng trong lập trình không đồng bộ - C # với cặp async / await và F # với luồng async.

Có ví dụ nào trước đây về các từ khóa đang được sử dụng trong ngữ cảnh này dưới dạng cấu trúc ngôn ngữ (hoặc thư viện) không? Từ thông tin hạn chế của tôi, có vẻ như mọi người đều bắt chước những phần hay của việc triển khai C #, nhưng C # có sao chép nó từ người khác không?


3
Nếu bạn chỉ tìm kiếm cách sử dụng các từ async awaittrong ngôn ngữ lập trình, thì điều đó khá gần đây. Nhưng lập trình không đồng bộ của loại thực hành async awaitđã có từ lâu.
Robert Harvey

Câu trả lời:


27

Việc tham gia vào một cuộc phỏng vấn của Anders Hejlsberg cho Kênh 9 về Lập trình không đồng bộ async/await trong C # lấy cảm hứng từ các mối quan tâm không đồng bộ trong F #.

Trong trường hợp bạn không biết, Anders Hejlsberg là kiến ​​trúc sư trưởng của C #, và cũng đã làm việc trong các ngôn ngữ khác bao gồm TypeScript.

Theo Don Syme, trên blog của mình , quy trình làm việc F # async lấy cảm hứng từ việc triển khai đơn nguyên không đồng bộ cho haskell. Cụ thể là bài viết của Bành Libài báo "Một người đồng tính của người nghèo" của Koen Claessen .

Trong trường hợp bạn không biết, Don Syme là kiến ​​trúc sư trưởng của F #, trong số những thứ khác.

Bài viết của Koen Claessen là triển khai hoạt động cũ hơn với kết quả và sự tiếp nối mà tôi có thể tìm thấy, có từ năm 1999. Nó thực hiện đồng thời bằng cách xác định các hoạt động nguyên tử, tiếp tục và lên lịch trình vòng tròn. Cách tiếp cận được trả tiền sẽ là động lực cho việc chuyển đổi từ tin nhắn chuyển sang kết quả chờ đợi.

Công việc trước đây để đồng thời trong Haskell sử dụng một số dạng kênh hoặc tin nhắn truyền qua để liên lạc.


Nói về công việc trước đây, tôi phải đề cập đến Haskell đồng thời, trong đó "Đơn vị đồng thời của một người nghèo" là một thay thế ...

Và bài báo "Lập trình song song ngầm và rõ ràng trong Haskell" của Mark P. Jones và Paul Hudak. Bài viết này đặt nền tảng cho bài báo của Koen Claessen.

Trong bài báo "Lập trình song song ngầm và rõ ràng trong Haskell" Mark và Paul phân tích các thuộc tính của "ngã ba" và vấn đề tác dụng phụ trong đồng thời, trong số những điều khác. Họ tham khảo tài liệu "Một ngữ nghĩa cho các nguyên hàm đồng thời ML" , chọn một nguyên hàm đồng thời dựa trên ML đồng thời và cung cấp bằng chứng rằng chúng bảo toàn các thuộc tính thực thi tuần tự.


Đây là một câu trả lời thực sự tốt. Tôi rất vui vì bạn đã đề cập đến Haskell & ML (cả hai đều lấy cảm hứng từ F #). Tôi biết bạn sẽ nghe thấy những người Haskell nói về phong cách tiếp tục của Wap. async / await chỉ là ma thuật biên dịch / cú pháp đường trên đầu khái niệm đó.
RubberDuck

1

Tôi tin rằng Microsoft sẽ không lấy các từ đã có, vì vậy các từ asyncawaitcó thể được quy cho thời gian mà bạn đề cập đến. Tuy nhiên, những ý tưởng của CoroutinesHợp tác đa nhiệm rất cũ.


2
Tôi không nghĩ là chính xác khi so sánh coroutines và lập trình không đồng bộ - chúng cung cấp loại trừu tượng rất khác nhau.
wonderra

3
"Tôi tin rằng Microsoft sẽ không lấy những từ đã có" - Bạn có cơ sở nào cho niềm tin đó không? Các nhà thiết kế ngôn ngữ thành công thường thực dụng hơn thế.
Sebastian Redl
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.