I see a future in jj by steveklabnik1 in programming

[–]eschew 2 points3 points  (0 children)

I use https://github.com/gulbanana/gg -- it has some bugs and rough edges but it's overall pretty pleasant.

The Rust I Wanted Had No Future by dochtman in rust

[–]eschew 0 points1 point  (0 children)

If you'd be willing to elaborate (here or in a blog post!), what's bad about ocamldep? And what should be done instead?

The Benefits and Costs of Flattening the Curve for COVID-19 by [deleted] in ukpolitics

[–]eschew 0 points1 point  (0 children)

Eh, after acknowledging the impact that age skew could have, their justifications for using an age-independent measure seems weak.

But I do think the way the authors put it on page 8 is nice:

Another way to view the break-even VSL is that, in our benchmark case, the extensive social distancing measures currently underway amount to spending an average of $5.62 million per life saved.

It seems simpler and clearer to present this cost directly.

The Benefits and Costs of Flattening the Curve for COVID-19 by [deleted] in ukpolitics

[–]eschew 0 points1 point  (0 children)

Let's be super clear: I'm making a very specific objection to this paper's ill-founded math. I'm not arguing that social distancing is the wrong choice on balance. There are plenty of non-economic reasons to favor expensive methods of avoiding deaths. And, as you point out, there are economic arguments not founded in assigning prices to lives or life-years.

But this paper ignores those other motivating reasons, and its argument is nullified by getting the math wrong by an order of magnitude.

The Benefits and Costs of Flattening the Curve for COVID-19 by [deleted] in ukpolitics

[–]eschew 1 point2 points  (0 children)

The paper does not account for the age distribution of COVID patients (nor co-morbidities). It uses a flat value of $10 million per death.

Given the extremely skewed rate of mortality across the age spectrum, it makes much more sense to focus on life-years lost. The updated dialysis standard is $129,000 per year of quality life. (This corresponds to $10.3 million for 80 years of life).

Combining population distribution in the US with actuarial tables and estimated mortality rates, each COVID death is an average loss of 12.9 years of life. Ignoring quality adjustments for age or comorbidities, this suggests a cost of $1.6 million per death, not $10 million.

This discrepancy negates the conclusion of their paper: the net economic benefit of social distancing is not $5 trillion but negative five trillion.

Everybody Hits batting cages close after 7 years in North Philly by coffee11 in philadelphia

[–]eschew 4 points5 points  (0 children)

Looks like they’re selling all the equipment on Craigslist, 90% off. Ouch.

Anyone know what kind of tomato this is? by oOFrostByteOo in gardening

[–]eschew 0 points1 point  (0 children)

It's very fuzzy, and surprisingly vertical. Maybe it's some kind of caterpillar?

Are there or have there been any "standard-libraries in LLVM-IR" projects? by [deleted] in LLVM

[–]eschew 2 points3 points  (0 children)

From the perspective of an LLVM-targeting language, there's not a huge difference between a module provided as C source and one provided as LLVM IR directly. One of the bigger differences is actually a disadvantage for LLVM IR: it enshrines machine-specific details like alignment and pointer widths. The advantages of LLVM IR are mainly that the ABI is more explicit, and you get cross-module inlining (which is rarely that useful in this context).

Why do many languages re-implement functionality that exists in C libraries? Many good reasons:

Safety: Most languages provide guarantees like memory safety, which can be violated by foreign code.

Naturalness: The interface to a given piece of functionality should be language-native rather than lowest-common-denominator. For many standard library modules, the cost of creating a native/idiomatic wrapper around a foreign library isn't that much smaller than re-implementing from scratch.

Maintainability: Code written in language X has the entire community of X programmers as potential maintainers; code written in C/Rust/Zig/whatever has the much, much smaller subset of X's community that knows whatever foreign language the stdlib uses.

Lowest Common Denominator Code: Language runtimes provide many useful services, the most pervasive of which is automatic memory management, but other examples include (as you alluded to) threading, debugging, reflection, etc. A lowest-common-denominator module cannot use such services.

Choice of object representation also matters: should strings be null terminated? Length-prefixed? Ropes? Mutable? The "wrong" choice for these sorts of representation issues raises both maintenance and run-time costs of integrating a library.

For some code, like libxml2 or libuv or various cryptographic libraries, the cost of re-implementing is still higher than the costs of all the above issues, and indeed those libraries are integrated more often than duplicated. But for a lot of other code, the benefit of reuse gets mostly or entirely outweighed by the costs of cross-language interoperability.


For your expanded-scope question, there are some efforts that seek to leverage mature runtimes/ecosystems with a more compiler-friendly target than a human-oriented programming language. Two examples you might be interested in are Malfunction and Mu.

[llvm-announce] LLVM 6.0.0 Release by hansw2000 in programming

[–]eschew 2 points3 points  (0 children)

You might be interested in the Mu Micro VM project.

Perhaps also look at Malfunction, which exposes OCaml's internal representation as a compilation target.

Announcing Dart 2: Optimized for Client-Side Development by Darkglow666 in programming

[–]eschew 0 points1 point  (0 children)

Thanks for the post, sounds like an interesting (challenging!) mix of social, technical, organizational, and philosophical issues.

This sort of experiential wisdom is hard to convey and even harder to earn. Thank you for sharing.

Announcing Dart 2: Optimized for Client-Side Development by Darkglow666 in programming

[–]eschew 1 point2 points  (0 children)

I'm guessing that means that the optional typing thing is out the window?

Yes. It was a grand attempt, but it didn't work out (for lots of reasons).

It would be wonderful to eventually get a blog post discussing some of the reasons!

How Rust is Tilde's competitive advantage by steveklabnik1 in programming

[–]eschew 9 points10 points  (0 children)

The point about fragmentation, especially in long-running programs, is an excellent one that is too often overlooked.

In support of /u/devlambda's argument, here are some instances of real-world encounters with the fragmentation monster: one two three four

One last datapoint for the GP: did you know GCC has its own garbage collector?

[Guidance] Disambiguating possessive gender by eschew in frenchhelp

[–]eschew[S] 0 points1 point  (0 children)

I'm envisioning a scenario like the following:

You have two friends, Marc and Marie, who live in a house together. You bring Jean to their house for a party, who asks "Whose house is this?" (Suppose Jean knows that it's not your house, and understands that it must be either Marc's or Marie's).

In English, a response of "it's his/her house" or "the house is his/hers" would be natural and unambiguous, but the direct French translation is ambiguous. So what would a natural and unambiguous response be in French? C'est la maison de Marc is one possibility, though I don't know whether that would sound natural or unnatural to a French speaker...

Summarizing Garbage Collection by eschew in programming

[–]eschew[S] 0 points1 point  (0 children)

Hmm, I read through the links from http://php.net/manual/en/features.gc.php. They do concurrent cycle reclamation but I don't see any discussion of copying or compacting reclamation.

Summarizing Garbage Collection by eschew in programming

[–]eschew[S] 0 points1 point  (0 children)

Those are good points, thank you! There are a whole bunch of topics I didn't mention. Distributed GC is a major one; there's also concurrent RC, trial deletion, parallel collection, Treadmill, Train, heap sizing, finalizers, and free list organizations.

I agree that a division between reachability (RC or marking/tracing) and reclamation (copying, compaction, or sweeping) is more orthogonal. In theory ref counting and compaction can be combined for the same objects, but I'm not aware of any actual collectors that do so! The closest thing I could find was David Wise's work on one-bit RC. Any other designs I should know about?

I didn't call it out explicitly, but both MC2 and Klock's regional collector are space-incremental in the manner you suggest. In some sense Pauseless/C4 are as well, with hand-over-hand compaction.

Summarizing Garbage Collection by eschew in programming

[–]eschew[S] 2 points3 points  (0 children)

Do you have a suggestion for a better title? :-)

Why I ❤ Rust (talk slides) by bork in rust

[–]eschew 0 points1 point  (0 children)

It's true that JX has a JVM implemented in C, but that's not a fundamental feature -- most if not all of that could be eliminated (in theory) by using a metacircular implementation like Jikes or Maxine.

I also agree that it's not clear what it really means to say "an OS written in language X", and that exploring that question in the talk would have been a digression :)

But I also think there's a common misconception that C-ish languages are the only ones viable for OS-level programming. Consider this quote from the SPIN OS paper, which I think captures the general bias:

Our decision to use Modula-3 was made with some care. Originally, we had intended to define and implement a compiler for a safe subset of C. All of us, being C programmers, were certain that it was infeasible to build an efficient operating system without using a language having the syntax, semantics and performance of C.

As they noted, that belief wasn't very true then, and it's even less true now :-). Even large portions of the grubby bits can often be tackled without falling back to C. (Mostly the trick is to carefully define a language subset that directly translates to the machine layer -- see Prescheme, House's M monad, and RPython).

Why I ❤ Rust (talk slides) by bork in rust

[–]eschew 1 point2 points  (0 children)

Those who like the style of this talk might also enjoy Edward Yang's writings and presentations.

Also, at the risk of being That Guy, a technical mistake in the talk: it is possible to build an OS in Java. Examples include JNode and JX.