Programming language development: the past 5 years (2011)(blog.fogus.me) |
Programming language development: the past 5 years (2011)(blog.fogus.me) |
However, until I can manually control memory it's not going to be a low level language I want to use.
As for Go, it is fully bootstraped in itself, including the whole runtime.
There are already some bare bones examples at OS Dev
http://wiki.osdev.org/Go_Bare_Bones
And there are people writing bare metal runtimes for the STM32F4 and STM32L1-Discovery boards.
https://sites.google.com/site/embeddedgo/home
For me that is a system level programming language.
There's so many things missing from Go, from volatile semantics to memory control(good luck getting memory banks on PIC working).
Just because you can do something doesn't mean it's a good fit.
https://en.wikipedia.org/wiki/Oberon_%28programming_language...
https://news.ycombinator.com/item?id=3128166
Even if you're being half-facetious...while CoffeeScript seems to have fallen in favor with the onset of ES6, it's hard to overstate its influence in 2011...Rails, which was most definitely the hott framework du jour, decided to make CoffeeScript -- along with the much more ubiquitous jQuery and SASS -- part of its default stack: http://www.rubyinside.com/rails-3-1-adopts-coffeescript-jque...
Notice the mention of Dart and Rust as up-and-comers.
No, technically it's a type of vegetable.
1. Why explicitly call `prolog?` function? Why not make it implicit, so user could use, for example, `member` function (defined via `defprolog` notation) as a normal function?
2. Automatic partial application. I see that example was simplified, but then how it looks in reality? Because I find (* 2) returning `lambda`, instead of 2 confusing.
https://en.wikipedia.org/wiki/Empty_product
I am talking about Empty Product.
In all Lisps I know ( * ) returns 1, (* n) returns n. Which makes sense.
Shen's example is confusing for me.
Its probably related to my age as well, but I haven't felt that way again for a long time now.
Johnny-Five? It isn't running on the Arduino.
A systems programming language is one that is possible to write the whole stack all the way from the boot loader, with a very tiny help from Assembly in the process, like bootloader, interrupt handling, DMA.
The day I am able to write a JavaScript AOT and JIT, in JavaScript, maybe.
As for volatile semantics, many system programming languages in the early days didn't had them as well.
PIC, well. How would you make PIC banks work in a standards compliant ANSI C compiler without language extensions?
With Assembly of course, so can Go.
Also nothing prevents a Go compiler to provide extensions just like what many think of C features for systems programming are actually not part of ANSI C.
Go already has "pragmas" in the form of //go:...... And nothing prevents a Go compliant compiler to provide more.
The code for Xerox Star, ETHZ Oberon, ETHZ EthOs, ETHZ AOS are available for anyone that cares to read them and how it is possible to write a full stack workstation.
Or better yet, getting the 2013 edition of Project Oberon book and building the whole computer, including the motherboard.
Π :: {a} -> a
So you could probably write your Unreal Engine game in Rust.