Okebiz Video Search

Title:Coffee Compiler Club, 2021_02_26

Coffee Compiler Club meeting on Feb 26, 2021. Typical rambling conversation loosely related to compilers, language runtimes, GC, performance and optimization.

Chat link:https://www.dropbox.com/s/6duk4x2uwxe...‚Äč

All about Equals, .equals(), "==", "===", reference equality vs bitwise equality vs FP equality. Gigabyte+ Arrays ref-eq vs content-eq vs performance. FP equality, of NaN, of +0 vs -0, epsilon difference. Arrays of FP for equality w/NaNs (if 2 NaNs are never ==, does bitwise-equals Arrays of FP NaNs not-equal?). JavaScript has 3 equalities. Code that calls equals need 3 versions (e.g. version of HashTable that uses .equals vs IdentityHashTable using ==).

Observation: exposing ref-equals in a lang exposes identity in general, and makes immutable-by-default hard.

FP testing & implementation details. Default equals using some multiple-ULPs. Side-talk in Excel base-10 math really as base-2 math, and the bizarre errors thereof. Timing of X86 8087 80-bit FP implementation. X86 support for decimal rounding. Lots of FP history. Sorting FP numbers with NaNs and -0.

Unary operators parsing issues; operator precedence. 800pg compiler books taking 1/3 of the book on parsing - only ever do hand-rolled recursive decent parsing!!! - unless your language is large, complex, stable & the grammar is handed to you. Post-fix parsing; "*" vs arrow vs "." as post-fix ops in C; "@" operator in Forth.

Biggest future work in compilers in a Runtime, to support e.g. using exceptions as control flow (null-chks-as-mem-ops), profile-guided ops, read/write barriers for GC, fast JITed-to-JITed calls (requires a notion of a Code Cache), tiered execution strategies, deoptimization & heroic optimizations, low-cost random stack-profiling, etc.

Web assembly execution speed, javascript speed. JIT performance & user-experience vs dev-experience. Code-gen as part of normal every day coding hurts with slow JITs. Now exists a byte-code interpreter for LLVM IR.

Build-systems; DLL hell history. "aa"'s dependency handling (1-line-per-lib in the makefile, with semantic versions). Maven/npm as a repository, as an interface. Build setups cannot produce giant log output, because as soon as anyone produces giant log output, everybody cannot read the logs for key things. So limit of 1 line per file, and each build step has to name the exact files it builds because relies on the file system atomicity for correctness.

Progress bars. Difficulty in building progress bars, they touch every parts in a deep way. Distributed/parallel progress bars is very invasive, touches recursively all parts. Cancel in par/dist systems very hard for the same reason. Windows-copy. Modern version: steam download has same problem. (Game was Noita). Steam progress bar has to handle network (low control), and parallel (disk writes, decompression). Progress bar psychology. Hung GUIs when background tasks get to heavy.

China blocking repos (maven, npm, github) because of the central distribution point for political speech. People trying to inject politcal statements into random project code. Guarding repos. Security & encryption. Arms-race vs virus writers.

Forcing devs to live with their average customer hardware experience. Dev games on low-end machines, or with bad wifi. Market-push to demand web-experience be good, so even tho JS web pages download miles of cr*p, the experience is still fairly decent. Not so with Devs; 1st time setup for React Native is insane. Download times for OS updates on bad connections.

C2 shallow-string optimization. Requires trivial stable/frozen byte array, which requires a minimal escape analysis. Constant arrays in Java.


Download Server 1


Download Server 2


Alternative Download :

Coffee Compiler Club, 2021 01 02 Coffee Compiler Club, 2021 01 02
48:42 | 445
Coffee Compiler Club, 2020 11 27 Coffee Compiler Club, 2020 11 27
27:58 | 191
Coffee Compiler Club, 2021 03 26 Coffee Compiler Club, 2021 03 26
58:19 | 175
Coffee Compiler Club, 2021 02 19 Coffee Compiler Club, 2021 02 19
46:41 | 139
Compiling C to printable x86, to make an executable research paper Compiling C to printable x86, to make an execut...
25:41 | 197,247
Crust of Rust: Atomics and Memory Ordering Crust of Rust: Atomics and Memory Ordering
39:20 | 12,928
Java Project Tutorial With Source Code - Part 1/2 Java Project Tutorial With Source Code - Part 1/2
39:32 | 897,885
Why No One Has Measured The Speed Of Light Why No One Has Measured The Speed Of Light
19:05 | 709,282