Hệ thống IO dựa trên tiếp tục?


8

Gần đây, tôi đã chơi xung quanh với những hồi tưởng , chủ yếu là từ bài báo kinh điển của Abramsky Retracing Một số con đường trong Đại số quá trình . Chúng khá lắt léo (về cơ bản là các giải pháp cho phương trình miền ) và rất gợi nhớ đến các mạng Kahn.R= =Tôi(Ôi×R)

Tất nhiên, quan sát này không phải là nguyên bản đối với tôi --- chúng tạo thành một thể loại đơn hình truy tìm, và thực tế này đã được Abramsky và Jagadeesan sử dụng để đưa ra ngữ nghĩa cho logic tuyến tính. Dù sao đi nữa, lưu ý rằng nếu bạn ăn một nối lại một đầu vào của loại tôi , bạn sẽ có được một sản lượng của loại O và được cập nhật trở lại r ' , đó là những gì cho phép bạn mô hình thực tế là một nút dataflow có thể thay đổi nếu thấy đầu vào mời vào.rTôiÔir'

Kết quả là, có vẻ như họ có thể cung cấp một API đẹp để xây dựng các bộ chuyển đổi I / O bằng ngôn ngữ bậc cao như ML hoặc Haskell, nhưng tôi dường như không thể tìm thấy bất kỳ bài báo nào mô tả điều đó. Nhưng chúng đã tồn tại trong nhiều thập kỷ và Gordon Plotkin đã phát minh ra chúng, vì vậy không giống như chúng bị lu mờ trong bóng tối. Vì vậy, tôi đã tự hỏi nếu có ai đã nhìn thấy họ đưa vào sử dụng như vậy.


2
Khi tôi đang đọc câu hỏi, tôi tự nghĩ "Tôi cá là Neel sẽ trả lời câu hỏi này".
Andrej Bauer

Đây có thể là một trường hợp sử dụng tốt cho các thao tác và xử lý kiểu Eff.
Andrej Bauer

@AndrejBauer: Tôi luôn nghĩ rằng đối với câu hỏi của Neel.
Dave Clarke

Câu trả lời:


7

Cái này trông rất giống API I / O được mô tả bởi Felleisen và cộng sự trong Hệ thống I / O chức năng (hoặc Fun for Freshman Kids) . Về cơ bản, bạn viết (trong cài đặt đơn giản hơn, không phân phối), một loạt các trình xử lý sự kiện, mỗi trình xử lý chấp nhận trạng thái hiện tại và trả về trạng thái cập nhật. Cuối cùng, có một to-drawtrình xử lý, tạo ra "đầu ra" cho mỗi trạng thái.

Nếu chúng tôi sử dụng lại API này một chút, chúng tôi có thể đóng gói các trình xử lý và trạng thái hiện tại cùng nhau và mỗi lần trình xử lý trả về cả trạng thái mới và một bộ trình xử lý mới. Chúng tôi có thể gọi gói trạng thái và hoạt động này là "đối tượng". :) Nếu sau đó chúng ta tạo kết quả thành một cặp đối tượng này và "đầu ra", thì chúng ta có chính xác loại hồi quy.

Điều thú vị là, trong bài báo, Felleisen và cộng sự thực hiện chính xác điều này khi chuyển sang cài đặt phân tán - mọi thao tác trả về một cặp trạng thái mới và "đầu ra" dưới dạng tin nhắn được gửi cho những người tham gia khác trong hệ thống.


5

Chỉ cần đi qua bài viết này.

Quay trở lại đầu những năm 1980. Friedman et al @ Indiana đã phát minh ra khái niệm 'động cơ' trong bối cảnh của Đề án 84 (không phải Đề án 48). Một động cơ đại khái là một yếu tố của loại này:

E = Unit x Nats -> E + O

Bạn cũng có thể sử dụng I thay vì Đơn vị và phần x Nats là tùy chọn. Bạn có thể nghĩ về những điều này như một hình thức của sự phục hồi, và tùy thuộc vào các công cụ bối cảnh thực tế hơn là sự phục hồi.


1
Cảm ơn! Google tìm thấy tôi Haynes và Friedman, "Tóm tắt thời gian ưu tiên với động cơ" ( cs.indiana.edu/pub/techreports/TR178.pdf ) và "Động cơ từ Continuations" của Dybvig và Hieb ( citeseerx.ist.psu.edu tóm tắt? doi = 10.1.1.64.6124 ) Có bất kỳ giới thiệu nào khác mà tôi đã bỏ lỡ không?
Neel Krishnaswami
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.