MoonFrame v0.6.0 — API convergence
Breaking
- One constructor per type, spelled as the type's own name:
Field::Field,Schema::Schema,CsvReadOptions::CsvReadOptions,
HtmlOptions::HtmlOptions, … Thenew/default/with_*builder
chains are gone — thirteen builder methods become zero. - Every
*_with_optionsentry point folds into its plain form as an optional
argument:read_csv(path, options?),scan_ndjson(path, options?),
parse_csv_str(text, options?).NdjsonReadOptionsfolds into
JsonReadOptions, and the JSON verbs are nowparse_json_str/
format_json/write_json. Expris opaque — its AST moved into an internal package — andExprand
JoinOptionslose==. Compare rendered expressions instead:
(col("a") + lit_int(1)).to_string().- The storage-backend surface leaves the public API, and the read-side fields
ofDataFrame/Series/Field/JoinOptionsgo private behind
copying accessors, so a validated value cannot be mutated into an
inconsistent one. TypeMismatch/ParseErrorcarry structured detail instead of a message
string.DataFrame::takeis renamedgather.SortOrder/NullOrder
move fromframetotypes. A column-less frame keeps its row count
(N × 0) rather than collapsing to0 × 0, and a declared
nullable = falsenow survives the projections.
Every source-level upgrade step, with before/after: docs/migration.md
Added
- Numeric expressions:
abs/floor/ceil/sign,floor_div/
modulo/pow,round(decimals?),is_in,is_between(closed?). - Nine string ops:
str_reverse,str_pad_start/str_pad_end/
str_zfill,str_slice,str_split_get,str_len_bytes,
str_extract,str_count_matches. - Predicate push-down into
scan_csv/scan_ndjson: the reader parses only
the rows the filter keeps. - Column selectors —
numeric_cols,cols_of_dtype,cols_matching,
cols_starts_with/cols_ends_with/cols_contains. Expr::map_batches(a whole-column escape hatch, usable as a custom
aggregation),rename_with,DataFrame::reverse/with_row_index,
unique(subset?, keep?).Seriesgainssort/head/tail/reverseand the statistics
std/variance/median/first/last;LazyFramegains the
whole-frame reductionssum/mean/min/max/count/
null_count.
Full history: docs/changelog.md