keywords
hylo
keywords | hylo | |
---|---|---|
6 | 54 | |
184 | 1,117 | |
- | 2.4% | |
2.8 | 9.9 | |
11 months ago | 4 days ago | |
Go | Swift | |
GNU General Public License v3.0 or later | Apache License 2.0 |
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.
keywords
-
Fourteen Years of Go
> I'm not sure here how you differentiate minimalist from restrictive.
The flexibility of the language and its syntax. The more constructs are syntactic, the less minimalistic it is, and Go is a very syntactic language.
> I've always considered Go to be minimalist in terms of available tokens to the programmer: https://github.com/e3b0c442/keywords/blob/main/chart.png
No language on this chart has even a passing resemblance to minimalistic. I don't think anything does when it reaches double digit keywords.
For reference, I believe Smalltalk has 6.
And forth is more complicated because it doesn't really have keywords at all, and barely any syntax, instead it has assembly-coded / runtime-provided words (~functions) and variables. SectorForth (https://github.com/cesarblum/sectorforth/) is down to 8 builtin words, 2 IO words, and 5 variables (milliforth packs those behind a word instead). And so far 2 of the words have been found unnecessary / redundant.
- So, What's the Advantage of Having Minimal Built-Ins?
-
C++ at the End of 2022
> I like Rust's pragmatism.
Me too.
But Scala is also a very pragmatic language. If you want something academic go for Haskell.
> Allow limited operator overload.
Nitpick: Scala does not have any operators. So it doesn't have operator overloading at all.
Scala simulates operators by infix method syntax.
Instead of writing `1.+(2)` you can just write `1 + 2`. But the later is the same method call as the first one!
> Eschew HKT for a simpler abstractions.
AFAIK HKTs are more or less "just postponed" in Rust, AFAIK.
People would like to add them of course. The discussion goes on forever by now. Some small insight (there is much more when you look for it):
https://github.com/rust-lang/rfcs/issues/324
https://internals.rust-lang.org/t/higher-kinded-types-the-di...
> Don't go in the deep end with type power, nor too much in opposite direction and avoid any complicated feature.
While having a full ML style type system with afine types on top, and quite some other type level mechanics up to singleton types?
Sure sure, no power in here. :-)
> The more powerful feature the more abusable it is, and Scala loves the power at all cost.
Everything is "abusable". This is not an argument.
But that Scala loves power at all cost is simply not true. The contrary is.
Just to cite one of the most influential post in Scala land of all times:
https://www.lihaoyi.com/post/StrategicScalaStylePrincipleofL...
This, and the BDFL constantly complaining about unnecessary complex code people write speaks for itself.
Scala lately even reduced the power of some features just to prevent "abuse". (Which is partly an overreaction; but that's another story).
> Why would anyone care? The more flexible/powerful something is the harder it will be to parse by humans and tooling.
That's also not true.
Scala has a very small and simple syntax (despite all the language features).
Scala is on the surface much much simpler and much more regular then Rust!
https://github.com/e3b0c442/keywords
(You could also compare the language grammars. This would be even more in favor of Scala in this regard).
Scala 3 looks even almost like Python!
https://docs.scala-lang.org/scala3/book/scala-for-python-dev...
> Plus Scala has the big deal breaker. GC and no custom primitive types.
What a "deal breaker"?
https://github.com/carbon-language/carbon-lang/blob/trunk/do...
You've seen this here in the thread?
Also:
https://docs.scala-lang.org/overviews/core/value-classes.htm...
As soon as Valhalla lands in JVM-land this will be full blown value types without any limitations.
And in Scala Native you can have of course native structs today. (Only that Scala Native isn't ready for prime time just now).
In the long run Scala Native could also run without GC. The Caprese project will bring something that is more powerful than Rust lifetimes. Lifetimes will fall out as a special case of a more general concept.
> > Besides that: The Rust people are looking envious. I've read about some ideas that were more or less a direct copy of Scala's implicits.
> What do you mean exactly?
Implicits get discussed every now and than in Rust land. Even the above Rust internals discussion start with them.
Or this here:
https://tmandry.gitlab.io/blog/posts/2021-12-21-context-capa...
Also I've once read something that looked like a brain storming for future Rust features. They came up with more or less implicits (only that they didn't call them like that, so I can't find this any more, didn't bookmark it).
Someone even once proposed directly Scala's implicits for Rust. But this went nowhere as the other people on the forum actually didn't understand them (which was no wonder as the example was quite terrible and the proponent was not really experienced with Scala so couldn't explain it well). People came than to quite wrong conclusions (some of them even mixed implicits in general even the dreaded implicit conversions, which were in fact mostly overused and caused trouble in Scala; but things got redesigned exactly because of that).
-
What are the "meta principles" for all programming languages?
Check out: https://github.com/e3b0c442/keywords
-
How would you rate the following languages in order of difficulty?
In order to actually answer your question in some form: Here’s a list of programming languages ranked by number of keywords.. Looking at this list, consider that PHP used to be considered a beginner friendly language and that Java is often chosen as the first language for new CS students. Your question seems to be difficult to answer!
hylo
-
Vala Programming Language
Or Val[0], now called Hylo (for a good reason), or V[1].
[0] https://www.hylo-lang.org
-
Cpp2 and cppfront – An experimental 'C++ syntax 2' and its first compiler
The evolution of C++ has been a multi-decade history of dealing with difficult reality.
I have great hope that Herb can create with his cppfront project “The Very Best of C++” to carry that tremendous legacy forward.
If I was to throw my hat into a “C++ successor”, it would be https://www.hylo-lang.org/ with its “all the safeties” and “tell you when you’re doing it sub-optimal” approach.
-
Borrow Checking Hylo [video]
Paper: https://2023.splashcon.org/details/iwaco-2023-papers/5/Borro...
> Hylo is a language for high-level systems programming that promises safety without loss of efficiency. It is based on mutable value semantics, a discipline that emphasizes the independence of values to support local reasoning. The result—in contrast with approaches based on sophisticated aliasing restrictions—is an efficient, expressive language with a simple type system and no need for lifetime annotations.
> Safety guarantees in Hylo programs are verified by an abstract interpreter processing an intermediate representation, Hylo IR, that models lifetime properties with ghost instructions. Further, lifetime constraints are used to eliminate unnecessary memory allocations predictably.
https://www.hylo-lang.org/
https://github.com/Hylo-lang/Hylo
- Hylo a programming language that tries to be safe and fast
- Odin Programming Language
-
Why do lifetimes need to be leaky?
A model without lifetimes is also being explored in other languages, e.g. in Hylo. It sacrifices expressiveness, but on the other hand you don't have to deal with explicit lifetimes!
-
D Programming Language
Why go through all the trouble when you can do this: https://www.hylo-lang.org/ and not spend a second thinking of lifetimes? No, copies will not be issued unless necessary.
Or why not keep exploring this idea as well? More research-oriented than the first one right now, though, so take it with a grain of salt: https://vale.dev/
- Berry is a ultra-lightweight dynamically typed embedded scripting language
-
I've heard that "Rust's borrow checker is necessary to ensure memory safety without a GC" usually also implying it's the only way, but I've done the same without the borrow checker. Am I just clueless/confused?
Get rid of references at the cost of some expressivity (see Hylo, formerly Val)
- Rename 'Val' to 'Hylo'