
Blech Programming Language - cyrc
https://www.blech-lang.org
======
sesm
To 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.

------
p4bl0
It'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
I 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-
handl...](https://www.blech-lang.org/blog/2020/08/12/push-button-handling/)

Also, figured out the "compiler" transpiles to C. Which seems reasonable given
that it targets embedded real time.

~~~
ivanbakel
The 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
I 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
Maybe 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.

~~~
tyingq
_" Maybe don't to straight for code examples?"_

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.

------
egypturnash
> 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
I 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
I 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
I'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=Visua...](https://www.youtube.com/watch?v=l9AmJTKYmZE&ab_channel=VisualTerra)

~~~
danparsonson
I 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'!)

------
progfix
> 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
Blech is sheet metal. It can be painted or bare, the term does not convey that
aspect.

------
petecooper
Ah, 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...](https://www.discogs.com/Various-Blech-II-
Blechsdöttir/master/2591)

------
neurotrace
Why 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
I 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.

~~~
ReactiveJelly
> 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
Here: [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)

------
TheNewAndy
In 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
Well 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
There 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
That’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
You 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/blech...](https://github.com/boschresearch/blech/blob/master/src/blechc/include/blechconf.h)
So you can adopt to your needs on your platform.

------
0x008
How would one get into writing code for embedded devices or into embedded
devices in general?

~~~
DoofusOfDeath
One 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
So 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
I 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.

------
cyrc
Blech 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.

