Các ngôn ngữ chức năng hoạt động tốt như thế nào trên Android?


10

Đây là một trường hợp đặc biệt của câu hỏi này mà tôi cảm thấy đặc biệt thích hợp.

Tôi đang làm việc trên một trò chơi dành cho Android và tôi đang lên kế hoạch sử dụng Scala với libgdx. Tôi đang lên kế hoạch thực hiện một trò chơi biểu diễn, nhưng không nhất thiết phải là trò chơi siêu hiệu quả. Tôi đã xem tài liệu của libgdx về Bộ sưu tập rác và điều này khiến tôi suy nghĩ:

  1. Lập trình hàm bao hàm rất nhiều đối tượng bất biến.
  2. Do đó, đột biến một đối tượng đòi hỏi phải tạo một đối tượng mới.
  3. Do đó, rất nhiều đối tượng nhận được rác được thu thập, làm giảm hiệu suất.

Đây có phải là một vấn đề không thể vượt qua? Có bất kỳ vấn đề quan trọng nào khác với phong cách chức năng trên Android không?

Câu trả lời:


3

Bạn có thể ổn với Scala, nhưng bạn thực sự không muốn phân bổ các đối tượng mới quá thường xuyên . GC không có tạm dừng vẫn không còn là một huyền thoại (trên Android) và các game thủ không thích khi trò chơi của bạn trục trặc. Nhưng điều này không có nghĩa là bạn không thể nhận được bất kỳ lợi ích nào từ việc sử dụng ngôn ngữ nghiêm túc hơn - thực sự, bạn có thể. Và bạn sẽ ổn với "phong cách chức năng" không diễn ra trong vòng lặp trò chơi chính. Ngoài ra, Scala trên Android đòi hỏi phải chiến đấu với một số vấn đề xây dựng thêm, nhưng một khi bạn tìm hiểu nó, nó có thể chịu được. Và nó không chính xác để đặt tên Scala là ngôn ngữ chức năng, mặc dù vậy, nó có một số tính năng liên quan đến lập trình chức năng.


2

Để chơi game? Tránh các ngôn ngữ chức năng. Toàn bộ mô hình của họ không kết hợp tốt với các trò chơi. Các thủ tục, ngôn ngữ OOP phù hợp hơn với nhu cầu của trò chơi để thay đổi trạng thái thường xuyên, quản lý tài nguyên và bộ nhớ rõ ràng, trừu tượng hóa dữ liệu và mô hình hữu ích ở nhiều nơi, thiết kế hướng dữ liệu trong một số hệ thống, v.v. Các yếu tố chức năng là một thứ, một ngôn ngữ chức năng thực sự là một thứ khác.

Ngôn ngữ chức năng hoạt động tốt nhất cho Android vẫn sẽ cho trải nghiệm phát triển kém hơn Java hoặc C ++. Không phải vì đó là những ngôn ngữ tốt hơn xung quanh, mà bởi vì chúng tốt hơn cho nhiệm vụ cụ thể trong tay. Công cụ phù hợp cho công việc và tất cả những thứ đó.

Điều này đúng trên thiết bị di động, PC, bảng điều khiển, v.v. Không ai sử dụng ngôn ngữ chức năng cho các trò chơi. Chó nghịch ngợm sử dụng LISP để viết kịch bản , nhưng không phải là mã trò chơi cốt lõi. Họ không thể. Nó sẽ không hoạt động nếu họ cố gắng.

Hầu hết mọi người gần nhất nhận được là các shader, có chức năng theo một số cách nhưng được viết bằng các ngôn ngữ có tính thủ tục cao như HLSL hoặc GLSL.


> Để chơi game? Tránh các ngôn ngữ chức năng. Điều thú vị là Thử thách AI của Google năm 2010 đã được chiến thắng bởi một bot Lisp. Có thể không tốt cho việc viết trò chơi, nhưng rõ ràng nó khá tiện dụng khi chơi chúng. semanticweb.com/ từ

Chắc chắn rồi. Trường hợp sử dụng khác nhau. LISPis phổ biến cho AI thực sự, điều này ít liên quan đến AI trò chơi. Game AI là tất cả về việc đưa ra những lựa chọn hiệu quả để đánh lừa người chơi nhìn thấy trí thông minh và tạo ra một trò chơi thú vị. AI thực sự là về việc đưa ra các quyết định thực sự thông minh, ý kiến ​​của con người bị nguyền rủa (đôi khi có thể thông minh và trông thật ngu ngốc, vì các nhà quan sát con người thường không nhìn thấy toàn bộ bức tranh giống như AI).
Sean Middleditch

2
For gaming? Avoid functional languages. Their entire paradigm fails to mesh well with games.Trên thực tế, tôi đã đọc một số bài viết từ các nhà phát triển trò chơi cấu hình cao thể hiện sự quan tâm trong lập trình chức năng. Có một bài của Tim Sweeney scribd.com/doc/5687/ John và John Carmack dường như có một ý định tích cực trong việc đánh giá các ngôn ngữ chức năng và hiện đang thực hiện một bản port của Wolfenstein 3d ở Haskell, tinyurl.com/cnzx57u
James McMahon

Ngoài ra, bạn có trích dẫn cho Chó nghịch ngợm chỉ sử dụng Lisp cho kịch bản không? Tôi có ấn tượng rằng họ có một phương ngữ nội bộ của Lisp, với trình biên dịch tùy chỉnh nhắm vào phần cứng của PS2 và họ đã viết phần lớn loạt Jax và Dexter trong đó. EDIT: Đừng bận tâm tìm thấy nó, gamasutra.com/view/feature/131394/NHPractically all of the run-time code (approximately half a million lines of source code) was written in GOAL (Game Object Assembly Lisp)
James McMahon
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.