Remix.run Logo
nox101 4 hours ago

It's not really a valid comparison though. cppfront is a different language that just happens to be compatible with C++. ts/js is were ts is just js with types. You can comment out the types and it just runs. cppfront's language you'll actually have to re-write the code to get it to compile in C++

typescript

    function add(a: number, b: number): number { return a + b };
javascript

    function add(a/*: number*/, b/*: number*/)/*: number*/ { return a + b };
cppfront

    add: (a: float, b: float): float = { a + b; }
cpp

    float add(float a, float b) { return a + b; }
EE84M3i an hour ago | parent | next [-]

> ts/js is were ts is just js with types. You can comment out the types and it just runs.

Is this true in the general case? I thought there were typescript features that didn't have direct JavaScript alternatives, for example enums.

paulddraper an hour ago | parent [-]

Enums and namespaces are the only runtime features of TypeScript.

So, yes, you can't just strip types, but it's close.

EE84M3i 16 minutes ago | parent [-]

Is there a comprehensive list of such incompatibilities documented somewhere?

HelloNurse 3 hours ago | parent | prev [-]

Do you realize that the Typescript example contains strictly more information than the Javascript one (namely, declarations for the type of three things) and is therefore more complex to compile, while the two C++ examples are semantically identical (the last expression in the function is returned implicitly without having to write "return") and the new syntax is easier to parse?

Conscat an hour ago | parent [-]

There are several semantic differences between Cpp1 and Cpp2. Cpp2 moves from last use, which is the biggest one. In a contrived example, that could result in a "hello world" changing to "goodbye world" or any other arbitrary behavior change you want to demonstrate. Cpp2 also doesn't require you to order functions and types or declare prototypes, which means partial template specializations and function overloads can produce similar changes when migrating from Cpp1 to Cpp2.