Two features from 0.12.0 deserve a closer look, because together they make SCUA a good language for the unglamorous work around a game: reports, economies, live-ops tooling.
money is a first-class value type that carries its
currency. You write a literal as an amount and an ISO code,
19.99 USD or 500 JPY, and the amount is exact:
it rides the decimal engine, never a float, so a ledger cannot drift by
a fraction of a cent. The arithmetic is dimensional. Adding money to
money requires the same currency, multiplying money by a number is a
quantity or a rate, and dividing money by money gives you a plain ratio.
Adding a bare number to money or multiplying two amounts is a
compile-time error with a clear message.
frame is a small columnar data table you query with
method chains:
let sales = frame({
region = ["EU", "US", "EU"],
net = [10.50d, 20.00d, 5.25d],
})
print(sales.filter(region == "EU").total("net")) -- 15.75, exactly
Decimal columns total exactly, so the number a tool prints is the number the books show. Think of it as a spreadsheet that lives in the language, which is what most live-ops questions turn out to need.