(1) Custom | (2) Clang |
Tiny (Less than 1MB); fast, pointed runtime | 50 MB; Parses EVERYTHING, though quickly |
Gives precisely the needed information, no more, no less | Gives general information that can likely be used to meet all of ENIGMA's purposes. |
Supports interfacing with other languages (Lua, Python, JavaScript) at the cost of hundreds of megabytes on top of Clang | |
Likely to be sole maintainer, responsible for all aspects including any potential errors. This would be no different from now. At worst, it could mean a second recode in the future, but ideally I would make the code sufficiently extensible to prevent that this time. | Maintenance involves separating Clang from LLVM as cleanly as possible every time an update is made; any parse errors are not the responsibility of the ENIGMA team, and may or may not be dealt with in a timely manner. Potentially, we'd be facing another MinGW fiasco. (See #13297 (http://sourceware.org/bugzilla/show_bug.cgi?id=13297)) |
MinGW LD/MSysThe horror!
interpreter for C++ which, depending on its speed, could mean a native method of doing execute_string()Highly unlikely. C++ takes some time to parse. Depending on the exact implementation(e.g. which headers are imported and how they are used), it could take several seconds just to get the code compiled. We're talking about time BEFORE the code in execute_string even STARTS running.
#include <iostream>
#include "enigma.h"
using std::cout;
using std::endl;
ENIGMA_EXPORT void my_cpp_func(int value) {
cout << value << endl;
}
foreign(c) function "exit" void(int : on_invalid(replace 123) );
foreign(cpp) function "my_cpp_func" void(int : on_invalid(abort) ) ; //exceptions also acceptable
var x = 3;
int y = 4;
my_cpp_func(x);
my_cpp_func(y);
my_cpp_func("Hello"); //Compile-time error
string z = "Hello";
my_cpp_func(z); //Run-time error
exit("Hello"); //exit with error code 123
why not write your own languageENIGMA already has one. Its called EDL.
BTW ternary expressions often make code more difficult to read, even for expertsThey also make the code smaller where it needs to be. There is no need to write some almost redundant if statement when you can just write a ternary expression. Also, I just recently learned that I can do this:
(a?max:min)(50,25)
so I want this to be part of EDL support as well. :)(a ? foo : bar) = 3
BTW ternary expressions often make code more difficult to read, even for expertsSo can ifs, whiles, etc. Pretty much any language feature can be used for obfuscation when used wrong.
Guess what you can't do in C++, but could do in EDL if Josh wanted to write a better code generator?Code: [Select](a ? foo : bar) = 3
int main() {
int foo, bar;
(0 ? foo : bar) = 3;
}
<stdin>: In function ‘main’:
<stdin>:3:18: error: lvalue required as left operand of assignment
I do not mind 50mbs, nor would I mind 500mbs.Insert Disc 2 to continue ENIGMA installation.
SDKs are huge these days. Enigma is going to be an SDK, so I guess 1gb would be acceptable as well.
I download games from Steam, big games that are well over 1gb. Lots of people do.
That said, I don't think supporting all the flaws of GML is the way to go.Agreed, though the main structure of GML should undeniably still remain intact so ENIGMA doesn't lose its GM'ness. GML has a lot of errors that I can live without.
our collective ideologies have become tangledKind of an overstatement really. Generally when a project's collective ideologies become tangled, it spells doom for the project. In this case, we're just trying to compensate for our code's lacking, and hitting some roadblocks that are taking us couple weeks to get past.