2010-01-20 46 views
7

Tôi đang tạo một ứng dụng phân tích một hoặc nhiều chuỗi dữ liệu bằng cách sử dụng một số thuật toán (tác nhân) khác nhau. Tôi đã đi đến ý tưởng rằng mỗi tác nhân này có thể được triển khai dưới dạng các kịch bản Python riêng biệt mà tôi chạy bằng cách sử dụng Python C API hoặc Boost.Python trong ứng dụng của tôi.Chọn ngôn ngữ được nhúng

Tôi hơi lo lắng về thời gian chạy trên TBH, vì tôi đang thực hiện một số quy trình xử lý dữ liệu khá nặng và tôi không muốn phải đợi vài phút cho mỗi mô phỏng. Tôi thường sẽ tạo ra hàng trăm nghìn, nếu không phải hàng triệu, các lần lặp mà trong đó tôi gọi các "tác nhân" bên ngoài; tôi tốt hơn là chỉ mã hóa mọi thứ trong ứng dụng, hay liệu hiệu suất có thể chấp nhận được không?

Ngoài ra, tôi có thể sử dụng bất kỳ ngôn ngữ thông dịch nào khác ngoài Python không?

+1

Đi với API Python/C. Tôi sử dụng nó trong ứng dụng của mình mà không hề hối hận. –

Trả lời

10

Có, tấn.Lua và Python có vẻ là phổ biến nhất:

Nhúng Lua

Nhúng Python

Nhúng Tcl

Nhúng của Ruby

Nhúng Perl

Nhúng JavaScript

Có hàng chục công cụ JavaScript xung quanh, đây chỉ là một ví dụ. Một số người trong số họ cũng đáng sợ nhanh chóng.

+4

Theo tôi, Lua có thể là ngôn ngữ được tài liệu hóa nhất để nhúng, nó là một tiêu chuẩn thực tế để phát triển game. –

+1

Thật vậy, nó rất đơn giản. Tôi đã không nhúng nó bản thân mình, nhưng sử dụng nó trong một mô-đun Mod của Garry tùy chỉnh, và sử dụng API C để vượt qua các công cụ. Đó là đủ đơn giản cho bộ não 15 tuổi của tôi (có khả năng tính toán của một miếng bọt biển.) – Skurmedel

+2

Tcl có thể thách thức Lua là ngôn ngữ được viết nhiều nhất, mặc dù đó là chủ quan. Nó cũng dài hơn Lua. Nó không phải là "nóng" như lua, nhưng nó ít nhất cũng bằng nhau. –

0

bạn có thể có thể tạo ngôn ngữ được nhúng bằng cách sử dụng mẫu C++ và quá tải toán tử, xem ví dụ ublas hoặc ngôn ngữ ma trận ftensor. tôi không nghĩ python hay các ngôn ngữ thông dịch khác phù hợp để xử lý số/xử lý dữ liệu.

1

Đối với hàng triệu cuộc gọi (từ tôi giả định C++, vì bạn đã đề cập tăng) vào python, có: bạn sẽ nhận thấy một lần truy cập hiệu suất. Điều này có thể hoặc có thể không đáng kể - có lẽ tốc độ tăng của việc thử các 'đại lý' mới sẽ lớn hơn hit. Python có các thư viện số nhanh (chẳng hạn như numpy) có thể giúp ích, nhưng bạn vẫn sẽ phải chịu phí dữ liệu marshalling, gọi vào python, gil, v.v.

Có, bạn có thể nhúng nhiều ngôn ngữ khác: kiểm tra lua. Ngoài ra, hãy xem swig.org, có thể kết nối với nhiều ngôn ngữ khác ngoài python.

3

Tôi thường sẽ được làm cho hàng trăm ngàn, nếu không nói là hàng triệu, lặp đi lặp lại mà tôi gọi là "đại lý" bên ngoài

Sự sụt giảm hiệu suất sẽ được chú ý, có lẽ đau đớn. Nếu bạn có thể đưa dữ liệu vào mảng và xử lý dữ liệu theo lô bằng cách sử dụng NumPy, nó sẽ nhanh hơn nhiều.

NumPy giúp bạn dễ dàng thực hiện bất kỳ loại số học nào một triệu lần liên tiếp. Ví dụ, bình phương mọi phần tử của một mảng là như thế này:

>>> x = numpy.array([1, 2, 3, 4, 5, 6, 7]) 
>>> x**2 
array([1, 4, 9, 16, 25, 36, 49]) 

siêu dễ dàng, và vòng lặp bên trong chặt chẽ ở đây là thực sự thực hiện trong C.

Tất nhiên NumPy cũng có thể làm cao cấp hơn số crunching .

5

Tcl được thiết kế từ đầu để trở thành ngôn ngữ được nhúng.

+0

Câu trả lời giống như một phần của tôi trong khi tôi đang chỉnh sửa. 1 cho thiên tài rõ ràng. :-) –

+1

Lua cũng được thiết kế từ đầu để trở thành một ngôn ngữ được nhúng. – lhf

+1

@lhf: có, có một số ngôn ngữ đã được thiết kế từ đầu để được nhúng. –

2

Tôi tin rằng tclRexx đều được thiết kế cho mục đích này.

9

Lua tương đối nhanh. Nếu bạn cần tốc độ cao hơn, hãy thử LuaJIT, điều này thật tuyệt vời.

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