The Blech Programming Language
blech-lang.org
blech-lang.org
From what I understood, Blech's solution for concurrent data access is this: 1. Writes are queued during 'reactions' and applied in-between 'reactions', last write wins. 2. Static analysis ensures, that there is only one writer for each global variable in so-called 'fork-join scope', I guess it's a scope of code that can be executed during one 'reaction'.
This is conceptually somewhat similar to MVCC, but only one writer is allowed.
Anyway, how does it compare to Lustre for example?
https://www.blech-lang.org/blog/2020/08/12/push-button-handl...
Also, figured out the "compiler" transpiles to C. Which seems reasonable given that it targets embedded real time.
There's also no need to "figure out" that it compiles to C. That's in the second line of the front page.
They have a pretty good write up about the design of the language.
Programmers are all hung-up on syntax, when semantics are key.
Pretty sure that isn't just me. It's a common path that works better if you have the docs for it, versus "download this tar.gz file".
Had I been on my desktop, that would have worked okayish. My mobile doesn't like tar.gz files, so I was stuck.
It's an opportunity to grow with mimimal effort.
https://doc.rust-lang.org/book/ch04-01-what-is-ownership.htm...
The 2nd search result for "golang goroutines" is gobyexample.com, which is 1 page, half of which is code:
https://gobyexample.com/goroutines
I need to see code to understand semantics. Otherwise I'm being asked to visualize something that is better displayed on-screen. Why am I doing the computer's job?
It contains some real world, which is what embedded is all about.
And here I thought it was gonna be some kind of comedy programming language; in English “blech” is an interjection expressing disgust.
It sounds like the German uses a long "a" sound for the vowel. Liked you'd expect from "é" in a French word.
When I hear people say "blech" (the interjection) in English, the "e" is pronounced the same as first the "e" in "methadone".
But it can have a negative connotation in German too, unsure if the author of the language is aware of that.
[0] https://www.youtube.com/watch?v=l9AmJTKYmZE&ab_channel=Visua...
Not really. Blech means sheet metal or tin. Bare metal would translate to "blankes Metall".
https://www.discogs.com/Various-Blech/release/30565
https://www.discogs.com/Various-Blech-II-Blechsdöttir/master...
They could at least link to a Git repo.
When I click on the GitHub icon on "Download" it doesn't take me to GitHub.
When I click on "Contributing to Blech" the page is empty.
A repo with a README.md and bare uncommented source code would be more useful.
https://github.com/frameworklabs/blinker
That said, they also do give fairly comprehensive set of examples: https://www.blech-lang.org/docs/examples/
Looking at a 270+ loc example called 'virtualSafeLock.blc', picking a random initial example. (It's a pain, you have to unzip code archives, but it's there.)
If you want 100 people to view your website, isn't it fair to spend 50x of your own time as you can save of the viewer's time?
I remember working with TI C5x DSPs which had 16-bit "bytes", but that was a long time ago. I'm curious whether there are still important embedded platforms that you might target with C and have unusual addressable word sizes.
Arduino is three things: an IDE, an actual development board and a hardware abstraction library. You only want the last one.
PlatformIO is a tool like npm or cargo - it manages dependencies and tool chains for you. It also has an IDE in the form of a VScode plugin, that is pretty nice, but you can also the CLI tools only (which I do).
Adafruit is a great company making development kits - PCBs with microcontrollers you can program. They also make a lot of breakout boards - i.e. sensor on PCBs that are easy to connect to the development kit. They also write libraries AND they write great tutorials.
If you like Python, there is also MicroPython - it isn't fast, but it is easy to use, you probably already know Python, and you still learn about embedded topics like GPIO, I2C, SPI and so on.
If you are into Rust, there is a strong working group for embedded in the Rust community and they also have some nice docs. Not so much entry level, tough.
The key is having a particular driving reason / motivator. I.e., learning the skill is a necessary hurdle towards some larger goal that you actually care about.
But maybe that's just me. I have a tendency towards procrastination and laziness, so I need a toolbox of tricks to not just sit around all day playing video games.
The only motivators that have really worked for me are goals that I truly believed matter. E.g., losing weight to live longer, learning about compiler internals to keep making money for my family, learning certain woodworking skills because I really want parts of my house to not look terrible, etc.
Fortunately, I often find that I enjoy those intermediate steps/learning that I need to accomplish those real goals. E.g., I never would have expected to find compiler internals or woodworking to fascinating, but they became so when I needed to learn them.
But I've never had luck, for example, saying "I really want to learn how to write GUIs with Rust. What end goal could I create to motivate that?" I just never end up making time for those pursuits.
It allows writing reactive subprograms and combining them both sequentially and concurrently. Blech compiles to clean C, which may be integrated into existing projects or simulation frameworks.