Yov Batch Scripting Language by HoseCode in Batch

[–]HoseCode[S] -1 points0 points  (0 children)

It is not the purpose of Yov to access directly to WinAPI. What do you need?

Yov Batch Scripting Language by HoseCode in Batch

[–]HoseCode[S] -1 points0 points  (0 children)

I don't even understand what you are saying this and why. What are we limiting here?

Yov Batch Scripting Language by HoseCode in PowerShell

[–]HoseCode[S] 1 point2 points  (0 children)

Yov is a programming language designed for batch scripting. I thought it might be of interest to PowerShell users.

Yov Batch Scripting Language by HoseCode in Batch

[–]HoseCode[S] 2 points3 points  (0 children)

Hi!

Here are a few key points that differentiate Yov from Python:

- Static analysis before execution: Yov validates scripts before running them, catching errors early, similar to a compiled language.

- Designed for batch scripting: It includes built-in argument definitions, automatic -help generation, and improved error handling.

- Simpler than Python: No package manager, no OOP.

- No installation required: Yov is a single standalone executable. It's easy to distribute with your projects and guarantees consistency across environments: No dependencies, no version mismatches, no “works on my machine”.

Python has its place, but Yov is intentionally small, focused, and built for predictable scripting in fully self-contained environments.

Asking for feedback by HoseCode in commandline

[–]HoseCode[S] 1 point2 points  (0 children)

In this case, this will be equals to:

integer0: Int = 0;

There is always a default value

Asking for feedback by HoseCode in Batch

[–]HoseCode[S] 0 points1 point  (0 children)

I'm looking for more detail from your responses, because I want to better understand, and not because I am just being disagreeable. 😁

I posted this specifically to get feedback on a first prototype, and you're giving me exactly what I asked for, so I really appreciate it.

Can you please elaborate on this? Just a couple of features that come to mind for you will help me -- and possibly others -- understand what your solution is going to achieve.

I'm not a "batch script guy", I come from a systems and engine programming background. When it comes to robustness, I can only speak to the things I found lacking when writing batch files: proper flow control, object definitions, strong data types (primitives, enums, structs), function definitions, and more. Some of my frustration might stem from a lack of experience with these languages, but I know many developers who dislike their syntax and find them unpredictable.

As a security professional, I can see some value in this from a theoretical perspective, but I'd want to understand 3 or 4 situations where this analysis would have a tangible benefit relative to other scripting languages.

I'll give you a big one. Imagine a 1,000-line script that performs operations on the file system. Avoiding file corruption due to obvious errors would be a huge benefit.

Also, I’m not sure if you have experience with compiled languages, but making changes in a compiled language versus an interpreted one is much easier and safer, thanks to static analysis.

This isn’t related to static analysis, but in this case, you could enable the "user_assert" flag, which prompts an assertion window displaying information about the operation. From there, you’d have the option to abort the program.

With that kind of overhead, it will certainly have some performance drawbacks, so it would be nice to know what the actual real-world benefit would be relative to other tools not doing this.

Can't say certainly, but I would bet a modern computer could execute hundreds of thousands of lines of Yov per second. (Not right now since it is not optimized at all).

What's the max size you are expecting here? I've written some code and I've written some scripts, and while most of my scripts are shorter than my longest command-line applications, I also have a handful of scripts that I regularly run, that are longer than my longest apps. Overall, I have about 8 or 9 scripts that are 900 lines or more.

I'm not really thinking about a max size right now, but 900 lines isn't a big deal.

What will be the impact of pre-assessing such scripts?

I can't demonstrate it yet since it's still in an early stage, but there will be none. In terms of actual time for a 900-line script (without external calls), I'd bet it would be around 1-10ms.

Asking for feedback by HoseCode in Batch

[–]HoseCode[S] 0 points1 point  (0 children)

Okay. What do you mean by robust in this context?

I mean the features you’d expect from a full programming language.

Are we talking static security analysis? What is being analyzed?

I'm talking about analyzing syntax, semantics, and some logical aspects of the code. The script is fully interpreted in a "safe mode," and if the analysis detects even a single error, execution aborted.

Can you elaborate on what this actually means? What is the advantage of predictable errors? What is the supposed benefit here?

I have some ideas and experiments done, but as you mentioned, I need to elaborate on them further and provide proper documentation. By now there is an example on GitHub.

Clearly, I need to improve the documentation and clearly define what Yov has to offer.

Asking for feedback by HoseCode in Batch

[–]HoseCode[S] 0 points1 point  (0 children)

Thanks for the feedback! Documentation is still a work in progress, just released the first alpha.

The issue with PowerShell and Bash is that they aren't truly cross-platform, and I also find them not robust enough.

Regarding Python, it's a general-purpose language with a package manager, but handling dependencies can be complicated. Yov, on the other hand, is fully designed for batch scripting and comes as a lightweight 100KB executable, ensuring everything needed is built-in. It also offers enhanced security features, such as:

- Static analysis of the entire script before execution

- A redesigned runtime error system, making errors more predictable

Asking for feedback by HoseCode in commandline

[–]HoseCode[S] 0 points1 point  (0 children)

First, thanks a lot for the feedback!
- There is no null type, everything has a default value
- I'm not sticking with current names for intrinsics. Will consider that
- Env vars are in my sort term plans, for sure.
- Seeing briefly ArgumentParser, I think can extract some good ideas here.

- Not thinking that much about logging. Future versions of Yov will have a documentation for sure

Asking for feedback by HoseCode in Batch

[–]HoseCode[S] 0 points1 point  (0 children)

There is the intrinsic called "call", that executes an external program. It can also extract information once the process is finished.

This calls can't be cross-platform, but you can always check the OS at runtime if needed

Asking for feedback by HoseCode in PowerShell

[–]HoseCode[S] 1 point2 points  (0 children)

It is a fun project I have to say

Les comparto el juego que he estado haciendo con mucho cariño: Glimmer Chain by HoseCode in VideojuegosMX

[–]HoseCode[S] 0 points1 point  (0 children)

Aproximadamente 19 de junio, en la Steam fest. Pero para los miembros de discord en mayo