Đây là chạy của tôi xuống của một số tùy chọn (không theo thứ tự đặc biệt):
C/C++
Nếu tất cả các bạn quan tâm là hiệu suất (và gì khác), chúng sẽ cung cấp. Truy cập trực tiếp vào các cấu trúc mức hệ thống, chẳng hạn như ái lực bộ xử lý và lắp ráp nội tuyến chắc chắn có thể có tác động đến hiệu năng. Tuy nhiên, có 2 nhược điểm chính đối với tùy chọn C/C++. Đầu tiên không có mô hình bộ nhớ được xác định rõ, vì vậy mô hình bộ nhớ mà bạn đang phát triển chống lại là CPU bạn đang chạy hệ thống (nếu bạn không biết mô hình bộ nhớ là cách nó áp dụng cho lập trình đồng thời, thì bạn không nên không làm được). Điều này liên kết bạn rất chặt chẽ với một nền tảng duy nhất. Thứ hai là thiếu bộ thu gom rác, quản lý bộ nhớ thủ công rất khó khăn (nhưng có thể thực hiện được) trong các trường hợp đơn giản, với C++ một số tiện ích hỗ trợ đơn giản hóa vấn đề (ví dụ: con trỏ tự động/con trỏ thông minh). Khi viết mã đồng thời, nó là một trật tự của cường độ khó khăn hơn như các quy tắc cho nên phát hành một phần nhất định của bộ nhớ trở nên rất khó để xác định. Ví dụ. khi một đối tượng được truyền vào một chủ đề khác, ai chịu trách nhiệm phát hành nó? Nếu sử dụng C++, điều quan trọng là phải đảm bảo rằng bạn đang sử dụng các phiên bản an toàn của các lớp được sử dụng để giúp quản lý bộ nhớ. Ví dụ. con trỏ thông minh tăng chỉ hỗ trợ việc sử dụng các phương thức được khai báo là "const" trên các chủ đề khác nhau (ví dụ: dereferencing là OK), tuy nhiên các phương pháp không const (ví dụ: bài tập) không phải là chủ đề an toàn.
Java
Java sẽ là đề nghị của tôi, nó đã hỗ trợ trên tất cả các nền tảng mà bạn đề cập (bao gồm cả điện thoại di động, ví dụ JavaME và Android) cũng như CUDA support. Java có một mô hình bộ nhớ được xác định rõ ràng, nhất quán trên các nền tảng, một JIT mạnh mẽ và trưởng thành và trình tối ưu hóa, và số lượng các bộ thu gom rác tốt và cải thiện. Hầu hết các ứng dụng có mục đích chung được viết bằng Java sẽ chạy nhanh như các đối tác C/C++ của chúng. Trong khi nó là một chút hog bộ nhớ, nếu bạn đang làm HPC làm việc bạn có nhiều khả năng sẽ ném một số phần cứng khá tại vấn đề này. Cho rằng bạn có thể giải quyết 100s của GB trên phần cứng hàng hóa, vấn đề bộ nhớ là ít hơn một vấn đề hơn nó được sử dụng để được.Điện thoại di động là khu vực thực sự duy nhất mà việc sử dụng bộ nhớ bị hạn chế và môi trường thời gian chạy chuyên gia thực hiện tốt hơn về mặt này (xem ở trên). Nhược điểm chính duy nhất của Java (từ phối cảnh HPC) là thiếu các loại phức tạp sao chép (tức là các cấu trúc trong C#) vì vậy tất cả các đối tượng phức tạp phải được cấp phát đống gây áp lực lên GC. Phân tích thoát được cho là giúp đỡ với điều này một chút, tuy nhiên rất khó để làm cho nó hoạt động tốt trong các trường hợp rất chung chung (lưu ý rằng nó đã nhảy vào và ra khỏi các bản sửa đổi khác nhau của JDK gần đây).
Đáng nói đến việc hỗ trợ ngôn ngữ rộng (Scala và Groovy ++ có hồ sơ hiệu suất khá tốt) và có một số thông báo đồng thời đồng bộ khung (actors, akka, kilim).
C# /. Net
Có lẽ hoàn thiện nhất từ góc độ ngôn ngữ, đặc biệt là nếu bạn bao gồm những thứ như F # cho tiếp cận mọi thứ một cách chức năng. Tuy nhiên, bạn thường được đẩy về phía một nền tảng MS nếu bạn muốn có hiệu suất tốt nhất (và câu chuyện di động ở đây cũng không tuyệt vời). Mono tạo ra một tính năng nền tảng khá tốt khôn ngoan (caveat: Tôi là một cộng tác viên) tuy nhiên họ vẫn đang chơi bắt kịp với hiệu suất, ví dụ: một bộ thu gọn, chính xác vừa được thêm vào và vẫn còn là một thử nghiệm nhỏ.
Google Go
Rất mới, nhưng thú vị từ quan điểm rằng nó được natively biên soạn (không JIT overhead), nhưng vẫn có một thời gian chạy mạnh, mô hình bộ nhớ, thu gom rác và hỗ trợ trực tiếp cho CSP (đồng thời liên tục chế biến) các tính năng bằng ngôn ngữ (kênh). Có lẽ có một số cách để đi, sự phát triển của một GC mới đã nhận được theo cách nhưng chưa nổi lên và có lẽ nhiều hơn nữa họ có thể nhận được ra khỏi trình biên dịch.
Haskell và ngôn ngữ chức năng khác
Không nhiều kinh nghiệm ở đây, nhưng một số các cấu trúc chức năng như tính bất biến và bộ sưu tập dai dẳng có thể khá hữu ích cho việc xây dựng các ứng dụng đồng thời mạnh mẽ.
Java chạy trên Mac kiểm tra http://developer.apple.com/java/faq/ – YoK
C và C++ được hoàn toàn được hỗ trợ bởi Mac. Bạn nghĩ gì về hệ điều hành Mac được viết? – Joe
"Gửi tin nhắn" == "phương thức gọi". Hoàn toàn không khác. – Joe