feat: add Std::Fmt — string formatting module

- C runtime: bux_float_to_string() for float64 → String conversion
- String.bux: add String_FromFloat, extern decl for bux_float_to_string
- library/std/Fmt.bux: Fmt_Fmt1, Fmt_Fmt2, Fmt_Fmt3, Fmt_FmtInt, Fmt_FmtInt2,
  Fmt_FmtFloat, Fmt_FmtBool — positional {0}, {1}, {2} placeholders
- Refactor examples to use Fmt:
  factorial.bux, fibonacci.bux, process.bux, os_time.bux
This commit is contained in:
2026-06-05 21:05:00 +03:00
parent 6d4543ead9
commit db9025f3a3
13 changed files with 97 additions and 37 deletions
+3 -6
View File
@@ -1,6 +1,6 @@
// Factorial - Recursive function
import Std::Io::{PrintLine, PrintInt};
import Std::Io::{PrintLine};
import Std::Fmt::{Fmt_Fmt2};
func Factorial(n: int) -> int {
if n <= 1 {
@@ -15,10 +15,7 @@ func Main() -> int {
var i: int = 1;
while i <= 10 {
let fact: int = Factorial(i);
PrintInt(i);
PrintLine("! = ");
PrintInt(fact);
PrintLine("");
PrintLine(Fmt_Fmt2("{0}! = {1}", String_FromInt(i), String_FromInt(fact)));
i = i + 1;
}
+3 -4
View File
@@ -1,6 +1,6 @@
// Fibonacci - Recursive function with while loop
import Std::Io::{PrintLine, PrintInt};
import Std::Io::{PrintLine};
import Std::Fmt::{Fmt_Fmt1};
func Fibonacci(n: int) -> int {
if n <= 1 {
@@ -15,8 +15,7 @@ func Main() -> int {
var i: int = 0;
while i < 10 {
let fib: int = Fibonacci(i);
PrintInt(fib);
PrintLine("");
PrintLine(Fmt_Fmt1("{0}", String_FromInt(fib)));
i = i + 1;
}
+8 -21
View File
@@ -1,37 +1,24 @@
// Os & Time - System and time utilities
import Std::Io::{PrintLine, PrintInt, PrintInt64};
import Std::Io::{PrintLine};
import Std::Os::{Os_ArgsCount, Os_Args, Os_GetEnv, Os_GetCwd};
import Std::Time::{Time_NowMs, Time_SleepMs};
import Std::Fmt::{Fmt_Fmt1, Fmt_FmtInt};
func Main() -> int {
PrintLine("=== OS Demo ===");
Print("Current directory: ");
PrintLine(Os_GetCwd());
Print("Command-line args: ");
PrintInt(Os_ArgsCount());
PrintLine("");
Print("HOME env: ");
PrintLine(Os_GetEnv("HOME"));
PrintLine(Fmt_Fmt1("Current directory: {0}", Os_GetCwd()));
PrintLine(Fmt_FmtInt("Command-line args: {0}", Os_ArgsCount() as int64));
PrintLine(Fmt_Fmt1("HOME env: {0}", Os_GetEnv("HOME")));
PrintLine("\n=== Time Demo ===");
let start: int64 = Time_NowMs();
Print("Start: ");
PrintInt64(start);
PrintLine(" ms");
PrintLine(Fmt_FmtInt("Start: {0} ms", start));
PrintLine("Sleeping 150ms...");
Time_SleepMs(150);
let end: int64 = Time_NowMs();
Print("End: ");
PrintInt64(end);
PrintLine(" ms");
Print("Elapsed: ");
PrintInt64(end - start);
PrintLine(" ms");
PrintLine(Fmt_FmtInt("End: {0} ms", end));
PrintLine(Fmt_FmtInt("Elapsed: {0} ms", end - start));
return 0;
}
+4 -6
View File
@@ -1,18 +1,16 @@
// Process - Run external commands and capture output
import Std::Io::{PrintLine, PrintInt};
import Std::Io::{PrintLine};
import Std::Process::{Process_Run, Process_Output};
import Std::Fmt::{Fmt_Fmt1, Fmt_FmtInt};
func Main() -> int {
PrintLine("Process demo:");
let output: String = Process_Output("echo Hello from subprocess");
Print("Captured: ");
PrintLine(output);
PrintLine(Fmt_Fmt1("Captured: {0}", output));
let rc: int = Process_Run("true");
Print("Exit code: ");
PrintInt(rc);
PrintLine("");
PrintLine(Fmt_FmtInt("Exit code: {0}", rc));
return 0;
}