HN user

Shoop

872 karma
Posts42
Comments131
View on HN
www.youtube.com 12mo ago

The Saga of Multicore OCaml [video]

Shoop
7pts0
www.youtube.com 1y ago

Making OCaml Safe for Performance Engineering [video]

Shoop
13pts3
www.cftc.gov 1y ago

Regarding Some Aspects of the Present Economic Financial System (2018)

Shoop
3pts0
www.youtube.com 1y ago

The Games Behind Your Government's Next War [video]

Shoop
4pts0
asteriskmag.com 2y ago

China's Policy Failures

Shoop
3pts0
www.wsj.com 2y ago

How We Can Control AI

Shoop
1pts0
www.fsf.org 2y ago

Introduction to free software and the liberation of cyberspace (2014)

Shoop
11pts2
asteriskmag.com 2y ago

Intelligence Testing

Shoop
2pts0
www.youtube.com 3y ago

How does QueryPerformanceCounter measure time? [video]

Shoop
4pts1
zigmonthly.org 4y ago

Zig is becoming more production-worthy

Shoop
126pts72
www.youtube.com 5y ago

Dick Sites – “Data Center Computers: Modern Challenges in CPU Design” [video]

Shoop
2pts0
www.ralfj.de 5y ago

What (not so) recently happened in Miri

Shoop
1pts0
blog.mandejan.nl 5y ago

Smallest Echo

Shoop
2pts1
zerohplovecraft.wordpress.com 6y ago

Brief Interviews with Hideous Bots

Shoop
1pts0
imois.in 6y ago

Business Card Neural Network

Shoop
3pts0
mobile.twitter.com 6y ago

GPT-3 eloquently defends the possibility of Trurl's Electronic bard

Shoop
2pts0
github.com 6y ago

Robpike/Lisp

Shoop
8pts2
www.youtube.com 6y ago

The Past We Can Never Return To – The Anthropocene Reviewed [video]

Shoop
1pts0
orb.farm 6y ago

Orb.Farm, a Virtual Aquatic Ecosystem

Shoop
4pts0
www.youtube.com 6y ago

What Makes People Engage with Math – Grant Sanderson [video]

Shoop
3pts1
blog.janestreet.com 6y ago

Deep-Learning the Hardest Go Problem in the World

Shoop
2pts0
da-data.blogspot.com 6y ago

Minting Money with Monero and CPU vector intrinsics (2014)

Shoop
2pts1
www.youtube.com 6y ago

The Algorithm for Precision Medicine [video]

Shoop
2pts0
abrok.eu 6y ago

Stockfish 11

Shoop
2pts0
haskell-explained.gitlab.io 6y ago

Haskell - Polysemy Is Fun

Shoop
3pts0
www.youtube.com 7y ago

Weird Chess Algorithms: Elo World [video]

Shoop
3pts0
www.youtube.com 7y ago

Let's build a circuit that displays an image on a VGA monitor - Part 2 [video]

Shoop
19pts1
tom7.org 7y ago

Elo World, a framework for benchmarking weak chess engines [pdf]

Shoop
2pts0
www.youtube.com 7y ago

DConf 2019: Frictionless D Adoption for the Masses

Shoop
2pts0
www.youtube.com 7y ago

Allocating Memory with the D Programming Language – Walter Bright

Shoop
2pts0
O(x)Caml in Space 2 months ago

I think robustness is helped a lot by the fact that it’s the production compiler used at Jane Street

OCaml has a separate language for module interfaces where types are required. Even better, it allows you to abstract over types and make them entirely opaque, so that users of an interface never have to look at any of the implementation details.

I believe the paper handles this case with the LastUsed offset in the implementation of cons.

During the consing of (9) the pointer offset is compared with the last used offset, LastUsed. If it is the same and less than the block size then it is simply incremented, the new entry made and LastUsed updated. This would have occurred as the integers (6), (7), (8) were added. If on the other-hand the pointer offset is less than the LastUsed a cons is being applied to the tail of a longer list, as is the case with the (9). In this case a new list block must be allocated and its Base-Offset pointer set to the tail contained in the original list.

If I'm understanding correctly, cells are only mutated in place if they are not the tails of other lists (meaning they aren't shared). If the cell is already the tail of another list, the consing is accomplished by creating a new cell to avoid modifying the other list.

I do not think your model of threads and processes is correct. Processes have different address spaces whereas threads share an address space. Context switching between threads is much cheaper than context switching between processes because you do not have to swap page tables and do a tlb flush. tlb flushes are extremely expensive. I also think you are misunderstanding how mmap works. mmap is not related to thread spawning.

dune is quite weird compared to many other build tools, but once you learn how it works it's actually quite simple. opam is a pain in the ass but it's definitely being improved steadily and I've had better experiences with it recently. janestreet core seems more stable now than it has in the past but there are occasionally still some breaking changes. They aren't hard to keep up with if you update with each core release though (only like ~1 for my project in the past year or so). There's also a community movement to work a lot more on the ocaml platform and I'm super excited for this work [1] to get through the pipeline! Especially promising is the work on replacing ocamldoc (which sucks) with odoc (which looks great!). While I think work on the ocaml platform will take some time to come to fruition, the approach they are going for is super empathetic and I wholeheartedly agree with their approach for every facet of the ocaml ecosystem -- build tools, doc generation, lsp, editor integration, opam evolution, and all the stability guarantees they're gradually adding. Really exciting time to invest in ocaml!

[1] https://www.youtube.com/watch?v=E8T_4zqWmq8

I would recommend toning back some of the emotional language in your treatment comparison table -- things like "confusing terminology", "Busy staff with no time to help", and "Unhelpful Google searches". Your value prop of convenience of no shots is super obvious to me but the biased comparison table is a turn-off. It would give me a lot more confidence if the language in the table were more scientific and clinical. Specifically, I want to be able to look at the table and know for what type of person In-office shots would be better than At-home drops instead of being distracted by the language.

It needs to do a check in order to decide to panic. C/C++ just allow undefined behavior which means they don't need to bounds check because the generated code is allowed to have any behavior in this case (either the read just reads some random memory out of the heap or the kernel kills the process since it tried to access unmapped memory). In rust, panicing involves unwinding the stack. The compiler must generate code to do the bounds check and then also generate code to do the stack unwinding for the panic in the case where the bounds check fails.