[HN Gopher] Ask HN: What are some of the most elegant codebases ...
___________________________________________________________________
 
Ask HN: What are some of the most elegant codebases in your
favorite language?
 
Your favorite language can be anything - Lisp, Python, C, Haskell,
etc.  Which codebases are the most elegant ones written in your
favorite language that new comers to the language can learn
something from?
 
Author : debanjan16
Score  : 155 points
Date   : 2023-06-17 14:51 UTC (8 hours ago)
 
| bb86754 wrote:
| So many, I like reading how other people write code.
| 
| R - sf package is a clean example of functional OOP
| 
| Python - pytudes (Peter Norvig's notebooks)
| 
| Haskell - Elm compiler. I could mostly understand what's going on
| even though I barely know any Haskell.
| 
| Ruby - Sequel is really nice.
| 
| Rust - Ripgrep
| 
| Pretty much any F# codebase is super readable too.
 
  | antonyt wrote:
  | Do you have any F# favorites? People often mention jet.com
  | repos, but I'm interested to hear about others.
 
    | bb86754 wrote:
    | Jet.com has a lot of good ones yeah. One I was looking
    | through the other day is a GitHub repo under
    | /ScottArbeit/Grace and it's an interesting take on version
    | control. It was a pretty cool repo to look through. To make
    | it easier though, remember that F# source code files are all
    | "in order" so you read them from top down, which Github
    | doesn't currently have functionality for.
 
      | lygaret wrote:
      | For folks coming here later, you can figure out the order
      | that you should view them in by reading into the `.fsproj`
      | file, which will lay out compile units in order.
 
  | soulbadguy wrote:
  | +1 on F#, highly under-rated language IMHO.
 
| bgia wrote:
| C++: ClickHouse. It is very readable and easy to navigate. Call
| stacks that you pick up in logs are very descriptive, and you can
| easily tell what went wrong.
 
| akkartik wrote:
| Some past threads for dang to macroexpand:
| 
| https://news.ycombinator.com/item?id=33413124
| 
| https://news.ycombinator.com/item?id=32384769
| 
| https://news.ycombinator.com/item?id=25355171
| 
| https://news.ycombinator.com/item?id=15663980
| 
| https://news.ycombinator.com/item?id=18037613
| 
| https://news.ycombinator.com/item?id=14836013
| 
| https://news.ycombinator.com/item?id=34205294
| 
| https://news.ycombinator.com/item?id=13624926
| 
| https://news.ycombinator.com/item?id=16960300
 
| agjmills wrote:
| Php and Laravel
 
  | jpb0104 wrote:
  | Really enjoyed reading through kbin as a Symfony fan.
  | https://codeberg.org/Kbin/kbin-core
 
  | vimsee wrote:
  | I`ve seen so many posts and comments about Laravel and how it
  | has made PHP a modern choice for webdev.
  | 
  | As someone who has written many small apps in PHP, I might dive
  | into it and finally see what that Laravel thing is all about.
 
    | zeroego wrote:
    | I'm currently using Laravel at work. It's very opinionated,
    | and some folks say it uses anti-patterns with regards to its
    | use of facades. That being said my last job was C#/.Net and I
    | am so much more productive with Laravel. It really allows you
    | to develop quickly and I haven't yet bitten by any of the
    | "anti-patterns". If you give it a shot I'd recommend just
    | using Laravel Sail as, if you already have docker installed,
    | you can have a full dev environment setup in less than 10
    | minutes.
 
      | nicoburns wrote:
      | > It's very opinionated
      | 
      | It is and it isn't. It does opinionated ways of doing
      | things. But IMO what makes it so great is just how easy it
      | is to opt out of the opinions you don't like. Facades are
      | an excellent example of this: don't want to use them? Well,
      | you don't have to (and IMO a really big app that may be a
      | good choice - in a small app it likely won't matter and you
      | might as well use them).
 
      | frodowtf wrote:
      | To me, "anti-pattern" has the same bogus meaning as "clean
      | code"
 
        | malux85 wrote:
        | Although at a high level many of things things are
        | subjective, this take is almost entirely wrong in every
        | dimension.
        | 
        | Anti-patterns are things like using a wrong data
        | structure, using the wrong levels of abstractions,
        | tightly coupling components so they are not composable,
        | leaky interfaces, god objects doing too much
        | 
        | The strict definitions of many of these can be subjective
        | at the edges, but they all objectively exist and cause
        | fragility, instability, inflexibility and maintenance
        | problems in the systems built from them.
        | 
        | Clean code is code that's easy to read, has the right
        | level of abstractions, uses the right data structures and
        | has the minimal possible anti-patterns in them (ideally
        | zero!) above.
        | 
        | Calling these things bogus is unfair, I grant they can be
        | subjective in some places but they are prevalent in
        | poorly designed systems especially by junior engineers.
        | 
        | Wikipedia page on anti-patterns:
        | https://en.m.wikipedia.org/wiki/Category:Anti-patterns
        | 
        | There are project management anti patterns too
        | https://en.m.wikipedia.org/wiki/Anti-pattern
        | 
        | Anti patterns are real. Clean code is real. If you cannot
        | see that, I would suggest reading a lot more codebases
        | from open source projects (pick medium and large
        | codebases, not trivial programs) and after 10 or so you
        | will see obvious structural and quality differences, as
        | well as hundreds of anti patterns and examples of clean
        | code.
 
        | frodowtf wrote:
        | > Anti-patterns are things like using a wrong data
        | structure
        | 
        | What is a "wrong data structure"? Is it wrong to do
        | linear scans when hash access would be sufficient?
        | 
        | > ... using the wrong levels of abstractions
        | 
        | When is the abstraction level wrong? I can name you at
        | least 10 projects that avoid so called anti-patterns by
        | introducing unecessary abstractions. Is something really
        | an anti-pattern if it's "solution" massively reduces your
        | development velocity but now everything is nicely
        | composable?
        | 
        | In my opinion, anti-patterns are either obvious
        | (constantly using different names for the same thing) or
        | totally subjective to the context (when to repeat
        | yourself).
        | 
        | But maybe I'm not able to put myself into the shoes of
        | novices and a lot of things seem obvious to me. Granted.
 
        | coryrc wrote:
        | > What is a "wrong data structure"?
        | 
        | I've seen people use multiple named arrays, search for
        | something in the first array, then use its index to find
        | matching data in the other arrays, instead of a
        | dictionary of string:tuple.
        | 
        | Another example is languages with arrays and vectors,
        | usually one or the other is preferred. In Go you can use
        | arrays but you're supposed to use slices whenever
        | possible, while the opposite would be appropriate in,
        | say, C.
 
        | zeroego wrote:
        | This is a solid argument, thanks for taking the time to
        | write this out!
 
        | nrdvana wrote:
        | I'll agree with everything here except the clean code.
        | Clean code is about optimizing human perception and there
        | can't be a standard for that because humans think in a
        | wide variety of ways and it's further impacted by the
        | level of understanding the human already has on the
        | subject matter the code is dealing with. One person's
        | "clean code" can be another person's nightmare.
        | 
        | I'll back this up with the example of Magento 1. It's a
        | PHP e-commerce platform that has (at first glance) some
        | of the cleanest code you'll ever see in PHP. It looked
        | like the entire development team had come from a Java
        | background. Every component was neatly divided into a PHP
        | object with documented private and public methods. There
        | was a clean MVC separation, with lots of shared behavior
        | abstracted into "Helpers", and a Theme system handling
        | the rendering of the front-end. I have no doubt that the
        | authors of Magento prided themselves on how clean their
        | code was. For them, having spent full-time careers
        | structuring all the many features of their platform into
        | these files, it probably did feel like a clean
        | organization. And when I initially reviewed the code to
        | evaluate using Magento, I also thought it was clean and
        | was part of my choice to use it.
        | 
        | The problem was that when you take something as complex
        | as a full-featured e-commerce system and modularize it so
        | thoroughly, you end up with a literal 7000 classes, and
        | it becomes impossible to figure out the sequence of
        | execution of a single page request through that massive
        | tangle. Is it "clean code" if I have to add debugging
        | print statements to 57 source files to figure out the
        | path of execution that renders a single page?
        | 
        | If I had to choose a circle of hell where I would edit
        | Cyrus IMAP (the worst C code ever) for the rest of
        | eternity, or edit Magento for the rest of eternity, I
        | think I would actually choose Cyrus.
 
        | zeroego wrote:
        | That's an interesting take! I'm still early in my career
        | and I ask with genuine curiosity, but why do you think
        | "clean code" has a bogus meaning?
 
        | rjh29 wrote:
        | I suggest you read malux85's comment:
        | https://news.ycombinator.com/item?id=36371733
 
        | spion wrote:
        | Not the OP, but clean code misses the point. Its is very
        | subjective and depends on one person's previous
        | experience and patterns they've been exposed to.
        | 
        | "Reasonably readable" is what I strive for nowadays, and
        | a key aspect is that I no longer think there is an
        | objective measure for it. It depends on the team/company
        | you're in, and its important to keep in mind that the
        | goal is to effectively communicate the program to them.
 
        | [deleted]
 
  | Contortion wrote:
  | Also Carbon. It makes working with dates and times (something
  | which is by it's very nature a PITA) actually enjoyable and
  | easily readable.
  | 
  | I also really appreciate FakerPHP for how easy it is to
  | generate realistic fake values.
 
| freedomben wrote:
| For C, I've really enjoyed reading the Ruby source code. There
| are good and bad spots, but overall especially if you know Ruby
| the language, the source is both entertaining and enlightening.
 
| zh3 wrote:
| RT-11 on the PDP-11 (all in PDP-11 assembler). Back in the early
| 80's you could rebuild it in several different ways, depending on
| whether you wanted it "single job" (as it was back then) or not.
| 
| As an example, here's the PDP-11 assembler to convert a binary
| number to decimal ASCII (no idea who wrote it, but they certainly
| made every word count):-                 CNV10:  MOV     R0,-(SP)
| ;Subroutine to convert Binary # in R0       1$:     CLR     R0
| ;to Decimal ASCII by repetitive               INC     R0
| ;subtraction. The remainder for each       2$:     SUB
| #10.,@SP     ;radix is made into ASCII and pushed
| BGE     1$           ;on the stack, then the routine calls
| ADD     #72,@SP      ;itself. The code at 2$ pops the ASCII
| DEC     R0           ;digits off the stack and into the out-
| BEQ     2$           ;put buffer, eventually returning to
| CALL    CNV10        ;the calling program. This is a VERY
| MOVB    (SP)+,(R1)+  ;useful routine, is short and is
| RETURN               ;memory efficient.
| 
| Courtesy bitsavers.org
| (http://www.bitsavers.org/pdf/dec/pdp11/rt11/v5.6_Aug91/AA-PD...)
 
| diego_moita wrote:
| C -> Lua, Sqlite
 
| neonsunset wrote:
| [C#] Bitwarden server repository is probably one of the cleanest
| (non-novel) solution architectures I have seen so far. I always
| point people to it as learning material for structuring the code.
| It is not the most minimalistic but I feel like it strikes very
| good balance and does not follow blindly all the """fancy""" OOP
| patterns people should never use anyway.
| 
| https://github.com/bitwarden/server
| 
| Otherwise, I can see why people are burned, average Java/C#
| codebases look abysmal and written without understanding of (not)
| using heaps of mediator/factory/adapter/provider classes.
 
| valenterry wrote:
| fs2 (reactive streaming, https://github.com/typelevel/fs2)
| written in Scala. It shows how nicely things can compose in a
| typesafe way if the language supports it.
| 
| And then, the opposite is Monix (https://monix.io/) also written
| in Scala. It's also about reactive streaming and the API is
| great, but the internal code is ugly because it sacrifices
| readability/composability for performance.
 
| Waterluvian wrote:
| Back when I was starting out, it was nice that Backbone had such
| clean, well-commented code:
| https://github.com/jashkenas/backbone/blob/master/backbone.j...
 
  | rudasn wrote:
  | Indeed! jQuery as well, before the breakup into modules.
 
  | jcpst wrote:
  | I really liked reading the source for underscore as well.
 
| w10-1 wrote:
| I'd nominate Java itself.
| 
| In the decades Java sources have been available, any of the
| kazillion junior programmers could debug-step into java.* and see
| exactly what's happening -- progressive disclosure at its finest
| for building expertise.
| 
| Most other languages have a hard boundary, so the roots of
| language are a matter of conceptual documentation and experience.
| Java also offers that fly-over knowledge, but when problems
| arise, programmers love knowing exactly and seeing directly.
| 
| Personally, in a pinch I prefer the actual to the elegant.
 
  | ldjkfkdsjnv wrote:
  | After a decade of programming 50+ hours a week in many
  | languages (typescript, javascript, python, scala, java, lua,
  | bash, c++, etc), I have come to the conclusion that Java is
  | simply the best. The tooling, libraries, stability, verbose
  | rigidity. It forces a style of programming that simply scales
  | to more engineers better
 
    | lockhouse wrote:
    | As an end user though, I honestly can't think of any Java
    | software I actually enjoy using. Minecraft? That's literally
    | the only thing that comes to mind.
 
      | foobarbecue wrote:
      | Have you tried Jetbrains stuff?
 
        | lockhouse wrote:
        | I have. Maybe I don't have enough RAM for it, but I find
        | their IDEs to be slow and laggy.
        | 
        | Xcode and Visual Studio Code feel so much snappier on the
        | same machine.
 
    | 29athrowaway wrote:
    | https://github.com/EnterpriseQualityCoding/FizzBuzzEnterpris.
    | ..
    | 
    | On a more serious note, most Java code on Github is now
    | written by Copilot.
 
    | winrid wrote:
    | Have you tried C#? It looks a lot nicer to work with than
    | Java.
 
      | watermelon59 wrote:
      | The ecosystem is nowhere near as mature though. I don't
      | work with either anymore but back in 2017 I made the switch
      | from C# to Java and it felt like a breath of fresh air when
      | it came to the maturity and capability of JVM tooling
      | compared to what's available for .NET.
 
        | ablob wrote:
        | I'm curious, what kind of tooling are we talking about?
 
        | winrid wrote:
        | Interesting. Did you try Jetbrains Rider as an IDE?
 
    | AtlasBarfed wrote:
    | In javaland, the actual ideal is somewhere in the feature set
    | supported by Groovy. CompileStatic groovy is probably the
    | best, you get a lot of good features for no performance hit.
 
    | [deleted]
 
  | stickfigure wrote:
  | While I think there's a lot to love about Java, I think the
  | standard library itself is not an especially great role model.
  | Most of it was written a long time ago and has a fairly
  | antiquated style - lots of mutable state, nullability, and
  | checked exceptions. Not that the library isn't an incredible
  | asset - it's luxuriously rich compared to working in Node.js -
  | but if it were written from scratch today, I suspect it would
  | look fairly different. Eg, the collection classes would use
  | Optional and have separate read/write interfaces.
  | 
  | For an example of "modern Java" I would point at something like
  | this (which I wrote, sorry about the hubris):
  | 
  | https://github.com/stickfigure/hattery
 
  | diarrhea wrote:
  | Yes. I have been burned by this in C#, it's very frustrating.
 
    | acedTrex wrote:
    | you can step directly into System.* source as well...
 
| danap wrote:
| What else my own, Java, coding for over 50 years. If YOU can't
| figure out what your own code is doing after ten years of not
| looking at it then nobody else can either. Hint, Comment your
| thoughts as much as possible, to make things clear when there not
| to you.
| 
| Format just like a book. Use full text variables, methods, class
| names. Don't start a project until you define your formatting.
| Stick to it! Do this and your documentation will be easy.
| 
| "https://github.com/csanyipal/ajqvue/blob/master/src/com/dand..."
 
  | freedomben wrote:
  | This is pretty good! I'd be happy to work with you :-)
  | 
  | There are undoubtedly some pointless comments, but there are
  | some good ones too, and the code is understandable. I think the
  | sibling comments are being overly harsh and are zeroing in on
  | single examples and missing the forest for the trees.
  | 
  | I suspect recommending your _own_ code as an example of the
  | most elegant codebase is triggering to others, so there 's
  | probably a negative initial reaction and probably a lot of
  | people clicking your link so they can point out why you're
  | wrong
 
  | [deleted]
 
  | rjh29 wrote:
  | Anyone suggesting their -own- code as an example of the "most
  | elegant codebase" is dubious. Practice some humility.
 
    | travisjungroth wrote:
    | I'd be a little forgiving if it was almost an art piece.
    | Like, they spent a year making the most elegant JSON
    | serializer possible.
 
  | dasil003 wrote:
  | Good structure overall and appreciate the summary at the top.
  | For the inline comments more "why" and less "what" would give
  | higher signal-to-noise as a large percentage of that content is
  | adding nothing that basic Java syntax and variable names don't
  | already tell you.
 
  | irl_chad wrote:
  | A great example of how NOT to write Java. You say absolutely
  | nothing with a whole lot of extra words.
  | 
  | For example: //================================================
  | ============== // Ajqvue Constructor //========================
  | ======================================                  public
  | Ajqvue()
  | 
  | The constructor definition is already clear, I don't need a big
  | header telling me what a constructor is.
  | 
  | Instead, use comments generously where needed - for example, if
  | you have a piece of business logic, a comment explaining the
  | intent behind it can help the maintainer (likely you) a year
  | down the road. What I mean by this, is that what your code DOES
  | should be self evident - but documenting the business decision
  | behind the implementation has done wonders for me.
 
  | Blahah wrote:
  | The getWebsite method comment says it returns the version.
  | That's an example of how not to comment - totally pointless and
  | misleading if it diverges from the code. The code is nice and
  | clear without the comments.
 
| wewxjfq wrote:
| At the beginning of the year I was rewriting a SPA and looking
| for ideas on how to structure a web app. One project I looked at
| was Github Desktop and I think it has very clean code for an app.
| 
| https://github.com/desktop/desktop
 
  | Solvency wrote:
  | Now if only GitHub desktops actual UI/UX wasn't a poorly
  | thought out mess of anti-patterns and anti-design.
 
    | tdba wrote:
    | I use it daily and it works great. It doesn't do all that
    | much, but what it does do saves me a bunch of time. I reach
    | for the git CLI when something goes wrong, but that's not
    | often.
 
    | rjh29 wrote:
    | What's wrong with it?
 
  | mredigonda wrote:
  | Thanks for recommending this, I just browsed some files online
  | and it's looking indeed amazing.
  | 
  | P.S. It's now easy to check a repo file by replace .com with
  | .dev: https://github.dev/desktop/desktop
 
    | batperson wrote:
    | You can also just click the . (period) key when viewing any
    | repo.
 
| NicoJuicy wrote:
| My own ( c# ). It's not opensource yet, monetizing it first.
| 
| Full DDD, it was a refactor during COVID-19 for my ecommerce.
| 
| It powers https://belgianbrewed.com
| 
| Copy paste from: https://news.ycombinator.com/item?id=35257225
| 
| > But I believe the project is much cleaner and frankly better to
| understand than all other projects i've encountered for this
| size. I'm using DDD, so DDD knowledge is a requirement to
| navigate this in a breeze :) :
| 
| - https://snipboard.io/D03VWg.jpg - General overview of the
| architecture. Small fyi: Connectors => Autogenerated nugets to
| call the api's
| 
| - https://snipboard.io/9M24hB.jpg - Sample of Modules +
| Presentation layer
| 
| - https://snipboard.io/ybp6EH.jpg - Example of Specifications
| related to catalog ( = products )
| 
| - https://snipboard.io/lE9vcK.jpg - How specifications are
| translated to the infrastructure ( here I'm using EF, so I'm
| using Expressions a lot), but plain old SQL is also supported. A
| query is basically a list of AND/OR Specifications where a
| hierarchy is possible. This would translate to "(QUERY 1 ) AND
| ((QUERY 2) AND (QUERY 3))" in the Infrastructure layer.
| 
| - https://snipboard.io/7rVBpk.jpg - . In general, i have 2 List
| methods ( one for Paged queries and one not for Paged queries)
| 
| Additional fyi: Is V2, so has some legacy code. Uses my own STS.
| Has 2 gateways ( the ShopGateway that is used to develop new
| sites and the BackendGateway for the Backend). Enduser frontend
| is in MVC for SEO purpose, Customer backend is in Angular ( SPA).
| The basket is a NoSql implementation on top of SQL server.
| 
| The enduser frontend supports a hierarchy of themes ( so it's
| insanely flexible to create variations of pages for other
| clients).
| 
| There are more projects involved outside of this solution, eg.
| nuget repo's usable accross solutions (JWT, Specifications, ...)
| and "plugins" for a standalone project that is installed for end-
| users for syncing local data. So it's +101 projects :)
| 
| Edit: my specification implementation has been open-sourced here:
| https://github.com/NicoJuicy/Specification-Pattern-CSharp
| 
| Someone was curious to see it.
 
  | pizzapill wrote:
  | Look at that subtle off-white coloring. The tasteful thickness
  | of it. Oh, my God. It even has a watermark.
  | 
  | Now lets see Paul Allen's screenshots of the directory
  | structure of his codebase.
 
    | NicoJuicy wrote:
    | American psycho, lol.
    | 
    | Ok, i get it.
    | 
    | Just a shame that while i gave a pretty clear technical
    | description on the "why i think so".
    | 
    | Nobody of the downvoters actually cared to give a actual
    | technical counter argument or even did a test with a
    | technical question... Instead just a reply with a partial
    | movie script...
    | 
    | Ugh.
 
  | mometsi wrote:
  | "I just finished reading the greatest script I've ever read in
  | my life."
  | 
  | - "Oh, really? Who wrote it?"
  | 
  | "I did."
 
    | jeremycarter wrote:
    | "What's the name of it?"
    | 
    | ..."Lessons in humility"
 
| hn_throwaway_99 wrote:
| Back when I first was learning about GraphQL in 2016, I remember
| thinking the reference implementation in JavaScript was extremely
| clear, easy to read, and well organized. It had a "wow, I wish
| all the code I read was this good" feel to it for me.
 
| fastneutron wrote:
| Shewchuk's Triangle code for Delaunay mesh generation is some of
| the most elegant C-code I've ever seen [1]. It even won the SIAM
| Wilkinson Prize for numerical software at the time it was
| written. It's written in a literate style, and builds up from the
| most fundamental arithmetic operations and data structures, all
| the way to one of the most efficient mesh generators of its kind.
| He has a few other codebases written in a similar style [2, 3].
| It's very different from what you see in the wild, but it's been
| great for understanding what's happening under the hood for
| complex algorithms like mesh generation.
| 
| 1. https://www.cs.cmu.edu/~quake/triangle.html
| 
| 2. https://github.com/ctlee/Stellar
| 
| 3. https://www.cs.cmu.edu/~quake/robust.html
 
| waterpowder wrote:
| gorilla.bas
 
  | justsomehnguy wrote:
  | CONST TRUE = -1                  CONST FALSE = NOT TRUE
  | 
  | https://web.archive.org/web/19990202113028/http://hem.passag...
 
| dadarecit wrote:
| Envoy proxy for C++
 
  | fcantournet wrote:
  | That's quite an indictment of C++. I concur but still.
 
| seneca wrote:
| I don't know if elegant is the word, but I often refer to the
| Hashicorp repos for Go, and specifically admire Mitchell's own.
| Very clean, well written code most of the time.
 
| szundi wrote:
| Swing in Java obviously
 
| personjerry wrote:
| Not sure if it's still the case but about 6 years ago Facebook's
| folly C++ library was something I'd point to for my junior
| engineers to get a sense of "good" C++
| https://github.com/facebook/folly
 
| crop_rotation wrote:
| Guava -> In Java
| 
| Golang Stdlib -> Golang
| 
| redis -> C
| 
| anything by armin ronacher -> Python
 
| mepian wrote:
| For Lisp I would recommend Edi Weitz's CL-PPCRE:
| https://edicl.github.io/cl-ppcre/
| 
| Pretty much anything else from Edi Weitz is also great.
| 
| Mezzano is quite elegant in my opinion, especially for an
| operating system. For example, this is the USB mass storage
| driver:
| https://github.com/froggey/Mezzano/blob/master/drivers/usb/m...
 
  | avindroth wrote:
  | CL-PPCRE is great
 
| culi wrote:
| mentioned in this thread:
| 
| C
| 
| * Lua https://www.lua.org/source/
| 
| * Redis https://github.com/redis/redis (mentioned twice)
| 
| * Ruby https://github.com/ruby/ruby
| 
| * SQLite https://sqlite.org/src/dir?ci=trunk
| 
| C++
| 
| * Botan https://github.com/randombit/botan
| 
| * ClickHouse https://github.com/ClickHouse/ClickHouse
| 
| Go
| 
| * Go's standard library https://cs.opensource.google/go/go
| 
| * HashiCorp repos, particular those by Mitchell
| https://github.com/hashicorp
| 
| F#
| 
| * jet.com repos https://github.com/jet?language=f%23
| 
| Haskell
| 
| * Elm compiler https://github.com/elm/compiler
| 
| Lisp
| 
| * CL-PPCRE https://github.com/edicl/cl-ppcre/
| 
| * Mezzano USB driver
| https://github.com/froggey/Mezzano/blob/master/drivers/usb/m...
| 
| PHP
| 
| * Carbon https://github.com/briannesbitt/Carbon
| 
| * Laravel https://github.com/laravel/laravel
| 
| Python
| 
| * pytudes (notebooks) https://github.com/norvig/pytudes
| 
| R
| 
| * sf (ex of functional OOP) https://github.com/r-spatial/sf
| 
| Ruby
| 
| * Sequel https://github.com/jeremyevans/sequel/
| 
| * Sidekiq https://github.com/sidekiq/sidekiq
| 
| Rust
| 
| * ripgrep https://github.com/BurntSushi/ripgrep
| 
| Scala
| 
| * fs2 (ex of good type safety) https://github.com/typelevel/fs2
| 
| * monix (ex of ugly code with great performance)
| https://github.com/monix/monix
| 
| TypeScript
| 
| * GitHub Desktop (ex of SPA) https://github.com/desktop/desktop
| 
| ---
| 
| thanks to: cejast, bb86754, wewxjfq, antonyt, bit, diego_moita,
| agjmills, freedomben, Contortion, valenterry, DethNinja,
| mberning, seneca
 
| mberning wrote:
| Ruby - Sidekiq
 
| mo_42 wrote:
| C++ isn't my favorite programming language anymore.
| 
| I guess the Doom 3 source code is an elegant codebase.
| Surprisingly, they used C++ features quite sparsely.
| 
| I think that's nice because in programming it's about getting the
| job done and not about using all sorts of features for other
| reasons.
 
| blt wrote:
| Redis is a popular answer for C, and I agree.
 
  | petercooper wrote:
  | I was going to say this too. C is more my "consistently
  | appreciated" language than ever my favorite of the moment, but
  | the Redis codebase is a fantastic example of it that's very
  | easy to digest.
 
| cejast wrote:
| Go and it's standard library. 'Elegant' is pretty subjective, but
| it's a treasure trove of learning how things work under the hood.
| I've learned loads about networking, compression, encryption and
| more by browsing through it, because the code is super easy to
| read and understand.
 
  | earthling8118 wrote:
  | What makes it easy to read and understand though? I am
  | seriously having a hard time figuring this out. People tout Go
  | for this all the time, but I don't know of a single codebase in
  | it that I think fits that description. When I look through them
  | they look convoluted and just sort of messed up. Things like
  | awkward error handling, dealing with null, capitalization for
  | public/private, magic functions, and imports, and much, much
  | more all add up and make me abhor the language. I don't think
  | it's good or easy to use at all, but people rave about it.
 
    | quaintdev wrote:
    | I love Go. I think it depends on what trajectory you followed
    | to reach to Go or any other language. For me it was
    | 
    | BASIC -> VB -> Java -> Python for some time -> Go
    | 
    | How you feel about Go is how I feel about JavaScript
 
      | BrandoElFollito wrote:
      | I went Pascal, C, Perl, Python, Go
      | 
      | And I like Typescript to some point.
      | 
      | I do not think they languages are mutually exclusive (on
      | the like scale). But I am just an amateur hobbyist dev.
 
      | asylteltine wrote:
      | [dead]
 
    | asylteltine wrote:
    | [dead]
 
    | gravypod wrote:
    | (Opinions are my own)
    | 
    | At my employer we use a subset of C++ and we use Go. We have
    | a process by which when you write code others have to review
    | it and you need to have a review by someone who is an
    | "expert" [0] in the language [1]. You become an "expert" by
    | being ordained by a shadowy committee who reviews code you
    | submit to the code repository. They look for knowledge of the
    | core language, how this language is used within the company,
    | the external and internal libraries, performance, testing,
    | etc. There are many factors and if you demonstrate all of
    | them you get marked as being this type of "expert."
    | 
    | Before I joined this company I had written code which was
    | launched into production in the following languages: Java,
    | PHP, C, C++, assembly (arm + x86), Python, JavaScript
    | (browser + node), and a few more. I would consider myself
    | about average in all of these. I did not write any golang.
    | 
    | After I joined my current job I obtained this "expert" bit
    | for both C++ and Go. It took ~1.5 years to get the C++. It
    | took ~3-5 months for Go.
    | 
    | You can actually see the first golang code I wrote (this was
    | at home when I was experimenting with the language before
    | convincing some team members we should rewrite some of our
    | infra in go): https://github.com/gravypod/gitfs
    | 
    | It has all sorts of mistakes but I didn't read any guides. I
    | just used https://cs.opensource.google to search for examples
    | of things that I thought I would need to do (ex: "how do I do
    | a switch statement").
    | 
    | For C++ I had worked on ~2 projects that used it. My first
    | few PRs were very rough and I had a lot of performance issues
    | that crept into my code. If I didn't already have a lot of C
    | experience I would have also had a bunch of pointer/lifetime
    | stuff the reviewers would have found (I know this from
    | reviewing new team members first lines of C or C++).
    | 
    | I know that to some C++ represents a literal worst case but
    | most people coming from C++ to Go will think it's amazing
    | because it removes all of the common footguns.
    | 
    | > Things like awkward error handling
    | 
    | Yes, it is very clunky and annoying but it's very simple.
    | It's just a normal if statement and doesn't use any special
    | language rules. I think this would still be better if there
    | was dedicated syntax for it (something like throw/try/catch
    | which works the same way but gives it a different syntax) but
    | honestly I don't think it's as bad as it's made out to be.
    | It's basically a "less bad" errno and that worked go-...
    | dece-... ehm fine for many years.
    | 
    | > dealing with null
    | 
    | I've never really had to think about this too much. There are
    | some times it is important but I rarely return nullable
    | things without errors and it hasn't bitten me yet. My code is
    | not provably correct but for the things I'm working on I
    | don't need that guarantee. If I did I'd probably switch to
    | Rust or something with better type safety.
    | 
    | > capitalization for public/private
    | 
    | Yea, this sucks but it doesn't really get in my way much. I
    | don't like it but it isn't actively hurting my usage.
    | 
    | > magic functions
    | 
    | Like `String()`? I don't know if that's the worst think in
    | the world. Python, C++, and Java have things like this.
    | 
    | > and imports
    | 
    | It's not been too bad for me. What I think is unfortunate is
    | that the package of something is unconnected to where it is
    | in most go usages which is annoying but it makes things more
    | terse. This does actually hamper my productivity.
    | 
    | > I don't think it's good or easy to use at all, but people
    | rave about it.
    | 
    | It's pretty easy to use because all of the libraries I've
    | seen share common interfaces for behavior. This makes things
    | feel a lot more cohesive. fuse-go and billy was very easy to
    | use in gitfs because of this.
    | 
    | [0] - This is not an expert as in "knows everything" but more
    | like "has been seen to consistently write efficient, simple
    | to understand, idiomatic code." It basically means that when
    | someone else from this subset of SWEs reviews your code they
    | often do not have many comments. Again, I want to stress,
    | this is not expert as in "knows everything" just as in "good
    | enough".
    | 
    | [1] - https://abseil.io/resources/swe-
    | book/html/ch03.html#what_is_...
 
    | cpach wrote:
    | Is there any programming language that is universally seen as
    | objectively good?
 
      | blowski wrote:
      | No, because the different trade-offs they make all have
      | costs and benefits. For example, C's precise memory
      | management can give better performance compared to PHP, but
      | also requires more expensive programmers to work with it.
      | If all you're doing is a simple CRUD system, C's power
      | would be counter-productive, so PHP is a "better" language
      | in that context.
      | 
      | So a "good" language depends on what you're trying to do
      | with it.
 
    | abatilo wrote:
    | Speaking for myself, the language itself is simple. There
    | aren't a lot of features, which means you do have to write
    | more and it's more verbose, but learning the entirety of the
    | language's features is very easy to do.
    | 
    | Even with the relative magic of things like init functions
    | that execute on import, there's so much less magic that you
    | have to consider.
    | 
    | IMO it's the easiest to jump into for this reason. Yes, the
    | code itself might be excessive, but reading Go is as simple
    | as can be.
 
    | michaelcampbell wrote:
    | > People tout Go for this all the time
    | 
    | What gets me about go is 2 things.
    | 
    | Its touted as being so easy that a junior dev can pick it up
    | easily; it's targeted towards average developers. Fine, this
    | is a virtue; when Java said the same thing, it's a horrifying
    | blight.
    | 
    | The other is that people seem to mistake motion for action.
    | "The code flies from my fingers" is one way I've heard it
    | said. And, sure, you have the same error catching boilerplate
    | (which again, in go is a virtue but other languages seems to
    | be considered a sin) 1000x, as if the clicky-clicky of the
    | keyboard is some measure of productivity.
    | 
    | It's got a big "blub paradox" thing going, to my eyes. I
    | don't find it elegant at all, or maybe I mean not very
    | expressive.
    | 
    | Taken ad absurdum, I have a language that only adds 1 to a
    | variable. I can understand that language in milliseconds. But
    | I can't do much with it. Maybe go hits a good balance, I
    | dunno, but I found it quite tedious.
 
    | teeray wrote:
    | It's the complete lack of magic. What you see in front of you
    | is pretty much exactly what happens. You don't have to keep a
    | cathedral of language semantic subtleties in your head when
    | reading someone else's code.
 
      | rochak wrote:
      | Pointer vs value receivers and named returns have so many
      | gotchas that it is not even funny. Lack of magic my ass.
 
        | asylteltine wrote:
        | [dead]
 
      | kaba0 wrote:
      | Then why don't we go back to assembly? There is even less
      | magic there, every line is trivial to understand, isn't it?
 
| SirensOfTitan wrote:
| Anyone have any good clojure examples?
 
  | janetacarr wrote:
  | I try not to toot my own horn, but I wrote this little quadtree
  | library that tickles that elegance part of my brain. I try very
  | hard to write elegant code. I have other Clojure repos, but
  | they suck. :P
  | 
  | https://github.com/janetacarr/quadtree-cljc
 
  | lemming wrote:
  | Anything by James Reeves aka weavejester
  | (https://github.com/weavejester).
 
  | doubleg wrote:
  | Metabase's toucan (https://github.com/metabase/toucan) has some
  | elegantly annotated source code:
  | https://rawgit.com/metabase/toucan/master/docs/uberdoc.html
 
| rkagerer wrote:
| Open Hardware Monitor (OHM), in C#
 
| phkahler wrote:
| C++ this file covers all the math for working with NURBS curves
| and surfaces:
| 
| https://github.com/solvespace/solvespace/blob/master/src/srf...
| 
| There is a lot more in other files - triangulation, booleans,
| creation - but the core math functions are there in very readable
| form.
 
| nrdvana wrote:
| C++
| 
| An old one, but the FTGL library (renders truetype fonts in old-
| school OpenGL in half a dozen different ways: texture-per-letter,
| texture-per-word, 2D polygons, 3D polygons, etc) is the best
| example of C++ inheritance I've ever run across. The code
| formatting isn't my favorite, and comments are sparse, but the
| hierarchy of objects subclassed for all the different rendering
| modes is just about perfect.
| https://sourceforge.net/p/ftgl/code/HEAD/tree/trunk/
| 
| Perl
| 
| The Mojolicious / Mojo toolkit. Great minimalist API and great
| documentation and clean code all around.
| https://metacpan.org/release/SRI/Mojolicious-9.33/view/lib/M...
 
| arrjayh wrote:
| I nominate SDL2 and DPDK. Spent a lot of time combing through
| these code bases, found them to be excellent.
 
| karmakaze wrote:
| What I find to be elegant in a codebase is where the chosen
| abstractions or seams that separate subdomains/concerns is well
| chosen that each is handled mostly in one place without a lot of
| ceremony or machinery. I would call these 'well factored' for
| factors which are domain-specific.
| 
| Each language has different ways that may lend itself as part of
| this shaping, but I like being able to think of this as something
| to look for when reading and strive for when writing,
| irrespective of the language at-hand.
 
| jpe90 wrote:
| I've really enjoyed reading (and playing with) kons-9's codebase
| in Common Lisp. It lets you do exploratory 3D modeling via the
| program's GUI or the repl. The source is very neatly structured
| and readable. I don't see many CL projects that do 3D rendering,
| so it's nice to see!
| 
| Quick demo:
| 
| https://www.youtube.com/watch?v=i0CwhEDAXB0
| 
| Repo:
| 
| https://github.com/kaveh808/kons-9
 
| DethNinja wrote:
| C++ - Botan
| 
| C - Redis
 
| jnordwick wrote:
| arthur whitney's famous first J interpreter.
| 
| https://www.jsoftware.com/ioj/iojATW.htm
| 
| The first version of KDB the timeseries database was written by
| arthur in C to bootstrap the K interpreter that was used to write
| KDB. It was 26 files, named a.c to z.c, none larger than a single
| page of C written with notepad.exe.
 
| ttkciar wrote:
| Working with Perl, two things spoiled me for other languages:
| JSON and DBI/DBD.
| 
| In Perl, everything serializes to JSON without fuss. It can be
| "lossy"; objects without an explicit JSON serialization method
| and coderefs can't be deserialized, but serializations at least
| have placeholders for them.
| 
| Compare to Python's json module, which doesn't try very hard to
| serialize things and throws exceptions every time it runs across
| something new. It's very frustrating to use.
| 
| Perl's DBI provides a universal API for all databases, with
| implementation-specific details in an underlying DBD module
| (which both provides glue between the DBI abstraction and
| programmer access to features specific to different database
| systems).
| 
| Compare to Python, where you need to import a different module
| and use a different API for every different kind of database. As
| I increasingly use Python for a living, I frequently wish they'd
| follow Perl's example with this.
 
  | mike_hock wrote:
  | > In Perl, everything serializes to JSON without fuss. It can
  | be "lossy"; objects without an explicit JSON serialization
  | method and coderefs can't be deserialized, but serializations
  | at least have placeholders for them.
  | 
  | > Compare to Python's json module, which doesn't try very hard
  | to serialize things and throws exceptions every time it runs
  | across something new. It's very frustrating to use.
  | 
  | Sounds kinda backwards to me. I thought the fact that throwing
  | exceptions (or "making a fuss," if you will) is better than
  | silently producing incorrect (or "kinda lossy," if you will)
  | results wasn't controversial anymore in 2023.
 
  | 2h wrote:
  | > universal API for all databases
  | 
  | Go has this too, very handy:
  | 
  | https://godocs.io/database/sql
 
  | freedomben wrote:
  | You might really like Ruby! It's part descended from Perl and
  | maintains a lot of the nice things about perl such as json, and
  | the amazing string functions.
 
    | ttkciar wrote:
    | I tried very hard to like Ruby. "On paper" it looks great,
    | but I had a lot of trouble getting used to the syntax.
    | 
    | I ended up going deep on the D programming language for my
    | "new language". As a statically typed language it's not as
    | expressive as the Python/Ruby/Perl contingent, but it's a lot
    | more expressive than most static languages, and its C-like
    | syntax "clicked" with me in a way Ruby never did.
    | 
    | It also can approach C-like run-time performance and memory
    | footprint at times, which I appreciate. As much as I like
    | developing in Python and Perl, I frequently wish they had
    | better run-time performance and a smaller memory footprint. D
    | gives me that, at the cost of a little expressiveness.
 
  | 7thaccount wrote:
  | Funny enough, but I've come across some really nice Perl code
  | in the wild at work. I was used to the vendor providing some 40
  | class Java monstrosity to do something that should take like a
  | page of code, so I was pleasantly pleased to find a contractor
  | who provides an extremely well commented page of code to do
  | something simple, yet critical to operations. The way Perl
  | calls the OS to do something and glue everything together was
  | pretty elegant.
 
  | knightcrusader wrote:
  | The only thing about the JSON package though, when things go
  | wrong, it is very unhelpful about where it goes wrong.
  | 
  | I usually end up always wrapping the json_decode in an eval to
  | catch the error and handle it in an easier to understand
  | fashion.
  | 
  | But I agree though, its nice how json and perl data objects
  | pretty much map to each other. It's great.
 
  | dragonwriter wrote:
  | > Compare to Python, where you need to import a different
  | module and use a different API for every different kind of
  | database.
  | 
  | You... don't. Python has a unified DB api (DBAPI 2.0) which
  | drivers usually support. They often _also_ provide a lower-
  | level API specific to the DB.
 
  | culi wrote:
  | Ruby, being a Perl-inspired language, has `.to_json` built in.
  | You can do
  | 
  | ```rb                  # hashes        { foo: 'bar' }.to_json
  | # numbers        28.to_json             # anything really
  | ['hello', 42, { lorem: "ipsum" }].to_json
  | 
  | ```
 
    | viralpraxis wrote:
    | That's simply not true. This method is monkeypatched by json
    | gem
 
      | quesera wrote:
      | JSON was added to Ruby stdlib in ruby-2.0.0 (2013), and has
      | been a default gem since ruby-2.3.0 (2015).
      | 
      | This is pretty close to "built in", I think.
 
        | michaelcampbell wrote:
        | You're both right, I think.
 
  | xkcd-sucks wrote:
  | Omg the python stdlib json / simplejson both refuse to support
  | custom serializers for keys only, as an explicit design
  | decision. It is justified as "JSON keys must be strings", but
  | JSON values can only be string/float/book/null so it seems a
  | bit arbitrary. Leads to annoying gymnastics if you want to
  | enforce "strong typing" of keys with Enum/pydantic/etc.
 
| [deleted]
 
___________________________________________________________________
(page generated 2023-06-17 23:01 UTC)