2008-08-24 28 views
11

Java có Scala và .NET có F#. Cả hai ngôn ngữ này được tích hợp rất cao vào các nền tảng Java và .NET tương ứng. Các lớp có thể được viết trong Scala sau đó được mở rộng trong Java chẳng hạn.Có ngôn ngữ chức năng cho hệ sinh thái C++ không?

Có tồn tại một ngôn ngữ chức năng tương đương có khả năng tương tác cao với C++ không?

Trả lời

7

C++ không có hệ sinh thái theo nghĩa Java hoặc .NET. Không có máy ảo, thậm chí không có môi trường thời gian chạy, chỉ có một thư viện chuẩn chuyên môn cao mà theo thiết kế không hoạt động tốt trong môi trường thuần túy. C++ thậm chí không có tiêu chuẩn ABI.

Tất cả mọi thứ được xem xét, tôi không chắc bạn muốn nói gì.

+1

Lý do tôi truy cập vào câu hỏi này đang tìm kiếm ngôn ngữ ngắn gọn (tức là các ngôn ngữ có thể hiểu được) với C++. –

3

Vì Scala biên dịch sang Java bytecode và F # biên dịch thành .NET bytecode, được thực hiện để chạy trên các máy ảo tương ứng của chúng. So sánh chính xác sẽ là nếu có một số ngôn ngữ chức năng biên dịch thành mã phụ thuộc máy, sẵn sàng chạy trên máy tính, và có, có.

Tôi không nghĩ đó là ý của bạn, nhưng điều tốt nhất tôi phải cung cấp là FC++. Boost là một thư viện khác có rất nhiều tính năng có thể được nhận ra là bắt nguồn từ lập trình hàm.

Tuy nhiên, tôi cược rằng không có chương trình C++ thực tế 'thực tế': es ngoài đó.

7

Ah, một thứ khác. Mặc dù điều này chắc chắn không phải là những gì bạn có nghĩa là, template metaprogramming trong C + + là hoàn toàn chức năng.

5

Như đã nói, tôi không thực sự chắc chắn về hệ sinh thái của C++ '. Nhưng Haskell không có một giao diện chức năng nước ngoài cho phép bạn gọi chức năng C từ chức năng Haskell và Haskell từ C.

Sau đó, một lần nữa, đó là C, tôi không thực sự chắc chắn bao xa dọc theo C++ FFI là ...

-1

C++ có thể không phải là ngôn ngữ chức năng thuần túy, nhưng các phần của STL chắc chắn là chức năng.

Xem Bjarne Stroustrup FAQ (người phát minh ra C++)

+3

Không thực sự: C++ không có chức năng hạng nhất với chụp ảnh môi trường tự động. Những gì bạn đang đề cập đến là mài tẻ nhạt và ít biểu cảm hơn. Ngoài ra, Bjarne Stroustrup và Alex Stepanov thường hoàn toàn sai khi nói đến lập trình chức năng. –

+2

C++ 0x không có chức năng hạng nhất với chụp môi trường tự động dưới dạng lambdas, mặc dù áp dụng quy tắc quản lý tài nguyên C++ thông thường (vì thiếu GC). –

3

Ngôn ngữ 'D' được thiết kế như một người kế nhiệm để C++. Một tập con thuần túy của D đang được phát triển bởi Andrei Alexandrescu cho D 2.0. Tôi đoán D tương tác tốt với C++.

+1

D thực sự không hoạt động tốt với C++. Bạn hầu như luôn phải viết trình bao bọc C. – Zifre

1

Tôi đồng ý rằng tôi không chắc chắn về hệ sinh thái cho C++. OCaml là khá phổ biến cho việc lập trình chức năng bên ngoài .NET. F # cũng dựa trên nó.

8

Ngôn ngữ Felix bởi John Skaller được thiết kế để tương thích với C++ và cung cấp mô hình chức năng.

Có vấn đề với việc này. Các hàm chức năng cung cấp các hàm hạng nhất cho phép tạo các bao đóng: các hàm đã nắm bắt và mang các giá trị từ môi trường chúng được định nghĩa. Điều này làm cho nó không thể xác định thời gian tồn tại của các giá trị tĩnh (vì một đóng phạm vi của nó) và, do đó, hiệu quả đòi hỏi một bộ thu rác nhưng C++ không phải là rác thu thập được.

+0

Felix tích hợp rất tốt với C++. – refi64

0

Câu hỏi này đã được đăng trong năm 2008. Để tham khảo, C++ 11 trở đi có hỗ trợ lập trình hàm.Xem một cuộc thảo luận khác được cập nhật cho điều này Functional Programming in C++

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