View this file with results and syntax highlighting here.
This page gathers links to work by the community. To get in touch, please use our chat forums.
Here are some places to find BQN libraries and examples:
- Awesome BQN, curated list of Github repositories
- Repositories tagged BQN on Github
- Rosetta Code
- Stack Exchange Code Golf & Coding Challenges
- Codidact Code Golf
- Links and retrospectives on the many BQN solutions published for Advent of Code
See also:
- BQN blogging by Sylvia, Thibault Barbie, Ramón Panadés-Barrueta, and Tony Zorman, with more on Medium.
- On Youtube, David Zwitser makes games; Conor Hoekstra and Asher Mancinelli walk through smaller programs.
- Sylvia's tacit to block converter
- Some reference pages: compact functions, big everything
- Razetime's learn X in Y minutes
- Miguel Raz's Anki deck, from this page of resources
- Lukas Hermann writes some Observable notebooks based on BQN.
- barbell templating system with blog post about Under.
- bqrpn is a reverse-Polish calculator powered by BQN in Javascript.
- bqnsweeper is a minesweeper game that shows you its BQN source code.
Wezl has provided a view into the BQN programmer in 𝕩e's typical place of residence.
Depiction, remodel, animation.
Links contain the encoded art, which is CC-BY 4.0: see the "setup JS" pane.
And razetime designed a desktop background based on the BQN logo and character set.
Quite possibly! These days I tend to feel that BQN's implementation has outpaced its users, so that features are often more general and fast than anyone really needs. Ball's in your court. The main constraining factor in improving BQN is design of new system functions (and sometimes other features, but this is rare). We need proposals that are thought-out and specific on details. Exploring and documenting use cases also helps to sift through ideas and move towards a sound design.
Building libraries for BQN users can make the language much more approachable. You are a better judge of which libraries are needed than I. Port some code from another language, implement something useful for a field you specialize in, or try something new that interests you. A library should be structured as a file (possibly loading other files) that's imported as a namespace. This isn't too well-documented now, but see the namespace documentation for hints, and bqn-libs for how I write them. Another way to help build the community is accessible introductions to the language and learning materials. People approach the language from many different directions, and having a wide selection of these makes it more likely they can find one that makes BQN click.
What about our implementation? CBQN is pretty good at what it does, I work on it because it's fun and also out of a burning need to stamp out any possibility that someone else's boolean algorithms could be faster than mine, but I'm aware that pushing further along the same axes is kind of pointless. To the extent that performance matters at all, research in new domains could be useful: things like ahead-of-time analysis and optimization, just-in-time compiling, loop fusion, multi-threading, and GPU acceleration. BQN's strict syntax should generally help with these, while dynamic typing and the desire to keep the speed of the current array algorithms will get in the way. But there's no need to work on our implementation! BQN's specification and tests are there to make sure you can write a conforming implementation, and extend it with your own ideas. You might also take advantage of the self-hosted sources by writing a virtual machine that allows you to embed BQN in the language of your choice. Finally, a hugely important resource is testing, as tests hold their value even for brand new implementations. We can always use more tests for tricky edge cases, or new systems that can cover them!