2013-07-16 32 views
6

Tôi đang tuyệt vọng tìm kiếm một nhanh, C-như cú pháp, dễ dàng để nhúng, dễ quấn ngôn ngữ kịch bản để nhúng trong trò chơi C++ của tôi.C++ nhúng ngôn ngữ kịch bản cho sự phát triển trò chơi - không thể tìm thấy bất cứ điều gì tôi thích

Cho đến nay tôi đã cố gắng:

  • Lua: nó hoạt động, nhưng gói toàn cầu C++ chức năng xung quanh nó là đau đớn, và gói đối tượng thậm chí còn khó khăn hơn. Ngoài ra, tôi thực sự không thích cú pháp của Lua.
  • AngelScript: không thể làm cho nó hoạt động. Tài liệu mới bắt đầu là không có thật, vì các ví dụ đầu tiên không biên dịch, và bạn phải xây dựng rất nhiều tiện ích trước. Bao bọc các đối tượng và hàm C++ trông dễ dàng hơn Lua nhưng nó vẫn có thể sạch hơn. Cú pháp có vẻ ổn.
  • ChaiScript: không thể làm cho nó hoạt động. Tôi đã nhận được rất nhiều lỗi cả với các phiên bản không git và git C++ 11. Tôi không muốn sử dụng phiên bản tăng cường, vì tôi không muốn giới thiệu tăng cường như là một sự phụ thuộc trong dự án của tôi. Bao bì trông dễ dàng, và cú pháp là ok.

Tôi cũng đã điều tra:

  • Pike: cú pháp có vẻ tốt, nhưng tôi không tìm thấy tài liệu về nhúng.
  • Squirrel: Tôi không thích cú pháp, và nhúng/gói là gây phiền nhiễu như Lua, phải đối phó với ngăn xếp.

Vì vậy:

  • Có một tốt nhanh, C-như cú pháp, dễ dàng để nhúng, dễ quấn thay thế?
  • Nếu không có - các tài nguyên học tập tốt nhất về việc tạo ngôn ngữ kịch bản là gì? Tôi thích phát minh lại bánh xe, và đây có thể là một trải nghiệm học tập thú vị.
+0

trình biên dịch gì bạn đang sử dụng?VC++ hiện không được hỗ trợ bởi ChaiScript 5 như VC++ thiếu các tính năng cơ bản của C++ 11… – MFH

+0

@MFH: Clang 3.4 –

+0

Tạo ngôn ngữ kịch bản chính là trải nghiệm học tập tuyệt vời. Mặc dù nó sẽ mất một thời gian, có những công cụ khá tốt giúp giảm đau. Đối với giao diện người dùng, tôi khuyên bạn nên xem: http://goldparser.org/ – Tim

Trả lời

3

Đối với cú pháp C-like, thanh toán

  • Ch chương trình quảng cáo, nhúng C thông dịch
  • CINT một mã nguồn mở C/C++ phiên dịch
  • Pawn - một "đơn giản, typeless, 32 ngôn ngữ mở rộng bit có cú pháp C giống như "

Có thể không phải dành cho bạn, mà là câu hỏi này t bật lên danh sách các lựa chọn thay thế mà người khác thấy thú vị, tôi cung cấp cho bạn QtScript cung cấp cho bạn cú pháp giống như Javascript. Việc gói có thể đơn giản, nhưng bạn cần phải áp dụng khung Qt để làm điều đó, đặc biệt là khái niệm về các tín hiệu và các khe.

Ngoài ra còn có SpiderMonkey, công cụ JS từ Firefox.

0

tôi biệt phái sử dụng python như ngôn ngữ kịch bản, tôi đã sử dụng boost python trước đây trong chương trình của tôi (không phải là một trò chơi) và khá hài lòng với nó. Nếu bạn muốn thử tạo kịch bản riêng cho mình, bạn có thể muốn thử boost spirit

+0

Tốt như một tài liệu tham khảo, nhưng OP không muốn giới thiệu tăng như là một phụ thuộc trong dự án của mình. –

+2

@PaperBirdMaster không muốn sử dụng Boost.Python bởi vì "nó giới thiệu sự phụ thuộc vào Boost" nhắc tôi về câu chuyện này [về một người đàn ông chết đuối] (http://www.spiritual-short-stories.com/spiritual-short- story-101-Drowning + Man.html) Bất kỳ ngôn ngữ kịch bản nào cũng sẽ giới thiệu một sự phụ thuộc và việc sử dụng BCP có thể cô lập chỉ các phần bắt buộc của Boost. – TemplateRex

+0

Tôi về cơ bản đồng ý với bạn @TemplateRex, nhưng nói với OP, đó là anh ta đã đưa ra những hạn chế;) –

3

Bạn có thể xem bằng cách sử dụng JavaScript. Công cụ tạo mã V8 có thể được nhúng trong chương trình của bạn và có tài liệu hướng dẫn về cách expose your types.

+1

Nó là khá nhanh quá, một cái gì đó cũng đáng nói! – Tim

1

Ngoài những gì người khác đã đề xuất, cũng có Cling được coi là thử nghiệm. Viết một ngôn ngữ kịch bản không phải là dễ dàng, nhưng ngày nay bạn có thể nghỉ mát đến LLVM, ít nhất là cho back-end. Thiết kế ngôn ngữ lập trình được thảo luận ngắn gọn trong "Thuật toán + Cấu trúc dữ liệu = Chương trình" cũ của N. Wirth (nhưng kiểm tra chủ đề nội dung, trong phiên bản mới nhất mà chương đã bị xóa) và nếu bạn tìm kiếm tác giả trên Google, bạn ' sẽ kết thúc chắc chắn với một số ấn phẩm khác về chủ đề này.

3

Bạn có thể quan tâm Đạo (http://daovm.net, https://github.com/daokoder/dao).

Dao được triển khai trong tiêu chuẩn C với sự phụ thuộc tối thiểu (nếu bạn loại trừ các mô-đun và công cụ tùy chọn). Nó nhẹ và hiệu quả với sự hỗ trợ tốt cho việc nhúng và mở rộng. Giao diện của nó để gọi các hàm C không dựa trên stack. Dưới đây là ví dụ đơn giản:

#include "stdio.h" 
#include "daoValue.h" 
static void Square(DaoProcess *proc, DaoValue *param[], int nparam) 
{ 
    daoint num = param[0]->xInteger.value; 
    DaoProcess_PutInteger(proc, num*num); 
} 
int DaoOnLoad(DaoVmSpace *vmspace, DaoNamespace *nspace) 
{ 
    DaoNamespace_WrapFunction(nspace, Square, "Square(num : int) => int"); 
    return 0; 
} 

Bạn có thể nhận thấy rằng không có mã bản mẫu soạn sẵn để kiểm tra các loại tham số trong hàm được bao bọc. Điều này là do chức năng này được đăng ký là Square(num:int)=>int, có nghĩa là chức năng này chỉ có thể chấp nhận số nguyên làm tham số và được đảm bảo bởi thời gian chạy Dao.

Bạn cũng có thể quan tâm để biết rằng nó cũng có một công cụ dựa trên Clang để tạo liên kết C/C++ tự động/bán tự động.

Tuyên bố từ chối trách nhiệm: Tôi là tác giả của ngôn ngữ này.

0

Bạn có thể quan tâm ObjectScript

ObjectScript, hệ điều hành cho ngắn, là một ngôn ngữ lập trình mới. Nó hoàn toàn miễn phí, đa nền tảng, nhẹ, có thể nhúng và nguồn mở. Nó kết hợp các lợi ích của nhiều ngôn ngữ, bao gồm: JavaScript, Lua, Ruby, Python và PHP. Hệ điều hành có cú pháp của Javascripts, tính năng "nhiều kết quả" từ lua, cú pháp cú pháp từ Ruby cũng như các phương thức ma thuật từ PHP và Ruby - và thậm chí nhiều hơn nữa!

chương trình tối thiểu sử dụng ObjectScript có thể là như thế này

#include <objectscript.h> 
using namespace ObjectScript; 
int main(int argc, char* argv[]) 
{ 
    OS * os = OS::create(); // craete ObjectScript instance 
    os->require("main.os"); // run ObjectScript program 
    os->release();   // release the ObjectScript instance 
    return 0; 
}