Esterel là ngôn ngữ lập trình đồng bộ để phát triển các hệ thống phản ứng phức tạp. Phong cách lập trình bắt buộc của Esterel cho phép biểu hiện đơn giản của sự song song và sự ưu tiên. Kết quả là, nó rất phù hợp cho các thiết kế mô hình thống trị kiểm soát.
Sự phát triển của ngôn ngữ bắt đầu từ đầu những năm 1980, và chủ yếu được thực hiện bởi một nhóm Ecole des Mines de Paris và INRIA do Gérard Berry ở Pháp lãnh đạo. Các trình biên dịch hiện tại lấy các chương trình Esterel và tạo các triển khai mã C hoặc phần cứng (RTL) (VHDL hoặc Verilog).
Ngôn ngữ vẫn đang được phát triển, với một số trình biên dịch được đưa ra. Phiên bản thương mại của Esterel là môi trường phát triển Esterel Studio. Công ty đã thương mại hóa nó (Synfora) đã bắt đầu quá trình chuẩn hóa với IEEE vào tháng 4 năm 2007, tuy nhiên nhóm làm việc (P1778) đã giải thể vào tháng 3 năm 2011. Phiên bản hướng dẫn tham khảo Esterel v7 phiên bản v7 30 – đề xuất tiêu chuẩn hóa ban đầu của IEEE có sẵn.
Cảm xúc đa dạng về thời gian [ chỉnh sửa ]
Khái niệm thời gian được sử dụng trong Esterel khác với khái niệm về ngôn ngữ không đồng bộ theo cách sau: Khái niệm về thời gian vật lý được thay thế với khái niệm trật tự. Chỉ tính đồng thời và ưu tiên của các sự kiện được xem xét. Điều này có nghĩa là thời gian vật lý không đóng vai trò đặc biệt nào. Đây được gọi là khái niệm đa dạng về thời gian. Một chương trình Esterel mô tả một chuỗi hoàn toàn theo thứ tự các logic. Tại mỗi thời điểm, một số lượng sự kiện tùy ý xảy ra (bao gồm 0). Sự kiện xảy ra cùng một lúc logic được coi là đồng thời. Các sự kiện khác được sắp xếp như là trường hợp xuất hiện của chúng. Có hai loại câu lệnh: Những câu lệnh mất thời gian bằng không (thực thi và chấm dứt ngay lập tức) và những kiểu trì hoãn cho một số chu kỳ quy định.
Tín hiệu [ chỉnh sửa ]
Tín hiệu là phương tiện liên lạc duy nhất. Có những tín hiệu có giá trị và không có giá trị. Chúng được phân loại thêm là tín hiệu đầu vào, đầu ra hoặc tín hiệu cục bộ. Một tín hiệu có đặc tính là có mặt hoặc vắng mặt ngay lập tức. Tín hiệu có giá trị cũng chứa một giá trị. Tín hiệu được phát trên toàn chương trình và điều đó có nghĩa là bất kỳ quá trình nào cũng có thể đọc hoặc ghi tín hiệu. Giá trị của tín hiệu có giá trị có thể được xác định ngay lập tức, ngay cả khi tín hiệu không có. Trạng thái mặc định của tín hiệu không có. Tín hiệu vẫn vắng mặt cho đến khi chúng được thiết lập rõ ràng bằng cách sử dụng câu lệnh phát ra. Giao tiếp là tức thời, điều đó có nghĩa là tín hiệu phát ra trong một chu kỳ có thể nhìn thấy ngay lập tức. Lưu ý rằng người ta có thể giao tiếp qua lại trong cùng một chu kỳ.
Quy tắc kết hợp tín hiệu [ chỉnh sửa ]
- Mỗi tín hiệu chỉ xuất hiện hoặc vắng mặt trong một chu kỳ, không bao giờ cả hai.
- Tất cả các nhà văn đều chạy trước bất kỳ độc giả nào.
trình bày A khác phát ra A kết thúc
là một chương trình sai lầm: nhà văn "phát ra A" phải chạy trước người đọc "trình bày A", nhưng ngữ nghĩa của ngôn ngữ đòi hỏi "hiện tại A" phải được thực hiện trước, dẫn đến xung đột trong ngữ nghĩa của chương trình. [ cần làm rõ ]
Cấu trúc ngôn ngữ [ chỉnh sửa ]
Tuyên bố Esterel nguyên thủy chỉnh sửa 19659024] Esterel thuần túy có mười một tuyên bố nguyên thủy. [1]
không có gì
Chấm dứt ngay lập tức mà không có tác dụng nào khác. tạm dừng
Chặn điều khiển dòng chảy trong chu kỳ hiện tại để nối lại trong chu kỳ tiếp theo. p ;
qChạy p cho đến khi nó chấm dứt và sau đó, trong cùng một phản ứng, bắt đầu q . p ||
qChạy p và q song song loop
pend
Khởi động lại cơ thể p ngay khi nó kết thúc. Mỗi đường dẫn qua thân vòng lặp phải chứa ít nhất một câu lệnh tạm dừng
để tránh vòng lặp không giới hạn trong một phản ứng.tín hiệu
Strong
pkết thúc
Khai báo tín hiệu cục bộ. phát ra
STạo tín hiệu S hiện diện ngay lập tức. Một tín hiệu vắng mặt trừ khi nó được phát ra. hiện tại
Ssau đó
pkhác
qkết thúc
Nếu tín hiệu S hiện diện ngay lập tức p nếu không thì chạy q . đình chỉ
pkhi
SĐình chỉ việc thi hành thi thể trong cơ thể nơi có S . bẫy
Ttrong
pend
Khai báo một khối thoát được dán nhãn. exit
TNhảy đến cuối cùng trong cùng T khối thoát được dán nhãn. Báo cáo Esterel có nguồn gốc [ chỉnh sửa ]
Esterel có một số cấu trúc dẫn xuất: [2][3]
Tuyên bố phái sinh Mở rộng tạm dừng
kết thúc tạm dừng vòng lặp
bền vững
svòng lặp phát ra
s; tạm dừng kết thúc
hiện tại
ssau đó
pkết thúc
hiện tại
ssau đó
pkhông có gì khác ]
đang chờ đợi
sbẫy T trong vòng lặp tạm dừng; hiện tại
ssau đó thoát T kết thúc vòng lặp kết thúc
đang chờ đợi ngay lập tức
sbẫy T trong vòng lặp hiện tại
ssau đó thoát T kết thúc; tạm dừng kết thúc vòng lặp kết thúc
đình chỉ
pkhi ngay lập tức
sđình chỉ hiện tại
ssau đó tạm dừng kết thúc;
pkhi
]hủy bỏ
pkhi (ngay lập tức)
sbẫy T trong việc đình chỉ
pkhi (ngay lập tức)
s; thoát T | | chờ đợi (ngay lập tức)
s; thoát T; kết thúc
hủy bỏ yếu
pkhi (ngay lập tức)
sbẫy T trong
p; thoát T | | chờ đợi (ngay lập tức)
s; thoát T; kết thúc
loop
sp
mỗihủy bỏ vòng lặp
p; tạm dừng khi vòng lặp kết thúc
smỗi (ngay lập tức)
slàm
pkết thúc mỗi
đang chờ đợi (ngay lập tức)
s; loop
pmỗi
sCác câu lệnh Esterel khác [ chỉnh sửa ]
Ngôn ngữ Esterel đầy đủ cũng có các câu lệnh để khai báo và khởi tạo các mô-đun, cho các biến, để gọi các thủ tục bên ngoài, và cho các tín hiệu có giá trị.
Ví dụ (ABRO) [ chỉnh sửa ]
Chương trình sau đây phát ra đầu ra O ngay khi nhận được cả hai đầu vào A và B. Đặt lại hành vi bất cứ khi nào nhận được đầu vào R.
mô-đun ABRO: đầu vào A, B, R; đầu ra O; vòng lặp [ await A || await B ]; phát ra O mỗi R mô-đun kết thúc
Ưu điểm của Esterel [ chỉnh sửa ]
- Mô hình thời gian giúp lập trình viên kiểm soát chính xác
- Đồng thời thuận tiện cho việc chỉ định các hệ thống điều khiển
- Ngôn ngữ hoàn toàn xác định
-
- Thời gian thực hiện có thể dự đoán được
- Dễ dàng xác minh chính thức hơn
- Có thể được thực hiện trong phần cứng cũng như trong phần mềm
Nhược điểm của Esterel ]
- Bản chất trạng thái hữu hạn của ngôn ngữ giới hạn tính linh hoạt (nhưng tính biểu cảm là đủ cho lĩnh vực ứng dụng đã chọn)
- Thách thức ngữ nghĩa
- Tránh vi phạm nhân quả thường rất khó
- Khó biên dịch trong trường hợp chung, nhưng tiêu chí chính xác đơn giản tồn tại
Xem thêm [ chỉnh sửa ]
chỉnh sửa ]
Liên kết ngoài [ chỉnh sửa ]