I am wondering if there are any statically typed, embeddable scripting languages. Python, JavaScript, etc. are great languages, but they are dynamically typed (that is, types are checked at run time). I am just wondering if anyone knows of any statically typed scripting languages that can be embedded in a C++ application?

- 97,545
- 26
- 194
- 236

- 71,149
- 71
- 256
- 361
-
5How is python loosely typed? In python many operations throw a TypeError which would simply cause undefined behavior in C++. – sepp2k Apr 04 '10 at 19:08
-
2Most of them (Python, Ruby, ...) could be considered strongly typed depending on the definition (@runtime, that is). You may want to expand on your specific `strongly typed` definition. – ChristopheD Apr 04 '10 at 19:09
-
1Oh dear, I can see a bunfight brewing out of this one... – skaffman Apr 04 '10 at 19:09
-
2Python is certainly more strongly typed than C. The asker is confusing "explicitly typed" (i.e. have to specify type even when the compiler/interpreter can infer it uniquely) with "strongly typed", probably. – ShreevatsaR Apr 04 '10 at 19:10
-
Okay, my bad. Python is a bad example. – Nathan Osman Apr 04 '10 at 19:14
-
14If you mean that you want typing errors discovered at compile or load time rather than at execution time, then you should say "statically typed," whereas most scripting languages are "dynamically typed." – Doug Currie Apr 04 '10 at 19:34
-
1Ah, yes. That is what I meant. – Nathan Osman Apr 04 '10 at 19:54
-
1In that case, I think that http://stackoverflow.com/questions/2329460/which-languages-are-dynamically-typed-and-compiled-and-which-are-statically-type is a duplicate. You might also be interested in http://stackoverflow.com/questions/2264889/what-statically-typed-languages-are-similar-to-python. – dmckee --- ex-moderator kitten Apr 04 '10 at 20:14
-
6This looks like a real question to me. The first version was just poorly phrased. And those questions don't address embedded scripting languages, which is kind of a specialized niche that's almost entirely dynamic languages. – Chuck Apr 05 '10 at 04:20
-
I am leaving this closed because it's a recommendation question. – Jeffrey Bosboom Feb 20 '16 at 00:13
-
TypeScript (JavaScript with static types) that targets the JerryScript VM may be of interest to you. http://www.typescriptlang.org/ http://jerryscript.net/ – Well Actually Oct 31 '17 at 10:43
4 Answers
I'd suggest you check out Angelscript. We used it on Warsow and it's pretty good. It has all the features you'd expect like classes, memory management, etc. Since it's statically typed, it can make better optimizations for you, and so the bytecode ends up faster than other scripting languages.
However, AS is not as easy to use as others like Lua, and there is only a single .zip download -- that means no .exe installers, .deb packages, .dmg or anything. Generally this is OK because you'll want to bundle AS into your project's anyways. The main difficultly compared to Lua is just that the library is a lot bigger (but has more features). Not that many people use it so it's a lot harder to find examples and help, but there are good docs so it shouldn't be all that hard to get started.
However, I would personally rather have a dynamic language for scripting. When I script an app, I want to get in there and code the crap out of it without worrying about C-style baggage. Other than AngelScript I really can't think of any others worth recommending.

- 48,506
- 64
- 207
- 283

- 505
- 5
- 7
-
"without worrying about C-style baggage": indeed, Angelscript seems too heavy to use to qualify as a "scripting language" to me. – Stefan Feb 19 '16 at 17:59
Well, there's Ch - the embeddable C/C++ interpreter

- 263,248
- 89
- 350
- 412
-
Could you expand a bit more on Ch? Is it cross-platform? Is it released under the GPL or a different license? Is the documentation up to date? – Nathan Osman Apr 04 '10 at 19:17
-
@George: I haven't really tried it (personally I don't see the point), but it is cross platform and free. It appears to be well documented and there's also a commercial version with (presumably) full support – Eli Bendersky Apr 05 '10 at 04:44
-
7
-
11@Jacques: in this world, AFAIK. Types in C pertain to variables, not to values, and are determined at compile-time, which makes it statically typed. – Eli Bendersky Jun 14 '10 at 18:08
-
4Sorry, I've been working too long in languages where "lying to the compiler" (aka casting) is not considered to be a feature. So, yes, strictly speaking C can be considered typed. But most people that I know who have experienced a language where types really matter stop considering C as typed. I too long ago started thinking of C as 'portable assembler'... – Jacques Carette Jun 14 '10 at 19:25
-
5In my book C/C++ does not qualify as "scripting" language. Admittedly, my book has no official definition of a "scripting language", but I think C/C++ is pretty far from it. – Stefan Feb 19 '16 at 17:48
How about C#? Check out Mono's implementation of a C# "scripting language" REPL (http://www.mono-project.com/CsharpRepl)
Update: If you don't know what a REPL is, it's what you see when you run Python without any arguments, or irb

- 73,868
- 16
- 141
- 209
Haskell is statically typed. And you can probably embed ghci or hugs (both are interpreters) into another programm. But it's not easy, afaik.

- 1,839
- 12
- 16
-
I have tried to use Haskell as a replacement for Python but after few attempts it was obvious that implementing anything in Haskell takes me 5 times more time than in Python. I tried to attribute this difference to my poor knowledge of Haskell but after reconsidering I have never had such lousy performance with any new language so I stick to the Python. Additionally lazy evaluation in combination with IO gives terrible unpredictable bugs. It is like grasping multi-threading when order matters but things happen out of order and in case of Haskell you do not have means of imposing order. – Trismegistos Aug 14 '14 at 14:59
-
5Haskell absolutely has order imposed. The order in which IO actions are sequenced for instance is the order in which they'll happen. – Evan Jun 30 '15 at 16:23