13

Có khả năng Microsoft sẽ có thể thực hiện các chương trình F #, hoặc tại thời gian thực thi VM, hoặc có nhiều lúc biên dịch, phát hiện một chương trình được xây dựng với ngôn ngữ chức năng và tự động song song nó tốt hơn?Có khả năng là F # sẽ được tối ưu hóa nhiều hơn các ngôn ngữ Net khác trong tương lai?

Ngay bây giờ tôi tin rằng không có nỗ lực như vậy để thử và thực hiện một chương trình được xây dựng như chương trình đơn luồng như một chương trình đa luồng tự động.

Điều đó có nghĩa là nhà phát triển sẽ mã hóa một chương trình được tạo luồng. Và trình biên dịch sẽ nhổ ra một chương trình biên dịch đa luồng hoàn chỉnh với mutexes và đồng bộ hóa khi cần thiết.

Những tối ưu hóa này có thể hiển thị trong trình quản lý tác vụ trong tổng số chuỗi quy trình hay nó sẽ thấp hơn mức đó?

Trả lời

12

Tôi nghĩ điều này khó xảy ra trong tương lai gần. Và nếu nó xảy ra, tôi nghĩ rằng nó sẽ có nhiều khả năng ở cấp IL (assembly rewriting) hơn là cấp độ ngôn ngữ (ví dụ: một cái gì đó cụ thể cho F #/compiler). Đó là một câu hỏi thú vị, và tôi hy vọng rằng một số tâm trí tốt đã xem xét điều này và sẽ tiếp tục xem xét điều này một thời gian, nhưng trong ngắn hạn, tôi nghĩ sự tập trung sẽ giúp cho con người dễ dàng chỉ đạo luồng/song song các chương trình, thay vì chỉ có tất cả xảy ra như thể bằng phép thuật.

(Các tính năng ngôn ngữ như F# async workflows và các thư viện như task-parallel library and others là những ví dụ điển hình về tiến độ gần đây tại đây; họ có thể thực hiện phần lớn việc nâng cấp cho bạn, đặc biệt khi chương trình của bạn khai báo nhiều hơn mệnh lệnh. yêu cầu lập trình viên chọn tham gia, thực hiện phân tích tính chính xác/có ý nghĩa và có thể làm thay đổi nhỏ cấu trúc của mã để làm cho nó hoạt động.)

Dù sao, đó là tất cả suy đoán; ai có thể nói những gì tương lai sẽ mang lại? Tôi mong muốn tìm ra (và hy vọng làm cho nó xảy ra). :)

+1

Một trong những lý do PLINQ đang được phát triển là loại bỏ nhu cầu cho nhà phát triển thực hiện "phân tích tính chính xác/ý nghĩa". –

7

Là F # có nguồn gốc từ Ocaml và Ocaml trình biên dịch có thể tối ưu hóa chương trình của bạn tốt hơn nhiều so với các trình biên dịch khác, nó có thể có thể được thực hiện.

2

Có nghiên cứu hoạt động cho tự động song song và vector hóa tự động cho nhiều ngôn ngữ. Và người ta có thể hy vọng (vì tôi thực sự thích F #) rằng họ sẽ concive một cách để xác định nếu một "tinh khiết" phụ miễn phí tác dụng phụ đã được sử dụng và sau đó song song đó. Cũng kể từ khi Simon Peyton-Jones cha của Haskell đang làm việc tại Microsoft, tôi có một thời gian khó khăn không tin rằng có một số công cụ tuyệt vời đến.

4

Tôi nghĩ rằng câu hỏi bỏ lỡ điểm của kiến ​​trúc .NET-- F #, C# và VB (v.v.) tất cả được biên dịch thành IL, sau đó được biên dịch thành mã máy thông qua trình biên dịch JIT. Thực tế là một chương trình được viết bằng ngôn ngữ chức năng không liên quan-- nếu có tối ưu (như đệ quy đuôi, vv) có sẵn cho trình biên dịch JIT từ IL, trình biên dịch nên tận dụng nó.

Đương nhiên, điều này không có nghĩa là viết mã chức năng là không liên quan-- rõ ràng, có nhiều cách để viết IL sẽ song song tốt hơn-- nhưng nhiều kỹ thuật này có thể được sử dụng trong bất kỳ ngôn ngữ .NET nào.

Vì vậy, không cần phải gắn cờ IL khi đến từ F # để kiểm tra nó cho song song tiềm năng, cũng không phải là điều mong muốn.

+0

Lập trình chức năng dẫn đến khả năng phân chia tốt hơn một tác vụ và thực hiện đồng thời. Tất nhiên có những người làm việc này, và tất nhiên nó là mong muốn. –

+0

Tôi không nghĩ rằng bạn đang nhận được quan điểm của tôi. F # (và các ngôn ngữ chức năng khác) giúp bạn dễ dàng viết mã theo cách song song tốt hơn. Điều này là mong muốn. Tuy nhiên, những lợi ích này hiển thị trong IL, và cũng sẽ hiển thị trong IL nếu ai đó đã viết mã C# theo các mẫu tương tự. –

+0

Một khi nó được IL tôi đồng ý rằng bạn không thể làm nhiều. Nhưng trước khi đến IL là nơi tối ưu hóa có thể được thực hiện. –

2

Có thể nhưng không chắc. Microsoft dành phần lớn thời gian hỗ trợ và triển khai các tính năng được yêu cầu bởi các khách hàng lớn nhất của họ. Điều đó thường có nghĩa là C#, VB.Net và C++ (không nhất thiết phải theo thứ tự đó).F # dường như không cao trong danh sách các ưu tiên.

5

Tôi không tin rằng có thể tự động mã hóa mã theo cách thường hữu ích và khía cạnh lập trình chức năng của F # về bản chất là không liên quan trong ngữ cảnh này. Vấn đề khó khăn nhất là không phát hiện khi bạn có thể thực hiện song song các hàm con, nó xác định khi nào sẽ không làm suy giảm hiệu suất, nghĩa là khi các nhiệm vụ sẽ mất đủ thời gian để tính toán nó đáng giá. .

Chúng tôi đã nghiên cứu chi tiết này trong bối cảnh tính toán khoa học và chúng tôi đã áp dụng phương pháp lai trong F # của chúng tôi cho thư viện Numerics. Các thuật toán song song của chúng tôi, được xây dựng trên Thư viện song song nhiệm vụ của Microsoft, yêu cầu một tham số bổ sung là một hàm cho tính phức tạp tính toán ước tính của một subtask. Điều này cho phép thực hiện của chúng tôi để tránh phân khu quá mức và đảm bảo hiệu suất tối ưu. Hơn nữa, giải pháp này là lý tưởng cho ngôn ngữ lập trình F # vì tham số hàm mô tả độ phức tạp thường là một hàm hạng nhất ẩn danh.

Chúc mừng, Jon Harrop.

2

Microsoft hiện đang phát triển 2 tuyến song song mã: PLINQ (Pararllel Linq, nợ nhiều ngôn ngữ chức năng) và Thư viện song song nhiệm vụ (TPL) ban đầu là một phần của Robotics Studio. Bản beta của PLINQ có sẵn here.

Tôi sẽ đặt tiền của mình vào PLINQ trở thành tiêu chuẩn cho tự động song song của mã .NET.

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