2011-11-01 31 views
14

Tôi quan tâm đến việc tìm hiểu thêm về tối ưu hóa cảnh hậu trường được thực hiện bởi Perl.Tôi có thể tìm hiểu thêm về trình tối ưu hóa Perl ở đâu và ở đâu?

Một ví dụ là nơi tôi ưu đối xử với reverse sort { $a <=> $b } @array; như sort { $b <=> $a } @array;

Dường như ol tốt' perldocdoesn't have anything on this subject.


Một vài câu hỏi ở đây:

  1. Trong trường hợp không perldoc, nguồn chính thức để tìm hiểu về tối ưu hóa như vậy là gì?

  2. Có lý do tại sao perldoc không ghi lại các tối ưu hóa này không?

  3. Các phương pháp tối ưu hóa phổ biến khác có ở đó là gì?

+0

Không chắc lý do tại sao không có nhiều tài liệu về đề tài này, nhưng vì trình biên dịch là mã nguồn mở bạn chỉ có thể kiểm tra mã và xem các tối ưu hóa đầu tay. – Polynomial

+9

Chi tiết triển khai không thuộc về perldoc vì chúng có thể thay đổi ngay cả khi hành vi cơ bản của ngôn ngữ không thay đổi. Những chi tiết này thường thú vị, nhưng các tài liệu perl đã quá lớn. – mob

+1

Tôi đồng ý rằng một cái gì đó như thế này có thể là tốt đẹp. như đám đông nói, vấn đề là họ có thể thay đổi. Tôi biết rằng một tối ưu hóa tốt đẹp là 'map' trong một ngữ cảnh vô hướng không tạo ra một mảng trả về (mà sẽ bị bỏ qua). Những điều này sẽ được tốt đẹp để biết, mà không cần phải thu thập chúng trên đường đi, ít nhất là cho các thành ngữ phổ biến và tối ưu hóa phổ biến. –

Trả lời

9

Đối với những thứ như thế này, bạn có thể tìm thấy các bit và mẩu trong tài liệu (đặc biệt là các giao dịch với C api), nhưng phần lớn trong mã nguồn C.

Đối sort, tôi tin rằng các chức năng có liên quan là S_simplify_sort in op.c

Cốt lõi của tôi ưu hoa là trong Perl_peep in the same file.

8

Một số trong số đó được ghi lại trong perldeltas - bất kỳ ai muốn tìm hiểu thêm về cách hoạt động của Perl có thể đạt được một số thông tin chi tiết bằng cách đọc chúng, bắt đầu bằng perl5004delta. Một số của nó là hợp lý cũng nhận xét trong mã, và tất nhiên RTFS là một cách khác để tìm hiểu. Một nguồn tốt cho những nơi để bắt đầu tìm kiếm trong nguồn là the section "Compiled Code" of perlguts, một tài liệu đáng đọc khác.

Một số, nhưng không có nghĩa là tất cả, được ghi trong Chương 18, "Biên dịch", của Programming Perl (có, ấn bản thứ 3 thực sự là 10 tuổi và bao gồm 5.6.0 và/hoặc 5.6.1, nhưng the 4th edition là cuối cùng trong các công trình!)

Rất nhiều, tuy nhiên, được ghi lại ở đâu đó, ngoại trừ các chủ đề danh sách gửi thư nơi tính năng được thảo luận trong khi đang được phát triển. Nếu bạn quan tâm đến việc tìm hiểu thêm về nội bộ perl và có thể đóng góp một chút vào tài liệu, tôi khuyên bạn nên đặt câu hỏi lên trên perl5-porters mailing list hoặc #p5p IRC channel, vì đó là nơi hầu hết kiến ​​thức bộ lạc perl-ruột cư trú.

+0

Tất nhiên, bạn cũng có thể cung cấp bất kỳ câu trả lời nào cho câu hỏi thú vị trở lại vào StackOverflow - hoặc hối lộ mọi người với câu trả lời để bắt đầu đăng lên SO trực tiếp :) – hobbs

+0

Thực ra tôi đã nghĩ đến việc cung cấp tiền thưởng cho câu hỏi này với câu trả lời có thể đổ vào kiến ​​thức của họ :) – Zaid

1

Tôi nghi ngờ rằng việc sử dụng sắp xếp sẵn có mà không có bất kỳ phụ so sánh nào {} sẽ là nhanh nhất.

Do đó, nếu bạn sử dụng một phụ tùy chỉnh {} để khuyến khích sắp xếp ngược lại, nó sẽ làm chậm. Tôi cũng nghĩ rằng tôi đã đọc rằng không còn là một chi phí để làm 'đảo ngược loại' - trình biên dịch sắp xếp nó ra cho bạn, hoặc ít nhất là đảo ngược kết quả nhanh hơn so với sử dụng một phụ tùy chỉnh {}.

bài viết cũ này trên "Một cái nhìn mới về hiệu quả Perl Sorting" dường như đồng tình với những ý tưởng này:

http://www.sysarch.com/Perl/sort_paper.html

+0

Điều này không trả lời câu hỏi lớn: làm thế nào và tôi có thể tìm hiểu thêm về trình tối ưu hóa Perl ở đâu? Nó chỉ đơn giản là restating những gì tôi ưu hoa với 'đảo ngược sort' và cung cấp một liên kết về nó. – Zaid

1

Nếu bạn có thể nhận giữ một bản sao, và có thể đối phó với một mô tả của một hơi cũ hơn so với Perl hiện tại (mặc dù phần lớn điều này không thay đổi nhiều), cuốn sách Extending and Embedding Perl có thể hữu ích, nó có các chương về nội bộ, optrees và một số chi tiết của trình tối ưu hóa.

Chủ yếu, mặc dù, như đề xuất khác, xem xét nguồn và chơi với các mô-đun B thích hợp, là cách tốt nhất để thực hiện.

0

Module B::Deparse có thể cung cấp một cái gì đó thú vị: (. Đối với một số lý do, việc tối ưu hóa reverse không hiển thị ở đây)

$ perl -MO=Deparse -e 'reverse sort { $a <=> $b } @array' 
reverse +(sort {$a <=> $b} @array); 
-e syntax OK 

+0

Đây là một câu hỏi, không phải là câu trả lời – Zaid

+0

Xin lỗi. Tôi đã cố gắng đưa ra một gợi ý về cách sử dụng mô-đun 'B :: Deparse' như một cách để học một cái gì đó về trình tối ưu hóa perl. – tuomassalo

+0

Vâng, nếu tối ưu hóa 'đảo ngược 'không hiển thị ở đây, tôi không chắc chắn về cách hữu ích' B: Deparse' là cho nhu cầu của câu hỏi này – Zaid

Các vấn đề liên quan