Sergio here, the creator of Vely. Go ahead and roast it. Here's a brief from the front page:<p>Vely is an embedded programming language with C as a host language. It's precompiled into C, creating a native executable.<p>Vely empowers C with rich features, simplicity and enhanced safety. It is general-purpose and well-suited for web applications.<p>Use Vely to rapidly develop high-performance and low-footprint applications
Without a value judgement here is my analysis. It bears an unexpected similarity with PHP/FI 1.0, where a limited set of extended statements are mixed to the base language (which is HTML in PHP/FI and C in Vely). I had a gut reaction that memory management would be problematic, and Vely "solved" it by implicitly owning all memory allocated by Vely statements and deallocating them at the end of the current request. If my understanding is correct, vv doesn't seem to fully understand the C-plus-Vely language and just detects Vely keywords from C tokens [1], and I don't think it's a good idea.<p>[1] <a href="https://vely.dev/language_statements.html" rel="nofollow">https://vely.dev/language_statements.html</a> "Note that, Vely statements, after translated into C code by vv, are generally made of multiple C statements, hence Vely statements can never be treated as single-line statements." (suggesting that there is no full parser for C-plus-Vely)
Unless I'm reading this wrong, Vely doesn't actually understand C, correct?<p>This means that all the diagnostics being emitted will be very confusing. When incorrect input is given, Vely doesn't produce the error message, gcc does, which makes it difficult to match the error message to what the user actually typed in.<p>I've used (and created many[1]) "embedded" languages, and this is the biggest problem with those that simply do pattern matching and replacement: the language the programmer is writing is unaware of errors and the programmer has determine what they did wrong by looking at the generated code.<p>It's not a big problem if the programmer understands this limitation; that the "language" is a macro language that blindly transforms input to output with no understanding of the input. If the programmer accepts this, it can be very useful.<p>[1] I just created a html preprocessor in bash this morning. It performs variable substitution using environment variables and runs the C preprocessor on the input, allowing #include directives, #ifdef, etc. It lets me write my HTML files in fragments that can conditionally include other HTML files, and it lets me put in variables in the HTML file that are substituted with values from the environment.<p>I've no doubt that this is a hacky solution, but<p>a) It took only an hour to write (thus far - there's some TODOs in there for stuff that might be useful in the future)<p>b) It was quicker than downloading and learning to use an existing tool that does the same thing, and ensuring that all that tools dependencies are brought in as well.
Actually for someone using C only for microcontroller, it is an interesting approach.<p>Hardware drivers, like USB, SPI, etc could be done in C and wiring up things and pushing data around in a more high level language.<p>After considering micropython for exactly that purpose, I was disappointed because of the implementation complexity and slowness of computations on that platform.<p>What are your thoughts on this?
What is this language's approach to memory safety? Does it guarantee there can never be out of bounds accesses, use after frees, double frees, or other memory corruption errors? Anything which talks to attackers over the internet is a prime target for these sorts of attacks.
FYI the hello world example instructions border on unreadable on a phone due to the indentation<p><a href="https://vely.dev/example_hello_world.html" rel="nofollow">https://vely.dev/example_hello_world.html</a>
I know it's just an example, but querying database, saving to file, displaying web page - all in one function - reminded me of old big-ball-of-mud PHP codebases.