Difftastic uses the same parse tree for diffing and highlighting. This has a really nice side effect: you can spot parsing bugs from highlighting!
It's subtle, but difftastic shows parentheses/braces in bold. I noticed that < and > weren't bold, and fixed the parser :)
miniblog.
It makes sense to worry about writing code that is accidentally quadratic.
Turns out you don't need to worry about accidentally exponential code. It's painfully obvious.
There's definitely something about shipping a binary that feels more like 'real' software. I find it's easier to ship a website but there's much more historical precedent in delivering an executable.
I've been playing with https://github.com/orium/rpds as a replacement for im in difftastic, and it's a significant speedup! I saw a 30% runtime reduction in one case.
im is great but sadly seems unmaintained. I suspect its 'small vector as a vec' design doesn't suit my use case.
Multihash is a rather nifty format for hashes, where you can distinguish between e.g. a SHA1 and a Blake2b: https://multiformats.io/multihash/
It originates from the IPFS project, where they want flexibility in how they implement content-addressable storage.
I've been experimenting with grouping top-level syntax items in difftastic. It works surprisingly well so far.
Here's a CSS example (old, then new). Although the old screenshot is a smaller diff, the second diff seems much more readable overall.
I've released difftastic 0.21. A fairly small release, but some nice improvements:
* Supports Emacs -*- syntax as another hint for language detection (handy for dune files).
* Improved alignment heuristics (see screenshot)
* A bunch of Unicode fixes
I'm prototyping HTML output from difftastic, and I'm really excited about the initial results.
I can provide full syntax highlighting with HTML (in both changed and unchanged regions), and I can have multiple levels of transparency to highlight the changed syntactic elements!
Setting expectations as a freelancer offering services to modify OSS projects: https://raccoon.onyxbits.de/blog/software-development-cost/
So many computer components have a name 'FooCorp ABC456QX'. It must make life harder for both users and marketers.
My current theory is that names are chosen to be unique when googled. It's a glorified UUID.
Phabricator does a great job displaying diffs. It has subword highlighting and puts the previous section (based on indentation) in the header, shown as `namespace llvm {`.
The moved line highlighting is a really nice touch too.
(screenshots of https://reviews.llvm.org/D71126)
Suppose I want to convert a string to uppercase in a language.
(1) Google it.
(2) Read the official docs or a Stack Overflow answer.
(3) Copy-paste the function/method name to my program.
This is an absurd number of keystrokes! Do any languages aim to minimise this?
Wow, GitHub shows a table of contents on https://readme.md/ files!
I did not know this until https://github.com/casey/just added a helpful icon pointing it out.
GitHub now allows you to group your starred projects into lists: https://github.blog/changelog/2021-12-09-lists-are-now-available-as-a-public-beta/
LLVM is moving mailing lists to Discourse!
I'm a big fan of Discourse's ability to summarise threads and richer formatting options.
https://blog.llvm.org/posts/2022-01-07-moving-to-discourse/
Line alignment is a *massive* problem in syntactic diffs. Line-based diffs don't have this problem -- either lines are equal or they aren't.
In this example, it's not clear whether line 11 on the right should align with line 9 or line 10 on the left.
I'm really pleased with how well difftastic handles removal of `if` statements. Here's an example I hit today.
It's definitely harder to see which curly braces are removed in the `git diff` example. `git diff` does combine everything into a single hunk though, which is nice.
I've been consistently impressed by the Doom Emacs community. I get really high quality bug reports (sometimes patches too!) from both the users and the maintainer :)
I wish that build tools considered *current* CPU and memory utilisation.
$ make -j $NUM_CPUS
This is problematic if some jobs use a lot of memory (common in linking) or if you're using your machine for anything else.
Showing 781-800 of 7,506 posts