frontpage.
newsnewestaskshowjobs

Made with ♥ by @iamnishanth

Open Source @Github

fp.

What rare disease AI teaches us about longitudinal health

https://myaether.live/blog/what-rare-disease-ai-teaches-us-about-longitudinal-health
1•takmak007•2m ago•0 comments

The Brand Savior Complex and the New Age of Self Censorship

https://thesocialjuice.substack.com/p/the-brand-savior-complex-and-the
1•jaskaransainiz•3m ago•0 comments

Show HN: A Prompting Framework for Non-Vibe-Coders

https://github.com/No3371/projex
1•3371•4m ago•0 comments

Kilroy is a local-first "software factory" CLI

https://github.com/danshapiro/kilroy
1•ukuina•14m ago•0 comments

Mathscapes – Jan 2026 [pdf]

https://momath.org/wp-content/uploads/2026/02/1.-Mathscapes-January-2026-with-Solution.pdf
1•vismit2000•16m ago•0 comments

80386 Barrel Shifter

https://nand2mario.github.io/posts/2026/80386_barrel_shifter/
2•jamesbowman•17m ago•0 comments

Training Foundation Models Directly on Human Brain Data

https://arxiv.org/abs/2601.12053
1•helloplanets•17m ago•0 comments

Web Speech API on HN Threads

https://toulas.ch/projects/hn-readaloud/
1•etoulas•20m ago•0 comments

ArtisanForge: Learn Laravel through a gamified RPG adventure – 100% free

https://artisanforge.online/
1•grazulex•20m ago•1 comments

Your phone edits all your photos with AI – is it changing your view of reality?

https://www.bbc.com/future/article/20260203-the-ai-that-quietly-edits-all-of-your-photos
1•breve•21m ago•0 comments

DStack, a small Bash tool for managing Docker Compose projects

https://github.com/KyanJeuring/dstack
1•kppjeuring•22m ago•1 comments

Hop – Fast SSH connection manager with TUI dashboard

https://github.com/danmartuszewski/hop
1•danmartuszewski•23m ago•1 comments

Turning books to courses using AI

https://www.book2course.org/
2•syukursyakir•24m ago•0 comments

Top #1 AI Video Agent: Free All in One AI Video and Image Agent by Vidzoo AI

https://vidzoo.ai
1•Evan233•24m ago•1 comments

Ask HN: How would you design an LLM-unfriendly language?

1•sph•26m ago•0 comments

Show HN: MuxPod – A mobile tmux client for monitoring AI agents on the go

https://github.com/moezakura/mux-pod
1•moezakura•27m ago•0 comments

March for Billionaires

https://marchforbillionaires.org/
1•gscott•27m ago•0 comments

Turn Claude Code/OpenClaw into Your Local Lovart – AI Design MCP Server

https://github.com/jau123/MeiGen-Art
1•jaujaujau•28m ago•0 comments

An Nginx Engineer Took over AI's Benchmark Tool

https://github.com/hongzhidao/jsbench/tree/main/docs
1•zhidao9•30m ago•0 comments

Use fn-keys as fn-keys for chosen apps in OS X

https://www.balanci.ng/tools/karabiner-function-key-generator.html
1•thelollies•30m ago•1 comments

Sir/SIEN: A communication protocol for production outages

https://getsimul.com/blog/communicate-outage-to-ceo
1•pingananth•31m ago•1 comments

Show HN: OpenCode for Meetings

https://getscripta.app
2•whitemyrat•32m ago•1 comments

The chaos in the US is affecting open source software and its developers

https://www.osnews.com/story/144348/the-chaos-in-the-us-is-affecting-open-source-software-and-its...
1•pjmlp•34m ago•0 comments

The world heard JD Vance being booed at the Olympics. Except for viewers in USA

https://www.theguardian.com/sport/2026/feb/07/jd-vance-boos-winter-olympics
66•treetalker•35m ago•14 comments

The original vi is a product of its time (and its time has passed)

https://utcc.utoronto.ca/~cks/space/blog/unix/ViIsAProductOfItsTime
1•ingve•43m ago•0 comments

Circumstantial Complexity, LLMs and Large Scale Architecture

https://www.datagubbe.se/aiarch/
1•ingve•50m ago•0 comments

Tech Bro Saga: big tech critique essay series

1•dikobraz•53m ago•0 comments

Show HN: A calculus course with an AI tutor watching the lectures with you

https://calculus.academa.ai/
1•apoogdk•56m ago•0 comments

Show HN: 83K lines of C++ – cryptocurrency written from scratch, not a fork

https://github.com/Kristian5013/flow-protocol
1•kristianXXI•1h ago•0 comments

Show HN: SAA – A minimal shell-as-chat agent using only Bash

https://github.com/moravy-mochi/saa
1•mrvmochi•1h ago•0 comments
Open in hackernews

Shrinking While Linking

https://www.tweag.io/blog/2025-11-27-shrinking-static-libs/
49•ingve•2mo ago

Comments

kragen•2mo ago
These are extremely practical tips on using binutils to shrink your libraries. It might also be worthwhile to compile the library without per-function sections in the first place, which hopefully can be done without patching rustc. On many platforms this produces significantly smaller code in GCC.
jneem•2mo ago
I had a quick look and couldn't find a way to turn off per-function sections in rustc. But I think it's a pretty good default for rust, because the unit of compilation is pretty large and so it's common to have a lot of unused functions. It's really only a problem for distributing static libraries, since binaries and shared libraries already lose their per-function sections.
kragen•2mo ago
I would rather say it's really only potentially beneficial for distributing static libraries, since binaries and shared libraries already lose their per-function sections. So they pay the cost of the fluffier code without getting much benefit, if any.
lionkor•2mo ago
> Back in the day, your compiler or assembler would turn each source file into an “object” file containing the compiled code.

Lots and lots of code is still C and C++. That's not really "back in the day".

dcminter•2mo ago
I'd be very surprised if the C/C++ code being written today was comparable in volume to the collective pile of JavaScript, Java, C#, Go, Python, and PHP.

Contrast to the heyday of C and C++ when not much else got a look in (Pascal perhaps? Perl probably...)

I think it's fair.

kragen•2mo ago
Yes, surely much more code is being written in other languages than in C, but probably more C is being written now than ever before, too.
dcminter•2mo ago
Sure, but I think that "back in the day your compiler would ..." is a reasonable characterisation.

Back in the day, yes, your compiler almost certainly would do that. Now, your compiler might possibly do that. For most working stiffs it won't though.

Ok, my side of the shed's painted now :D

kragen•2mo ago
I agree.
happyweasel•2mo ago
hmm how can I reuse this useful Go library in python... Oh I can't.. hmm and how can I reuse this useful java library in php ? Oh I can't. Oh and which of the programming languages you mentioned can and do use C libraries? All of them.

Reminds me of that coworker who thought that OpenCV was basically written in python.

dcminter•2mo ago
I'm not claiming that there is no C or C++ out there. But it's such a nit pick when for most developers, no, their day-to-day work absolutely does not involve the creation of object files.

Sure, akshuwally, there are still C and C++ devs out there. Meanwhile a friend has just embarked upon a career as a pro COBOL developer. What of it?

Edit: Also, in the spirit of akshewally, I have just googled up this monster! My word, PHP and Java AND XML... it's like the unholy trinity of HackerNewsbane... https://php-java-bridge.sourceforge.net/pjb/

actionfromafar•2mo ago
Looks genuinely useful. Bookmarking.
zigzag312•2mo ago
NativeAOT compiled C# library can create C compatible exports which can be used with any language that supports C libraries.
lionkor•2mo ago
C++ is still wildly popular and will remain so for the foreseeable future. Your JavaScript interpreter/JIT compiler is written in it, so is your Java JVM, and I don't need to mention CPython in more detail.

Those all get compiled into object files and then linked.

dcminter•2mo ago
But not by most devs. Back in the day it was true for most devs.
Joker_vD•2mo ago
> A static library is nothing but a bundle of object files, wrapped in an ancient and never-quite-standardized archive format.

To this day I'm astonished that it's not just tar. Or pax. Or even cpio! Or literally any file format that has any other use.

xyzzy_plugh•2mo ago
tar/pax are kind of terrible formats. They are hard to implement correctly. I'm glad they are not used more often.

cpio is pretty reasonable though.

zip is actually pretty great and I've been growing increasingly fond of it over the years.

Joker_vD•2mo ago
The thing is, there is always tar(1) even in the most basic of distributions. And everyone uses tar.gz's or .bz2's or whatever for distributing all kinds of things, so tar is pretty ubiquitous. But the moment you want to do some C development, or any binutils-related, nope, install and use ar(1) which is used for literally one single purpose and nothing else. Because reasons.
hyperman1•2mo ago
Im not sure how ar does it, but tar has no centralised directory. The only way to get file 100 is to walk trough the 99 files before. This kills random access speed.
Joker_vD•2mo ago
Ar puts a file called "/" as the first file of the archive. Inside, there is a number N, then a list of N file offsets, and then a list of N null-terminated strings. It's a symbol table of sorts: each null-terminated string is a symbol name, and the corresponding file offset points at the archive header for the object file that contains the symbol. The filenames themselves are not recorded centrally since it's not really needed.
kragen•2mo ago
At the time, ar existed and tar didn't. Tar came later.
Joker_vD•2mo ago
At the time, a.out existed and COFF and ELF didn't. The switch from STABS to DWARF has also never happened, right?
yjftsjthsd-h•2mo ago
> tar/pax are kind of terrible formats. They are hard to implement correctly. I'm glad they are not used more often.

I'll grant you "kind of terrible", but what's hard to correctly implement about tar? It's just a bunch of files concatenated together with a tiny chunk of metadata stuck on the front of each.

electroly•2mo ago
Having never done it myself, I don't know, but I do know that the "microtar" library I picked up off GitHub is buggy when expanding GNU Tar archives but perfect when expanding its own archives. Correctly creating one valid archive is a lot easier than reliably extracting all valid archives. The code appeared competent, I assume tar just has a bunch of historical baggage that you can get wrong or fail to implement.
sureglymop•2mo ago
Wasn't there first 'ar' as a general purpose archiver and later 'tar', "tape archiver"?

Why do you find it surprising that the archive format from that time was used to archive a bunch of files?

I wasn't alive but I'm pretty sure ar wasn't only used for this purpose in unix.

Joker_vD•2mo ago
Because e.g. a.out didn't survive and was replaced? Several times, even?
sureglymop•2mo ago
That is a good point. Although I can only guess, it intuitively makes sense to me why the executable format would more quickly evolve than the archive format which "just works" still.
electroly•2mo ago
> Why do you find it surprising that the archive format from that time was used to archive a bunch of files?

It's surprising because we still use it today, not because it was used at the time.

1718627440•2mo ago
Why would we break backwards compatibility, when it works just fine?
electroly•2mo ago
This response answers too much--why did we invent and adopt tar for all other use cases, then? Why do we not still use ar for its original general archiving purpose in any other situation but this one? Obviously there is some reason! I'm curious what that reason is. You can make regular archives with ar today but we don't--"it still works" wasn't good enough reason for any other archive use case. What are the general archiving requirements that don't exist for object archives that meant ar is still fine for this one use case?
1718627440•2mo ago
Because we care about metadata and robustness for data files, but don't for some automatically generated artifacts that are consumed by the next program anyways? What do you need your static archives to have, that ar doesn't provide?
nextaccountic•2mo ago
The real problem are generics. They cause a blowup in size because they are instantiated at every type combination that is actually called. This can sometimes be a performance boost (typically not because it avoids an indirect call, but because it enables optimizations such as inlining). But it can also makes code slower (not by much), or have little effect on performance

Rust lets you choose between generics and trait objects, but this is a viral change that sometimes means that large sections of code must be rewritten. There is also an optimization that turns generics into virtual dispatch if deemed beneficial, but I'm not sure how well it works

compiler-guy•2mo ago
"If you compiled your code with support for link-time optimization (LTO), it contains another copy (in the form of LLVM bitcode — more on that later) of all our code and the code of all our dependencies."

The author then goes and removes the lto-related code via objcopy. Which is fine, and great, and useful if you care about size more than having link-time optimization enabled for your end users.

But if you are just going to turn around and remove it, you probably shouldn't include it in the first place, which makes the original analysis of 132MB vs 15MB a little misleading. It should be more like 50MB vs 15.