This is a tremendous opportunity for the capitalists and industrialists to dodge their obligations towards normal employees. Essentially outsource their costs, healthcare, pension, unemployment etc employee protections to the working class while additionally driving down the wages. They profit and the rest of the society (Ie the tax payers that still remain) have to shoulder the cost.
A labour union in Finland interviewed some Wolt gig workers and found that after discounting for time waited for delivery and expenses their effective take home pay was around 2.5€ per hour.
We can expect this to spread more and more from taxis and delivery service to wider spectrums.
It makes no sense for these to be the responsibility of a buyer. Let people buy and sell products and services, and let the government collect tax and provide subsidies.
I was thinking the same. Isn't it a bit of a power imbalance for your employer to look after all of those aspects of your life? It's not far from there to company towns. If you lose/quit the job, you lose health insurance and so on. Not a good bargaining position.
I think it makes sense to give some of the cost to businesses because they also create some of the cost. For example, in the US you have to pay unemployment tax based off of your business' turnover. If you hire and fire a lot of people, you cause more unemployment, so you have to pay more taxes to cover your societal cost. It makes sense.
The key point is that it's just a tax. The government should still be the one doing unemployment, although they're not, but that would be the ideal.
So maybe if you have, say, a dangerous business you pay more healthcare tax or something. That could work instead of letting companies provide health insurance.
Even serfs had their housing, old age, etc factored into the equation. We've reached the point where companies are so disconnected we are back to companies not caring if their employees can live, and a system with less protection than serfdom.
If you as a buyer of labor can't afford the cost it takes for that labor to exist, you are a zombie company and should be shut down. You can't expect to buy business inputs for less than those inputs cost as a business model. Yet because people still have to figure out how to live even when the numbers don't work, business thinks it's a reasonable model to expect from humans. It's not. And the system WILL break if business keeps this up.
>Even serfs had their housing, old age, etc factored into the equation. We've reached the point where companies are so disconnected we are back to companies not caring if their employees can live, and a system with less protection than serfdom.
Which is why it is stupid to have government policy that requires buyers to be responsible for these things. Serf-dom is a bad thing. Today, we have democracy, so the people should vote for the government, made up of the people, by the people, to provide those things.
You know we don't 'buy' people, right? You are talking about employers of people, not buyers of people. We employ people, a much different dynamic than buying goods.
If we want no protections in business relationships, no special treatment, start with the very special protection/treatment/made up rule that is the fictional corporate 'entity'.
Or do some people (company owners) deserve special government labels/treatment/protections while others (zero hour workers) don't? If you don't want these rules, let's start at the start. No more corporate entities as they are just special protections and special protections in business are bad and create mis-incentives. Government shouldn't be in the business of giving people 'special protections' when it comes to business, right?
I am talking about buyers of labor, labor which is sold by people. Employing people is buying labor, no different than me hiring someone to clean my gutters or buying an apple at a grocery store. I compare prices and quality and switch the person I use to clean my gutters and grocery store I buy my apple at when it suits me.
>Or do some people (company owners) deserve special government labels/treatment/protections while others (zero hour workers) don't?
Obviously not, but I have no idea what you are referring to in the context of this discussion. A "corporation" has always been free to stop buying something from another "corporation" anytime.
Bro, you can't be seriously putting this forward. Employing people is very different, hence a separate term, separate laws. Or do you think society just missed this whole wisdom you are sharing?
Corporations only exist because society creates a pretend entity called a corporation via laws/rules/regulations. If we want to get rid of business laws we might as well just get rid of corporations, especially if we are getting rid of policies that create an un-even relationship in business. No reason to have laws that give special protections, it just gets in the way of business.
So much of thought put forward on this site is 'ignore the hundreds of years of policy and discussion and causes that led to the creation of something I don't like, throw it all out' be it labor laws, intellectual property rights, financial policy. Meanwhile the same tech minds couldn't even deliver on the tech-optimist world promised in the early 2000s that was brand new, created form the ground up and instead delivered an enshitified tech world.
You're 100% right and people here cannot handle the truth.
Routinely, the solution to problems is "idk just burn it down lol" and these people say it without an ounce of irony.
If you remove regulations without preventing the reason we built those regulations in the first place, then you'll just get them again.
People do not do things because they're stupid or just for kicks or whatever. No, they have reasons. We have tried alternatives. Turns out they suck major donkey dick and nobody likes them. That's why we don't do them anymore.
We tried the whole no regulation things. That's literally the sole reason we have regulation. Do we not understand basic cause and effect?
Let me get this straight so basically with the chatbots everyone is now running faster than ever. Every business thinks they can get an advantage by increasing their velocity relative to their competition. But the competitive is doing the same so what is the outcome?
It feels like businesses are just going to speedrun their lifecycles faster than ever and useful idiots are doing the work of 10 people while getting paid for 1. The asset owning class obviously win as they can squeeze more profits from smaller amount of workers on the short term.
It's like everyone going to Rammstein concert where the people at the seats start standing in order to see better. This forces other to stand too, end result everyone is standing, everyone is worse off and nobody sees any better.
This is the famous trap that Joel on Software talked about in a blog post long time ago.
If you do a rewrite you essentially put everything else on halt while rewriting.
If you keep doing feature dev on the old while another "tiger team" is doing the rewrite port then these two teams are essentially in a race against each other and the port will likely never catch up. (Depending on relative velocities)
Maybe they think that they can to this LLM assisted tools in a big bang approach quickly and then continue from there without spending too much time on it.
I’ve been part of at least 2 successful rewrites. I think that Joel’s post is too often taken as gospel. Sometimes a rewrite is the best way forward.
Moving Ladybird from C++ to a safer more modern language is a real differentiator vs other browsers, and will probably pay dividends. Doing it now is better than doing it once ladybird is fully established.
One last point about rewrites: you can look at any industry disruptor as essentially a team that did a from-scratch rewrite of their competitors and won because the rewrite was better.
> I’ve been part of at least 2 successful rewrites. I think that Joel’s post is too often taken as gospel. Sometimes a rewrite is the best way forward.
HN nerd-snipe alert! OK, you got me good. Can you share some battle stories? I have also been part of rewrites in my career, but my experience is mixed. I'm not here to simple brush away your experience; I want to know more about why you think (in retrospective) it was a good idea and why it was successful.
I can recall recently, listening to an Oxide and Friends podcast where they spent 30 minutes dumping all over "Agile Dev", only to have a very senior, hands-on guy join from AWS and absolutely deliver the smack down. (Personally, I have no positive experiences with Agile Dev, but this guy really stunned the room into silence.) The best part: The Oxide crew immediately recognized the positive experence and backed off the give this guy the space he needed to tell and interesting story. (Hats off the Ox crew for doing that... even if I, personally, have zero love for Agile Dev.)
> Modern C++ pretty much solves the safety issues.
I always wonder how can one come to such a conclusion. Modern C++ has no way to enforce relationship between two objects in memory and the shared xor mutable rule, which means it can't even do the basic checks that are the foundation of Rust's safety features.
Of course, this statement is also trivially debunked by the reality of any major C++ program with complexity and attack surface of something like a browser. Modern C++ certainly didn't save Chrome from CVEs. They ban a bunch of C++ features, enforce the rule of two, and do a bunch of hardening and fuzzing on top of it and they still don't get spared from safety issues.
FWIW Chrome includes third party libraries like freetype and lots of bugs are in javascript. I imagine defensive checks in javascript will be controversial since performance of javascript is controlled by webdev, not by browser.
Note that Chrome is replacing[1] FreeType with Skrifa[2], which is a Rust-based library that can handle a lot of the things FreeType is being used for in Chrome. A lot of Chrome's dependencies are being rewritten in Rust.
This article is not really specifying if Rust is compared against "Modern C++" or "Old School C++". The only thing we can assume is that at least part of it is "Google C++".
Maybe we would see similar effects adopting Modern C++. Maybe not. The article doesn't tell us.
This is a very shallow, very boring criticism. I doubt it will resonate. Modern C++ does not solve the safety issues, it has plenty of brand new footguns like string_view. Who cares if Go is better than Rust? Feel free to write Go, no one cares.
"mut and fn very annoying to read" like okay lol who cares? What should anyone take from your post other than that you aren't that into Rust?
> Go is a better Rust. Rust is an ugly version of C++ with longer compile times and a band of zealous missionaries.
Eh. There's a lot I like about Go. I adore its compilation speed and the focus on language simplicity. But its got plenty of drawbacks too. Default nullability is a huge mistake. And result types (zig, swift, rust) are way better than go's error handling. Sum types in general are missing from Go, and once you start using them its so hard to go back. Go also doesn't have anywhere near as good interop with native code. Mixing C (or any other LLVM langauge) with rust is easy and feels great. You even get LTO across the language barrier.
The big thing I'm growing to dislike about rust is how many transitive dependencies a lot of projects end up pulling in. Its very easy to end up with projects that take a million years to compile & produce huge binaries. Not because they do a lot but simply because everything depends on everything, and the dependency tree takes a long time to bottom out. I don't know what the right answer is. It feels more like a cultural problem than a language / ecosystem problem. But I wish rust projects felt as lightweight and small as most C projects I've worked with. I'm doing some work with the stalwart email server at the moment (written in rust). Stalwart is a relatively new, well written email server. But it somehow pulls in 893 transitive dependencies! I'm not even joking. Compiling stalwart takes about 20 minutes, and the compilation process generates several gigabytes of intermediate build assets. What a mess.
20 minutes! What hardware is this on? I've worked on Rust projects with similar numbers of dependencies where the compile time (for a clean release build) was 2-4 minutes (on a MacBook M1 Pro)
UPDATE: tried compiling stalwart on my machine, and it took 14 minutes, with a really weird timing profile:
- 99% of the ~700 crates were done compiling in about a minute or 2
- RocksDB (a C++ dependency) was 2 minutes by itself
- And then it took 10 minutes (ten!) just for the final binary at the end.
That's not normal for Rust code at all. Even large ones like Servo or Rustc or Zed.
UPDATE2: turns out they have LTO enabled by default. Disabling that brings the compile time down to 7 minutes. But that's still really unexpectedly slow.
> But it’s still too many dependencies and too slow.
I definitely agree that it's too slow. I just don't think the cause is "too many dependencies" because I've compiled Rust codebases with twice as many dependencies in half the time!
It seems to produce a 94MB binary. So it may be partly that there are some very big dependencies. But the amount of compilation time that ends up in the top-level crate (even with LTO disabled) also makes me feel like this must be triggering a compiler bug. Either that or using far too many generics.
I agree it's probably monomorphization (speculation without looking at it). Generic function parameters might be the root cause, but number of dependencies is a combinatorial multiplier.
I've hit compiler bugs that behave this way. Here's one from an LLVM upgrade [1]. The test case I discovered apparently took over 20 minutes to compile, up from 26 seconds on stable! Their value tracking algorithm was accidentally quadratic.
Using interface as it was designed to be used offers first-class sum types. Although not all interface use equates to sum types.
But they're not tagged unions. I expect that is still where your confusion lies. Tagged unions and sum types are not equivalent. Tagged unions are a subset of sum types.
This may be a bit too pedantic, but I consider interface {} to be a way to do polymorphism via type classes. Interface defines an open class of types which implement some interface.
Sum types are a type definition defining something as A or B. Not “anything that quacks like a duck”. But concretely “one of this or one of that”. This enables different syntax, like the match expression to be used, in which you exhaustively list all the variants. The compiler doesn’t need to heap allocate enums because it knows the maximum size of a single value. The compiler and programmer can take advantage of the knowledge that there’s a closed set of values the type can hold. It’s not an open type class.
Result and Option are quite beautiful as sum types. But they’re horrible as type classes. Try implementing them using interface{} in Go. It’s not the same.
But can also define a closed set of types, perfectly satisfying "sum types".
> This enables different syntax, like the match expression to be used, in which you exhaustively list all the variants.
Go does not provide this out of the box, but that is not prerequisite for sum types. The mathematical theory says nothing about "the compiler must produce an error if the user doesn't match call cases". There is sufficient information provided by the sum types if you wish to add this to your build chain yourself, of course.
By that definition a void* pointer in C is a sum type. By that definition assembly has sum types.
This argument feels like the “we have sum types at home” meme. Ergonomics matter.
I write a lot of rust. Rust has traits which are similar to Go’s interfaces. But the features aren’t the same, and I use enum all the time. (I also use trait all the time, but I use trait and enum for different things).
> By that definition a void* pointer in C is a sum type.
No. That doesn't make any sense. void* is essentially equivalent to any in Go, which isn't sum types either.
You can construct sum types in C by combining structs, enums, and unions, but it is not an out of the box feature like in Go. Sum types are a first-class citizen in Go.
> Ergonomics matter.
Math doesn't care about ergonomics. You might care about ergonomics, but logically when talking about those ergonomics you'd call those ergonomics by name, not by some unrelated thing from type theory.
> You can construct sum types in C by combining structs and unions, but it is not an out of the box feature like in Go. Sum types are a first-class citizen in Go.
Maybe I'm misunderstanding what you mean. Can you give me an example? How would you write a Result type in Go? (Result is defined as either Ok(val) or Err(err))
enum result_type {
OK,
ERROR
};
union result_value {
int value;
char *error_message;
};
struct result {
enum result_type tag;
union result_value value;
};
This is not technically closed, but does offer a close enough approximation. Again, not a first-class feature, so there is no expectation if it being true sum types.
Go:
type Result interface {
isResult()
}
type OK[T any] struct {
Value T
}
func (OK[T]) isResult() {}
type Error struct {
Message string
}
func (Error) isResult() {}
This one is closed. It perfectly satisfies being sum types. It may not satisfy your opinion of what makes for good ergonomics, but if you want to talk about ergonomics let's use ergonomic words, not type theory words.
If C++ died for services under Unix and medium sized indie games (such as I2PD, or Cataclysm DDA and its forks) and these where rewritten in Go the maintenance would be far greater in these projects. A GC, a much better cross compatibility and your code for sure could probably be compiled in 10 years.
Also CDDA:Bn wouldn't damn need a > 40h long build using 1.5 GB of RAM under an n270 netbook. Ditto with Nchat, FFS, which is worse. A Golang counterpart for nchat as a TG client (and tdlib rewritten in Go) would weight far less while compiling and maybe even the binary itself, and performance wise it would be similar.
I still remember tons of C++ projects from 2005-2009 impossible to compile today but with GCC 4.3 or GCC 4.9, can't remember. Not because of the size, but because C++ incompatible changes over the years. At least tons of C code will compile it today as is modulo some POSIX changes from C code pre 1996. C++ it's something that should died long ago, among stuff like locales under Unix. UTF8 everywhere, use your own currency and the like.
Yeah, I know, game engines, and tons of physics engines and libraries even FLOSS ones such as OGRE, gdal and the like are C++ domain. Still, most of these could be ported to C.
The reality of such platform is observable in Inferno and Plan 9, that had no C++ compilers, and while Alef failed in Plan 9, Limbo came to be in Inferno.
Likewise, trying to write pure C or C++ services in iOS or Android is more pain than gain.
Two things: (1) I see that you are using a throwaway/new account. If throwaway, I have little sympathy for any downvotes that you get. If new, welcome to the community. I hope your share you personal experiences. (2) Nothing gets me more angry than telling highly skilled people it is a "problem between keyboard and chair." ("Oh, you just need to use it correctly.") As a top secret C++ fanboi for more than 25 years, I am just so tired of hearing this bullshit. As much as it hurts me to say it, Rust is better at FORCING programmers to do the right thing... instead of C++ where you CAN do the right thing. In my mind, without a very fast iteration for C++ "dialects" (see the Google project) where teams can trivially enable or disable language features (like multiple inheritance), C++ is a dying language compared to Rust.
there is a good chance Rust will start dying and will actually die by being replaced by some new hyper-overengineered lang much faster than C++ actually die.
The good news is as of now ladyboy doesn't have any competition.
Rarely if ever is anything able to compete simply by being "better". As far as USPs go it's just not enough. I reckon for ladyboy the USP (if any) is going to be it being open and NOT chrome (or derivative). So "safe" "modern" language is not going to mean much to the end users.
What's different today really is the LLMs and coding agents. The reason to never rewrite in another language is that it requires you to stop everything else for months or even years. Stopping for two weeks is a lot less likely to kill your project.
He's still right if you don't have good automated testing and you lost most of the original developers (or you don't have other seniors ceva familiar with the domain).
> then these two teams are essentially in a race against each other and the port will likely never catch up
Ladybird appears to have the discipline to have recognized this: “[Rust] is not becoming the main focus of the project. We will continue developing the engine in C++, and porting subsystems to Rust will be a sidetrack that runs for a long time.”
The context matters when we talk about Joel's article[0].
It's about Netscape. By the time, Netscape had dominated the browser market. It was the leader and that means they had all the market share to lose. You can bet Microsoft's decision makers were very closely monitoring what those at Netscape were doing.
Today, practically nobody uses Ladybird. No one even knows it[1]. It's so behind and has nothing to lose. If you really want to rewrite, it's better to do it when you have nothing to lose.
I'm nearly 30 years into my career and I feel like the tools today are so broken that if I was going to "fix" them that's all I would ever be doing.
I write a bunch of my code on Linux with Clio and for the last several years that "tool" has gotten buggier abd buggier. Sometimes there's a similar issue with breakpoints not breaking.
But I just can't be bothered anymore. If something doesn't work out of the box it doesn't work and I simply move on and find another way around the issue. Life's too short to fix other people's code too.
The users with their account issues are such a DRAG! How can a poor trillion dollar company be expected to be able to manage this situation? Worst case scenario is they'd have to gasp hire humans to resolve issues.
/s
Same thing happened to me on discord. Created new account and before first login it was already banned. Yay.
Nah this isn't right. We also have access to a ton of information even regarding arcane things such as writing x86 boot sequence in real mode or writing boot loaders. More now than ever before.
In fact today on GitHub alone you can find hobbyist OSs that are far far more advanced what Linuses little weekend turd ever was originally.
That's the essence of the corporations behind these commercial products as well. Leech off of all the work of others and then sell a product that regurgitates that said work without attribution or any back contribution.
Same story for 4 years long. "Russian economy is at the brink of a collapse." Yet it Somehow just keeps ok going year after year.
The truth is that the sanctions are only hurting the Eurozone more than Russia. Small minority (EU or the political west) cannot force meaningful sanctions on much larger group (BRICS). Unfortunately this is not the narrative anyone can say out loud lest they be labeled as "Putin's trolls" so the wishy-washy keeps on going on.
How do you think sanctions work? Economy is not powered by electricity, it took 4 years to crack down on their shadow fleet, God knows how many more escape hatches they have. China and India, and now US support them.
"China and India" this is the point exactly. BRICS is the largest economic union in the world. They don't need EU for anything therefore the sanctions are only self harming the Eurozone. This is the reality.
A Cuban fitness model engaged to a lowlife drug traffic currently in prison in Finland. She specifically traveled all the way to meet him after sexting with him on social media.
A labour union in Finland interviewed some Wolt gig workers and found that after discounting for time waited for delivery and expenses their effective take home pay was around 2.5€ per hour.
We can expect this to spread more and more from taxis and delivery service to wider spectrums.
reply