HN user

williamcotton

3,537 karma
Posts44
Comments2,279
View on HN
williamcotton.com 5d ago

The Discoverable Evidence of AI-Assisted Software Porting

williamcotton
1pts0
williamcotton.com 23d ago

The Discoverable Evidence of AI-Assisted Software Porting

williamcotton
1pts0
williamcotton.com 26d ago

The Discoverable Evidence of AI-Assisted Software Porting

williamcotton
1pts0
www.williamcotton.com 1mo ago

How a new DSL may survive in the era of LLMs

williamcotton
54pts19
news.ycombinator.com 1mo ago

Show HN: Algraf, block-scoped, algebraic grammar-of-graphics DSL

williamcotton
2pts0
williamcotton.github.io 1mo ago

Datafarm: Two Bespoke Languages, Two Runtimes

williamcotton
2pts0
github.com 3mo ago

Show HN: Grammar of Graphics CLI tool made in Rust

williamcotton
1pts0
usaherald.com 4mo ago

Course Hero to Pay $75M to Post University in Copyright Metadata Case

williamcotton
1pts0
williamcotton.com 6mo ago

The Evolution of a DSL

williamcotton
1pts0
github.com 6mo ago

The Web Pipe Programming Language

williamcotton
2pts1
github.com 6mo ago

Show HN: Grammar of Graphics CLI tool made in Rust

williamcotton
4pts0
williamcotton.com 6mo ago

Show HN: GraphQL DataLoader Pattern in Custom DSL

williamcotton
2pts0
github.com 1y ago

Show HN: SQL-powered search query parser with React UI

williamcotton
5pts1
forum.cursor.com 1y ago

Cursor - Claude 3.7 Max

williamcotton
2pts0
github.com 1y ago

Show HN: Search input query parser and React component

williamcotton
3pts0
github.com 1y ago

Show HN: WebDSL – A fast C-based DSL for building web apps with SQL, Lua and jq

williamcotton
1pts0
help.openai.com 1y ago

ChatGPT Desktop App, Work with Apps on macOS

williamcotton
1pts0
williamcotton.com 1y ago

A Burrito Is a Monad

williamcotton
52pts69
github.com 1y ago

Show HN: Guish – A GUI for constructing and executing Unix pipelines

williamcotton
13pts4
williamcotton.com 2y ago

A Burrito Is a Monad

williamcotton
3pts3
github.com 3y ago

How ReAct Prompting Works in Detail

williamcotton
1pts0
www.williamcotton.com 3y ago

Writing Web Applications with LLMs

williamcotton
2pts0
www.williamcotton.com 3y ago

ChatGPT and the Analytic-Synthetic Distinction

williamcotton
1pts0
www.williamcotton.com 3y ago

Authentically Human in a World of ChatGPT

williamcotton
2pts0
williamcotton.com 3y ago

Authentically Human

williamcotton
1pts0
news.ycombinator.com 3y ago

Ask HN: Meta employees, did you get a free VR headset?

williamcotton
2pts1
www.savingcountrymusic.com 10y ago

The Best Way to Buy Music and Support You Favorite Artists

williamcotton
1pts0
www.forbes.com 10y ago

Regulations Are Killing the Songwriting Stars

williamcotton
2pts0
www.savingcountrymusic.com 10y ago

Instagram’s Change to an Algorithmic Timeline Could Adversely Affect Music

williamcotton
1pts0
blockai.com 10y ago

From Web 2.0 to Web 2016: The Need for Public Platforms for Digital Ownership

williamcotton
46pts21

I agree. What is missing from the discussion about DSLs are the importance of tooling such as linters, LSPs, etc, to give the LLMs further context.

For example, charts/plots are often stringly typed with regards to column names and a DSL specific to plotting could give immediate feedback to an LLM.

https://williamcotton.github.io/datafarm-studio/

https://williamcotton.github.io/algraf

https://williamcotton.github.io/pdl

https://github.com/williamcotton/algraf

https://github.com/williamcotton/pdl

Check out the /docs dir in the repos for each plan file and the language specs.

They are my 4th and 5th DSLs and I learned quite a bit along the way, most importantly how to separate a WASM runtime wired up to a Monaco editor “lsp” with the same crate for editor-services that works with the actual system binary LSP.

Plotnine 29 days ago

A big part of the motivation was that something like this...

  $ which ggplot
  ggplot () {
          if [[ "$1" == "-f" ]]
          then
                  shift
                  rush run --library tidyverse "$(cat "$1")" -
          else
                  rush run --library tidyverse "$@" -
          fi
  }

  $ echo "one,two,three\n1,2,3\n4,5,6\n,7,8,9" | ggplot 'ggplot(df, aes(one, two)) + geom_col() + theme_minimal()' | imgcat
...is just very slow. Booting R just to run ggplot2 was not cutting it compared to a custom DSL written in Rust!

BTW, that "R on the command line" tool was inspired by:

https://datascienceatthecommandline.com

Plotnine 29 days ago

I really like to build things that build other things!

Plotnine 30 days ago

I've always liked the ggplot2 and the Grammar of Graphics approach to plotting so much so that I wrote my own DSL based on it - it is standalone, written in Rust, has WASM bindings (as you can see on the website) and more:

https://williamcotton.github.io/algraf

It pairs well with a related data translation DSL:

https://williamcotton.github.io/pdl

And you can see the two working together here:

https://williamcotton.github.io/datafarm-studio

There's LSPs for both, LSP clients for VS Code, and even language diagnostics for standalone Monaco editors in the browser.

Of note is that the same language diagnostics are exposed via the WASM as via the LSP interface allowing for the same friendly red squiggles to look and work the same in both your browser with Monaco and your editor with the LSP!

In the last few weeks I've been working on a couple of custom data transformation and chart visualization DSLs that pair well together, as you can see here:

https://williamcotton.github.io/datafarm-studio/

One of the DSLs is:

https://williamcotton.github.io/pdl/

The other is:

https://williamcotton.github.io/algraf/

Full LSP that is built into the binaries and compile to CLI and WASM. Full LSP support in the Monaco text editor npm packages that use the same static analysis crate as the VS Code LSP client.

Native GIS with GeoJSON and Shapefile support for both languages.

So really, if you want to do something you'd normally use a DSL for, you should be talking to your AI, and telling the AI to encode it into computer-speak. Binary files, libraries, programs, composeable piped applications. The AI can take what you think and turn it into a regular old computer program, just as easy as you would write a DSL. But you don't need a DSL to do this; the AI can already program.

I use LLMs to write DSLs that I write all the time! What else is an LLM doing when it is stringing together a bash pipeline than coordinating a number of DSLs? jq is what, 15 years old? I see LLMs using it all the time. Who knows, maybe there are a few more tools that have yet to be made that will further bridge the expressivity gap between human language and computers.

Well what if you take on an extremely ambitious project like writing a programming language complete with DAP step debugging, a full LSP, etc, etc?

That takes a lot of quality time to just figure out the right syntax and semantics, let alone having to figure out how all of these complex pieces fit together!

I Don't Vibe Code 2 months ago

However, the process was far more important than the product (again!). Not every whimsy needs to become a reality.

I mean, I get it, there's different kinds of people out there with different motivations, goals, spare time, etc.

But there's also a process of product design that I think the author is overlooking.

Lately I've been working and iterating on a number of DSLs, projects that might be a total waste of my time because they end up being poorly conceived or not very useful compared to a general purpose language!

I'm also working on a video game that is basically Magic: The Gathering meets StarCraft with Civilization style hex-grid conflict. It could be a total bust and entirely no fun to play (it's hard to tell if it's fun by itself because I enjoy working on the game while testing out the play patterns). It would suck to spend a couple of years on this if it's no good.

I very much enjoy the process of trying to figure out the best syntax and semantics for a new DSL or the process of iterating on gameplay elements when working on a game. The destination is also less important. I don't really expect anyone to use my DSLs or play my video games. I'm ultimately doing it for my own enjoyment.

Saying this, I am interested in the overall architecture and I've definitely learned from my mistakes, especially with creating DSLs. Like, having a TypeScript language server with a Rust runtime has some issues. It's kind of better to build the language server into the runtime so you're not maintaining multiple parsers, and depending on the language features, an additional pseudo-runtime in the language server.

I agree 100%. Boring old software skills are part of what it took to "write" this DSL, complete with a fully featured LSP:

https://github.com/williamcotton/webpipe

https://github.com/williamcotton/webpipe-lsp

(lots of animated GIFs to show off the LSP and debugger!)

While I barely typed any of this myself I sure as heck read most of the generated code. But not all of it!

Of course you have to consider my blog to be "in production":

https://github.com/williamcotton/williamcotton.com/blob/main...

The reason I'm mentioning this project is because the article questions where all the AI apps are. Take a look at the git history of these projects and question if this would have been possible to accomplish in such a relatively short timeframe! Or maybe it's totally doable? I'm not sure. I knew nothing about quite a bit of the subsystems, eg, the Debug Adapter Protocol, before their implementation.

Lines of code are meaningful when taken in aggregate and useless as a metric for an individual’s contributions.

COCOMO, which considers lines of code, is generally accepted as being accurate (enough) at estimating the value of a software system, at least as far as how courts (in the US) are concerned.

https://en.wikipedia.org/wiki/COCOMO