8

EDIT để cố gắng giải quyết chỉnh sửa và nhận xét của @ user2864740: Tôi tự hỏi liệu có bất kỳ thông tin nào liên quan đến 0.4rc1/rc2 hay cụ thể là một chiến lược hoặc đề xuất từ ​​một trong những nhà phát triển Julia gần đây hơn những người được trích dẫn bên dưới (đặc biệt là câu trả lời tháng 1 năm 2014 của StefanKarpinski ở # 6 bên dưới). ThxLàm cách nào để chuyển các hàm thành đối số cho các hàm khác trong Julia mà không làm mất hiệu suất?

Vui lòng xem ví dụ:

  1. https://groups.google.com/forum/#!topic/julia-users/pCuDx6jNJzU
  2. https://groups.google.com/forum/#!topic/julia-users/2kLNdQTGZcA
  3. https://groups.google.com/forum/#!msg/julia-dev/JEiH96ofclY/_amm9Cah6YAJ
  4. https://github.com/JuliaLang/julia/pull/10269
  5. https://github.com/JuliaLang/julia/issues/1090
  6. Can I add type information to arguments that are functions in Julia?
  7. Performance penalty using anonymous function in Julia

(Là một người dùng Julia khá thiếu kinh nghiệm) tổng hợp tốt nhất của tôi về thông tin này, một số trong đó có vẻ là ngày, là thực hành tốt nhất là "tránh làm điều này" hoặc "sử dụng FastAnonymous.jl".

Tôi tự hỏi những gì các cạnh chảy máu mới nhất và cách tốt nhất để xử lý này là.

[Phiên bản dài hơn:]

Cụ thể, giả sử tôi có một hệ thống phân cấp lớn các chức năng. Tôi muốn có thể làm điều gì đó như

function transform(function_one::Function{from A to B}, 
        function_two::Function{from B to C}, 
        function_three::Function{from A to D}) 
    function::Function{from Set{A} to Dict{C,D}}(set_of_As::Set{A}) 
     Dict{C,D}([function_two(function_one(a)) => function_three(a) 
        for a in set_of_As]) 
    end 
end 

Vui lòng không lấy mã quá theo nghĩa đen. Đây là một ví dụ hẹp về một dạng chuyển đổi tổng quát hơn tôi muốn có thể làm bất kể các chi tiết cụ thể thực sự của phép biến đổi, NHƯNG tôi muốn làm điều đó theo cách mà tôi không phải lo lắng (quá nhiều) về việc kiểm tra hiệu năng (nghĩa là, ngoài những lo lắng bình thường tôi sẽ áp dụng trong bất kỳ trường hợp nào không có chức năng-với-hàm-như-tham số) mỗi khi tôi viết một hàm hoạt động theo cách này. Ví dụ, trong thế giới lý tưởng của tôi, câu trả lời đúng sẽ là "miễn là bạn chú thích mỗi hàm đầu vào với @anon trước khi bạn gọi hàm này với các hàm đó làm đối số, thì bạn sẽ làm cũng như bạn có thể không điều chỉnh trường hợp cụ thể của các đối số cụ thể mà bạn đang truyền. " Nếu đó là sự thật, tuyệt vời - Tôi chỉ tự hỏi nếu đó là giải thích đúng, hoặc nếu không, nếu có một số tài nguyên tôi có thể đọc về chủ đề này là gần gũi hơn với một tổng hợp "hợp lý" trình bày hơn so với bộ sưu tập các liên kết ở đây (có nhiều luồng ý thức tập thể hoặc lịch sử tư tưởng về vấn đề này).

+0

Tiêu đề là thời gian cụ thể.Nếu có những thay đổi mới hơn (có thể bị bỏ sót trong một số câu hỏi/câu trả lời trước đây) và những cải tiến đó có liên quan đến câu hỏi này, hãy đảm bảo chúng được làm việc phù hợp với cơ thể. – user2864740

+2

Một liên kết khác cho bạn [tại đây] (http://stackoverflow.com/questions/28356437/julia-compiler-does-not-appear-to-optimize-when-a-function-is-passed-a-function), không phải là bạn cần một số khác mặc dù :-) –

Trả lời

7

Câu trả lời vẫn là "sử dụng FastAnonymous.jl" hoặc tạo "loại functor" theo cách thủ công (xem NumericFuns.jl).

Nếu bạn đang sử dụng julia 0.4, FastAnonymous.jl hoạt động về cơ bản giống như cách "đóng cửa nhanh" chính thức cuối cùng sẽ hoạt động trong cơ sở julia. Xem https://github.com/JuliaLang/julia/issues/11452#issuecomment-125854499. (FastAnonymous được thực hiện theo một cách rất khác nhau trên julia 0,3, và có nhiều điểm yếu hơn.)

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