6 ms·
This is definitely an interesting thought. My thinking is that "the fun stuff" tends to help make the language more functional, so removing it you are left with
by jfecher 4y ago
This is definitely an interesting thought. My thinking is that "the fun stuff" tends to help make the language more functional, so removing it you are left with a more imperative language resembling a C clone with traits and type inference. Then if you want easier C interop you must remove traits and either remove modules as well or provide a standard method of mangling module names into function names. At that point I think you may as well use an existing "better C" language like Odin, Zig, Jai, C3, etc.
- trumpeta 4y agowhat makes Ante low level? Just from a cursory look over the website seems pretty high level to me.
- jfecher 4y agoMy definition of low level is no tracing GC, values are unboxed by default, and users still have control to do low level things (raw pointers, other unsafe operations) when needed, even if it is not the default.
- IncRnd 4y agoThe generally accepted definition of a low level language is a language that provides little or no abstraction from a computer's instruction set architecture. In actuality, C is a lower level functional programming language than Ante, because C functions are first-class citizens. I like the lack of GC! What is the method for always incremental compilation? The benefits are obvious, but isn't it problematic to have two authoritative representations of the same source? It would be fantastic if you get that to work well!
- Warwolt 4y agoEh, isn't it a bit of a stretch to claim you can program functionally in C? You can mimic it, but without easy closures you can't follow _any_ functional programming patterns that are built on composing functions into new ones in expressions (e.g. binding the operation argument to a fold) C is great, and it would be cool to see something that is similarly close to the instruction set but has functions as values
- IncRnd 4y agoA functional programming language is a programming language in which functions are first class citizens. C is such a language. Of course there are many programming patterns that are in more acceptable functional programming languages than C. Whether a programming language is considered functional is not the same as which patterns are supported in the language.
- lptk 4y agoYour idea of what FP means is completely nonstandard. For the record, there is not one accepted definition, but we can get close by saying that FP languages are those based on lambda calculus as their semantics core. And the primary mechanism in lambda calculus is variable capture (as done in closures). C is based on the Von-Neumann model and has absolutely nothing to do with the lambda calculus. No reasonable PL expert considers it functional.
- deleted 4y ago[deleted]
- scns 4y agoThere is a book about it [0], you can download it here [1]. It uses SML to teach FP. I did the exercises on the train in Termux and Vim. [0] https://www.semanticscholar.org/paper/Functional-C-Hartel-Muller/31acb7abaf3a1962b27be9faa2322038d1ac9ed7 https://www.semanticscholar.org/paper/Functional-C-Hartel-Mu... [1] https://ris.utwente.nl/ws/portalfiles/portal/5128727/book.pdf https://ris.utwente.nl/ws/portalfiles/portal/5128727/book.pd... (edit) add download link and background.
- nrclark 4y agoFwiw C is actually a huge abstraction over modern hardware. It's a good representation of the PDP-11 and similar-era computers. It's also a good abstraction for modern microcontrollers. C's view of the world is also a really poor fit for today's larger CPUs. Your computer has to jump through a ton of hoops to make itself seem C-like. C has no concept of vectorization, speculative execution, branch prediction, multiple cores, caches, MMUs, etc. For basically any desktop/laptop/smartphone CPU, the C runtime is more like a little VM than an accurate model of the hardware underneath.
- zasdffaa 4y ago> C has no concept of vectorization OK, but vectorisation is exposed by the instruction set, as instructions[1] > speculative execution, branch prediction, ... caches, MMUs How would you expose speculative execution & branch prediction? Cache behaviour is well understood so what's wrong with it? What would you do to expose MMUs to the programmer, and what would they do with it/how would it help? [1] but aren't there libraries that expose it just fine in a portable way?
- ncmncm 4y agoSpeculative execution and branch prediction are adaptations to compensate for C's failings as a description of desired semantics. But they are thoroughly ingrained into the technology, and will not easily be rooted out.
- zasdffaa 4y agoYour first sentence doesn't answer any question. The second is irrelevant. Please make some concrete suggestions.
- ncmncm 4y agoThere seems little value in "exposing" crap we would be better off not building in the first place. The more expressive your language is, the less the runtime and hardware needs to guess about.
- ncmncm 4y ago> My definition of low level is ... This is a very deep and mature assessment. I have high expectations for the future of Ante. Higher than Rust, in particular, provided it supports some analog of destructors.
- tonyg 4y agoThere's a lovely Perlisism for this: "A programming language is low level when its programs require attention to the irrelevant." Which is interesting in this context because it's clearly not a good fit for Ante, where it looks like many traditional features of "low-level" languages no longer require such attention! So maybe it's not Perlis-low-level; maybe it's "machine-oriented"?
- deleted 4y ago[deleted]