Loại hệ thống cho hiệu suất


11

Các hệ thống loại (tĩnh) có tồn tại mà cố gắng chính thức hóa các đặc tính hiệu suất của các chương trình không? Tôi không thể tìm thấy dường như tìm thấy những nỗ lực như vậy.

Vì các hệ thống loại là (một trong) các công cụ mạnh nhất trong kho vũ khí của lập trình viên để đưa ra tuyên bố về các chương trình, và vì có nhiều trường hợp trong đó hiệu suất là rất quan trọng, nên dường như không thể tưởng tượng được các nỗ lực đã được thực hiện tạo một hệ thống loại cố gắng thực hiện ít nhất một số tuyên bố về đặc điểm lưu trữ và thời gian chạy của các chương trình.


1
Hệ thống loại của bạn sẽ nói gì về hiệu suất của if condition then expensive_operation else cheap_operation?
Svick

Tôi biết đã có những phát triển trong việc sử dụng giải thích trừu tượng để tự động suy ra sự phức tạp của trường hợp xấu nhất (và chấm dứt). Bạn có thể quan tâm đến nó ...
Bakuriu

Không liên quan hoàn toàn, nhưng vẫn: kernelnewbies.org/FAQ/LossibleUnlossible Trong trình biên dịch kernel / gcc Linux có khả năng / không có khả năng macro để tối ưu hóa các đường dẫn nhất định. Ví dụ:if (likely(operation_went_fine)) { // Do something } else if (unlikely(error_occured)) { // Do something else }
AmazingDreams

Các từ khóa dễ bay hơi và đăng ký trong C đến với tâm trí.
mattnz 7/07/2015

Câu trả lời:


6

Bạn có thể tưởng tượng một hệ thống loại đủ tinh vi có liên quan đến WCET hoặc độ phức tạp của chương trình. Sau đó, vấn đề là tạo ra một bộ phân tích loại âm thanh (hoặc trình kiểm tra) - tức là quy tắc gõ - để làm cho điều đó có thể, và thực hiện nó đủ hiệu quả để làm cho điều đó hợp lý hữu ích.

Hầu hết các hệ thống loại đủ đơn giản để nhanh chóng tính toán trong thực tế (ít nhất là đối với bộ chương trình hợp lý mà nhà phát triển con người có thể tự viết).

Một số ngôn ngữ lập trình học thuật (ví dụ AGDA ) có các hệ thống loại rất tinh vi hoàn chỉnh Turing, vì vậy trình biên dịch của chúng có thể mất một lượng lớn thời gian (có lẽ là vô hạn).

.

Tuy nhiên, hãy nhận thức về định lý của Rice & vấn đề Ngừng . Loại hệ thống có thể không phải luôn luôn là viên đạn bạc mà bạn có thể muốn chúng trở thành (xem cuốn sách cũ không có viên đạn bạc ).


4
WCET là "Thời gian thực hiện vụ án tồi tệ nhất" trong bối cảnh này (trong trường hợp bất kỳ ai khác ngoài tôi tự hỏi)
Klaas van Schelven

9
Các ngôn ngữ được gõ phụ thuộc như Agda, Coq, Epigram, Guru, Isabelle, v.v. "giải quyết" vấn đề tạm dừng, Định lý Rice và bạn bè bằng cách không hoàn thành Turing. Hoặc bằng cách xây dựng (nghĩa là đơn giản là không thể viết một đệ quy vô hạn / đệ quy không kết thúc), bằng cách yêu cầu tất cả các chương trình phải được viết theo cách mà trình kiểm tra chấm dứt có thể chứng minh chấm dứt hoặc bằng cách yêu cầu lập trình viên gửi bằng chứng kiểm tra chấm dứt máy.
Jörg W Mittag

3

Dường như có thể tạo ra một hệ thống loại phân loại đặc tính hiệu suất của các loại(ví dụ: "nhanh / chậm đối với truy cập nối tiếp," nhanh / chậm đối với truy cập ngẫu nhiên "," hiệu quả bộ nhớ / không hiệu quả "). Những đặc điểm đó có thể là các loại trừu tượng được đặt vào hệ thống phân cấp theo cách mà các loại cụ thể hơn được thừa hưởng từ chúng. Tuy nhiên, hiệu suất của bất kỳ chương trình nào sử dụng các loại đó sẽ phụ thuộc vào cách chúng thực sự được sử dụng / truy cập. Đối với hệ thống loại để đưa ra tuyên bố về chính chương trình, việc sử dụng (truy cập) các loại đó sẽ được thể hiện dưới dạng các loại Điều này có nghĩa là từ bỏ việc sử dụng các cấu trúc điều khiển tích hợp (ví dụ: vòng lặp for / while) và thay vào đó sử dụng các kiểu thực hiện chúng. Do đó, hệ thống phân cấp có thể có kiểu truy cập nối tiếp trừu tượng và truy cập nối tiếp danh sách con cháu, nối tiếp cây các loại -access và như vậy.Hiệu quả sử dụng sau đó có thể được thể hiện ít nhất một phần bằng sự kết hợp và ứng dụng các loại này với nhau.

Trong một ngôn ngữ chức năng như Haskell - gần như không có cấu trúc điều khiển nào - điều này đối với tôi khá thực tế và có thể thi hành được. Tuy nhiên, trong Java, một hệ thống như vậy dường như nhiều ít có thể đạt được (không quá nhiều từ việc thực hiện kể từ khả năng thực thi / độ tin cậy của kết quả).

Haskell đã cho phép chúng tôi tuyên bố dứt khoát bao nhiêu chương trình là thuần túy và cung cấp các cách giới hạn các hoạt động cụ thể trong các hộp kín. Do tính song song / đồng thời trong Haskell được triển khai thông qua hệ thống loại , nên có thể lập luận rằng nó đã là một phần của cách đó (với những gì bạn muốn). Ngược lại, các ngôn ngữ bắt buộc (ngay cả những ngôn ngữ được gõ tĩnh như Java) cung cấp cho người viết mã nhiều, nhiều cách để lật đổ mọi nỗ lực này.

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.