1
00:00:05,320 --> 00:00:10,080
Hello, Welcome to Adventures in Angular, the podcast where we keep you updated

2
00:00:10,119 --> 00:00:15,759
on all things Angular related. This
show is produced by two companies, Top

3
00:00:15,800 --> 00:00:20,440
and Doves and Onvoid. Top and
Doves is where we create top and devs.

4
00:00:20,440 --> 00:00:24,480
We get top and pay in recognition
we're working on interesting problems and making

5
00:00:24,480 --> 00:00:30,719
meaningful community contributions. And Onvoid provides
remote design and software development services on a

6
00:00:30,800 --> 00:00:36,479
tap basis, so clients only pay
after the tests are delivered and approved.

7
00:00:37,159 --> 00:00:42,960
In today's episode, we are going
to talk about a subject that it's definitely

8
00:00:43,039 --> 00:00:49,679
interesting for most developers, not just
Angular developers, but it's also a subject

9
00:00:49,759 --> 00:00:54,600
that seems very hard, at least
at first. We're going to be talking

10
00:00:54,759 --> 00:01:00,520
about web assembly and more specifically,
how you can write code in Rust and

11
00:01:00,640 --> 00:01:07,200
have that code running in your Angular
application in the front end. And well

12
00:01:07,359 --> 00:01:11,319
you already know me. I'm Lucas
S. Paganini, your host in the

13
00:01:11,359 --> 00:01:15,719
podcast, but joining me in today's
episode is a very special guest. Iv

14
00:01:15,760 --> 00:01:25,200
Guiney is a freelancer in Angular and
also Rust, and he has researched on

15
00:01:25,239 --> 00:01:30,000
that subject specifically, so he is
our expert to talk about that today.

16
00:01:30,120 --> 00:01:34,760
Give me. Thank you for your
time welcome, Hello, Thank you for

17
00:01:34,799 --> 00:01:42,680
having means great having you all right, So let's start with the definition of

18
00:01:42,760 --> 00:01:49,319
things because I true in some concepts
that I imagine lots of folks are going

19
00:01:49,400 --> 00:01:55,920
to be at least familiar with the
names, so web assembly and rust.

20
00:01:56,239 --> 00:02:00,400
But the reality is that there might
be developers listening to us that don't even

21
00:02:00,480 --> 00:02:05,280
know what that means. Right,
So maybe we can start with just one

22
00:02:05,400 --> 00:02:19,199
minute quick definition of what is rust
and also what is web assembly. Web

23
00:02:19,199 --> 00:02:29,280
assembly is a set of instructions special
format, binary format, and programmers can

24
00:02:29,960 --> 00:02:38,080
use languages like c sharp plus lust, rust go to compile from these languages

25
00:02:38,159 --> 00:02:46,639
to special web assembly format and then
execute this code at native speeds in browser.

26
00:02:47,759 --> 00:02:54,400
So it's my sound call if you
need to execute something that's very computationally

27
00:02:54,479 --> 00:03:07,840
expensive with a huge performance. And
some applications actually might use this benefit of

28
00:03:08,039 --> 00:03:17,319
web assembly, as for example,
it might be video processing, video games,

29
00:03:19,599 --> 00:03:28,199
LM like large language models, cryptography
and things like that. And maybe

30
00:03:28,240 --> 00:03:36,560
it's really not for every web application, but the application that need to do

31
00:03:36,879 --> 00:03:43,840
things like that, they definitely need
the assembly. Okay, awesome. And

32
00:03:43,879 --> 00:03:47,240
then with regards to Rust itself,
I imagine that most people are going to

33
00:03:47,240 --> 00:03:53,280
be familiar with what Rust is,
but for the purposes of our episode,

34
00:03:53,800 --> 00:04:00,039
you can replace Rust with just any
compiled language that you want to run code

35
00:04:00,120 --> 00:04:02,919
in the front end, because we
will be talking about Rust, but web

36
00:04:03,000 --> 00:04:09,120
assembly itself is not just specific to
rest Right. You could be writing code

37
00:04:09,680 --> 00:04:15,039
in c sharp, for example,
and then use web assembly to bridge the

38
00:04:15,120 --> 00:04:24,399
gap between or regular front end code
in JavaScript and the binary or maybe not

39
00:04:24,800 --> 00:04:30,879
binary, but the compiled code that
you have written initially in C sharp or

40
00:04:30,879 --> 00:04:34,680
something. Right, So we'll be
talking about Rust because that was your experience

41
00:04:34,720 --> 00:04:43,759
and the technology that you chose to
use to create your code, But for

42
00:04:43,959 --> 00:04:47,680
the audience listening to this that might
not be fully comfortable with Rust. If

43
00:04:47,680 --> 00:04:54,160
you are comfortable with some other compiled
language and there's something in your front end

44
00:04:54,199 --> 00:05:00,480
application that needs to be extremely performant
and you can't just rely on JavaScript code

45
00:05:00,600 --> 00:05:05,920
to do it. You need something
heavier, or maybe you want to rely

46
00:05:06,120 --> 00:05:11,079
on libraries that don't yet exist on
JavaScript, but they might exist in other

47
00:05:11,199 --> 00:05:15,439
compiled languages. Then you can write
your code in those other compiled languages and

48
00:05:16,079 --> 00:05:23,639
compile and then package them in web
assembly, and then you can import them

49
00:05:23,680 --> 00:05:29,519
in your front end code. Yeah, that's it. Historically, there is

50
00:05:29,800 --> 00:05:35,560
a lot of developers that work with
Angular using c sharp back end, and

51
00:05:35,639 --> 00:05:43,399
I think for them it will be
especially beneficial to use c sharp as a

52
00:05:43,439 --> 00:05:49,399
source language. Not trust, but
because well it happened, like I have

53
00:05:49,480 --> 00:05:58,480
more experience with trust and what about
trust? Okay, regarding web assembly,

54
00:05:59,720 --> 00:06:05,519
it's ouse what are the things that
like in your definition, when would you

55
00:06:05,560 --> 00:06:12,839
when would you go to web assembly? And when do you basically when is

56
00:06:12,879 --> 00:06:18,519
it a right call to reach for
web assembly? Because it's a tool,

57
00:06:18,680 --> 00:06:24,120
and like other tools, you need
to know what is the best place to

58
00:06:24,199 --> 00:06:28,240
use it so that you don't over
use it, and also what are the

59
00:06:28,319 --> 00:06:31,879
things that you cannot do with lab
assembly so that we also know when we

60
00:06:32,160 --> 00:06:41,000
definitely should not reach to it.
Well, if you need some don't manipulation,

61
00:06:41,160 --> 00:06:46,399
then you should not use this website. But it's definitely small niche actually

62
00:06:46,439 --> 00:06:54,079
for applications that should use web assembly, And if you are developing a video

63
00:06:54,160 --> 00:07:02,560
game or something like large language model
or some ou the editing software, then

64
00:07:02,720 --> 00:07:12,519
performance of JavaScript will not be enough
for you. And I mean maybe ninety

65
00:07:12,600 --> 00:07:16,680
percent of or maybe ninety five percent
of web applications don't need to addssent,

66
00:07:17,639 --> 00:07:25,920
and those five percent that needed,
they are definitely needed. So yeah,

67
00:07:25,920 --> 00:07:34,759
it's a rare case, but when
you need it, it's nice to Okay,

68
00:07:34,959 --> 00:07:42,160
makes sense, And in your article
you even gave some more specific examples

69
00:07:42,199 --> 00:07:46,959
of when you use it that I
think are really interesting for people to think

70
00:07:46,000 --> 00:07:53,920
about some real world applications to it. So you mentioned complicated calculations, cryptography,

71
00:07:54,600 --> 00:07:59,079
even large language models, like if
you want to really run your large

72
00:07:59,399 --> 00:08:03,319
large langue which model on the device
instead of just making a remote API call,

73
00:08:05,240 --> 00:08:13,959
you could technically do that by importing
the the instructions for the LLLM as

74
00:08:13,000 --> 00:08:18,680
the web assembly module. Also image
and video editing, games and so on.

75
00:08:18,800 --> 00:08:24,279
So I think those are thinking about
those examples. Maybe brings people closer

76
00:08:24,319 --> 00:08:28,079
to scenarios where they in the past
we're trying to reach for something and didn't

77
00:08:28,160 --> 00:08:35,639
do what, So that would be
a good application for rub assembly. Yeah,

78
00:08:35,679 --> 00:08:43,200
and it has some downsides like be
just one size of the compilot model.

79
00:08:43,919 --> 00:08:50,840
Sometimes it's few megabades, sometimes it's
fifty megabytes, so some applications just

80
00:08:50,879 --> 00:09:00,159
cannot afford wait, while fifty megabytes
web model will be downloaded before step as

81
00:09:00,200 --> 00:09:07,679
an interacting rech users, So it's
one of the down sides. Yeah you

82
00:09:07,759 --> 00:09:13,279
mentioned yep, Okay, that makes
a ton of sense. All right,

83
00:09:13,679 --> 00:09:24,600
Now let's talk more specifically about Angular
and web assembly because generally speaking, well,

84
00:09:24,639 --> 00:09:28,679
first off, anything that we can
do with regular native front end code

85
00:09:28,720 --> 00:09:35,159
we can also do in Angler.
But generally Angler has this very unique way

86
00:09:35,279 --> 00:09:41,279
of doing things. It's a very
opinionated framework. So do we have any

87
00:09:41,480 --> 00:09:48,879
different ways of importing and executing web
assembly code in the context of the Angular

88
00:09:48,960 --> 00:09:56,960
framework, Like, does the Angular
framework recommends any best practices or even enforces

89
00:09:56,120 --> 00:10:01,720
a way for us to deal with
web assembly, or is the way that

90
00:10:01,759 --> 00:10:05,480
we deal with web assembly code in
Angular just how it is done with native

91
00:10:05,559 --> 00:10:11,720
front and code. I mean,
right now we are closer to the second

92
00:10:11,720 --> 00:10:18,960
option. Now we in Angular can
in our Angular applications we can import web

93
00:10:20,000 --> 00:10:26,320
assembly models as they are imported in
native in Vanila JavaScript. And maybe a

94
00:10:26,320 --> 00:10:33,879
little bit later, maybe on the
next week, full request that was merged

95
00:10:33,879 --> 00:10:41,080
will be released in the next version
of Angular, and then we can import

96
00:10:41,960 --> 00:10:50,799
us models directly from Angular code using
just world import. And it has beneaded.

97
00:10:50,879 --> 00:10:58,240
It's much easier to do so you
don't need a few lines of code.

98
00:10:58,559 --> 00:11:05,919
If you can easier, you can
h import model in their way.

99
00:11:07,080 --> 00:11:13,399
But downside of it right now is
it will be imported without types definitions,

100
00:11:13,600 --> 00:11:24,559
so it will be like any everywhere
and unknown everywhere. So yeah, it's

101
00:11:24,559 --> 00:11:33,000
more safe and not so much complicated
too and more h I know. Oh,

102
00:11:33,960 --> 00:11:37,120
it's more set to use the approach
that is described in my article right

103
00:11:37,159 --> 00:11:46,000
now. But with the time browsers
will improve plementations and then you can use

104
00:11:46,639 --> 00:11:52,799
us models inside Angular without and big
types without any additional tools, and it

105
00:11:52,879 --> 00:11:58,879
will be awesome great. Another downside, just to make it clear for the

106
00:11:58,919 --> 00:12:05,080
audience, is that currently the PR
that was merged, well besides the fact

107
00:12:05,120 --> 00:12:07,960
that you would have to be on
the later's version of Angular because it was

108
00:12:09,039 --> 00:12:15,360
merged on version eighteen right, so
you'll probably actually be released in eighteen dot

109
00:12:15,399 --> 00:12:18,879
one, so you would have to
be on the later version. And currently

110
00:12:20,399 --> 00:12:24,679
I don't know if they plan on
somehow making it work with zone JS in

111
00:12:24,679 --> 00:12:28,639
the future, but right now it
is clearly stated on that PR description that

112
00:12:28,960 --> 00:12:35,039
it will only work if your application
is not relying on zone JS, which

113
00:12:35,799 --> 00:12:43,039
I believe ninety nine percent of applications
are. Unfortunately, still rely on zone

114
00:12:43,080 --> 00:12:54,759
JS because the experimental the experimental zone
zoneless APIs for Angular were very recently introduced

115
00:12:56,279 --> 00:13:03,879
and we have had no no incentives
to really use them on application. On

116
00:13:03,320 --> 00:13:13,159
production applications, we have actually been
been disincentivized of using the experimental zoneless API

117
00:13:13,480 --> 00:13:18,559
because it is so experimental. So
I think most applications in production won't be

118
00:13:18,679 --> 00:13:28,799
able to rely on that extra sugar
that Angler added to make it easier to

119
00:13:28,840 --> 00:13:35,559
integrate with web assembly, but they
can still integrated in the regular way just

120
00:13:35,679 --> 00:13:45,039
using regular front endcode. Yeah,
it's only because top level weight is not

121
00:13:45,120 --> 00:13:52,399
supported. Because of that, you
need a zoneless application. Yeah. Well,

122
00:13:52,039 --> 00:13:58,000
I know a couple of applications working
production zones already, but it's not

123
00:13:58,039 --> 00:14:01,960
the majority of course, just a
few of them in the world I think.

124
00:14:01,399 --> 00:14:07,480
But yeah, if you are going
to add the vast model to your

125
00:14:07,519 --> 00:14:11,440
application, it actually means that most
of the time, it means that you

126
00:14:11,519 --> 00:14:16,000
are creating a new application. If
you're creating a new application right now,

127
00:14:16,159 --> 00:14:22,480
I would recommend you goes on less
and even if you don't use that assembly

128
00:14:22,639 --> 00:14:28,240
in that application, I recurrently goes
onless. Oh that's really interesting. I

129
00:14:28,279 --> 00:14:33,039
know that This is not the main
topic of this episode, but I have

130
00:14:33,240 --> 00:14:41,679
not seen any application at least of
production applications onless yet, and I have

131
00:14:41,960 --> 00:14:50,080
also not talked to anyone that has
had production applications zoneless. So if you

132
00:14:50,120 --> 00:14:56,759
don't mind us getting sidetracked a bit, what makes you recommend that, Because

133
00:14:56,799 --> 00:15:01,200
from what I understand, the Angler
docs themselves are saying that this is very

134
00:15:01,240 --> 00:15:07,399
experimental and you should not rely on
this technology yet it's not stable. But

135
00:15:07,720 --> 00:15:16,720
are you confident that it is stable
enough to use in production applications? As

136
00:15:16,759 --> 00:15:22,080
always happens with experimental things, it
depends. It depends on what third part

137
00:15:22,080 --> 00:15:28,240
of the libraries you use, and
some of them are not quite radio to

138
00:15:28,279 --> 00:15:35,919
be zoneless. But to my surprise, many angular libraries actually behave quite well

139
00:15:35,960 --> 00:15:43,720
in zone less applications, especially if
they are written with on push only strategy.

140
00:15:45,480 --> 00:15:48,960
And if your application is written using
only on push strategy, that will

141
00:15:48,960 --> 00:15:58,960
be trivial to switch to the zoneless
application, and it takes just maybe a

142
00:15:58,000 --> 00:16:07,360
couple of days to migrate medium size
application it is, unless it's not that

143
00:16:07,480 --> 00:16:12,919
scary. But some libraries, yeah, some libraries might not work with Thomas

144
00:16:15,840 --> 00:16:21,360
gotcha. That's interesting. So it's
not just a matter of you wanting to

145
00:16:21,559 --> 00:16:26,440
use it and starting a project from
scratch. You also have to think about

146
00:16:26,200 --> 00:16:30,879
if the libraries you want to rely
on for your project we work for it,

147
00:16:32,039 --> 00:16:36,080
right, because maybe you write your
code in such a way that we'll

148
00:16:36,080 --> 00:16:40,759
be fine, but perhaps the libraries
you want to import are not going to

149
00:16:40,840 --> 00:16:47,200
work. Yeah, exactly, that's
the right now. It's a main pain

150
00:16:47,279 --> 00:16:55,639
point is thons gotcha? Okay,
okay, that that is very interesting to

151
00:16:55,720 --> 00:17:07,200
know all right. Now, heading
back to web assembly, how does the

152
00:17:07,319 --> 00:17:14,920
tread work with web assemblies specifically,
because we have been thought that JavaScript is

153
00:17:15,119 --> 00:17:22,240
runs in a single thread and whenever
you want to parallelize work without blocking the

154
00:17:22,359 --> 00:17:27,839
rendering, there are multiple different technologies
that different techniques you can use to do

155
00:17:27,920 --> 00:17:33,079
that. So, for example,
one of the most powerful ones being service

156
00:17:33,119 --> 00:17:37,519
workers or just web workers in general, because that way you can have your

157
00:17:37,599 --> 00:17:47,920
code running in a separate thread.
But how does web assemblies specifically behave If

158
00:17:47,920 --> 00:17:52,480
I import web assembly code and I
execute a function from it, is it

159
00:17:52,559 --> 00:17:57,680
going to execute on the main thread
or is it automatically going to be executed

160
00:17:57,720 --> 00:18:04,519
in a separate thread of any main
tread? And if you don't want to

161
00:18:04,599 --> 00:18:11,240
create lugs during execution of heavy code, it's better to allow it to use

162
00:18:11,279 --> 00:18:15,839
an service worker or web worker.
Then it will work in a separate tread

163
00:18:15,680 --> 00:18:26,599
and heavy computations will be executed without
well blocking UI. Great, so we

164
00:18:26,680 --> 00:18:33,680
can also import webal assembly code in
web workers. Yeah, awesome, gotcha.

165
00:18:33,799 --> 00:18:40,640
So basically, if we want to
parallelize things in a different thread without

166
00:18:40,720 --> 00:18:45,480
blocking the main one, the approach
is still web workers. And if you

167
00:18:45,599 --> 00:18:49,559
need something to run faster, not
necessarily run in a different thread, but

168
00:18:49,680 --> 00:18:53,720
just run way faster than you can
go with web assembly. And then if

169
00:18:53,759 --> 00:18:57,039
you want, if you need both
things, then you can just use web

170
00:18:57,079 --> 00:19:07,440
assembly inside a web worker exactly cool. And one one specification is if your

171
00:19:07,519 --> 00:19:14,799
task involves a lot of numbers,
a lot of numbers crunching, then it

172
00:19:14,920 --> 00:19:18,519
is cool to you. It is
a good use of web assembly. If

173
00:19:18,960 --> 00:19:29,920
you are operating with strings with text, then sometimes JavaScript might do it faster

174
00:19:30,279 --> 00:19:41,799
because overhead of colin web assembly.
It's not known in web assembly is awesome

175
00:19:41,880 --> 00:19:52,680
for tasks based on depending of numbers
calculating the numbers like drawing some things with

176
00:19:53,039 --> 00:20:03,440
audio video, but strings text is
a different thing and it's sometimes maybe maybe

177
00:20:03,480 --> 00:20:08,200
better to check if JavaScript is good
enough for that before you start implementing it

178
00:20:08,359 --> 00:20:15,799
in brass or sea share. Interesting
with regards to this overhead of web assembly,

179
00:20:15,519 --> 00:20:21,720
is it an overhead just on in
it or on all function calls?

180
00:20:22,119 --> 00:20:26,680
It's so all function calls. It's
it's not huge, like it's not a

181
00:20:26,759 --> 00:20:33,559
few seconds. It's maybe fifty milli
seconds. But I mean, if you're

182
00:20:33,599 --> 00:20:42,240
trying to save every every seconds,
then some tasks should be done inside JavaScript

183
00:20:42,359 --> 00:20:48,799
and some tasks should be done in
web assembly. I mean, if you

184
00:20:49,079 --> 00:20:55,839
want to just create mt five hash, there is no use for web assembly

185
00:20:55,880 --> 00:21:03,599
because JASP will do it faster.
But if you need to create some video

186
00:21:03,720 --> 00:21:07,960
game where you can zoom in and
zoom out, then jascript has no chance

187
00:21:08,240 --> 00:21:18,279
to do it faster than web makes
sense. Now, we also spoke about

188
00:21:19,079 --> 00:21:25,519
the bundle size right, like sometimes
you can have web assembling modules that are

189
00:21:25,599 --> 00:21:30,160
just way too large. With JavaScript, we have several techniques to reduce bundle

190
00:21:30,240 --> 00:21:37,559
sizes with web assembly. Do we
also have similar techniques? Yeah? There

191
00:21:37,640 --> 00:21:47,359
are. Well, I was working
with Rust and there's great too. Wasn't

192
00:21:47,480 --> 00:21:56,880
park and OpEd that help with optimization
of wasn't model sizes and interest itself.

193
00:21:56,359 --> 00:22:11,559
Some compiler figurations might help it binary
size and yeah, general recommendation is use

194
00:22:11,839 --> 00:22:21,000
fewer generics, use fewer strings for
matching, and well you're going to find

195
00:22:21,240 --> 00:22:27,559
more of them by links in my
article because it's not the short things to

196
00:22:27,599 --> 00:22:37,599
explain, okay, And in your
article the link that we have to shrink

197
00:22:38,519 --> 00:22:45,559
was code size is specific to Rust? Was right. So I was wondering

198
00:22:45,920 --> 00:22:52,559
because when we compile something to have
assembly, it kind of loses the reference

199
00:22:52,599 --> 00:22:57,880
of whether it was written in Rust
or c sharp or whatever, because it's

200
00:22:57,960 --> 00:23:00,960
almost like, correct me if I'm
wrong. At least you have a lot

201
00:23:02,000 --> 00:23:06,799
more experience with web assembly than I
do. But my understanding of web assembly,

202
00:23:07,000 --> 00:23:11,680
at least conceptually, has always been
similar to what Java does, in

203
00:23:11,720 --> 00:23:17,920
the sense that Java compiles to byte
code. I think that's the right term.

204
00:23:18,400 --> 00:23:22,359
And then this is what it uses
to be platform agnostic, right,

205
00:23:22,400 --> 00:23:27,319
so that it can run in different
operating systems. And I always understood that

206
00:23:27,359 --> 00:23:32,400
web assembly did something similar. So
if I wrote the same code and c

207
00:23:33,160 --> 00:23:37,039
or in rest but compiled it in
web assembly, I would not have any

208
00:23:37,680 --> 00:23:42,200
references to the original REST or C
code. Of course, they would be

209
00:23:44,039 --> 00:23:48,960
different in the final compiled results,
just because C and rest are going to

210
00:23:48,000 --> 00:23:56,920
compile the same the same function in
different ways. But the web Assembly code

211
00:23:56,920 --> 00:24:02,960
itself is almost like a universal language
and not specific to rest or see.

212
00:24:03,039 --> 00:24:10,440
So I was wondering if that specific
tool for shrinking was code size that seems

213
00:24:10,480 --> 00:24:15,640
to be at least from a quick
glance, very specific to Rust code written

214
00:24:15,680 --> 00:24:23,279
in web Assembly. I wonder if
that that package the library also works for

215
00:24:25,039 --> 00:24:32,480
shrinking web Assembly code that was not
originally written in Rust exactly because of the

216
00:24:32,519 --> 00:24:37,599
reason you mentioned. After you got
web assembly binary file, you cannot do

217
00:24:37,680 --> 00:24:44,319
anything you're going to shrink its size. There are actually two steps. First

218
00:24:44,519 --> 00:24:49,839
is you are compiling from your language
like C Sharp or rest inter special set

219
00:24:49,880 --> 00:24:56,440
of instructions. And after that this
code really compiled in the binary. And

220
00:24:56,720 --> 00:25:02,519
on the first step you can kind
of if you're super expert, you can

221
00:25:02,599 --> 00:25:11,240
manually edit the code generated from compiler
from your rasters Sharp code and maybe optimize

222
00:25:11,240 --> 00:25:17,319
something. But for example, I'm
not that could and after you created the

223
00:25:17,319 --> 00:25:22,160
by inner file, that's it and
you can do anything. As far as

224
00:25:22,160 --> 00:25:30,319
I know. So all the code
size optimization tools they are bound to compilers

225
00:25:32,200 --> 00:25:44,480
it's still ANG or scripting or Rust
itself. They optimize the size using knowledge

226
00:25:44,480 --> 00:25:52,240
about the language. So it's it's
a task that compiler does, so it's

227
00:25:52,240 --> 00:26:00,720
bound to a language. Gotcha.
Okay, So if I understood correctly that

228
00:26:02,079 --> 00:26:11,200
specific technique of reducing or drinking the
web assembly size of your Rust code,

229
00:26:11,319 --> 00:26:17,880
this is it is not like you
run a command on the generated web assembly.

230
00:26:18,240 --> 00:26:22,279
It's more like you run the command
on the Rust code before it's turned

231
00:26:22,319 --> 00:26:26,480
into web assembly. Is that yeah, you're kind of yeah, yeah,

232
00:26:26,519 --> 00:26:33,720
exactly, You give some instructions to
the compiler. That's how it works.

233
00:26:36,240 --> 00:26:40,319
Okay, Okay, that makes a
ton of sense. All right, So,

234
00:26:41,119 --> 00:26:45,480
IVENI, we've been able to package
a ton of content in just twenty

235
00:26:45,519 --> 00:26:53,839
seven minutes. I wonder if there
are any specific topics that I haven't brought

236
00:26:53,920 --> 00:27:00,680
up but you feel are really interesting
to bring up to the audience. Well,

237
00:27:03,160 --> 00:27:07,000
maybe about the Rust itself. I
mean, nowadays, if you write

238
00:27:07,079 --> 00:27:15,200
in Typescript and you want to try
Rust, I encourage you to do this

239
00:27:15,599 --> 00:27:23,599
because if you write in typescript and
you'll follow immutability approach all the time,

240
00:27:25,480 --> 00:27:37,160
and you describe types everywhere, you
never use any and then you're almost ready

241
00:27:37,160 --> 00:27:41,759
to use rust actually, because it's
quite close to rust code, to be

242
00:27:41,839 --> 00:27:45,039
fair, and it will not take
a lot of time to learn it.

243
00:27:45,759 --> 00:27:56,799
If you are used to strict typing
to follow it to use immutable data whereas

244
00:27:56,839 --> 00:28:02,319
possible, then as I said,
it will be easier for you to start

245
00:28:02,799 --> 00:28:08,680
writing interest great. And what with
regards to the syntax itself, I mean

246
00:28:08,759 --> 00:28:14,000
you're saying that it would be really
easy. I assume that is because if

247
00:28:14,000 --> 00:28:19,160
you're written very strict typescript, then
you're already used to not specifically the syntax

248
00:28:19,200 --> 00:28:23,200
of rusty. It may be very
different from how we do how we write

249
00:28:23,240 --> 00:28:26,759
code in typescript, but I think
the concept, I think what you mean

250
00:28:26,839 --> 00:28:32,160
is the concept of always being very
specific with your types. Is that it?

251
00:28:32,279 --> 00:28:34,359
Or do you also mean that the
syntax of rust is also pretty close

252
00:28:34,359 --> 00:28:42,799
to typescript? Not that close?
But yeah, what I mentioned is kind

253
00:28:42,799 --> 00:28:51,960
of rules inside the language, the
limitations. Typescript brings some limitations with types

254
00:28:52,000 --> 00:28:56,920
and they are to help us,
and REST does the same. It has

255
00:28:56,960 --> 00:29:00,440
some limitations. Maybe sometimes it will
fight with borrow chain care, but it

256
00:29:00,559 --> 00:29:10,920
exists to help you not to damage
here mental health, and because people who

257
00:29:10,960 --> 00:29:15,640
write in Typescript are kind of used
to such limitations, it will be easier

258
00:29:15,400 --> 00:29:23,920
for them to meet such limitations in
prest gotcha makes sense? Makes sense?

259
00:29:25,359 --> 00:29:30,119
And what we in regards to the
syntax itself, do you believe Let's assume

260
00:29:30,319 --> 00:29:37,160
a somewhat experienced Typescript developer, Let's
say at least a plain level Typescript developer,

261
00:29:37,279 --> 00:29:42,200
his experiences, his or her experiences
have been mostly with web development.

262
00:29:44,079 --> 00:29:52,559
And now this person wants to learn
Rust. How long Let's assume that this

263
00:29:52,599 --> 00:29:57,920
person is like fully focused on that
that learning journey. They're not bouncing time

264
00:29:57,960 --> 00:30:03,680
between college and work. They just
literally pause their life to focus on that.

265
00:30:06,640 --> 00:30:11,319
How much time do you believe it
would take for this person pectitiously to

266
00:30:11,519 --> 00:30:22,480
go from zero to at least productive
interest. If you wants to create,

267
00:30:22,839 --> 00:30:32,720
for example, API for your back
in for your website, then in six

268
00:30:32,759 --> 00:30:37,279
weeks you will be productive and in
eight ten weeks you will get your API

269
00:30:37,359 --> 00:30:47,759
ready. That's how it was in
well with me and with a couple of

270
00:30:47,759 --> 00:30:53,960
other guys I know. And it's
easier when you get help from the community.

271
00:30:55,400 --> 00:31:00,240
And Rust has very very nice community. They help a lot, and

272
00:31:00,680 --> 00:31:08,960
don't be afraid to ask ready to
our slack or discord. People are very

273
00:31:10,759 --> 00:31:17,519
ready to help you. Yes,
that's very good to know. Okay,

274
00:31:18,400 --> 00:31:23,000
all right, so I don't think
I have any other major questions, at

275
00:31:23,079 --> 00:31:27,759
least nothing that I can think of. So if you don't have anything else

276
00:31:27,799 --> 00:31:32,759
you'd like to bring up, I
think you can start wrapping up. Yeah,

277
00:31:33,119 --> 00:31:38,400
that's right. Okay, all right, let's just do some quick promos.

278
00:31:38,880 --> 00:31:42,640
Let's start with you. Do you
have anything particular you would like to

279
00:31:44,119 --> 00:31:48,319
promote. It doesn't even have to
be related to REST or rather assembly.

280
00:31:52,079 --> 00:31:59,200
No, but well, read mind
madn blog. You'll find some maybe interesting

281
00:31:59,319 --> 00:32:05,599
articles not only about and rest,
by about other topics in Angular such as

282
00:32:05,880 --> 00:32:13,279
signals, change detection and other things
and zongless awesome. I have just sent

283
00:32:13,519 --> 00:32:22,599
a link to your article in the
comment section. Not everyone we'll see that

284
00:32:22,640 --> 00:32:28,839
because you might be in a in
a player that doesn't support comments. But

285
00:32:28,920 --> 00:32:34,240
if you're watching us from YouTube,
then there's a comment section there you should

286
00:32:34,279 --> 00:32:39,240
see the link. Otherwise, if
you're just listening to us, then you

287
00:32:39,440 --> 00:32:46,960
can look up on Google as powering
Angular with Rust, and you will most

288
00:32:47,160 --> 00:32:57,319
likely see if needs article be the
first result on Google. Okay, on

289
00:32:57,359 --> 00:33:00,319
my end, I'm just going to
promote the two companies that are use the

290
00:33:00,359 --> 00:33:04,799
show. So there are many other
podcasts produced by Top and Doves. There

291
00:33:04,920 --> 00:33:13,279
is even podcasts about Ruby about I
believe they reactivated the podcast about Freelancing.

292
00:33:13,599 --> 00:33:20,640
Also JavaScript Jabber as a more generalized
web development podcast, so highly recommend checking

293
00:33:20,640 --> 00:33:24,519
that out if you're interesting in other
technologies. Besides Angular, there's definitely a

294
00:33:24,640 --> 00:33:30,480
show inside the Top and Doves universe
of podcasts that is going to be what

295
00:33:30,519 --> 00:33:37,839
you're looking for. And also Onvoid
if you are a company or know someone

296
00:33:37,920 --> 00:33:45,920
that is looking for either outsourced professionals
to complete a project or a staff augmentation

297
00:33:45,839 --> 00:33:52,279
just to extend your current team.
Onvoid offers design and software development work,

298
00:33:52,480 --> 00:33:55,480
and the most interesting piece is that
instead of just paying by the hour,

299
00:33:55,599 --> 00:34:00,839
which is what most agencies offer,
they have a much more client friendly business

300
00:34:00,880 --> 00:34:07,000
model where the client only pays after
the work is delivered and approved, and

301
00:34:07,039 --> 00:34:13,519
the costs are estimated upfront, so
you don't have to worry about overtime or

302
00:34:14,599 --> 00:34:22,840
the quality not being what you expected
because the costs are defined beforehand, and

303
00:34:22,239 --> 00:34:25,679
if you're not happy with the quality
of the delivered work, you can just

304
00:34:25,760 --> 00:34:30,719
request changes until you approve it,
and it only becomes bilable after your approval.

305
00:34:31,119 --> 00:34:34,880
So it's a very interesting model.
If you're interested in that, just

306
00:34:34,960 --> 00:34:40,559
check out you and void dot com
on void to learn more and contact them.

307
00:34:42,440 --> 00:34:45,320
All right, So that's going to
be it for me. It Caani,

308
00:34:45,400 --> 00:34:49,519
thank you so much for your time. At least to me personally,

309
00:34:49,559 --> 00:34:55,360
I think this was an extremely valuable
episode. This web assembly is something that

310
00:34:55,519 --> 00:35:02,599
feels too hard, feels autograsp for
most front and developers, but it doesn't

311
00:35:02,639 --> 00:35:07,400
have to be. And I'm glad
that we were able to break down some

312
00:35:07,480 --> 00:35:10,599
of the myths regarding the complexity of
doing it. So thank you very much

313
00:35:10,639 --> 00:35:15,199
for that, and feel free to
come back anytime. Yeah, thank you.

314
00:35:15,320 --> 00:35:22,000
It was very interesting and good luck
with the next episodes. Would be

315
00:35:22,079 --> 00:35:27,719
nice to listen there. Thank you, Thank you very much. All right,

316
00:35:27,760 --> 00:35:30,599
folks, thank you for sticking up
until the end, and I will

317
00:35:30,599 --> 00:35:32,440
see you in the next one.
