programming.dev
  • Communities
  • Create Post
  • Create Community
  • heart
    Support Lemmy
  • search
    Search
  • Login
  • Sign Up
armchair_progamerM to Programming Languages · 2 years ago

Designing a Programming Language [which happens to be good at] Advent of Code

blog.vero.site

external-link
message-square
0
link
fedilink
  • cross-posted to:
  • advent_of_code
7
external-link

Designing a Programming Language [which happens to be good at] Advent of Code

blog.vero.site

armchair_progamerM to Programming Languages · 2 years ago
message-square
0
link
fedilink
  • cross-posted to:
  • advent_of_code
Designing a Programming Language to Speedrun Advent of Code
blog.vero.site
external-link
“shouldn’t this have been published a few months ago?” yeah, probably. I even considered submitting it to the AoC contest. time is a real beast. The title is clickbait. I did not design and implement a programming language for the sole or even primary purpose of leaderboarding on Advent of Code. It just turned out that the programming language I was working on fit the task remarkably well. I can’t name just a single reason I started work on my language, Noulith, back in July 2022, but I think the biggest one was even more absurdly niche: I solve and write a lot of puzzlehunts, and I wanted a better programming language to use to search word lists for words satisfying unusual constraints, such as, “Find all ten-letter words that contain each of the letters A, B, and C exactly once and that have the ninth letter K.”1 I have a folder of ten-line scripts of this kind, mostly Python, and I thought there was surely a better way to do this. Not necessarily faster — there is obviously no way I could save time on net by optimizing this process. But, for example, I wanted to be able to easily share these programs such that others could run them. I had a positive experience in this with my slightly older golflang Paradoc, which I had compiled into a WASM blob and put online and, just once, experienced the convenience of sharing a short text processing program through a link. (Puzzle: what does this program do?) I also wanted to write and run these programs while booted into a different operating system, using a different computer, or just on my phone. As I worked on it, I kept accumulating reasons to keep going. There were other contexts where I wanted to quickly code a combinatorial brute force that was annoying to write in other languages; a glib phrasing is that I wanted access to Haskell’s list monad in a sloppier language. I also wanted an excuse to read Crafting Interpreters more thoroughly. But sometimes I think the best characterization for what developing the language “felt like” was that I had been possessed by a supernatural creature — say, the dragon from the Dragon Book. I spent every spare minute thinking about language features and next implementation steps, because I had to. The first “real program” I wrote in Noulith was to brute force constructions for The Cube, for last year’s Galactic Puzzle Hunt in early August, and it worked unexpectedly well. I wrote a for loop with a 53-clause iteratee and the interpreter executed it smoothly. Eventually I realized that the language could expand into other niches in my life where I wanted a scripting language. For example, I did a few Cryptopals challenges in them. It would take a month or two before it dawned on me that the same compulsion that drove me to create this language would drive me to do Advent of Code in it. That’s just how it has to be. This post details my thought process behind the design of this language. Some preliminary notes:
alert-triangle
You must log in or # to comment.

Programming Languages

programming_languages

Subscribe from Remote Instance

Create a post
You are not logged in. However you can subscribe from another Fediverse account, for example Lemmy or Mastodon. To do this, paste the following into the search field of your instance: [email protected]

Hello!

This is the current Lemmy equivalent of https://www.reddit.com/r/ProgrammingLanguages/.

The content and rules are the same here as they are over there. Taken directly from the /r/ProgrammingLanguages overview:

This community is dedicated to the theory, design and implementation of programming languages.

Be nice to each other. Flame wars and rants are not welcomed. Please also put some effort into your post.

This isn’t the right place to ask questions such as “What language should I use for X”, “what language should I learn”, and “what’s your favorite language”. Such questions should be posted in /c/learn_programming or /c/programming.

This is the right place for posts like the following:

  • “Check out this new language I’ve been working on!”
  • “Here’s a blog post on how I implemented static type checking into this compiler”
  • “I want to write a compiler, where do I start?”
  • “How does the Java compiler work? How does it handle forward declarations/imports/targeting multiple platforms/<other tricky feature>?”
  • “How should I test my compiler? How are other compilers and interpreters like gcc, Java, and python tested?”
  • “What are the pros/cons of <language feature>?”
  • “Compare and contrast <language feature> vs. <other feature>”
  • “Confused about the semantics of this language”
  • “Proceedings from PLDI / OOPSLA / ICFP / <other large programming conference>”

See /r/ProgrammingLanguages for specific examples

Related online communities

  • ProgLangDesign.net
  • /r/ProgrammingLanguages Discord
  • Lamdda the Ultimate
  • Language Design Stack Exchange
Visibility: Public
globe

This community can be federated to other instances and be posted/commented in by their users.

  • 1 user / day
  • 15 users / week
  • 22 users / month
  • 187 users / 6 months
  • 575 local subscribers
  • 1.45K subscribers
  • 319 Posts
  • 546 Comments
  • Modlog
  • mods:
  • armchair_progamer
  • BE: 0.19.13
  • Modlog
  • Legal
  • Instances
  • Docs
  • Code
  • join-lemmy.org