The creator of the lang 😊. Gleam has the simplicity of Go with an functional paradigm. Love the use feature btw, it makes life simple. Still can't get nvim to go to definition on modules or imports. Can get over lay info. Any thoughts on what I'm doing wrong here? Works on vscode just fine
I feel like as a core formatter principle, your code should always result in the same format regardless of the path. If you want to use a different format i.e. always expanding pipes, then that should just be a formatter config flag. Otherwise you end up with code that looks different depending on who wrote it -- less desired for projects with many contributors.
@@fennecbesixdouze1794why. Going from not understanding the usefulness of a thing to knowing the usefulness and applications of it is immature and reactionary stupidity? So once I conclude something I don’t understand is useless I must stick to this conclusion regardless of the information given to me to change my outlook ? THAT would be childish
@@matress-4-2323 I've been keeping up with him for a while now, also im in his Discord. He's nice and has a great personality. Also, he's very inclusive and doesn't discriminate. Sounds like the opposite of a dictator to me. He's only dictator-ish when running his language, as he should be. That's why it's turning out so well and gaining populartity. He's not making the same mistakes as other language authors and trying to make Gleam the language that pleases everybody, because he understands that it will end up pleasing none.
I agree, what finally helped me using neovim was to just use it vanilla. Then downloaded Kickstart for configuring a theme and installing neovim-tree. Then I started playing with LSP. But I always try to keep shortcuts vanilla, if I need a script to do something, I ignore it. Lots of research of how to do things, but, things are slowly working out
14:18 you might want to doublecheck your NotNil assertions. This can be a bit tricky in go. Because the receiver type here is `any`, if you pass a value of for example type `*int` with a value of `nil`, the `item == nil` expression will not be true because when passing `*int` as `any`, the actual thing being passed is something like a tuple the value itself (nil) and the type, which together is then not `nil`, hence the `item == nil` check will not catch it. You can do a proper nil--check in this case using reflection only for example like this: ```go import "reflect" func isNil(v any) bool { if v == nil { return true } rv := reflect.ValueOf(v) switch rv.Kind() { case reflect.Ptr, reflect.Interface, reflect.Slice, reflect.Map, reflect.Chan, reflect.Func: return rv.IsNil() default: return false } } ```
Looking into Gleam as a C# developer. I agree throw is bad. I now use Union/Option types in C# just to avoid propagating throw's from a try/catch. Try/catch is an expensive for an application. I'll have to dig a little deeper into negative space programming, never heard of it until now. My apps can't crash but I can return a 500 status code so I have objects like Error, Threw, Panic to signal to the developer that there's a mismatch in the application state.
Prime still haven't seen the light of the type system… You can absolutely make invalid states unrepresentable and that makes a lot of asserts just pointless.
Wanted to add to the "types should make these states unrepresentable" try doing that across FFI with c. If your language has FFI then you need an assert barrier to make the types respected but if you assume that what you get is valid then your types break down, so you still need asserts to enforce the static side of the types. And of course as prime is doing has a runtime component you need assert barriers there too obviously
Well, duh. If you're doing FFI you either have to check the assumptions at runtime, hope things will somehow work out™ or bring static analysis (and maybe even formal proofs) to the table. But this is not what people mean when they advise you to use types though.
Oh yeah it definitely takes a bit of getting used to coming from other languages! Gleam’s Exercism track does a great job at helping you learn that if you’re interested
It is weird, but it does make a lot of sense without mutability and side effects, as you can't have an accumulator that you operate on for each iteration without mutability unless you use recursion
Love the language, was initially turned off by the code of conduct, but it seems they changed it or maybe I misremembered it. Definitely will give it a try
@@TravisBerthelot The difference is precisely that exceptions can be caught, which means you get to log the error and investigate it later, which makes the thing actually work. If you just crash, you may not even know _that_ there's something to investigate.
I like to fix one error at a time as well, but I've run into scenarios in the past where for example I need to ship a work project and I _know_ there are errors, but I don't know how many, or how complex, which makes it very hard to put an eta on a launch or even estimate how many resources you need to assign to a project.
Me too. The syntax changes closer to js, and they want to make it more uniform across targets. Gleam will probably never realize wasm, it's a different concept. The Gleam/erlang vm running can provide a backend itself, the js target just a "best match connector" on the front end. How could they possibly employ erlang concurrency as js? Probably not. It's a hard sell against wasm right now, yet Gleam makes a lot of sense to me for a backend postgres thing. A performance compare to Rust wasm on a backend would be cool.
What if you are processing 1000 records and the 57th record is bad but all the others are good. Assert would stop all processing. Throw is much better in this situation. You can throw on the bad record, catch it and write out to a log, then go on happily processing the rest.
In this situation, in a paradigm that doesn’t use try catch, you would just process the error as it comes in, rather than nebulously accepting *some* error and moving on as is standard with Python and Javascript. So, in Golang, the function I call would return a value and an error value, so I would check the error value before continuing. In Gleam (and I think Rust) your error would be part of the type of the return value, so you would pattern match for the error variant and handle it there.
@@jswew12 Okay, but in most languages that have try/catch/throw, they don't have functions that automatically package up errors in a return for you, so you would need to use a try catch, and importantly NOT an assert. Prrime's assertion (no pun) that try/catch/throw is ALWAYS bad is just incorrect.
@@jswew12 The point is not on exceptions vs errors as values, where the main issues are on the development side (ergonomics, refactorability, explicitness, etc -- one may prefer different tradeoffs here), but rather on _crash the entire world on assert violation_ vs _discard the current work unit._ The former will work, but will be a miserable experience if you have more than zero users.
@@TurtleKwitty If the "fundamental truths of your system" break down in such a fundamental way that you can't even log the error and exit gracefully, you can't reliably crash the program, either.
@@notusingmyrealnamegoogle6232 I know, but Primagen makes sound it like without an LSP its not possible to program. We had linter, formatter, debugger, tag files and such before too.
Up until about a decade ago when async/await became popular as a standard language feature, everyone had to roll their own. Might have to do that while we wait for Zig 1.0.
@@thedoctor5478 Not me, lol, that is not a trivial task just to become obsolete when it gets implemented at the language/stdlib level. I will just do without async for now, and use threads where performance is a factor and I can benefit from parallelism. I would actually prefer if they went in the direction of Go-like channels instead of the async/await pattern. Function coloring is annoying.
@@ForeverZer0 def non-trivial. Coloring is the worst. You could make a lib that doesn't color though, and thinking on like Python, there are multiple async libs. Idk how channels actually work to say anything about them tho. For that matter, idk how async works so good under the hood. I know it relies on the OS to perform work while it yields to the event-loop queue but idk how one would go about constructing such a call for say, an http request without blocking the thread. Magic. I feel like the best ever would be something like that new python-like lang (I forget the name) that multithreads everything automatically + async at the same time without coloring. I have made some libs that take advantage of both those ideas simultaneously but they eat a lot of mem.
@@thedoctor5478 By "non-trivial", I mean it is complicated problem to solve even for people who *do* understand it well and are far more experienced doing it than me. I think the language is Mojo? From what little I understand about it, it is targeting a specific kind of workload (i.e. AI), and would be horrible for general-purpose stuff.
Targeting both the beam and javascript runtimes makes no sense. The main advantage of erlang/elixir IS THE BEAM; It has features that do not exist anywhere else, and can accurately be called a "business logic operating system". "Language" is mostly irrelevant today. I want to know the underlying paradigm that the code is driving at runtime. When attemping to target two separate underlying paradigms there will always be a huge nasty layer of accommodations/abstractions and confusion at the tooling/user level.
Not at all! You’ll have a great experience even if you know zero erlang and just stick to pure Gleam. I for once know very little erlang and never needed it that much 😁
I wanted to parse eventsource streams from OpenAI and I instantly had to dive into erlang land which I don't know anything about. I love the language though, I'll wait for it to mature for a bit and dive back in
@@amogh708 Ruby is focused on OOP, Gleam on FP. Syntax is also different (Elixir has kind of Ruby syntax, but not Gleam). So how can you even suggest that Gleam sounds like “modern” Ruby lol…
I think the difference (that prime was talking about) is that a library might throw an exception as intended behavior. With these asserts, they are for when your program has reached an unrecoverable state, so a library should never crash with assert, and you don't get the problems that prime was worried about.
Gleam is this language where my No 1 question after checking out what it was about is „but why? What problem does this solve? What new thing does it bring to the table to justify its existence. Just being another „nice langauge“ isn‘t enough to see adoption.
I think it fits in this really nice category of very simple and productive functional language, with great attention to DX. Some people draw comparisons with go in this regard. Plus I find really cool that it can bring types to the BEAM and JS 😁 If you’d like to give it a try I’d recommend the online tour
Sadly its on erlang which gives you fault tolorance by default but only if your entire system is in erlang. Otherwise you need to use/create an external fault tolorance system, which then just causes small to medium problems with erlgang's own fault tolorance system. This just makes it annoying to transition to. Or causes you an extra downside if you want to use more than just erlang in your project. Id prefer more work on fault tolorance tools that are applicable to the real world than more work in the world of "if everyone uses erlang than we are fault tolorant". The entire world isnt using erlang and erlang isnt ideal for every application. So the main selling point of the vm is :/.
@@ejenkins132 We currently use a custom solution at the program level. On the machine level we use our cloud's api (we use an unmanaged cloud) and health analytics. We also store state backups so servers can be resored to a previously working state on crash. While we dont use our own hardware I know there is some more recent research into the newer hardware functionality of direct writing to memory in order to combine multiple machines into a single compute cluster and deal with fault tolorance. Effectively like database replication and fault tolorance but at the machine memory level, see derecho for an example made for massive fault tolorant grinding through reletively contained functionality.
@@ejenkins132 We currently use a custom solution at the program level. On the machine level we use our cloud's api (we use an unmanaged cloud) and health analytics. We also store state backups so servers can be resored to a previously working state on crash. While we dont use our own hardware I know there is some more recent research into the newer hardware functionality of direct writing to memory in order to combine multiple machines into a single compute cluster and deal with fault tolorance. Effectively like database replication and fault tolorance but at the machine memory level, derecho is an example made for massive fault tolorant grinding through reletively contained functionality.
We currently use a custom solution at the program level. On the machine level we use our cloud's api (we use an unmanaged cloud) and health analytics. We also store state backups so servers can be resored to a previously working state on crash. While we dont use our own hardware I know there is some more recent research into the newer hardware functionality of direct writing to memory in order to combine multiple machines into a single compute cluster and deal with fault tolorance. Effectively like database replication and fault tolorance but at the machine memory level, derecho is an example made for massive fault tolorant grinding through reletively contained functionality.
@@TurtleKwitty Nobody thinks this, which is the same nonsense strawman retort we have all seen a thousand time. Regardless, it has nothing to do with a language for writing computer code. The language does not somehow work differently based on whether someone believes utmost in human rights, or wishes to exterminate all life on the planet. It is simply an odd place to broach the subject, like feeling compelled to state your sexual orientation while ordering fast-food. I understand that if you are part of an ideology who does this it might seem normal, but it comes across as bizarre for everyone else who correctly understands these subjects are unrelated to each other.
@@ForeverZer0 It's hilarious you think it's a straw man when that's literally all it is xD Doudou hilarious you think that a community around a programming language doesn't change whether it's only people that believe there should have rights or not XD
discord is the best way to communicate today. 10000x better than mailing lists. lol. its real time, very efficient. and GitHub is just standard. stop looking for reasons to bitch
@@MikeMedina805no, because they bring their agenda into where it doesn’t belong. Imagine if typescript espoused the same crap they do. No one would touch it.
/JYAcomo/. Sorry I don't know my IPA. Or listen to the late, great Dr. John sing "Iko Iko". BTW, you can't necessarily trust the dude who did that pronunciation video. He hung on to the "c" too long, and in Italian, like Japanese, doubled consonants make a difference. An Italian would spell what he said as "Giaccomo".
Wooo Gleam!!! Thanks for coving it
Louis mentioned. Gleam mentioned. My open PR mentioned 😅
The creator of the lang 😊. Gleam has the simplicity of Go with an functional paradigm. Love the use feature btw, it makes life simple.
Still can't get nvim to go to definition on modules or imports. Can get over lay info. Any thoughts on what I'm doing wrong here? Works on vscode just fine
@@d_6963 You've probably installed the Mason package, which is broken. Uninstall it.
I feel like as a core formatter principle, your code should always result in the same format regardless of the path. If you want to use a different format i.e. always expanding pipes, then that should just be a formatter config flag. Otherwise you end up with code that looks different depending on who wrote it -- less desired for projects with many contributors.
I am a gleamhead!
Classic prime: i dont understand why this feature exists
Also prime 15 seconds later: this is the best feature ever
Relatable tho, right?
@@XDarkGreyX No not really, it's immature, reactionary stupidity and something people should try to overcome.
@@fennecbesixdouze1794why. Going from not understanding the usefulness of a thing to knowing the usefulness and applications of it is immature and reactionary stupidity? So once I conclude something I don’t understand is useless I must stick to this conclusion regardless of the information given to me to change my outlook ? THAT would be childish
0:05 "if I had all the time on the world you're on my list" is what she told me too
I tried gleam when it first released and it I loved it. It’s clean and lean. Excited to try it again.
Louis as benevolent dictator > Language writers trying to please everybody of all styles
on a real note though, this guy actually does want to be a dictator in real life. for anyone curious take a look at his blog.
@@matress-4-2323 I've been keeping up with him for a while now, also im in his Discord.
He's nice and has a great personality.
Also, he's very inclusive and doesn't discriminate.
Sounds like the opposite of a dictator to me.
He's only dictator-ish when running his language, as he should be. That's why it's turning out so well and gaining populartity.
He's not making the same mistakes as other language authors and trying to make Gleam the language that pleases everybody, because he understands that it will end up pleasing none.
@@matress-4-2323what in his blog suggests that?
@@jswew12 he doesnt even know. lol. he was just trolling
I agree, what finally helped me using neovim was to just use it vanilla.
Then downloaded Kickstart for configuring a theme and installing neovim-tree.
Then I started playing with LSP.
But I always try to keep shortcuts vanilla, if I need a script to do something, I ignore it.
Lots of research of how to do things, but, things are slowly working out
Best way to use Vim is to not and instead program on clay tablets.
Not yet sure about Gleam, but anything that brings more folks to the BEAM is good.
> All things serve the beam.
14:18 you might want to doublecheck your NotNil assertions. This can be a bit tricky in go. Because the receiver type here is `any`, if you pass a value of for example type `*int` with a value of `nil`, the `item == nil` expression will not be true because when passing `*int` as `any`, the actual thing being passed is something like a tuple the value itself (nil) and the type, which together is then not `nil`, hence the `item == nil` check will not catch it.
You can do a proper nil--check in this case using reflection only for example like this:
```go
import "reflect"
func isNil(v any) bool {
if v == nil {
return true
}
rv := reflect.ValueOf(v)
switch rv.Kind() {
case reflect.Ptr, reflect.Interface, reflect.Slice, reflect.Map, reflect.Chan, reflect.Func:
return rv.IsNil()
default:
return false
}
}
```
"Flip take it out"
Flip: lemme end this man's career
Looking into Gleam as a C# developer. I agree throw is bad. I now use Union/Option types in C# just to avoid propagating throw's from a try/catch. Try/catch is an expensive for an application. I'll have to dig a little deeper into negative space programming, never heard of it until now. My apps can't crash but I can return a 500 status code so I have objects like Error, Threw, Panic to signal to the developer that there's a mismatch in the application state.
Gleam 5 years experience on job list next year
23:35 Prime really added "parseDeezNuts" to his stuff lol
The "butt as an avatar" bots wasted no time commenting!
they loyal af
Prime still haven't seen the light of the type system… You can absolutely make invalid states unrepresentable and that makes a lot of asserts just pointless.
It's me! Gia' como!
being Italian it is so strange to me xD 😅
addirittura durante il 2 giugno! orgoglio!
I recently started learning rust, and a video on proper assertion etiquette would be awesome
I really like Gleam, has a such a nice Elm vibe, but built on a much better platform
Have you tried the LSP for Golangs "templ". Don't think you got the LSP to work in vim when you tested templ (in the video I saw).
It is quite good!
Wanted to add to the "types should make these states unrepresentable" try doing that across FFI with c. If your language has FFI then you need an assert barrier to make the types respected but if you assume that what you get is valid then your types break down, so you still need asserts to enforce the static side of the types. And of course as prime is doing has a runtime component you need assert barriers there too obviously
Well, duh. If you're doing FFI you either have to check the assumptions at runtime, hope things will somehow work out™ or bring static analysis (and maybe even formal proofs) to the table.
But this is not what people mean when they advise you to use types though.
language server issues were the main reason why i paused my gleam learning experience, very excited to get back into it
Looks nice, hope it will gain popularity and adoption
Zig has the exact same problem, the compiler halts on the first error, and that makes the lsp kinda weird
My main issue with ruby is how bad it's LSP and tooling is. You are right that it makes an okay language feel bad.
Having no loops is wild
Oh yeah it definitely takes a bit of getting used to coming from other languages! Gleam’s Exercism track does a great job at helping you learn that if you’re interested
It is weird, but it does make a lot of sense without mutability and side effects, as you can't have an accumulator that you operate on for each iteration without mutability unless you use recursion
Giacomo the man himself in the comments. What a time to be alive
@@AnthonyBullard I had to figure out why people started nicknaming me Guyacomo 😂
pretty standard for functional languages.
Love the language, was initially turned off by the code of conduct, but it seems they changed it or maybe I misremembered it. Definitely will give it a try
Welcome to the beautiful world of let it crash. ; )
Gleam mentioned!
3:40 made me think of OCaml immediately
Asserts can be useful, but I think with good unit testing, asserts become a bit redundant
GLEAM LANG
is assert optimized away in a release version?
assert was always as good as Runtime Exceptions. It is nice to know that someone else other than Carmack knows this that is in pop culture.
Crashing the program on assert errors is the sort of thing that only works if you have zero users, however.
@@isodoubIet True and the same with Runtime Exceptions.
@@TravisBerthelot The difference is precisely that exceptions can be caught, which means you get to log the error and investigate it later, which makes the thing actually work. If you just crash, you may not even know _that_ there's something to investigate.
@@isodoubIet You don't catch runtime exceptions just other exceptions.
@@TravisBerthelot I have no idea what you're talking about, sorry.
on error resume.
What could possibly go wrong?
Full yt video on panic and asserts would be nice.
Michael mentioned?
I like to fix one error at a time as well, but I've run into scenarios in the past where for example I need to ship a work project and I _know_ there are errors, but I don't know how many, or how complex, which makes it very hard to put an eta on a launch or even estimate how many resources you need to assign to a project.
C# on Linux feels so bad for necessary tooling as beginners
I hope you cover Crystal.
A very little job is better than no job. You'll be the most qualified one when the big jobs start to show up.
Morning crew rise up
it's 4PM here
@@kyjo72682 so drop down
Good language, nearly inexistent BEAM integration. I would love to see it improve in this direction.
It has a good erlang ffi
I am curios how good is to compile Gleam to JS
Me too. The syntax changes closer to js, and they want to make it more uniform across targets. Gleam will probably never realize wasm, it's a different concept. The Gleam/erlang vm running can provide a backend itself, the js target just a "best match connector" on the front end. How could they possibly employ erlang concurrency as js? Probably not. It's a hard sell against wasm right now, yet Gleam makes a lot of sense to me for a backend postgres thing. A performance compare to Rust wasm on a backend would be cool.
Flip left it in, and for good reason. W take
What was it?
pythonista way of thinking imo i like it
Holy hell!
Holy hell
FLIP WYA
TAKE IT OUT!
18:50 npm install everything mentioned
BRAZIL MENTIONED
What if you are processing 1000 records and the 57th record is bad but all the others are good. Assert would stop all processing. Throw is much better in this situation. You can throw on the bad record, catch it and write out to a log, then go on happily processing the rest.
In this situation, in a paradigm that doesn’t use try catch, you would just process the error as it comes in, rather than nebulously accepting *some* error and moving on as is standard with Python and Javascript. So, in Golang, the function I call would return a value and an error value, so I would check the error value before continuing. In Gleam (and I think Rust) your error would be part of the type of the return value, so you would pattern match for the error variant and handle it there.
@@jswew12 Okay, but in most languages that have try/catch/throw, they don't have functions that automatically package up errors in a return for you, so you would need to use a try catch, and importantly NOT an assert. Prrime's assertion (no pun) that try/catch/throw is ALWAYS bad is just incorrect.
That means that error is not a breakdown of the fundamental truths of your system so an assert would not be used.
@@jswew12 The point is not on exceptions vs errors as values, where the main issues are on the development side (ergonomics, refactorability, explicitness, etc -- one may prefer different tradeoffs here), but rather on _crash the entire world on assert violation_ vs _discard the current work unit._ The former will work, but will be a miserable experience if you have more than zero users.
@@TurtleKwitty If the "fundamental truths of your system" break down in such a fundamental way that you can't even log the error and exit gracefully, you can't reliably crash the program, either.
Gleam was meh until it got popularity boom.
1 error at a time
8:25 this is how go fmt works, but not how prettier works, interesting to see Gleam choose to support a bit more complicated setup :)
like this comment to show love to ma homeboi giacomo
VERSION + 8 😂
How did people program before LSPs?
It’s just more typing and debugging
@@notusingmyrealnamegoogle6232 I know, but Primagen makes sound it like without an LSP its not possible to program. We had linter, formatter, debugger, tag files and such before too.
It's not that hard to program without LSP when you know the language and libraries being used.
Regex parsers?
For languages with a REPL: SLIME mode.
Hmm syntax already bad dunno in which state semantics is but doesn't look way better.
huge discussion around failfast strategy :)
Prime needs to slow down sometimes. He goes at 1000 mph all the time and sometimes its hard to follow.
it's actually upsetting me how he selects text from the second to second to last character in a word or paragraph
They took async out of zig tho
Up until about a decade ago when async/await became popular as a standard language feature, everyone had to roll their own. Might have to do that while we wait for Zig 1.0.
@@ForeverZer0 aint nobody got time fodat! Maybe somebody has come up with an event loop lib for zig already? Might be a fun project. Who with me?
@@thedoctor5478 Not me, lol, that is not a trivial task just to become obsolete when it gets implemented at the language/stdlib level. I will just do without async for now, and use threads where performance is a factor and I can benefit from parallelism.
I would actually prefer if they went in the direction of Go-like channels instead of the async/await pattern. Function coloring is annoying.
@@ForeverZer0 def non-trivial. Coloring is the worst. You could make a lib that doesn't color though, and thinking on like Python, there are multiple async libs. Idk how channels actually work to say anything about them tho. For that matter, idk how async works so good under the hood. I know it relies on the OS to perform work while it yields to the event-loop queue but idk how one would go about constructing such a call for say, an http request without blocking the thread. Magic.
I feel like the best ever would be something like that new python-like lang (I forget the name) that multithreads everything automatically + async at the same time without coloring. I have made some libs that take advantage of both those ideas simultaneously but they eat a lot of mem.
@@thedoctor5478 By "non-trivial", I mean it is complicated problem to solve even for people who *do* understand it well and are far more experienced doing it than me.
I think the language is Mojo? From what little I understand about it, it is targeting a specific kind of workload (i.e. AI), and would be horrible for general-purpose stuff.
Skibbidy Tiolet
Targeting both the beam and javascript runtimes makes no sense. The main advantage of erlang/elixir IS THE BEAM; It has features that do not exist anywhere else, and can accurately be called a "business logic operating system". "Language" is mostly irrelevant today. I want to know the underlying paradigm that the code is driving at runtime. When attemping to target two separate underlying paradigms there will always be a huge nasty layer of accommodations/abstractions and confusion at the tooling/user level.
Maybe for front end integration, reverse uno on JavaScript which took over the server after being born in the front end?
Because there is “No nazi bullsh*t” … that’s why.
Zig's tooling is horrible
?
Zig's at like 0.1, too early to complain about tooling
Zig is basically like in "Early Access" stage so that's not really surprising
Only x views in y minutes = bro fell off
Cool language, but it seems like becoming familiar with Erlang/Elixir and their ecosystems is a prerequisite. I don't want to do that.
Not at all! You’ll have a great experience even if you know zero erlang and just stick to pure Gleam. I for once know very little erlang and never needed it that much 😁
I wanted to parse eventsource streams from OpenAI and I instantly had to dive into erlang land which I don't know anything about. I love the language though, I'll wait for it to mature for a bit and dive back in
I love your videos about VIM and your other reactions, but you code like you're trying to hide what you're doing
Sounds a lot like modern Dart.
Don't be silly!
As someone who worked with the Dart team when I was at Google, and has contributed to Gleam - I can’t imagine in what way you could mean this.
Sounds like modern Ruby
@@amogh708 Ruby is focused on OOP, Gleam on FP. Syntax is also different (Elixir has kind of Ruby syntax, but not Gleam). So how can you even suggest that Gleam sounds like “modern” Ruby lol…
@@AnthonyBullard you must be very out of date.
Oh hey, that's me! I'm the Guy-a-como 🤌
gigachad coder with chef's kiss name.
thanks for all you do in Gleam
@@SnowDaemon Thank you!! 🥹💕
You rock, Giac!
@@airkami aw you’re too kind!
JS: 8===D
Gleam: 8==D
Yours: 8=================D
Appreciate all these QoL features!
I'm early, but not as early as the porn spam bots
tu parle frances :)
That is exactly like raising/throwing lol
I think the difference (that prime was talking about) is that a library might throw an exception as intended behavior. With these asserts, they are for when your program has reached an unrecoverable state, so a library should never crash with assert, and you don't get the problems that prime was worried about.
You can’t use the “if I had the time I’d try it” excuse anymore. You quit Netflix remember?
The name …. TheWokeagen
Gleam is this language where my No 1 question after checking out what it was about is „but why? What problem does this solve? What new thing does it bring to the table to justify its existence. Just being another „nice langauge“ isn‘t enough to see adoption.
its pink and woke so soy devs like it
A language can’t be woke. It solves a long standing problem in the BEAM ecosystem, which is type safety. That’s why it exists
I think it fits in this really nice category of very simple and productive functional language, with great attention to DX. Some people draw comparisons with go in this regard. Plus I find really cool that it can bring types to the BEAM and JS 😁
If you’d like to give it a try I’d recommend the online tour
For me it is the built in actor model, that just opened so many doors of possibilities.
it's basically elixir with types. the community is extremely toxic though. the language itself is very nice.
Sadly its on erlang which gives you fault tolorance by default but only if your entire system is in erlang.
Otherwise you need to use/create an external fault tolorance system, which then just causes small to medium problems with erlgang's own fault tolorance system.
This just makes it annoying to transition to. Or causes you an extra downside if you want to use more than just erlang in your project.
Id prefer more work on fault tolorance tools that are applicable to the real world than more work in the world of "if everyone uses erlang than we are fault tolorant". The entire world isnt using erlang and erlang isnt ideal for every application. So the main selling point of the vm is :/.
What external fault tolerance systems are you talking about? Just curious
Ah so if it runs on the JS runtime it's not fault tolerant. Makes sense tbh
@@ejenkins132 We currently use a custom solution at the program level. On the machine level we use our cloud's api (we use an unmanaged cloud) and health analytics. We also store state backups so servers can be resored to a previously working state on crash. While we dont use our own hardware I know there is some more recent research into the newer hardware functionality of direct writing to memory in order to combine multiple machines into a single compute cluster and deal with fault tolorance. Effectively like database replication and fault tolorance but at the machine memory level, see derecho for an example made for massive fault tolorant grinding through reletively contained functionality.
@@ejenkins132 We currently use a custom solution at the program level. On the machine level we use our cloud's api (we use an unmanaged cloud) and health analytics. We also store state backups so servers can be resored to a previously working state on crash. While we dont use our own hardware I know there is some more recent research into the newer hardware functionality of direct writing to memory in order to combine multiple machines into a single compute cluster and deal with fault tolorance. Effectively like database replication and fault tolorance but at the machine memory level, derecho is an example made for massive fault tolorant grinding through reletively contained functionality.
We currently use a custom solution at the program level. On the machine level we use our cloud's api (we use an unmanaged cloud) and health analytics. We also store state backups so servers can be resored to a previously working state on crash. While we dont use our own hardware I know there is some more recent research into the newer hardware functionality of direct writing to memory in order to combine multiple machines into a single compute cluster and deal with fault tolorance. Effectively like database replication and fault tolorance but at the machine memory level, derecho is an example made for massive fault tolorant grinding through reletively contained functionality.
My biggest issue with gleam is they go political right on their opening page. Real Rust foundation feeling.
It's a language. Who cares?
what???? as in like not allowing discrimination within their community?how is that political?
@@finndotbin they go beyond that by stating mantras that are very controversial. Everyone agrees with disallowing discrimination.
@@thurston04 If you think that people having rights is controversial you clearly cant behave in a society wtf XD
@@TurtleKwitty Nobody thinks this, which is the same nonsense strawman retort we have all seen a thousand time.
Regardless, it has nothing to do with a language for writing computer code. The language does not somehow work differently based on whether someone believes utmost in human rights, or wishes to exterminate all life on the planet. It is simply an odd place to broach the subject, like feeling compelled to state your sexual orientation while ordering fast-food. I understand that if you are part of an ideology who does this it might seem normal, but it comes across as bizarre for everyone else who correctly understands these subjects are unrelated to each other.
@@ForeverZer0 It's hilarious you think it's a straw man when that's literally all it is xD
Doudou hilarious you think that a community around a programming language doesn't change whether it's only people that believe there should have rights or not XD
If your language only supports Discord for communication & MS GitHub for code/forums, you are a part of the problem for making software worse
discord is the best way to communicate today. 10000x better than mailing lists. lol. its real time, very efficient. and GitHub is just standard.
stop looking for reasons to bitch
The political message on the homepage is unprofessional
V lsp is kinda 💩
Looked at the community and noped the f out
Why?
@@VastCNC Because the community is actively against Nazis and bigotry and that bothers this person
@@MikeMedina805 Because you're a bunch of extremists, just on the opposite site
@@MikeMedina805no, because they bring their agenda into where it doesn’t belong. Imagine if typescript espoused the same crap they do. No one would touch it.
@@MikeMedina805 What does actively being against Nazis even mean? Are they actively planning D-Day using Gleam?
too pink and too woke for my taste
how is it "woke?"
being afraid of the color pink is an AMAZING way to show your fragile masculinity.
@@finndotbin cringe
@@finndotbin I am afraid of the color light golden rod yellow, specifically #FAFAD2 in the RGB colorspace. What does this mean?
@@ForeverZer0 it means you're an idiot
/JYAcomo/. Sorry I don't know my IPA. Or listen to the late, great Dr. John sing "Iko Iko". BTW, you can't necessarily trust the dude who did that pronunciation video. He hung on to the "c" too long, and in Italian, like Japanese, doubled consonants make a difference. An Italian would spell what he said as "Giaccomo".
/'dʒakomo/
If divide by zero returns zero, this can’t be used for machine learning or statistics. It breaks the IEEE standard. In fact it breaks mathematics.