1.  

    Oh the days when the web was simpler and implementing basic web browsers was one of the programming language exercises people did. Sadly not so much anymore. Nice to see a Common Lisp version!

    1. 1

      So Clouldfare wants to help decentralisation by… making it more centralised?

      1. 2

        if they are adding ipfs nodes, who cares? you can always run your own gateway if you don’t like it.

        1. 2

          Does more nodes help IPFS, or is it more nodes that pin content that is more useful? The pull model, where data sits at origin unless pinned, seems like originators of the data would always have the problem of how to distribute it so as not to face the “thundering herd” of initial requesters.

          1. 2

            As far as I know the protocol doesn’t actively push blocks around, the various nodes have to request and pull them. That only happens if a client requests the block to the node. The protocol also doesn’t provide incentive for the nodes to keep the data around. I don’t know what is the default retention logic on the actual nodes.

            In practice what this translates to is that there isn’t much guarantee for data to stay around. Typically a client will want to get the data over HTTP and only address a single gateway (like the CloudFlare one) so the only copies would be in the serving node (your laptop / server) and that single gateway. If your laptop disappears, CloudFlare will probably flush it’s cache at some point and your page will have disappeared entirely.

            Hopefully in the future the browsers will be talking IPFS directly and store local copies. That way the network would become much more resilient to data loss.

            1. 1

              a nice system might be a provider where you pay upfront the lifetime price of hosting something with storage costs extrapolated into the future.

              1. 1

                Files should probably devalue over time or maybe be maintained financially by people who want to access them. Eternity is a long time for a single payment.

                I believe that the IPFS authors realized the issue with the protocol and that https://filecoin.io/ is one of the answer that they could come up with.

        2. 2

          I guess it does make sense. If the Internet does shift to become more decentralized, Cloudflare would want a piece of that pie as well. Worst case nobody uses this service and they close it eventually, and best case they just future-proofed their business.

          I also think that having them run an IPFS node is pretty helpful. If there’s a way to translate a website addressed proxied by Cloudflare into a file hash, it would help decentralization.

        1. 5

          I write mostly about my explorations of different programming languages https://bluishcoder.co.nz

          1. 9

            I’m not as involved as I used to be, but I’m still on the core team, so feel free to ask me questions if you’ve got any.

            1. 3

              Would you recommend Factor for production use given that it seems to be reaching a sort of plateau in support and community?

              It’s a beautiful language, by the way. Thank you for your work.

              1. 5

                I have Factor running in production. Although I don’t really maintain the web app much - it just ticks along - Factor runs tinyvid.tv and has for the past few years. I originally wrote it to test HTML 5 video implementations in browsers back when I worked on the Firefox implementation of video.

                1. 5

                  As always, it depends on what you’re doing—I’d definitely be nervous if you told me you were shoving Factor into an automobile, for example—but Factor the VM and Factor the language are both quite stable and reliable. On top of doublec’s comment, the main Factor website runs Factor (and its code is distributed as part of Factor itself for your perusal), and it’s been quite stable. (We do occasionally have to log in and kick either Factor or nginx, but it’s more common that the box needs to be rebooted for kernel updates.) I likewise ran most of my own stuff on Factor for a very long time, including some…maybe not mission-critical, but mission-important internal tooling at Fog Creek. And finally, we know others in the community who are building real-world things with Factor, including a backup/mirroring tool which I believe is being written for commercial sale.

                  The two main pain-points I tend to hit when using Factor in prod are that I need a vocabulary no one has written, or that I need to take an existing vocabulary in a new direction and have to fix/extend it myself. Examples are our previous lack of libsodium bindings (since added by another contributor) and our ORM lacking foreign key support (not a huge deal, just annoying). Both of these classes of issues are increasingly rare, but if you live in a world where everything’s just a dependency away, you’ll need to be ready for a bit of a change.

                  You can take a look at our current vocab list if you’re curious whether either of the above issues would impact anything in particular you have in mind.

                2. 1

                  What would you say is Factor’s best application domain, the kind of problem it solves best? I met Slava many years ago when he was presenting early versions of Factor to a local Lisp UG, and am curious to see where the language fits now, both in theory and practice.

                  1. 4

                    My non-breezy answer is “anything you enjoy using it for.” There are vocabularies for all kinds of things, ranging from 3D sound to web servers to building GUIs to command-line scripts to encryption libraries to dozens of other things. Most of those were written because people were trying to do something that needed a library, so they wrote one. I think the breadth of subjects covered speaks well to the flexibility of the language.

                    That all said, there are two main areas where I think Factor really excels. The first is when I’m not really sure how to approach something. Factor’s interactive development environment is right up there with Smalltalk and the better Common Lisps, so it’s absolutely wonderful for exploring systems, poking around, and iterating on various approaches until you find one that actually seems to fit the problem domain. In that capacity, I frequently use it for reverse-engineering/working with binary data streams, exploring web APIs, playing with new data structures/exploring what high-level design seems likely to yield good real-world performance, and so on.

                    The second area I think Factor excels is DSLs. Factor’s syntax is almost ridiculously flexible, to the point that we’ve chatted on and off about making the syntax extension points a bit more uniform. (I believe this branch is the current experimental dive in that direction.) But that flexibility means that you can trivially extend the language to handle whatever you need to. Two silly/extreme examples of that would be Smalltalk and our deprecated alternative Lisp syntax (both done as libraries!), but two real examples would be regular expressions, which are done as just a normal library, despite having full syntax support, or strongly typed Factor, which again is done at the library level, not the language level. I have some code lying around somewhere where I needed to draft up an elaborate state machine, and I quickly realized the best path forward was to write a little DSL so I could just describe the state machine directly. So that’s exactly what I did. Lisps can do that, but few other languages can.

                  2. 1

                    Were native threads added in this release, or are there plans to? And did anything ever come to fruition with the tree shaker that Slava was working on way back when?

                    Major props on the release. It’s really nice to see the language survive Slava disappearing into Google.

                    1. 5

                      The threads are still green threads, if that’s what you’re asking, but we’ve got a really solid IPC story (around mailboxes, pattern matching, Erlang-style message passing, etc.), so it’s not a big deal to fire up a VM per meaningful parallel task and kick objects back and forth when you genuinely need to.

                      In terms of future directions, I don’t know we’ve got anything concrete. What I’d like to do is to make sure the VM is reentrant, allow launching multiple VMs in the same address space, and then make the IPC style more efficient. That’d make it a lot easier to keep multithreaded code safe while allowing real use of multiple cores. But that’s just an idea right now; we’ve not done anything concrete that direction, as far as I know.

                      1. 1

                        Really off-topic, but isn’t Slava at Apple?

                        1. 1

                          He is now. Works on Swift.

                      2. 1

                        Where does the core factor team typically communicate these days? #concatenative on freenode seems kinda dead these days. Is there a mailing list, or on the yahoo group?

                      1. 3

                        Ok, new vision: like Smalltalk and LISP debugging with support for single-threaded, multicore, and distributed applications. Different modes for different situations. Can run locally or remotely on a server. If distributed, on multiple servers in the cloud of your choosing. Just brainstorming here. We do want the baseline for 2018 at least as good as 1970’s-1980’s platforms, though.

                        1. 3

                          Something like debugging in Inferno (and probably Plan 9). Mount the remote CPU and debug. Unfortunately Limbo didn’t have the power of Smalltalk with regards to “programming in a soup of live objects” feel.

                        1. 4

                          Nice article. How do you feel about the size of the language? One thing that keeps me off from looking at rust seriously is the feeling that it’s more of a C++ replacement (kitchen & sink) vs a C replacement.

                          The Option example feels a bit dropped off too early, you started by showing an example that fails and then jumped to a different code snippet to show nicer compiler error messages without ever going back and showing how the error path is handled with the Option type.

                          You should also add Ada to the list of your languages to explore, you will be surprised how many of the things you found nice or interesting were already done in the past (nice compiler errors, infinite loop semantics, very rich type system, high level language yet with full bare metal control).

                          1. 2

                            Thank you for commenting! I agree that Rust’s standard library feels as big as C++‘s, but I haven’t been too bothered by the size of either one. To quote Bjarne Stroustrup’s “Foundations of C++” paper, “C++ implementations obey the zero-overhead principle: What you don’t use, you don’t pay for [BS94]. And further: What you do use, you couldn’t hand code any better.” I haven’t personally noticed any drawbacks of having a larger standard library (aside from perhaps binary size constraints, but you would probably end up including a similar amount of code anyway, just code that you wrote yourself), and in addition to the performance of standards-grade implementations of common data structures, my take on it is that having a standardized interface to them improves readability quite a bit - when you go off to look through a codebase, the semantics of something like a hashmap shouldn’t be surprising. It’s a minor draw, but I feel like I have to learn a new hash map interface whenever I go off to grok a new C codebase.

                            I’ll definitely take a look at Ada, seems like a very promising language. Do you have any recommendations for books? I think my friend has a copy of John Barnes’ Programming in Ada 2012 I can borrow, but I’m wondering if there’s anything else worth reading.

                            Also, thank you for pointing out the issue with the Option example, I’ll make an edit to the post at some point today.

                            1. 5

                              It’s funny how perspectives change; to C and JavaScript people, we have a huge standard library, but to Python, Ruby, Java, and Go people, our standard library is minuscule.

                              1. 2

                                I remember when someone in the D community proposed to include a basic web server in the standard library. Paraphrased:

                                “Hell no, are you crazy? A web server is a huge complex thing.”

                                “Why not? Python has one and it is useful.”

                              2. 2

                                What you don’t use, you don’t pay for [BS94]

                                That is true however you have little impact on what others use. Those features will leak into your code via libraries or team mates using features you might not want. Additionally when speaking about kitchen & sink I didn’t only mean the standard library, the language itself is much larger than C.

                                I think my friend has a copy of John Barnes’ Programming in Ada 2012 I can borrow, but I’m wondering if there’s anything else worth reading.

                                Last I did anything related to Ada was somewhere around 2012. I recall the Barnes books were well regarded but I don’t know if that changed in any significant way.

                                For casual reading the Ada Gems from Adacore are fun & informing reads.

                                1. 2

                                  I’ll definitely take a look at Ada, seems like a very promising language. Do you have any recommendations for books? I think my friend has a copy of John Barnes’ Programming in Ada 2012 I can borrow, but I’m wondering if there’s anything else worth reading.

                                  I recommend Building High Integrity Applications in SPARK. It covers enough Ada to get you into the meat of SPARK (the compile time proving part of Ada) and goes through a lot of safety features that will look familiar after looking at Rust. I wrote an article converting one of the examples to ATS in Capturing Program Invariants in ATS. You’ll probably find yourself thinking “How can I do that in Rust” as you read the book.

                              1. 20

                                The author doesn’t mention the popular GUI library that’s the best fit for his use case – TK. (I can’t blame him – TK has poor PR, since it’s marginally less consistent than larger and more unweildy toolkits like GTK and QT, while having many of the drawbacks of a plain X implementation.)

                                That said, the fact that TK is the easiest way to go from zero to a simple GUI is frankly pretty embarassing. There’s no technical reason GUI toolkits can’t be structured better – only social reasons (like “nobody who knows how to do it cares enough”).

                                1. 13

                                  The problem is that TK still has terrible looking widgets. Just because UI fashion has moved away from consistent native look and feel doesn’t mean TK is passable.

                                  1. 12

                                    TTK mostly takes care of this, by creating a Look and Feel that matches up with the platform in question.

                                    1. 3

                                      TK ships with TTK, which provides native widget styles for every major platform. It has shipped that way for nine years.

                                      1. 1

                                        I was not aware of TTK, thank you! I tried out TK a few times and seeing how awful it looked made me leave it really quickly for other technologies.

                                        1. 4

                                          TTK has been around for a long time, and built into TK for a long time too. It’s a mystery to me why they don’t enable it by default. I discovered it six years after it got bundled!

                                          1. 1

                                            I tried to look into it a little bit today but it looks like there is pretty much only one getting started guide for it, written in python. Do you know any guides for it in other languages?

                                            1. 2

                                              Not really. It provides native-styled clones of existing widgets, so if it’s wrapped by your target language, all you should need to do is import it and either overwrite the definitions of your base widget-set or reference the ttk version instead (ex., by running ‘s/tk./ttk./g’ on your codebase).

                                    2. 5

                                      When he put out the JSON protocol, Tcl/Tk came right to mind. This is exactly how people do UI with Python and tkinter.

                                      1. 3

                                        Interesting — I have almost no experience with TK. I will look into it, thanks!

                                        1. 3

                                          TK is used by Mozart/Oz for the GUI, with a higher level library QTk on top of it. It works well and is easy to program with.

                                      1. 3

                                        Are there dat protocol implementations for languages other than JavaScript? Or is there an API for clients to use?

                                        Is there a “what dat brings to the table vs IPFS, ZeroNet, Freenet, etc” document?

                                        1. 25

                                          Mozilla feels free to do things to your browsing that they wouldn’t do to users of regular Firefox

                                          Yes, that’s what testing means, among other things. Nightlies are for testing.

                                          1. 12

                                            Sure, but it’s worthwhile users alerting Mozilla of the boundaries of that testing that they’re comfortable with. Yes, happy to test new features, bug fixes, new UI, etc. Not so sure about testing involving my browsing activity being sent to a private company in a foreign country.

                                            1. 14

                                              As opposed spraying your browsing activity unencrypted, all over the internet. DNS is without a doubt the most dubious protocol in use by the average internet user, ever since unencrypted HTTP became uncool.

                                              And the privacy policy they negotiated with CloudFlare is pretty strict:

                                              And in this case the operating agreement with the dns provider is part of making that right choice. For this test that means the operator will not retain for themselves or sell/license/transfer to a third party any PII (including ip addresses and other user identifiers) and will not combine the data it gets from this project with any other data it might have. A small amount of data necessary for troubleshooting the service can be kept at most 24 hrs but that data is limited to name, dns type, a timestamp, a response code, and the CDN node that served it.

                                              1. 7

                                                I’m aware of the downsides of DNS, and I’m pleased to see work towards alternatives. I would like such experiments to either be opt in, or provide ample notification that privacy expectations are different for the duration of the experiment so users can choose not to share their data with CloudFlare if they want. As Mozilla says in their recent blog post:

                                                At Mozilla, our approach to data is simple: no surprises, and user choice is critical. We believe in that not just because it makes for good products, but because trust is a key factor in keeping the internet healthy.

                                                1. 0

                                                  So, pray tell, what do I use to replace DNS?

                                                  Saying that about DNS might make more sense if more people ran their own DNS server, instead of relying upon their ISP or worse, Google.

                                                  1. 10

                                                    …this DNS replacement technology that Mozilla is testing out in their nightly.

                                                    1. 2

                                                      Wonderful! Why not run IP over HTTPS/2?

                                                      You are still spraying your browser activity over the Internet, only the contents are protected, not who you are visiting.

                                                      1. 14

                                                        Ah yes, I forgot the first principle of security, “if you can’t protect everything perfectly, might as well just protect nothing.”

                                                        DNS requests and responses leak plenty of information that an encrypted connection won’t, chiefly the domains and subdomains I’m visiting. If I’ve encrypted my DNS traffic can you still figure out what I’m doing just from the destination IP address? Yes just whois that IP address! Easy right? Oh, it’s Cloudflare. That really narrows it down, they don’t have very many customers. Or maybe Akamai, or Cloudfront, or S3, or GCS. Just knowing what CDN I sent a request to is enough to make an educated guess about what I was doing, no doubt. Cloudflare only has 6 million customers or so, should be easy to pick out the one I’m using.

                                                        1. 4

                                                          If I’ve encrypted my DNS traffic can you still figure out what I’m doing just from the destination IP address?

                                                          No, you can still figure it out from SNI, which sends the domain and subdomain you’re accessing in cleartext before the TLS connection starts, this is used to allow the server to present the correct certificate.

                                                          Basically all major websites today require SNI, and your browser will send it even if the site may not require it, causing any MitM to see just as much from SNI as they would see from DNS.

                                                          1. 4

                                                            There is a proposal to encrypt SNI. Sending DNS over HTTP is one of many defenses we have to put up to increase privacy, a single solution will not fix it.

                                                            1. 3

                                                              Trust, but it’d be preferable to send DNS over a simpler protocol, e.g. what dnscrypt did.

                                                              DNS over HTTP makes DNS resolution on e.g. an Arduino basically impossible, because you’re now using half of your ROM for the TCP and HTTP stack.

                                                              1. 3

                                                                Probably, yes, for such purposes you can fall back to a local resolver that can do DNS over HTTP for you or alternatively just use plain DNS.

                                                                The reason people want to jump for DNS over HTTP is that it’s least likely to break middleboxes (dnscrypt does, there were a few fun situations I had while using it with DNS manipulating middleboxes like you find in any free wifi out there)

                                                                HTTPS is rarely inspected and when it is, the body is left alone, so putting DNS there is a reasonable way to get middleboxes to stop modifying it.

                                                                1. 3

                                                                  Sure, that’s a solution for the people that have to deal with middleboxes.

                                                                  But it would be preferable if those of us that don’t could have a simpler, more efficient protocol, for which cleaner and faster implementations can exist.

                                                                  1. 3

                                                                    Part of this study is exactly to find out how efficient this is.

                                                                    The upside is also that DoH offers privacy without clients having to massively reimplement everything.

                                                                    dnscrypt has to my knowledge rather poor support and IIRC was even dropped from development entirely for a period of time, the author pointing the website towards the DoH implementation at Google.

                                                                    The problem really is that the size of a UDP packet doesn’t offer much space to do much cryptography. A RSA4096 key will take up to 446 bytes, the largest UDP packet you can safely send over the internet is 500 bytes. Current DNSSEC largely relies on RSA2048 via multiple TXT records (you can hear the belt jumping from the gears when you push that into BIND, it works but bleh)

                                                                    Ed25519 takes 32 bytes, which is much better, but that’s still almost 10% of the entire packet.

                                                                    On DoH there is no such limitation. We can stuff more complicated and more secure cryptography through there. You can sign the entire response body with a good and long key on the origin server and put it into a header. Simple and efficient, yet safe.

                                                                    1. 4

                                                                      I’m myself a developer for an Android client for an IRC bouncer with custom protocol.

                                                                      I’ve spent quite a while to implement our custom binary protocol to get highest performance, and I can do a whole handshake - connect - sync in below 50ms on a good connection, or at a maximum of around 5 seconds on 2G throttled to 64kbps on a 2010 phone on unreliable connection with a protocol worst case.

                                                                      Even establishing a HTTP/2 connection becomes a significant bottleneck at this point. (And I’ll probably have to ship a custom DNS resolver in the app anyway, as people want to be able to use mDNS resolution, which Android doesn’t support)

                                                                      1. 3

                                                                        You don’t have to establish a HTTP/2 connection per roundtrip. You’re supposed to keep the connection open and you can then even multiplex requests over it.

                                                                        Your android app should not be implementing DNS. It should be handing over the DNS requests to the system library which is then free to use DoH or traditional DNS or dnscrypt.

                                                                        Application protocols like IRC are fine since they’re on a higher level but DNS shouldn’t be a problem your application has to concern itself with.

                                                                        mDNS is a signficiantly simpler spec than DNS itself (once you include all the updates you need to understand all the modern queries and responses) and I don’t see why you would even begin to pipe it over DoH…

                                                                        1. 3

                                                                          The question with all this is, to where?

                                                                          Does your DoH work in a corporate intranet, where only the local IRC server is available in the subnet the phone is in (I’ve got cases such as that)?

                                                                          Does your DoH work in situations where the user can access local servers with sub 6ms RTT, but the nearest Google server is 350ms RTT away?

                                                                          There’s lots of situations where these things get complicated, and this experiment will only ever be able to test a tiny subset of them. The majority of these edge cases need to be explored through other means.

                                                                          1. 2

                                                                            Yes because DoH is a protocol, you don’t have to send it to a Google server.

                                                                            Since it’s simply DNS piped over HTTP you can pipe the HTTP body into any DNS server and get a response over localhost.

                                                                            DoH only means “open a HTTP connection, pipe dns query into the body”. HTTP/2 deals with multiplexing and keep-alive.

                                                                            And you can still have local resolution via /etc/hosts or mDNS, those are seperate resolvers.

                                                            2. 2

                                                              That’s true, I didn’t think about SNI. Still DNS traffic probably will go someplace else other than the eventual destination server, providing more opportunities to snoop. And DNS often encodes more than just the target hostname. And there are quite a few more MitM attacks on DNS than TLS connections. So there’s definitely room for improvement in hostname resolution.

                                                              1. 3

                                                                For DNS there’s a flag you can use with your local resolver to only send the relevant parts to each server.

                                                                So to resolve i.k8r.eu you’d only send “eu.” to the root DNS server, then only “k8r.eu.” to the .EU nic’s server, and only the actual DNS server of i.k8r.eu would see the full subdomain.

                                              1. 7

                                                But a lot fewer people think holistically in terms of writing an application in “Python + C”.

                                                This is actually my preferred development style now. For some recent work, I was using Python for quick iteration, and an inital prototyping, then I profiled it, found the slow sections in the code, and rewrote those in C++ called through the FFI. I initially wrote the project in C++, but after rewriting it in Python with a few utility functions written in C++ I found it much easier to maintain and debug. I rarely hit segfaults anymore :)

                                                Unfortunately, it’s probably not especially common that C is the engineering language you want

                                                I’ve been thinking about this a lot recently. My prefered combo would be Scheme (for wizardry) + SML (for engineering) + C (for speed/low-level control), but there doesn’t seem to be an easy way combine these languages currently. Sure, there are implementations for each of these languages that emit LLVM bitcode, so I guess you could make it all play nice at the LLVM bitcode level. However, a functional IR at a higher level (i.e. a typed lambda calculus IR that could be targeted by functional languages), would be extremely nice since things like types wouldn’t be lost. I’m working on a project for this right now, but I’m not sure how well it’ll turn out.

                                                Another interesting combination is described in Out of the Tar Pit. The authors suggest a functional language paired with a relational database. I think this model is very interesting and plan to try it with game development (using a custom lightweight in-memory database) with the goal of being as performant as possible (which should be easy since it’s a very data-driven model). This idea isn’t really new - it’s partially what Rails does already, which is why it can scale to larger projects successfully. The database is an engineering tool that handles typing.

                                                Finally, I really like Racket’s ability to combine languages together in the same project. You can have two different modules in one project, one with Typed Racket and one with regular Racket (i.e. dynamically typed), and the two languages will happily interop with each other. To be honest, I haven’t really had a reason to do this in any of my non-trival Racket projects yet, but from what I’ve experiment with, it seems to work well.

                                                1. 5

                                                  Terra Language seems like an interesting mixed language approach. High level Lua code and low level C-like Terra code can be mixed, with the Lua code being able to generate Terra for macro type purposes. One could write most of the system in Lua, dropping down to Terra for speed and mix and match as needed.

                                                  1. 5

                                                    If you combine Python and C++, you might find Nim interesting. It’s a language with Python-like syntax that compiles to C with low-latency GC (several actually). You might still prefer C++ for something requiring performance advantages of its abstractions. Given all the Python-to-Go conversions, there’s likely a set of apps you’d write where Nim’s performance alone would be fine. From there, you might either use C++ for the rest or see what of its abstractions you can port over to Nim to retain benefits of Python-like style. The times I’ve seen Racket or Haskell used for things like C++ metaprogramming tell me there’s probably some value for Python/C++ programmers in doing C++ within Python-like language.

                                                    Just a brainstorming aloud here. :)

                                                    Edit to add: I wrote that comment reading your first paragraph. Then I see you bring up Racket. Maybe I wouldn’t have to sell you on benefits of mocking up a system language in a macro language after all.

                                                    1. 4

                                                      In my experience with FFI (at least in Python, with ctypes or cffi), crossing the boundary between the languages is very costly. In libparsing, which uses a C core and a Python module, 90% of the time is spend wrapping match objects from C to Python. This is arguably an edge case given the fact that parsers do generate a ton of data (the match nodes and the AST).

                                                      1. 4

                                                        Painfully true. It’s why both OpenVMS calling standard and Microsoft’s CLR were brilliant in standardizing that part across languages. Then, one can use the right tool for the job mixing them up as needed. That most hardware and compilers are optimized for C means its data types, calling conventions, etc are my default recommendation for this compatibility layer now regardless of what’s technically superior. If it’s possible: sometimes clean-slate stuff that’s not compatible actually gets adoption. Principle also applies to other massively-deployed runtimes like .NET, JVM, Apple Objective-C, or Android ART.

                                                        In some cases, a subset of a massively-deployed language becomes this layer like we’ve seen with Javascript. One I eyeballed for that recently was Go language due to all the articles griping about it. The solution would be some language fixing its shortcomings while totally plugging into its ecosystem with zero-cost integration. That might get a good response. Last popular one with low barrier-to-entry I looked into assuring was PHP. Turns out Quercus beat me to general concept by re-implementing it in Java with access to Java libraries. Still possible to redo something like it or Python in Nim supporting a mix of better-via-new-lang components and legacy-stuff-gradually-rewritten-or-enhanced.

                                                        1. 3

                                                          JavaScript was indeed a promising candidate, with a highly optimized runtime, composite data types and prototypical inheritance. If only the steering committee of that language decided that instead of adding more features and make it look like Java or C#, they should focus on adding core primitives to make it faster (typing, pragma-like compiler hints), then we would have a pretty good candidate for a runtime on which to quickly build a wide range of languages. I’m sure that if we looked at the languages which are used as a base for other languages, JavaScript would come just after C, or maybe even first!

                                                        2. 1

                                                          I never really measured the cost of jumping back and forth between Python and C, but I’m sure it’s horrible. It’s fine for me because I tend to have the C code do a significant amount of processing before returning back into Python. Python type conversions regularly surprise me with how expensive they are, but I guess that’s because Python is the only language I pay close attention to for performance issues (since the problems I tend to solve with it are computationally expensive).

                                                          1. 1

                                                            And also if you try different runtimes like Py2, Py3 or PyPy you’ll see how things are handled differently. PyPy for instance has a tendency to reallocate strings, which forces you to copy string values from Python to C. I came to a point where I considered making the C library spit out a string representation of the matches to be parsed by Python. I did not do it, but I bet the performance might not be too different, maybe even better!

                                                      1. [Comment removed by author]

                                                        1. 3

                                                          OP_RETURN doesn’t have enough room for child porn, so all this is referring to is links to websites that host such things. The blockchain itself doesn’t contain CP.

                                                          Actually, reading the paper more closely, it seems some amount of data (60kb worth?) might’ve been spread across multiple transactions. So yes, if you take enough pixels and stitch them together in the right order you might be able to create a picture of anything.

                                                          Eventually someone sane will step in and point out that if you run the blockchain through a JPEG viewer you will not, in fact, get child porn, but a crashed computer.

                                                          1. 3

                                                            I thought this was already known; could have swore I heard about this before somewhere. Maybe people were just referring to the links/urls?

                                                            I don’t see that as being a huge issue since storing large amounts of data in a blockchain doesn’t really scale. Just ask the guy who made BitMessage, but it does raise a lot of interesting questions about illegal content and distributed/decentralized content.

                                                            A better example is FreeNet. If you run FreeNet, you may be distributing illegal content, but it’s impossible for you or anyone to know because of the way the data is encrypted, stored and transmitted.

                                                            1. 7

                                                              It’s 2020, an intrepid team of heroic researchers has convinced Germany to outlaw Bitcoin due to allegations that child pornography can be reconstructed by combining parts of its blockchain…

                                                              As if on cue, a band of troublemakers calling themselves “Anonymous” realizes they can ban all Internet services through this newfound legal reasoning and begins sharing XOR’d images of cat pictures and anime avatars to targeted social networks.

                                                              After waiting a few months for the viral images to proliferate across several prominent websites, Anonymous releases via pastebin a sequence of instructions revealing that if one is to XOR any of cat pictures 1 through 500 with anime avatars 1 through 2000, the resulting image will be illegal under German law.

                                                              1. 1

                                                                Then, the social network took the content down so fast that some blockchain advocates were still talking about what Anonymous did like it was still happening. The social media groups argued to lawmakers and courts that rapid response to such content is one of the strong points of their network design: centrally-controlled, mutable state in a distributed system that merely simulates immutability with high-integrity, high-availability services. They point out that Bitcoin moved much more slowly on their best day. They point out they had been handling problems like this a long time keeping ethics in mind.

                                                                After being quickly defeated, Anonymous started on their next trolling operation designed to get publicity among a subset of the masses while not being noticed by elites who control the world. And changing nothing as usual since that kind of work can’t be done talking on 4chan all day. ;)

                                                                1. -2

                                                                  while not being noticed by elites who control the world

                                                                  Yes, those elites who are too busy convincing you that the blockchain is a problem when many of them are actual child abusers.

                                                                  If you cared about child abuse, you should be going after child abusers, neh? Of course, you’re going to reply to this with some complete nonsense about how this has anything to do with blockchains, and we should get riled up about that. I would argue this makes you complicit in child abuse.

                                                                  Save your fake outrage, I’m not buying it. By ignoring real abuse you support it.

                                                                  1. 3

                                                                    I have no outrage about fintech or risks. Child abuse is orthogonal to my point. The point is immutable stores with decentralized control make crime harder to fight when it invokves keeping something illegal in immutable storage. Centralized or non-immutable alternatives dont. Feel free to debate that point about the tech’s design instead of the tangents and rhetoric you were bringing into this.

                                                                    1. -1

                                                                      The point is immutable stores with decentralized control make crime harder to fight

                                                                      “Of course, you’re going to reply to this with some complete nonsense about how this has anything to do with blockchains”

                                                                      If anything, their reliable, immutable and transparent nature can aid in crime fighting.

                                                                      tangents and rhetoric

                                                                      And there you go immediately — calling real evidence of ongoing child abuse pointing to real people “tangents and rhetoric”. Get upset about chopped up data while ignoring and dismissing actual child abuse. Disgusting.

                                                                      1. 1

                                                                        You can have those traits with an audit trail with distributed checking. Those existed before blockchains. They were efficient and without blockchain drawbacks, too.

                                                                        The reason child abuse is orthogonal is that we’re having a discussion about what tech protocols are good at or not in terms of blocking illegal content within the protocol. You bringing up who abuses children will not help anyone analyze the effectiveness of a protocol. Now you’re equating me focusing on the tech in a tech discussion with supporting that extra child abuse you brought up. A false equivalennce and disgusting example of sophistry.

                                                                        1. -1

                                                                          You can have those traits with an audit trail with distributed checking. Those existed before blockchains.

                                                                          What didn’t exist was immutability.

                                                                          How many times has the NSA/CIA/FBI tampered with and deleted evidence of corruption and various crimes? Too many to count.

                                                                          we’re having a discussion about what tech protocols are good at or not in terms of blocking illegal content within the protocol

                                                                          Please check the title of the OP. “Child abuse” is prominently featured.

                                                                          You want to change the discussion from child abuse to vague, nebulous “illegal content within a protocol”, so that you can shift the discussion away from child abuse, to being a discussion about the inability of a protocol to censor transactions — Bitcoin’s greatest achievement.

                                                                          This is not only borderline off-topic, it’s a weak argument, and it shows your inhumanity.

                                                                          You don’t actually care about the crime being committed. You just want to be right in pointing out that Bitcoin is successful in being censorship-resistant. Well, congrats, you’re right about that.

                                                              2. 3

                                                                This doesn’t affect your point but BitMessage does not use a blockchain. It’s a common misconception, probably because of the “Bit” in the name.

                                                                1. 4

                                                                  I thought this was already known; could have swore I heard about this before somewhere. Maybe people were just referring to the links/urls?

                                                                  There’s even a service for encoding images in the bitcoin. https://news.bitcoin.com/cryptograffiti-images-blockchain/ (this is an interview with the creator with… interesting… examples)

                                                                  https://lobste.rs/s/p2wc5y shows how to encode (17th century) nude paintings in the blockchain, along with discussion about takedowns.

                                                                  Arguing that the blockchain has components to stitch together anything is not a good way to talk about this: the blockchain has structure, it might not be the intended one and putting things in in a way that you can get it out again with reasonable work is distribution.

                                                                  Takedown instructions are a reasonable concern and IMHO also a reasonable action within bounds. I think the immutability of the chain is it’s biggest flaw if you don’t heavily constrain what it is used for.

                                                                2. 2

                                                                  Eventually someone sane will step in and point out that if you run the blockchain through a JPEG viewer you will not, in fact, get child porn, but a crashed computer.

                                                                  If you apply any of the viewers/editors quoted into the paper to the blockchain, you get out what you put in. You can’t put the blockchain in a JPG viewer, but you also can’t pipe a .tar or a .zip to it.

                                                                  It can and has been done in practice.

                                                              1. 1

                                                                I wish this was readable from a phone/tablet. :( If there any other site that summarizes this article?

                                                                1. 4

                                                                  You could try the users guide. It’s basic HTML, but hopefully renders ok on a phone/tablet.

                                                                  1. 1

                                                                    Amplifying this, because it’s a great link; thanks!

                                                                1. 4

                                                                  Does this mean it’s possible to just watch the DHT on IPFS and pull data people are inserting? It’s not encrypted in any way?

                                                                  1. 8

                                                                    That’s exactly what this is :)

                                                                    You’re free to publish encrypted content on the IPFS, but you aren’t obligated to.

                                                                    1. 6

                                                                      And I wouldn’t, since encrypted content on IPFS would be exposed to everyone and brute-forced eventually if anyone cared (once the cipher is broken in the future, etc)

                                                                      1. 3

                                                                        This is kind of my worry with IPFS. I wanted to have a “private” thing where I could also share with my family in a mostly-secure way (essentially, least chance of leaking everything to the whole world while still being able to access my legitimately-acquired music collection without having to ssh home). Turns out that’s not simple to set up.

                                                                        1. 6

                                                                          We ([0][1]) are trying to add encryption and other security enhancements, including safe sharing, on top of IPFS. Still pre-alpha though.

                                                                          [0] - https://github.com/Peergos/Peergos

                                                                          [1] - https://peergos.github.io/book

                                                                          1. 5

                                                                            You just have to add encryption on before transmission. IPFS is kind of a low level thing (Like how you won’t find any encryption in TCP because that comes later), It really needs good apps built on top to be useful.

                                                                            1. 2

                                                                              IPFS is a better bittorrent, which is designed to work very well as a replacement for the public web. Private sharing has different requirements – I use syncthing for a similar semantic in private.

                                                                              1. 1

                                                                                Do you guys know about upspin ? What do you think of it ? One if its stated goal is security. But it seems to be at quite an early stage for now.

                                                                              2. 2

                                                                                Interesting. I bet a lot of inserters aren’t aware. Sounds like a great opportunity for bots that:

                                                                                • look for copyrighted/illegal content, the IP addresses of the nodes seeding them, automating contacting the ISP
                                                                                • Scan for cryptocoin wallets/private keys
                                                                                • Unencrypyted keepass backups, etc

                                                                                More relevant to the article though, I like the Rust code. Very readable!

                                                                                1. 5

                                                                                  IPFS is basically just a big torrent swarm. Doing that “copyrighted content scan” thing on the bittorrent DHT is already possible (and I’m pretty sure that’s how they send those notices already)

                                                                            1. 2

                                                                              Is there really an “emerging idea of language-oriented programming, or LOP” as the article states? The way I see it, most modern languages are carefully crafted to balance their features (in their type and effect systems) such that I see little room for the modularity that LOP would require. I’ve never heard the term before. It sounds like we have extended the hierarchy upwards but I am not yet convinced:

                                                                              • LOP
                                                                              • Embedded DSL
                                                                              • Framework
                                                                              • Library
                                                                              • Functions, Methods
                                                                              1. 4

                                                                                I imagine people made a similar arguments against objects in the early 80s. When languages did not natively provide support for objects, it was so inconvenient that people hardly ever used them, so they necessarily felt “we have extended the hierarchy upwards but I am not yet convinced”. Now we can’t get them out of our languages even if we try. (-:

                                                                                Where languages make it — by design or by accident — easy to extend the language, language extension is rife. The paper mentions the case of JavaScript. Though JS was not invented with any meaningful metaprogramming capabilities, it left enough hooks that people have gone off and created all sorts of sub- and super-languages around it. This is also true in Ruby (“Ruby DSL” is a whole thing in itself), because Ruby also provides such hacks.

                                                                                Furthermore, a growing number of new languages have been adding macros: Scala, Julia, etc. You can view what has happened in Racket as a natural destination of where macros end up. We’re just ahead of the curve by about 20 years; there’s a good chance that as people start to use macros more in those other languages, they will slowly recapitulate all the lessons that we’ve learned, and end up creating similar solutions.

                                                                                1. 1

                                                                                  When a language has an advanced type or module system, this cannot be easily extended. The language can still implement a macro system to accommodate developing patterns (like deriving RPC interfaces, support logging, or serialisation) to help cut down boilerplate code but there are limits to that. A term like LOP suggest a language can be assembled from building blocks and my lack of conviction is around that aspect.

                                                                                  1. 2

                                                                                    Well, no, LOP does not imply that a “language can be assembled from building blocks” — that is sometimes a consequence, but it isn’t part of the definition. The point is simply that every program has lots of small languages that are itching to surface, and languages should make it possible to do so — not in an ad hoc way, but in a way that lets those languages be turned into abstractions in their own right.

                                                                                2. 3

                                                                                  It sounds like metaprogramming with DSL’s just with a new method. Language-oriented programming might be a more approachable term for that, though. If I heard it, the first things I’d think of were tools such as Rascal and Ometa that let one arbitrarily define, operate on, or use languages. That covers language part. Far as integration, a number of techs supporting DSL’s… probably a lot of LISP’s and REBOL… had a powerful language underneath one could drop into.

                                                                                  So, this seems like a new instance of old ideas they’re giving a new name. I do like how they’ve integrated it into a general-purpose, GUI-based, programming environment instead of it being it’s own thing like Rascal. An old idea I had was researchers should do more experiments in building things like Rascal or Ometa alternatives in Racket leveraging what they already have to see how far one can stretch and improve it.

                                                                                  1. 2

                                                                                    Terra is another language in the “make DSL’s” approach to programming - although more geared towards lower level programming I think.

                                                                                1. 1

                                                                                  Does anyone use J? When I looked it up it looks like a code golf language.

                                                                                  1. 3

                                                                                    @hwayne has done two write-ups on it he submitted here to Lobsters:

                                                                                    Handwriting Programs in J

                                                                                    Calculating Burn Rates in J

                                                                                    1. 3

                                                                                      It’s terse but useable. The environment/REPL is quite nice. I wrote a post about the J FFI a while back.

                                                                                      1. 2

                                                                                        The environment/REPL is quite nice.

                                                                                        Less famously than the symbols/terseness, this has been a big part of the APL-family ethos over the years too, which is an interesting combination. There’s an anecdote claiming that the original APL having a conveniently interactive time-sharing interpreter, in the era when most stuff was run as batch jobs, was even the main reason APL became established within IBM:

                                                                                        The history of APL at IBM has been a curious one. In the early days, those of us who believed in APL were regarded as being a little (perhaps more than a little) strange. Since much of the strangeness was concentrated in IBM Research, this was tolerated. Practical people (the kind of people who make sales and meet payrolls) expect research people to be strange and are usually disappointed when they’re not. So the strange people in Research were written off as overhead and left to amuse themselves with their incomprehensible, impractical symbols.

                                                                                        What that particular Research group did, of course, was produce the most solid, dependable, useful time-sharing system anyone had ever seen. I wish I could tell you what it felt like in those early days to have the use of a system that was up twenty-four hours a day, seven days a week. No one had ever known such a luxury. People who didn’t bother to investigate never believed us when we told them about it.

                                                                                        But some people did investigate what the researchers had developed and started to use it to do IBM’s key bread-and-butter applications. This way of doing business was so productive that it spread like wildfire. By the time the practical people found out what had happened; APL was so important a part of how IBM ran its business that it could not possibly be uprooted.

                                                                                        1. 1

                                                                                          Do you know how to access a global variable from a library? Such as extern WINDOW *stdscr;.

                                                                                          1. 1

                                                                                            Unfortunately I don’t know of a way, other than wrapping it in a C function to return the pointer, sorry.

                                                                                        2. 2

                                                                                          I have a simple lbfgs ported to J. If anyone is interested, https://gist.github.com/jxy/9db97e44708d0946c3da2d7e82fefcd0

                                                                                          1. 2

                                                                                            It makes a fantastic calculator.

                                                                                          1. 2

                                                                                            This is nice. There have been ports of Inferno to run on Android before, but not as an app, for example Hellaphone. I’ve often thought a neat project would be to have an Android launcher that used Inferno, so it wouldn’t require rooting a phone to run. This project gives an idea of how it could work.

                                                                                            On the inferno mailing list there have been suggestions to write apps that expose phone functionality using the Styx protocol to enable Inferno to access it. I gave an example of how sharing resources on the phone could work using Hellaphone a few years ago.

                                                                                            1. 2

                                                                                              I tried to install it on my 2012 Nexus 7” running cyanogenmod, system was not happy, will try and follow up with the project and see where the issue lies. Would be cool to have it running.

                                                                                            1. 2

                                                                                              that’s pretty exciting! i was just this weekend looking at the oz/mozart home page, wondering if the language were dead or not (i wanted to use it for a small project, just to play with it, but concluded that it did indeed look unmaintained)

                                                                                              1. 3

                                                                                                I use Mozart/Oz in projects and help keep the bitrot away from the 1.3.x and 1.4.x versions. The Mozart 2 version runs but is lacking features - distributed objects and constraints being the most notable. I feel like there needs to be a “1.5” interim release, maintained and with binaries, to show activity.

                                                                                                The project tends to suffer from being used as a university/research project. People do work on masters thesis to contribute a feature to it, then they disappear and that feature doesn’t get maintained, extended, made production ready, etc.

                                                                                                That said, it’s still a great system to use.

                                                                                                1. 2

                                                                                                  i should have known that if anyone was using it you would be :) do you have a more recent version of 1.4.x than the one in the repo, or have you been pushing all your changes?

                                                                                                  1. 2

                                                                                                    I’ve pushed all my changes so it should build on Linux at least. I recommend using the 1.3.x branch as 1.4.x has some annoying bugs. Distributed search is broken, distribution statistics don’t work, due to a switch to a C++ based library to do object distribution and bugs didn’t get ironed out. It only matters if you plan to use those features though. I’ve backported some of the actual bug fixes from 1.4.x to 1.3.x.

                                                                                                  2. 1

                                                                                                    What do you use it for?

                                                                                                    1. 3

                                                                                                      Originally I wrote a bitcoin mining pool using Mozart/Oz, before transitioning it to ATS. Current usage is for deployment and management of a couple of servers. It uses the distribution features, and constraints solving, to work out what to install, uninstall, etc based on changes to configuration files. It has a user interface using the Roads web framework. It’s a toy system I built to explore ideas as an ansible alternative. I’ve done various incarnations in Prolog and Mozart/Oz.

                                                                                                      What might interest you is some old articles on using Mozart/Oz for proving things. See “A Program Verification System Based on Oz”, “Compiling Formal Specifications to Oz Programs” and “Deriving Acceptance Tests from Goal Requirements” in Multiparadigm programming in Mozart/Oz.

                                                                                                      1. 1

                                                                                                        I saved it for when I have Springer access. I am interested in it as a multiparadigm language as well. Did you find the constraint solving to be as good as an industrial solver integrated with a good 3GL? Or still better for performance or usability to just go with dedicated tools? I know a lot of people liked that Prolog could do some forms of parsing or solving but language made it harder to use some better methods. I figured something similar could happen with Mozart/Oz trying to do too many paradigms at once.

                                                                                                        1. 4

                                                                                                          The constraint solver in Mozart/Oz has many interesting features, but in the end it is, IMHO, just too old to be competitive with a modern solver.

                                                                                                          For constraint solving, I would probably use Gecode, or_tools, or Choco depending on the particular use-case one has and the technical requirements. If money is not an issue, IBM CP Optimizer seems to be very very good.

                                                                                                          To explore a particular problem, I typically write the model in MiniZinc since it is a reasonably high level modelling language that allows me the switch between solving backends. In particular, I like that I can try out a problem with both a normal solver (such as Gecode) and a lazy clause generation solver such as Chuffed.

                                                                                                          Of course, the particular problem might be better suited for SMT solving (using Z3), MIP solvers (CPLEX or Gurobi), or perhaps a custom algorithm.

                                                                                                          Another thing to consider is correctness. Optimization systems such as constraint solvers are a complex pieces of software, with lots of possibilities for bugs. Off-by-one errors in particular are very common. If I were to depend on an optimization system, I would prefer one that is maintained, has been around for a while, and that has a reasonably large set of automated tests.

                                                                                                          1. 1

                                                                                                            Thanks for the great summary!

                                                                                                            On related note, if you’re into CHR, I just submitted a paper that shows how they compile it to C language. MiniZinc and CHR were most interesting languages I found looking for basic info on constraint handling.

                                                                                                          2. 2

                                                                                                            I haven’t used an industrial solver in anger - other than using Z3’s integration with ATS. But the Mozart solver seems to work well, and has features to distribute amongst multiple machines for larger problems. It has tools to visualize and explore the solution space and the ability to customize and add features to the solver in Oz. It’s a pretty old system though and I know that Mozart 2 intends to replace the Oz solver with gecode to get some newer features.

                                                                                                            The “too many paradigms” is an issue in that it can be hard to decide how to approach a problem. Do you use OO, functional, relational, etc. So many choices that it can be paralysing.

                                                                                                  1. 1

                                                                                                    Is there an OpenBSD port for Oz anywhere? I can attempt to compile from source, but I’m hoping there’s something easier.

                                                                                                    1. 2

                                                                                                      Not that I’m aware of. Hopefully it’s buildable. The main issue is the code base is older C++ so some warnings/errors in current compilers need to be disabled. It’s also 32-bit only. Mozart 2 is 64 bit but lacks the constraints and distribution libraries.

                                                                                                    1. 2

                                                                                                      Have you looked into ZeroNet?

                                                                                                      1. 3

                                                                                                        I have, but it requires a Bitcoin wallet and downloading a binary. Whatever I end up using needs to be simple and accessible enough for me to convince at least some of my friends to use.

                                                                                                        It needs to be the kind of thing where privacy is inside the Trojan Horse. The experience is great, and if you happen to care about it, it also has privacy. It can’t be the kind of thing where the user has to jump through hoops.

                                                                                                        1. 3

                                                                                                          ZeroNet doesn’t require a bitcoin wallet. In fact it doesn’t use bitcoin at all. I don’t know why this became a thing. Maybe because ZeroNet site addresses are valid bitcoin addresses, and you can import the private key for a site into bitcoin if you want, then people can send coins to your site address and you can receive them. I don’t know of anyone who actually does this though.

                                                                                                          You don’t need to download a binary. It’s written in Python and open source. Clone the repository and run if you want. If you have non-tech friends there are “bundles” which contain everything needed to run and stay updated.

                                                                                                          I wrote about using their decentralized microblogging system on a post about ZeroMe if you want to look at it further.

                                                                                                          1. 2

                                                                                                            In fact it doesn’t use bitcoin at all.

                                                                                                            Huh, that’s new to me. I had assumed it was more deeply tied in because the front page mentions bitcoin prominently, and even uses the phrase “your bitcoin wallet” (which seems to imply I have one). Although on closer reading, to be fair, it just says that it uses “the same cryptography as” my bitcoin wallet, not the actual wallet. There’s also another blurb saying “Decentralized domains using Namecoin cryptocurrency”, which added to my impression that I probably needed to be deep into the cryptocurrency scene to use this.

                                                                                                            I’ll give it another look!

                                                                                                      1. 4

                                                                                                        As far as I can tell, underneath the actor model Pony is feeding multiple native threads using a work stealing algorithm? Basically: does Pony have parallelism, and not just green threads?

                                                                                                        And what is the story with frame pointers? I’d like to know if DTrace can be used on it.

                                                                                                        1. 5

                                                                                                          There was actually a pretty interesting article posted the other about dtrace and Pony.

                                                                                                          https://lobste.rs/s/d5ndrg/dynamic_tracing_pony_python_program_with

                                                                                                          1. 3

                                                                                                            Yes, multiple native threads with a work stealing algorithm. Pony has parallelism.

                                                                                                            1. 3

                                                                                                              To build on doublec’s comment… there are no green threads in the Pony runtime.

                                                                                                              1. 1

                                                                                                                A few more questions, if you don’t mind. I wasn’t able to find answers to these with preliminary Googling:

                                                                                                                Are floats boxed in Pony? Does Pony support multidimensional arrays? Is the GC a copying collector, or do objects stay where they were allocated? How difficult would it be to create objects over existing data in memory (i.e. a mmapped file)? And does Pony use %rbp as a base pointer, or rely entirely on DWARF to figure out a stack frame?

                                                                                                                1. 2
                                                                                                                  • Are floats boxed in Pony?

                                                                                                                  It depends. A float could end up boxed but F32 and F64 are not boxed by default. https://www.ponylang.org/reference/pony-performance-cheatsheet/#boxing-machine-words

                                                                                                                  • Does Pony support multidimensional arrays?

                                                                                                                  You could design a class to do it, but there’s not builtin type for them. There’s a RFC process to can be used to add new features. https://github.com/ponylang/rfcs/

                                                                                                                  • How difficult would it be to create objects over existing data in memory (i.e. a mmapped file)?

                                                                                                                  It depends.

                                                                                                                  You’d might need to have access to be able to operate on pointers to do it. This is currently limited to some builtin classes like String and Array. We are planning on adding a capability that would allow non-builtin classes to use Pointers within Pony (as compared to C-FFI).

                                                                                                                  OTOH, you might be able to do it now. Really it depends on what you would need to do. If you could represent the memory mapped file as an Array, (which you probably can), then you should be able to leverage existing functionality to do what you want.

                                                                                                                  • And does Pony use %rbp as a base pointer, or rely entirely on DWARF to figure out a stack frame?

                                                                                                                  That I can’t answer. I’ve never gone looking. Pony uses LLVM. I’ve never had a need to check out what is happening yet.