Ngôn ngữ lập trình luồng dữ liệu là gì? Tại sao sử dụng nó? Và có bất kỳ lợi ích cho nó?
Ngôn ngữ lập trình luồng dữ liệu là gì? Tại sao sử dụng nó? Và có bất kỳ lợi ích cho nó?
Câu trả lời:
Trong ngôn ngữ luồng điều khiển, bạn có một luồng hướng dẫn hoạt động trên dữ liệu bên ngoài. Thực thi có điều kiện, các bước nhảy và các lệnh gọi thủ tục thay đổi dòng lệnh được thực thi. Điều này có thể được coi là các lệnh chạy qua dữ liệu (ví dụ, các lệnh hoạt động trên các thanh ghi được tải bằng dữ liệu bởi các lệnh - dữ liệu là tĩnh trừ khi dòng lệnh di chuyển nó). Câu lệnh "if" của luồng điều khiển nhảy đến nhánh chính xác trong luồng lệnh, nhưng dữ liệu không được di chuyển.
Trong ngôn ngữ luồng dữ liệu, bạn có một luồng dữ liệu được chuyển từ lệnh này sang lệnh khác để được xử lý. Thực thi có điều kiện, các bước nhảy và các lệnh gọi thủ tục định tuyến dữ liệu đến các lệnh khác nhau. Điều này có thể được coi là dữ liệu chảy qua các hướng dẫn tĩnh khác như cách tín hiệu điện chảy qua mạch hoặc nước chảy qua đường ống. Câu lệnh "if" luồng dữ liệu sẽ định tuyến dữ liệu đến nhánh chính xác.
Một số ví dụ về các tính năng và ngôn ngữ của luồng dữ liệu:
Ngôn ngữ văn bản
Ngôn ngữ trực quan
Các sản phẩm nhúng ngôn ngữ luồng dữ liệu trực quan:
Ngôn ngữ lập trình luồng dữ liệu là ngôn ngữ tập trung vào trạng thái của chương trình và khiến các hoạt động xảy ra theo bất kỳ thay đổi nào trong trạng thái. Các ngôn ngữ lập trình luồng dữ liệu vốn tồn tại song song, bởi vì các hoạt động dựa trên các đầu vào mà khi gặp nhau sẽ khiến hoạt động thực thi. Điều này có nghĩa là không giống như một chương trình bình thường, nơi một hoạt động được theo sau bởi hoạt động tiếp theo, trong một chương trình luồng dữ liệu, các hoạt động của chương trình sẽ thực thi miễn là các đầu vào được đáp ứng và do đó không có thứ tự thiết lập.
Thông thường các ngôn ngữ lập trình luồng dữ liệu sử dụng một bảng băm lớn trong đó các khóa là dữ liệu của chương trình và các giá trị của bảng là con trỏ đến các hoạt động của chương trình. Điều này làm cho các chương trình đa lõi dễ tạo hơn bằng ngôn ngữ lập trình luồng dữ liệu, vì mỗi lõi chỉ cần bảng băm để hoạt động.
Một ví dụ phổ biến của ngôn ngữ lập trình luồng dữ liệu là một chương trình bảng tính trải rộng có các cột dữ liệu bị ảnh hưởng bởi các cột dữ liệu khác. Nếu dữ liệu trong một cột thay đổi, dữ liệu khác trong các cột khác có thể sẽ thay đổi theo nó. Mặc dù chương trình bảng tính là ví dụ phổ biến nhất của ngôn ngữ lập trình luồng dữ liệu, nhưng hầu hết chúng có xu hướng là ngôn ngữ đồ họa.
Một loại lập trình luồng dữ liệu là lập trình phản ứng . Khi phong cách lập trình này được sử dụng trong một ngôn ngữ chức năng, nó được gọi là lập trình phản ứng chức năng . Một ví dụ về ngôn ngữ lập trình phản ứng chức năng cho web là Flapjax .
Ngoài ra, anic là một ngôn ngữ luồng dữ liệu được thảo luận gần đây trên Hacker News.
Một ví dụ khác là Martlet từ Oxford.
Dataflow ngôn ngữ lập trình kiến nghị để cô lập một số hành vi địa phương trong cái gọi là " diễn viên ", mà có nghĩa vụ phải chạy song song và trao đổi dữ liệu thông qua các kênh truyền hình point-to-point. Không có khái niệm về bộ nhớ trung tâm (cho cả mã và dữ liệu) không giống như mô hình Von Neumann của máy tính .
Những tác nhân này sử dụng mã thông báo dữ liệu trên đầu vào của họ và tạo ra dữ liệu mới trên đầu ra của họ.
Định nghĩa này không áp đặt các phương tiện để chạy điều này trong thực tế. Tuy nhiên, việc sản xuất / tiêu thụ dữ liệu cần được phân tích cẩn thận: ví dụ: nếu tác nhân B không sử dụng cùng tốc độ với tác nhân A tạo ra dữ liệu, thì giữa chúng cần có một bộ nhớ không giới hạn tiềm năng (FIFO). . Nhiều vấn đề khác có thể phát sinh như bế tắc .
Trong nhiều trường hợp, phân tích này sẽ thất bại vì sự đan xen của các hành vi bên trong là khó thực hiện (vượt quá tầm của các phương pháp chính thức ngày nay).
Mặc dù vậy, các ngôn ngữ lập trình luồng dữ liệu vẫn hấp dẫn trong nhiều lĩnh vực :
Excel (và các bảng tính khác) về cơ bản là ngôn ngữ luồng dữ liệu. Ngôn ngữ luồng dữ liệu rất giống các ngôn ngữ lập trình hàm, ngoại trừ việc các giá trị ở bên trái của toàn bộ biểu đồ chương trình hoàn toàn không phải là giá trị, mà là các biến (hoặc luồng giá trị), vì vậy khi chúng thay đổi, các thay đổi sẽ gợn sóng và chảy lên đồ thị .
Nó thực sự là một khái niệm khá cũ - vào những năm 1970, thậm chí còn có một ngôn ngữ + máy được xây dựng để lập trình và thực thi luồng dữ liệu hiệu quả ( Manchester Dataflow Machine ).
Điều tuyệt vời về nó là tính hai mặt của nó đối với các ngôn ngữ chức năng lười biếng như Haskell. Do đó, nếu các bước xử lý của bạn là thuần chức năng và cho phép bạn có đủ đơn vị xử lý để đánh giá chúng và chuyển kết quả xung quanh, bạn sẽ có được tính song song tối đa miễn phí - tự động và không cần nỗ lực lập trình!
Có một số lĩnh vực nhất định mà lập trình luồng dữ liệu có ý nghĩa hơn nhiều. Phương tiện thời gian thực là một ví dụ và hai môi trường lập trình luồng dữ liệu đồ họa được sử dụng rộng rãi, Pure Data và Max / MSP, đều tập trung vào lập trình phương tiện thời gian thực. Tôi cho rằng bản chất trực quan của chúng cũng ánh xạ độc đáo đến lập trình luồng dữ liệu.
Bạn có thể thử Cameleon : www.shinoe.org/cameleon , nó có vẻ đơn giản để sử dụng. Đó là một ngôn ngữ đồ họa để lập trình chức năng có cách tiếp cận luồng dữ liệu (công việc).
Nó được viết bằng C ++, nhưng nó có thể gọi bất kỳ loại chương trình cục bộ hoặc chương trình xa nào được viết bằng bất kỳ ngôn ngữ lập trình nào.
Nó có một cách tiếp cận đa quy mô và dường như đã hoàn chỉnh Turing (đây là một phần mở rộng ròng của Petri ).