What if Bird Watch wasn't relentlessly positive, is it significant that this model is grow only? I can't think of a reason why a decrement button and negative values wouldn't work in this model
*Summary* * *[**0:00**] Main Idea:* Unix-like systems are stuck in the 1970s design. We need to evolve Unix, not just layer things on top. * *[**1:14**] Motivation:* * Modern technology often builds upon outdated foundations, leading to a fragmented and complex ecosystem. * We can achieve a more dynamic and powerful system by enhancing the core infrastructure instead of endless layering. * *[**3:55**] Inspiration: Smalltalk:* * Smalltalk offers a dynamic and reflective environment where introspection and live programming are natural. * Liballocs aims to bring similar capabilities to Unix. * *[**4:43**] Introducing Liballocs:* * A runtime library and toolchain extension that enriches Unix with: * Type information for memory. * A generalized concept of allocation. * Enables features like runtime type checking, dynamic inspection, and live updates. * *[**5:26**] Enhancing Unix Introspection:* * Extends the basic memory mapping view provided by `/proc` with a hierarchical allocation tree. * This tree exposes the relationships between different allocators (stack, heap, dynamic linker, etc.) and their managed memory regions. * *[**7:02**] Introducing Types:* * Associates type information with lower levels of the allocation tree, providing meaning to previously opaque bytes. * This information is generated by liballocs tools and available at runtime. * *[**12:57**] Meta Level API:* * Provides a uniform interface to query properties of arbitrary memory locations. * Queries are dispatched to the appropriate allocator for handling. * Enables generic introspection and manipulation across different memory regions. * *[**14:11**] Demo:* * Showcases liballocs' ability to identify and describe various memory regions: functions, heap chunks, stack frames, and even the auxv vector. * *[**19:03**] Performance Overhead:* * Liballocs introduces minimal runtime overhead (< 5%) for most programs. * Some custom allocators might require specific optimizations for efficiency. * *[**23:03**] Towards Live Updates:* * Identifies challenges for dynamic updates in C/Unix environments, such as handling custom allocators and interior pointers. * Highlights how liballocs' enhanced memory model addresses these limitations. * *[**27:13**] Source Files as Part of the Image:* * Proposes bundling source code into binaries for easier access and manipulation at runtime. * This facilitates live updates and other dynamic features. * *[**36:54**] Taking Over User Space:* * Suggests creating a custom or extended dynamic linker to gain early control of the user space. * This allows more powerful manipulations and tighter integration of liballocs with the system. * *[**39:35**] Biggest Obstacle: Compiler Limitations:* * The lack of complete pointer information from optimizing compilers hinders the accuracy of introspection and liveness. * Future research needs to address compiler pass design for better debug information preservation. *Key Takeaways:* * Liballocs is a step towards evolving Unix to be more dynamic and reflective. * The approach focuses on extending existing mechanisms rather than replacing them. * Compiler improvements are crucial for fully realizing liballocs' potential. i used gemini 1.5 pro
Awesome explaination. Though example of global counter is pretty simple as we can assume that counter will never decrement and max function can be safely used for merging and it can be considered as source of truth
Can you build compilers to convert profunctor optic code into low-level pointers, and can you use profunctor optics to build getters/setters for custom type of variables?
I have played around with TLA+ and tried some of the demonstration exercises in the tutorials online. My big question about it is: Why don't people use it? It seems like a good idea, on the face of it, but after an initial burst of interest it seems to have died and nobody in computing talks about it.
I feel like this talk paints unnecessary grim picture. It is possible de verify LARGE body of software, e.g Sel4 kernel, or CompCert. Those aren't toy 100-liners of python. Yes, fundamentally, complexity is still there, but people have managed to handle it to produce something beyond "unit-tested, so it works"
Why R? Writing <= is the norm in order theory when talking about semilattices. Take a look at an order theory book or even the wikipedia article on semilattices.
Funny that Evan was right in the high level details like needing a typed JS, but not in the lower level details. TypeScript won precisely because it doesn't start off as intimidating for JS users, while others like Reason and Elm died off, but ironically TS is way more complex than either of the others in its type system.
The fundamental confusion at the base of the functional programming paradigm is that they don't understand what a function is mathematically. A function is NOT a computation. A function is a SET of ordered pairs. A type of relation among other types of relations. A set doesn't have runtime and so saying real function have no side effects is meaningless nonsense. A program is not a function. We can model a function with a program and we can model certain programs with functions but the two are not the same. This confusion I think stems from how functions are introduced to students as some kind of abstract machine that takes an input x and spits out an output y. A function is not a machine. This is not helped by the common reference to program procedures as "functions". A program may model a function of all we look at is the input and the output. What files it logs to or emails it sends during execution is irrelevant; it still models the function.
I feel like this talk plays a serious "no true scotsman" with functional programming. Obviously Haskell is like, maximum pure functional programming. But Erlang/Elixir are also functional programming in the sense that they do not have classes and use immutable data structures; while they allow IO within the context of an otherwise pure function, they do not allow the mutating of any shared state, allowing for massive concurrency using their BEAM VM. And further along the spectrum you have Rust, which is very much an imperative language and yet also clearly is borrowing a lot of functional ideas, with immutability-by-default, an algebraic type system, and base language support for the Option and Result monads. Drawing a line between "pure functional" and "imperative languages" is a false dichotomy, the functional paradigm and the imperative paradigm are just two different ways of framing the same logical behavior and often the right answer is somewhere between the two.
At @16:40 - realistic at the hello-world level, "had no idea what was going on but able to add a feature" is difficult at scale without eventually cooking up a bowl full of copy-pasta, irrespective of language specifics.
is this the same guy who gave the "Ron Pressler - Loom: Bringing Lightweight Threads and Delimited Continuations to the JVM" talk? why does he speak with an american accent here, but with a british one in the other??? what's with the fake accent?
So every inspector of the object has N presentations that each have one specific interpretation of it, inspired, for example, by usefulness (utilitarianism) to provide a meaningful presenter of it.
Yes :). In the meantime, many more parts of the environment are extensible and enable the idea that every interaction with a software system should happen through an experience dedicated to that specific context.
33:50 - what??? - the bottom one is clear, and you can easily see what is going on. The top one is so scattered, it's super hard to comprehend. Why would anyone want that??? - If things are close together, my brain can parse multiple lines at once, and I quickly see a lot. In the top one, I have to spend so much effort looking through it and _finding_ stuff....
I agree that it's bad for git-blame ... but that NOWHERE as big a deal as actually working with it. - Maybe the _file_ format can be different from what is shown? - Make it extremely regular for git, and edit bidirectly transformed version of the code? but you know, one that is _possible_ to code with... - It's stated over and over: Code for reading first. Not for the computer...
well, it seems like TypeScript won ... I guess people don't like change, improvements ... but it's not like there aren't many options.... It's just that everybody is still using the same JS ... now just with added types (usually ad-hoc in separate files)
@@zzzyyyxxx TS does have a lot of nice stuff, but it doesn't change that it's based on poor core of JS. I don't like Elm, but it's strictness does have some benefits. TS has zero strictness. - The improvements in TS could have been a lot better if it allowed types to have effect on runtime code, for example. - there is ReScript which again has some nice features, but misses other. - Nothing is great, so I understand that people just stuck with JS but ... calling it "more powerful" as a better thing is wrong. Elm being "less powerful" was a feature. In my opinion, some more power would have been good, but to keep it "good/safe" it would have to be less simple, and apparently, most programmers cannot handle it ... see Go and Dart or other google products ... they focus on simplicity over features. - Joke is that at this point, JS is not simple at all, yet everybody approaches it with that mentality...
A huge problem with typescript is that it requires you to be disciplined to write correct code; the type system only gets you so far. And even if you are disciplined, the libraries that you'll end up using will be prone to errors and breaking changes in minor versions.
Im probably missing the whole point, but I’ll ask my question anyway. I don’t understand what this talk could possibly have taught people? I expected to see how to use F# to generate SQL, and then use this. I expected something like Common Lisp macro’s to be honest, or how to create our own ORM library. But this talk doesn’t define the “run” and “database” functions at all. So I’m probably just missing the point 😅 hope someone can answer my question and point me to materials I might need to read up on to better grasp this video.