Batsh – uma linguagem que compila para Bash e Windows Batch

Batsh é uma linguagem de programação simples baseada em C que compila para Bash, Windows Batch. Ele permite que você escreva código depois de executado em todas as plataformas, sem nenhuma dependência adicional.

Tanto o Bash quanto o Batch são complicados de ler e difíceis de escrever devido a razões históricas. Você tem que gastar muito tempo aprendendo qualquer um deles e escrever código dependente da plataforma para cada sistema operacional. Se por acaso você é o mantenedor de uma ferramenta de plataforma cruzada que depende do Bash no Linux / Mac e do Batch no Windows como “código de colagem” e acha doloroso “sincronizar” entre eles, você gostaria de experimentar o Batsh.

Demonstração online: http://batsh.byvoid.com/

Projeto: https://github.com/BYVoid/Batsh

Exemplo:

function fibonacci(num) {
if (num == 0) {
return 0;
} else if (num == 1) {
return 1;
} else {
return (fibonacci(num - 2) + fibonacci(num - 1));
}
}
println
(fibonacci(8));

Código compilado (Bash):

function fibonacci {
local _1
local num
local _0
num
=$1
if [ $num == $((0)) ]; then
"echo" "-ne" $((0))
return
else
if [ $num == $((1)) ]; then
"echo" "-ne" $((1))
return
else
_0
=$("fibonacci" $(($num - 2)))
_1
=$("fibonacci" $(($num - 1)))
"echo" "-ne" $(($_0 + $_1))
return
fi
fi
}
"echo" "-e" $("fibonacci" $((8)))

Código compilado (Windows Batch):

@echo off
setlocal
EnableDelayedExpansion
setlocal
EnableExtensions

call
:fibonacci _1 0 8
set _0=!_1!
echo
!_0!

goto :EOF
:fibonacci
set num_%~2=%~3
if /i !num_%~2! EQU 0 (
set %~1=0
goto :EOF
) else (
if /i !num_%~2! EQU 1 (
set %~1=1
goto :EOF
) else (
set /a _0_%~2=^(!num_%~2! - 2^)
set /a _5_%~2=^(1 + %~2^)
call
:fibonacci _6_%~2 !_5_%~2! !_0_%~2!
set _1_%~2=!_6_%~2!
set /a _2_%~2=^(!num_%~2! - 1^)
set /a _7_%~2=^(1 + %~2^)
call
:fibonacci _8_%~2 !_7_%~2! !_2_%~2!
set _3_%~2=!_8_%~2!
set /a _4_%~2=^(!_1_%~2! + !_3_%~2!^)
set %~1=!_4_%~2!
goto :EOF
)
)