6 ms·
Blech Programming Language
- cyrc 6y agoBlech is a synchronous programming language for embedded, reactive, realtime-critical software. 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.
- TheNewAndy 6y agoIn writing performance critical cross platform embedded code, I have found that exact width integer types are less useful than the "minimum width" style types you get from plain C (e.g. you can't write cross platform code with an 8-bit exact width integer type, because there is no such type on some platforms). It is disappointing to see this language provides no such types.
- cesaref 6y agoWell since C99 there is an exact width C type for 8 bit ints, so i'm assuming you are targeting an obscure platform using a tool chain that is 20 years out of date
- Athas 6y agoThere is no guarantee that the hardware supports 8-bit numbers natively, and emulating them might be expensive. For embedded programming, it is sometimes useful to ask for a type that is at least 8 bits, but may be bigger.
- fanf2 6y agoThat’s what int_least8_t or int_fast8_t are for https://en.wikipedia.org/wiki/C_data_types#stdint.h https://en.wikipedia.org/wiki/C_data_types#stdint.h
- fjg 6y agoYou can choose to use int_least_8_t or int_fast8_t as the implementation type blc_int8 of Blech type int8 for code generation https://github.com/boschresearch/blech/blob/master/src/blechc/include/blechconf.h https://github.com/boschresearch/blech/blob/master/src/blech... So you can adopt to your needs on your platform.
- iainmerrick 6y agoOut of interest, are there particular platform(s) you have in mind? 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.
- petecooper 6y agoAh, Blech - fond memories of the mid-90s when these (completely unrelated) releases landed: https://www.discogs.com/Various-Blech/release/30565 https://www.discogs.com/Various-Blech/release/30565 https://www.discogs.com/Various-Blech-II-Blechsdöttir/master/2591 https://www.discogs.com/Various-Blech-II-Blechsdöttir/master...
- p4bl0 6y agoIt's a nightmare to find examples of Blech code on this website. All I could find after a dozen of clicks is zip archive to download that should contain sample code in them… Anyway, how does it compare to Lustre for example?
- tyingq 6y agoI had the same experience, but did eventually find this blog post with some example code snippets: https://www.blech-lang.org/blog/2020/08/12/push-button-handling/ 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.
- ivanbakel 6y agoThe compiler/transpiler distinction is very blurred. Nobody disputes that LLVM-IR-targeting compilers compile programs, but the LLVM IR is not an executable. `javac` "compiles" programs, but the JVM bytecode is not machine code. There's also no need to "figure out" that it compiles to C. That's in the second line of the front page.
- tyingq 6y agoI went straight to looking for code samples. Hence, "figured out". And I thought I was clear that transpiling to C made sense to me for this space. You seem to be reading something in my comment that I didn't intend to be there. Apologies for any unintended odd tone.
- turbinerneiter 6y agoMaybe don't to straight for code examples? They have a pretty good write up about the design of the language. Programmers are all hung-up on syntax, when semantics are key.
- ReactiveJelly 6y ago
- egypturnash 6y ago> The German word Blech roughly translates to bare metal. And here I thought it was gonna be some kind of comedy programming language; in English “blech” is an interjection expressing disgust.
- DoofusOfDeath 6y agoI couldn't remember how to pronounce the German "Blech", so I just looked it up. 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".
- danparsonson 6y agoI think Wiktionary disagrees, and I do too (but then again it's been years since I studied German): https://en.wiktionary.org/wiki/Blech https://en.wiktionary.org/wiki/Blech - there is a subtle lengthening of the 'e' in their audio clip, but it's very slight. No doubt there are regional variations though.
- DoofusOfDeath 6y agoI'm certainly not an authority on the topic. FWIW, here [0] is the basis for my original comment. [0] https://www.youtube.com/watch?v=l9AmJTKYmZE&ab_channel=VisualTerra https://www.youtube.com/watch?v=l9AmJTKYmZE&ab_channel=Visua...
- danparsonson 6y agoI see where you're coming from; I guess the difficulty is really that we're forced to use an approximation from English to describe it because we don't have a sound exactly like that (how does the 'e' in 'Blech' sound? like the 'e' in 'Blech'!)
- dj_mc_merlin 6y agoIt's just a normal length 'e'. About the same length as the 'ch' that follows. At least that's how I'd pronounce it. But it can have a negative connotation in German too, unsure if the author of the language is aware of that.
- 0x008 6y agoHow would one get into writing code for embedded devices or into embedded devices in general?
- DoofusOfDeath 6y agoOne lesson I've learned about myself, and it may apply to others as well: 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.
- 0x008 6y agoSo what are good things you can achieve? I for one would like to automate my plant watering, but I am not sure that is a compelling enough use case?
- DoofusOfDeath 6y agoI wish I knew. Personally, I've never had success in generating artificial end-goals for myself as a way to motivate learning, physical exercise, etc. 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.
- turbinerneiter 6y agoArduino, PlatformIO and Adafruit. 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.
- neurotrace 6y agoWhy is it so difficult to find example code? The very first thing that every programming language website should show is an example. Show me what sets your language apart from the others and let me see if I like the syntax.
- rwmj 6y agoI thought I'd reply to this with a more direct link to the examples, but ... you're not wrong at all, even after a bunch of navigation through the documentation I cannot find a single self-contained program. There are some one- or two-line examples that give it a little flavour, but nothing significant. The full program examples are zipped up and I'm not going to bother to download those.
- gkfasdfasdf 6y agoI finally found a few samples in the pdf tutorials. Agree putting some code samples front and center would be nice.
- sesm 6y agoSome code samples can be found in `test/blechc/codegeneration`, I guess they serve as compiler test cases.
- ReactiveJelly 6y ago> The full program examples are zipped up and I'm not going to bother to download those. 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.
- turbinerneiter 6y agoHere: https://www.blech-lang.org/docs/examples/ https://www.blech-lang.org/docs/examples/ - there are three examples in the form of GitHub repos: https://github.com/frameworklabs/blinker https://github.com/frameworklabs/blinker https://github.com/frameworklabs/react https://github.com/frameworklabs/react https://github.com/mterber/blech-dcf77 https://github.com/mterber/blech-dcf77
- progfix 6y ago> The German word Blech roughly translates to bare metal. Not really. Blech means sheet metal or tin. Bare metal would translate to "blankes Metall".
- jupp0r 6y agoBlech is sheet metal. It can be painted or bare, the term does not convey that aspect.
- sesm 6y agoTo me the most interesting part is this: https://www.blech-lang.org/docs/user-manual/moc/ https://www.blech-lang.org/docs/user-manual/moc/ 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.