ATS-Postiats
HVM
Our great sponsors
ATS-Postiats | HVM | |
---|---|---|
18 | 107 | |
349 | 6,981 | |
- | 2.5% | |
0.0 | 6.7 | |
about 1 year ago | 28 days ago | |
ATS | Rust | |
GNU General Public License v3.0 or later | MIT License |
Stars - the number of stars that a project has on GitHub. Growth - month over month growth in stars.
Activity is a relative number indicating how actively a project is being developed. Recent commits have higher weight than older ones.
For example, an activity of 9.0 indicates that a project is amongst the top 10% of the most actively developed projects that we are tracking.
ATS-Postiats
- Evolutie limbaje in industrie
-
The Little Typer – The Beauty of Dependent Type Systems, One Step at a Time
This is one of my two favorite books in The Little ...er series. The other is The Rational Schemer. These are two of the most advanced books in the series.
The Little Typer provides an introduction to dependent types. These can by used to guarantee things like "applying 'concat' to a list of length X and list of length Y returns a list of X+Y". It is also possible, to some extent, to use dependent types to replace proof tools like Coq. Two interesting languages using dependent types are:
- Idris. This is basically "strict Haskell plus dependent types": https://www.idris-lang.org/)
- ATS. This is a complex systems-level language with dependent types: http://www.ats-lang.org/
The Rational Schemer shows how to build a Prolog-like logic language as a Scheme library. This is a very good introduction to logic programming and the implementation of backtracking and unification is fascinating.
This is an excellent series overall, but these two books are especially good for people who are interested in unusual programming language designs. I don't expect dependent types or logic programming to become widely-used in the next couple generations of mainstream languages, but they're still fascinating.
-
The case against an alternative to C
> any safety checks put into the competing language will have a runtime cost, which often is unacceptable
This is completely wrong. The best counterexample is probably ATS http://www.ats-lang.org which is compatible with C, yet also features dependent types (allowing us to prove arbitrary statements about our programs, and check them at compile time) and linear type (allowing us to precisely track resource usage; similar to Rust)
A good example is http://ats-lang.sourceforge.net/DOCUMENT/ATS2CAIRO/HTML/c36.... which uses the Cairo graphics library, and ends with the following:
> It may seem that using cairo functions in ATS is nearly identical to using them in C (modulo syntatical difference). However, what happens at the level of typechecking in ATS is far more sophisticated than in C. In particular, linear types are assigned to cairo objects (such as contexts, surfaces, patterns, font faces, etc.) in ATS to allow them to be tracked statically, that is, at compile-time, preventing potential mismanagement of such objects. For instance, if the following line:
val () = cairo_surface_destroy (sf) // a type error if omitted
-
Security advisory: malicious crate rustdecimal | Rust Blog
For a low level language in which you actually need to prove that your code doesn't cause UB, see http://www.ats-lang.org/
-
Why is ATS not considered in the design of modern system languages?
Here's the homepage fo the language: http://www.ats-lang.org/. The trick to finding results about with google is to search "ATS programming language".
- Is it possible to make a functional programming language that is equivalent of Rust in terms of performance and resource efficiency?
-
Ask HN: What technology is “cutting edge” in 2022?
Another language I would add to this list is the ATS Language¹. First released in 2013, it tries to follow closer to performance and minimalism of C which can make it a good candidate for systems level programming.
-
Why Static Languages Suffer From Complexity
There is the ATS programming language. Though it is not very user-friendly :)
-
Are there any other programming languages that use a similar memory architecture?
ATS language and Pony are similar in that regard.
- Are there any ML style languages with no runtime?
HVM
- GPU Survival Toolkit for the AI age: The bare minimum every developer must know
-
A new F# compiler feature: graph-based type-checking
I have a tangential question that is related to this cool new feature.
Warning: the question I ask comes from a part of my brain that is currently melted due to heavy thinking.
Context: I write a fair amount of Clojure, and in Lisps the code itself is a tree. Just like this F# parallel graph type-checker. In Lisps, one would use Macros to perform compile-time computation to accomplish something like this, I think.
More context: Idris2 allows for first class type-driven development, where the types are passed around and used to formally specify program behavior, even down to the value of a particular definition.
Given that this F# feature enables parallel analysis, wouldn't it make sense to do all of our development in a Lisp-like Trie structure where the types are simply part of the program itself, like in Idris2?
Also related, is this similar to how HVM works with their "Interaction nets"?
https://github.com/HigherOrderCO/HVM
I'm afraid I don't even understand what the difference between code, data, and types are anymore... it used to make sense, but these new languages have dissolved those boundaries in my mind, and I am not sure how to build it back up again.
-
Can one use lambda calculus as an IR?
The most recent exploration of this, that I'm aware of is HVM (another intermediate language / runtime), although this one is not actually based on the lambda calculus, but on the interaction calculus.
-
The Rust I Wanted Had No Future
Then, actually unrelated but worth mentioning: HVM. Finally, something new on the functional front that isn't dependent types!
- The Halting Problem Is Decidable on a Set of Asymptotic Probability One (2006)
-
For those of you self taught,how did you cope with distractions while using a computer ?
In the interest of seeking ways of optimizing my code, I stumbled upon http://www.rntz.net/datafun/ as a means to do incremental computations of fixpoints while avoiding redundant work. And also the idea of automatic parallelism achieved by using Interaction Nets as a model of computation https://github.com/HigherOrderCO/HVM.
-
[P] I built a chatbot that lets you talk to any Github repository
I tried on https://github.com/HigherOrderCo/HVM but it couldn't load any .rs file it seems.
-
Higher-Order Virtual Machine (HVM)
The HVM project is incredibly interesting and I applaud the great work Victor Taelin has put in practically implementing Interaction Nets and popularising Linear Logic.
I've noticed HVM since February last year and was quite convinced that they were really up to something; however now that I've gone through a pile of papers on Linear Logic and the book which HVM is based on (The Optimal Implementation of Functional Programming Languages, Asperti and Guerrini, https://www.amazon.co.jp/-/en/Andrea-Asperti/dp/0521621127), I believe that among other things, the issue presented here https://github.com/HigherOrderCO/HVM/issues/60 is really a fundamental blocker to serving as a general purpose runtime, which it appears HVM attempts at.
Fundamentally HVM is an impressively optimised implementation of Symmetric Interaction Combinators, a variety of Interaction Net. Symmetric Interaction Combinators is not related to lambda calculus in a trivial way, and thus as noted in the README, HVM does not 'support' the full Lambda Calculus. In a vast majority of cases the HVM approach really does simply evaluate lambda terms at impressive speed, but the failure cases are quite tricky to handle, in that they will fail silently, simply evaluating the term incorrectly. This issue however, is acknowledged in the README and can be tackled by the method described there, or by type-checking for these 'failure' cases https://github.com/HigherOrderCO/HVM/discussions/97.
The issue mentioned in #60 however, seems to be quite fundamental - HVM makes lambda evaluation fast by implementing lambda evaluation in terms of Symmetric Interaction Combinators and making sure each operation SIC evaluates in constant time. This works in most cases, but as acknowledged in Asperti and Guerrini, in some cases the SIC representation of lambda terms simply become themselves very (exponentially) large. Victor appears to acknowledge that he is simply building a practical counterpart upon the theory as cited from Asperti and Guerrini, citing Asperti and Guerrini's 'safe rules', which has not yet been implemented, as his plan to prevent very large representations of lambda terms from occurring, but Asperti and Guerrini themselves acknowledge that their rules are probably incomplete.
The promise of HVM is that we have finally found a way to naturally implement the parallelism inherent in pure lambda terms, without special annotation or extra accommodation for the runtime. As it stands, HVM still falls short of the lofty dream.
This is where I do my best to NOT get too excited, but predictability is one of the most exciting aspects of HVM to me. That's because everything is linear, there are no thunks, so both memory and space usage is very predictable, in a way that feels like C, but even further, I'd say, since costs are completely measurable. For example, in the following GitHub issue:
https://github.com/HigherOrderCO/HVM/issues/167
I discuss how HVM is able to perform deforestin (one of the core techniques that made GHC so fast) "for free" at runtime, without being explicitly hardcoded, and being more general. Which is great, but the point I'd like to make here is how I show that: by measuring 'rewrite count' of different implementations with HVM's '-c' flag. It shows you how much space and "graph rewrites" a program evaluation took. Since each rewrite is a constant time operation, this gives you a very precise metric on the complexity of a program.
For example, on the issue above, I implemented two versions of the same function, and measured their rewrite counts. Here are the tables:
Fn V1
What are some alternatives?
Kind - A next-gen functional language [Moved to: https://github.com/Kindelia/Kind2]
rust-gpu - 🐉 Making Rust a first-class language and ecosystem for GPU shaders 🚧
lean4 - Lean 4 programming language and theorem prover
SICL - A fresh implementation of Common Lisp
Sharp-Bilinear-Shaders - sharp bilinear shaders for RetroPie, Recalbox and Libretro for sharp pixels without pixel wobble and minimal blurring
fslang-suggestions - The place to make suggestions, discuss and vote on F# language and core library features
atom - A DSL for embedded hard realtime applications.
chapel - a Productive Parallel Programming Language
Vale - Compiler for the Vale programming language - http://vale.dev/
jre-missing - Automatically detects and lists episodes of The Joe Rogan Experience podcast that are currently not available on the Spotify platform. Also detects if episodes have been shortened in duration.
imba - 🐤 The friendly full-stack language
Nim - Nim is a statically typed compiled systems programming language. It combines successful concepts from mature languages like Python, Ada and Modula. Its design focuses on efficiency, expressiveness, and elegance (in that order of priority).