Factor 0.101 now available – Re: Factor

💥 Discover this awesome post from Hacker News 📖

📂 Category:

✅ Main takeaway:

“Keep thy airspeed up, lest the earth come from below and smite thee.” –
William Kershner

I’m very pleased to announce the release of Factor
0.101!

Source code: 0.101

This release is brought to you with almost 700 commits by the following individuals:

Aleksander Sabak, Andy Kluger, Cat Stevens, Dmitry Matveyev, Doug Coleman,
Giftpflanze, John Benediktsson, Jon Harper, Jonas Bernouli, Leo Mehraban, Mike
Stevenson, Nicholas Chandoke, Niklas Larsson, Rebecca Kelly, Samuel Tardieu,
Stefan Schmiedl, @Bruno-366,
@bobisageek,
@coltsingleactionarmyocelot,
@inivekin,
@knottio, @timor

Besides some bug fixes and library improvements, I want to highlight the following changes:

  • Moved the UI to render buttons and scrollbars rather than using images, which
    allows easier theming.
  • Fixed HiDPI scaling on Linux and
    Windows, although it currently doesn’t update the window settings when
    switching between screens with different scaling factors.
  • Update to Unicode 17.0.0.
  • Plugin support for the Neovim editor.

Some possible backwards compatibility issues:

  • The argument order to ltake was swapped to be more consistent with words like head.
  • The environment vocabulary on Windows now supports disambiguating f and "" (empty) values
  • The misc/atom folder was removed in favor of the factor/atom-language-factor repo.
  • The misc/Factor.tmbundle folder was removed in favor of the factor/factor.tmbundle repo.
  • The misc/vim folder was removed in favor of the factor/factor.vim repo.
  • The http vocabulary request tuple had a slot rename from post-data to data.
  • The furnace.asides vocabulary had a slot rename from post-data to data, and might require running ALTER TABLE asides RENAME COLUMN "post-data" TO data;.
  • The html.streams vocabulary was renamed to io.streams.html
  • The pdf.streams vocabulary was renamed to io.streams.pdf

What is Factor

Factor is a concatenative, stack-based
programming language with high-level
features
including dynamic types, extensible syntax, macros, and garbage
collection. On a practical side, Factor has a full-featured
library,
supports many different platforms, and has been extensively documented.

The implementation is fully
compiled
for performance, while still supporting interactive
development.
Factor applications are portable between all common platforms. Factor
can deploy stand-alone
applications on
all platforms. Full source code for the Factor project is available
under a BSD license.

New libraries:

Improved libraries:

  • alien.syntax: added C-LIBRARY: syntax word
  • assocs.extras: added nzip and nunzip, map-zip and map-unzip macros
  • base32: adding the human-oriented Base32 encoding via zbase32> and >zbase32
  • base64: minor performance improvement
  • benchmark: adding more benchmarks
  • bootstrap.assembler: fixes for ARM-64
  • brainfuck: added BRAINFUCK: syntax word and interpret-brainfuck
  • bson: use linked-assocs to preserve order
  • cache: implement M\ cache-assoc delete-at
  • calendar: adding year<, year<=, year>, year>= words
  • calendar.format: parse human-readable and elapsed-time output back into duration objects
  • cbor: use linked-assocs to preserve order
  • classes.mixin: added definer implementation
  • classes.singleton: added definer implementation
  • classes.tuple: added tuple>slots, rename tuple>array to pack-tuple and >tuple to unpack-tuple.
  • classes.union: added definer implementation
  • checksums.sha: some 20-40% performance improvements
  • command-line: allow passing script name of - to use stdin
  • command-line.parser: support for Argument Parser Commands
  • command-line.startup: document -q quiet mode flag
  • concurrency.combinators: faster parallel-map and parallel-assoc-map using a count-down latch
  • concurrency.promises: 5-7% performance improvement
  • continuations: improve docs and fix stack effect for ifcc
  • countries: adding CQ country code for Sark
  • cpu.architecture: fix *-branch stack effects
  • cpu.arm: fixes for ARM-64
  • crontab: added parse-crontab which ignores blank lines and comments
  • db: making query-each row-polymorphic
  • delegate.protocols: adding keys and values to assoc-protocol
  • discord: better support for network disconnects, added a configurable retry interval
  • discord.chatgpt-bot: some fixes for LM Studio
  • editors: make the editor restart nicer looking
  • editors.focus: support open-file-to-line-number on newer releases, support Linux and Window
  • editors.zed: support use of Zed on Linux
  • endian: faster endian conversions of c-ptr-like objects
  • environment: adding os-env?
  • eval: move datastack and error messages to stderr
  • fonts: make take a name, easier defaults
  • furnace.asides: rename post-data slot on aside tuples to data
  • generalizations: moved some dip words to shuffle
  • help.tour: fix some typos/grammar
  • html.templates.chloe: improve use of CDATA tags for unescaping output
  • http: rename post-data slot on request tuples to data
  • http.json: adding http-json that doesn’t return the response object
  • http.websockets: making read-websocket-loop row-polymorphic
  • ini-file: adding ini>file, file>ini, and use LH💬 to preserve configuration order
  • io.encodings.detect: adding utf7 detection
  • io.encodings.utf8: adding utf8-bom to handle optional BOM
  • io.random: speed up random-line and random-lines
  • io.streams.ansi: adding documentation and tests, support dim foreground on terminals that support it
  • io.streams.escape-codes: adding documentation and tests
  • ip-parser: adding IPV4 and IPV6 network words
  • kernel: adding until*, fix docs for and* and or*
  • linked-sets: adding LS{ syntax word
  • lists.lazy: changed the argument order in ltake
  • macho: support a few more link edit commands
  • make: adding ,% for a push-at variant
  • mason.release.tidy: cleanup a few more git artifacts
  • math.combinatorics: adding counting words
  • math.distances: adding jaro-distance and jaro-winkler-distance
  • math.extras: added all-removals, support Recamán’s sequence, and Tribonacci Numbers
  • math.factorials: added subfactorial
  • math.functions: added “closest to zero” modulus
  • math.parser: improve ratio parsing for consistency
  • math.primes: make prime? safe from non-integer inputs
  • math.runge-kutta: make generalized improvements to the Runge-Kutta solver
  • math.similarity: adding jaro-similarity, jaro-winkler-similarity, and trigram-similarity
  • math.text.english: fix issue with very large and very small floats
  • metar: updated the abbreviations glossary
  • mime.types: updating mime.types file
  • msgpack: use linked-assocs to preserve order
  • qw: adding qw: syntax
  • path-finding: added find-path*
  • peg.parsers: faster list-of and list-of-many
  • progress-bars.models: added with-progress-display, map-with-progress-bar, each-with-progress-bar, and reduce-with-progress-bar
  • raylib: adding trace-log and set-trace-log-level, updated to Raylib 5.5
  • readline-listener: store history across sessions, support color on terminals that support it
  • robohash: support for "set4", "set5", and "set6" types
  • sequences: rename midpoint@ to midpoint, faster each-from and map-reduce on slices
  • sequences.extras: adding find-nth, find-nth-last, subseq-indices, deep-nth, deep-nth-of, 2none?, filter-errors, reject-errors, all-same?, adjacent-differences, and partial-sum.
  • sequences.generalizations: fix ?firstn and ?lastn for string inputs, removed (nsequence) which duplicates set-firstn-unsafe
  • sequences.prefixed: swap order of arguments to match prefix
  • sequences.repeating: adding and cycle-from
  • sequences.snipped: fixed out-of-bounds issues
  • scryfall: update for duskmourn
  • shuffle: improve stack-checking of shuffle( syntax, added SHUFFLE: syntax, nreverse
  • sorting: fix sort-with to apply the quot with access to the stack below
  • sorting.human: implement human sorting improved
  • system-info.macos: adding “Tahoe” code-name for macOS 26
  • terminfo: add words for querying specific output capabilities
  • threads: define a generalized linked-thread which used to be for concurrency.mailboxes only
  • toml: use linked-assocs to preserve order, adding >toml and write-toml
  • tools.annotations: adding syntax
  • tools.deploy: adding a command-line interface for deploy options
  • tools.deploy.backend: fix boot image location in system-wide installations
  • tools.deploy.unix: change binary name to append .out to fix conflict with vocab resources
  • tools.directory-to-file: better test file metrics, print filename for editing
  • tools.memory: adding heap-stats-of arbitrary sequence of instances, and total-size size of everything pointed to by an object
  • txon: use linked-assocs to preserve order
  • ui: adding adjust-font-size
  • ui.gadgets.buttons: stop using images and respect theme colors
  • ui.gadgets.sliders: stop using images and respect theme colors
  • ui.theme.base16: adding a lot more (270!) Base16 Themes
  • ui.tools: adding font-sizing keyboard shortcuts
  • ui.tools.browser: more responsive font sizing
  • ui.tools.listener: more responsive font sizing, adding some UI listener styling
  • ui.tools.listener.completion: allow spaces in history search popup
  • unicode: update to Unicode 17.0.0
  • webapps.planet: improve CSS for video tags
  • words: adding define-temp-syntax
  • zoneinfo: update to version 2025b

Removed libraries

VM Improvements:

  • More work on ARM64 backend (fix set-callstack, fix generic dispatch)

Tell us your thoughts in comments! What do you think?

#️⃣ #Factor #Factor

🕒 Posted on 1765425586

By

Leave a Reply

Your email address will not be published. Required fields are marked *