What's Unique About Bold?
Our top three goals are to have a good debugging experience, to be bug free (we won't wait a year to fix a bug) and to be fast which affects the experience more than people realize. Not all of the below have been implemented but everything in the speed section has.
Debugger:
- You can watch variables based on function. This will unclutter the watch window.
- Group breakpoints so you can toggle them all on and off, across multiple files.
- Create a custom prettier without tieing it to a specific debugger. A prettier changes how a type is displayed. ex: Change a Rect struct from `x:123\n y: ... height:1080` to `123, 456 1920x1080`
- Run scripts to do various debug actions, such as set variable value, enable/disable breakpoints, print values into the REPL or put variables into the watch window
- Create views which is a watch window populated with variables in a specific order formatted in a specific way
- Create 'Layouts'. You choose what is visible and where they go in your window. As an example, you may create a parse layout where the left side shows only variables related to parsing (a 'parse' view), and the source file you're parsing. You can switch between different layouts with a few keystrokes.
Speed:
- Takes <7ms to render a 4K display (144hz).
- Input (letters and a paste) will show up no longer than the next frame *1
- In the debugger, if you press next rapidly you can see the variables change every time. This depends on the debugger, gdb generally can keep up but DAP may not.
- No strange delay when building or launching the debugger.
- Efficient CPU. Bold doesn't spawn multiple threads to achieve the above *2. The main thread does the rendering and there is one background thread that handles LSPs and other tasks. Sometimes LSPs send large amounts of JSON (semantic tokens can be larger than the source file), so that's done outside of the main thread so it doesn't block input or rendering.
*1: For small text. The OS by itself may take many milliseconds if you're copying large text.
*2: Graphic APIs/drivers seem to spawn threads, that's out of our control.
General:
- Customize UI by binding actions/scripts to buttons, and outputs/results to labels
- Customize UI via settings. Usually, these are superficial (like timeouts) or controlled by scripting. You'll be able to style or disable UI you find distracting.
- A different approach to scripting. Scripts can be plain text files, or can be an executable that interacts with the IDE through stdio or a socket. This allows people to write the logic in whatever language they want.
- Extended language support. One example is when you write the name of a function, the signature will show up. Bold understands LSPs enough that you can dump the parameter or all the parameters type information into a comment or a note-taking window. This allows you to create the variables outside of the function more easily and makes it easier to look up documentation.