Пікірлер
@st4849
@st4849 10 сағат бұрын
I think I'll stop at Kotlin & Lambdas . Anything more is too pure to me :)
@ayoubmounadi2142
@ayoubmounadi2142 8 күн бұрын
What is property 1 and 2 at the first place You explanation is not clear at all buddy!
@DaedalusCommunity
@DaedalusCommunity 2 күн бұрын
The properties are the following: 1: programs are expressions, not commands 2: functions are values I'm sorry you found this unclear, if I can help I'm here :)
@ignatyev7448
@ignatyev7448 8 күн бұрын
Jackson Jeffrey Johnson Lisa Clark Patricia
@FoxrOyalyty-h5p
@FoxrOyalyty-h5p 10 күн бұрын
i couldnt do the function one i dont know how it works i mean how c i convert it to its ascii value without a database can i get some help
@DaedalusCommunity
@DaedalusCommunity 9 күн бұрын
Hi, what specifically do you need help with? If you want an ascii table, google "ascii table" and you will find it
@FoxrOyalyty-h5p
@FoxrOyalyty-h5p 10 күн бұрын
[org 0x7c00] start: mov ah, 0x0e mov bx, variable loopA: mov al, [bx] cmp al, 0 je config1 int 0x10 inc bx jmp loopA config1: mov ah, 0x0e mov al, 0x0a int 0x10 mov al, 0x0d int 0x10 xor bx, bx mov bx, buffer xor cx, cx loopB: xor ax, ax int 0x16 mov [bx], al cmp al, 0 je loopB mov ah, 0x0e int 0x10 inc bx inc cx cmp cx, 10 je config2 jmp loopB config2: mov byte [bx], 0 mov ah, 0x0e mov al, 0x0d int 0x10 mov al, 0x0a int 0x10 mov bx, buffer loopC: mov al, [bx] cmp al, 0 je hang int 0x10 inc bx jmp loopC hang: xor al, al xor ah, ah xor bx, bx jmp $ variable: db "write a word with 10 letters", 0 buffer: times 11 db 0 times 510-($-$$) db 0 db 0x55, 0xaa
@FoxrOyalyty-h5p
@FoxrOyalyty-h5p 10 күн бұрын
me wasting 35 minutes staring at the code not realising i declared the variable after the boot signature
@FoxrOyalyty-h5p
@FoxrOyalyty-h5p 11 күн бұрын
i did the alphabet without cheating... and i put dashes between them too💁‍♀ Update: i did A-B-C-D-E...Y-Z /13 min/ and A-a-B-b-C-c-D-d-E-e...Y-y-Z-z /around 30 min/ and A-b-C-d-E...Y-z /like 1 minute if not less cuz i just edited the code of the prev one/
@DaedalusCommunity
@DaedalusCommunity 11 күн бұрын
Dashes? Now that's fancy :)
@zoro.73
@zoro.73 11 күн бұрын
0:23 The 🐐
@dying476
@dying476 11 күн бұрын
I think there's a mistake in the proof. When you define what list[n] is, the definition isn't include "they can call another list function." There are 2 reason why this rule shouldn't be included. 1. This will cause "circular definition." You can't define list[n] to be "those who can return in a finite time and call another *list function*," or it will be defined by themselves. 2. Consider this function: input n; return list[n](n); This is the function that appeared in video but without "+1" in return statement. If a list function can call another list function, then the above function should also be one. Assume the index of it is x. Then we give x as an argument for it. It will return list[x](x), and it's just itself, so it will be in a recursion for infinite time. Obviously, an infinite recuring function isn't an interesting function, so it isn't a list function, either. Due to the two reasons, a list function shouldn't call another one, so the "weird function" in the video isn't in the list. Therefore, the proof in the video is invalid.
@DaedalusCommunity
@DaedalusCommunity 11 күн бұрын
I don't understand what you mean. I define list[n] as "the n-th program that does not use while loops, according to some arbitrary enumeration". The function f(n) = list[n](n) + 1 fits the definition of computable function (because it calls a computable function and applies a computable operation to it), yet by a diagonal argument it is shown not to be in the list. The proof is quite standard, and it is mentioned in several books, among which Godel Escher Bach by Hofstadter, who used a slightly different formalism for the proof: en.wikipedia.org/wiki/BlooP_and_FlooP. The proof also relies on the fact that the set of (finite length) programs that do not use while loops is countable (i.e. it is in a bijection with the naturals), whereas the set of countable functions is not. Therefore, these cannot be in a bijection, hence there are some computable functions that cannot be expressed without using while loops. Edit: Here is a further example of a diagonal argument: en.wikipedia.org/wiki/Cantor's_diagonal_argument Further edit: I probably now understand what you mean. You are saying that making it so that a function in the list can call another function in the list would make the definition circular. It is an understandable objection, and the reason why it is not valid is a bit deep. - As mentioned before, we define the list[n] as "the n-th program that does not use while loops, according to some arbitrary enumeration". - Once we have defined the list, we can define the function f(n) = list[n](n) + 1, and we can ask whether or not such a function is or is not in the list. The one key point is that we're asking *if there is a function in the list that is equal to f*. In order for two functions to be equal, they need not have the same "body", they just need to return the same output whenever provided with the same input. As an example, the two functions "g (x) = sqrt (x^2)" and "h(x) = abs(x)" are not written in the same way, but are **the same function**. So, the function that we are looking for in the list is not one that "calls a list element", but one that behaves in the same manner as the function f(n) = list[n](n) + 1, and is not written using while loops. Is it clearer now?
@dying476
@dying476 11 күн бұрын
@@DaedalusCommunity Thanks for you explanation. Now I know where I misunderstood the proof. I mistook the same functions for those with the same body, so i mistakenly thought there's some list[n] call itself and cause infinite recursion. You explained very well. I'm very grateful.
@DaedalusCommunity
@DaedalusCommunity 9 күн бұрын
@@dying476 thanks! Your question was very good, too!
@josetheyose8369
@josetheyose8369 13 күн бұрын
Could you help me with the os tutorial? I created an array inside the c file, and when I try to access the array, all the values are null or 0. Could you show me how to fix this?
@DaedalusCommunity
@DaedalusCommunity 12 күн бұрын
Could you make a repo and share your code?
@josetheyose8369
@josetheyose8369 8 күн бұрын
Nevermind. I fixed it. Now i need help with including bin files in c.
@absoluteaffinity9144
@absoluteaffinity9144 13 күн бұрын
yapper
@DaedalusCommunity
@DaedalusCommunity 13 күн бұрын
kzbin.info/www/bejne/imi4opt6qJ2toJY
@AkifKudretYasar
@AkifKudretYasar 16 күн бұрын
How dare u give us homework!🤬
@DaedalusCommunity
@DaedalusCommunity 14 күн бұрын
👀
@lucaspedro7272
@lucaspedro7272 17 күн бұрын
Holy sh*t youre back
@DaedalusCommunity
@DaedalusCommunity 16 күн бұрын
Quite :))
@Accanfo
@Accanfo 17 күн бұрын
Fascinating
@darknais
@darknais 22 күн бұрын
It's not true you can move memory in linear way with memove moving a pointer elsewhere
@szymoniak75
@szymoniak75 22 күн бұрын
(yet another)
@windows1.0
@windows1.0 22 күн бұрын
Holy shit, you came back
@justkirou
@justkirou 22 күн бұрын
We're so back
@dotbro
@dotbro 24 күн бұрын
I know this isn't the exercise but this looks cool: ; BIOS loads boot sector at 0x7c00 [org 0x7c00] mov ah, 0x0e mov bx, helloworld jmp printout printout: mov al, [bx] cmp al, 0x0 je keybrd int 0x10 inc bx jmp printout keybrd: mov ah, 0 int 0x16 mov ah, 0x0e cmp al, 13 je keybrd_thx int 0x10 jmp keybrd keybrd_thx: mov bx, thx jmp printout helloworld: db "Input stuffs >>> ", 0x0 thx: db " <- lol thx | ", 0x0 ; boot sector times 510-($-$$) db 0 db 0x55, 0xaa
@aleksvitek798
@aleksvitek798 24 күн бұрын
Please, explain what was the purpose of subtracting 3 from 510, to then just add 3 to 507 and end up with 510 again, I got confused
@DaedalusCommunity
@DaedalusCommunity 24 күн бұрын
I was explaining the usage of "times" to pad the program with zeroes. 3 bytes is the length of the program so far, hence (510 - 3) is the length of the zero bytes we need to pad the program with. These add up, obviously, to 510.
@aleksvitek798
@aleksvitek798 24 күн бұрын
@@DaedalusCommunity Thank you for the quick response! So if I understood you correctly, hypothetically, one could "hard-code" 510, i.e. "times 510 db 0", right? But that would be bad practice, right?
@groxxxx
@groxxxx 25 күн бұрын
0:31 only few know what the number 0x7c00 really means
@samannoyb
@samannoyb 25 күн бұрын
Are you by any chance from the Birmingham school of computer science? Because your code like exactly matches the lectures from the said university -> www.cs.bham.ac.uk/~exr/lectures/opsys/10_11/lectures/os-dev.pdf
@yarrakobama3417
@yarrakobama3417 25 күн бұрын
void* my_alloc(size_t bytes) { return malloc(bytes); } // ez
@lucaspedro7272
@lucaspedro7272 17 күн бұрын
You forgot there's no LIBRARIES.
@lucaspedro7272
@lucaspedro7272 17 күн бұрын
And no size_t
@CashsCoffee
@CashsCoffee 25 күн бұрын
great video, but there was way too much text. it might just be my brain but it took a looong time to get through.
@DaedalusCommunity
@DaedalusCommunity 25 күн бұрын
Yeah a few sequences had definitely too much text. That's what happens when one runs out of ideas for animation :( Thanks for the feedback, I'll try to work on that!
@Bard_Gaming
@Bard_Gaming 26 күн бұрын
Can you maybe show how one would implement a dynamic memory allocator that also keeps track of the amount of memory allocated, such that calling free() doesn't require the additional size parameter?
@solidnywonsz
@solidnywonsz 24 күн бұрын
You mean the amount of memory allocated in general?
@Bard_Gaming
@Bard_Gaming 24 күн бұрын
@@solidnywonsz In C, if you call malloc(), the compiler saves some space in the allocated memory to keep track of how many bytes were allocated in that space. This way, you can call free() without needing to specify how many bytes you want to free, since the compiler already knows.
@canaDavid1
@canaDavid1 24 күн бұрын
You can always allocate sizeof(size_t) more bytes, and store the size there, while returning the address just after the size. Free() then looks at ptr-sizeof(size_t) to get size
@Luxof_
@Luxof_ 26 күн бұрын
Nice!
@nicholas_obert
@nicholas_obert 26 күн бұрын
3:30 the real problem with defragmentation is that you cannot move heap data around, as you would invalidate any pointer that was acquired before the defragmentation. As far as I know, generic heap defragmentation is impossible in low level languages, except maybe for a very restricted set of programs. I can only think of heap defragmentation being possible in high-level languages where the programmer cannot ever directly access pointers and heap data is always kept behind two levels of indirection (an object on the heap is owned by a reference counting smart pointer and the programmer is given a reference to the smart pointer), allowing for the mutation of the pointer to the actual heap data (for defrag) without invalidating any reference the programmer may have lying around.
@DaedalusCommunity
@DaedalusCommunity 26 күн бұрын
Yes, we discussed this in another comment. You are correct, with this implementation and using pointers natively defragging is impossible. The solution with an additional indirection level could be implemented in C adding an additional field to the bitmap that holds a pointer to its currently assigned block; in this case the programmer would only keep a pointer to the bitmap entry, and whenever the defrag takes place, the second level of dereference changes. One drawback would be that the memory ends up all jumbled up and the adjacency of blocks would only be virtual.
@pixfri
@pixfri 27 күн бұрын
To access heap memory in C++ you don’t use malloc/free nor new and delete, they are considered a bad practice since C++11 since you need to manually manage objects lifetimes and when they are deleted, instead you need to use smart pointers Edit: I know this video talks about a lower level approach, I was just speaking about a more general use case.
@DaedalusCommunity
@DaedalusCommunity 27 күн бұрын
Yeah smart pointers are pretty cool :) However, this video is more focused on the OS implementation of dynamic memory. Without a kernel malloc implementation, you can't have smart pointers, garbage collection, or pretty much anything else :)
@lack_of_awareness
@lack_of_awareness 26 күн бұрын
you missed the whole point of the video. dont regurgitate what you have seen online without understanding what it means first 🥺👉👈
@pixfri
@pixfri 26 күн бұрын
@@lack_of_awareness i know the video was talking about a lower level approach, I forgot to mention that in my original comment, but in a more general use case, my comment is still correct
@zokalyx
@zokalyx 28 күн бұрын
ill try out the free project for september in codecrafters, if it's cool enough
@DaedalusCommunity
@DaedalusCommunity 28 күн бұрын
Is it the interpreter? It seems very cool, I'm thinking of doing it too :)
@zokalyx
@zokalyx 28 күн бұрын
@@DaedalusCommunity I don't think that's the September one, but it seems it is free for now! I'll check it out
@stolfoch.
@stolfoch. 28 күн бұрын
just in time 😍
@user-qw9yf6zs9t
@user-qw9yf6zs9t 24 күн бұрын
JIT
@Antagon666
@Antagon666 28 күн бұрын
Ummmm.... But when you defrag the blocks, how do you notify the consument its pointer to the data has changed ? What I mean by that: int *data = malloc(N); // data now points to 0x123 // allocate bunch of data and free everything except data*, so that memory is fragmented // at some point defrag in malloc runs once you allocated something // data* still points to 0x123, however by defragging everything has moved to lets say beginning, so the actual data is stored at 0x0 data[0] = 5; // CG, you've just pagefaulted.
@DaedalusCommunity
@DaedalusCommunity 28 күн бұрын
By literally copying each block along with the bitmap values That's why it takes so long, it's not only the pointers. One would need a different approach, like a linked list of tuples (bit, pointer, next) to defrag only the references.
@kgibbershnoxss
@kgibbershnoxss 28 күн бұрын
@@DaedalusCommunity At this point, you’re a third of the way through writing a compacting Garbage Collector, you “just” (idk how) need to scan the stack for roots to ensure you update pointers when defragmentation happens
@Antagon666
@Antagon666 28 күн бұрын
@@DaedalusCommunity I get the copying part, but my point is, that you have a local program that allocates a memory with system or other malloc. In C program the value of pointer won't change by itself and still points to the same memory location, even when the malloc would quitely defrag stuff in the background. Which would make the pointer invalid.
@DaedalusCommunity
@DaedalusCommunity 28 күн бұрын
@@Antagon666 Ah yes, you're correct! With this implementation, you just can't defrag :) It's not quite advisable anyway in general, it's best to use a better allocation policy (maybe a las vegas style random algorithm to have a better compromise between fragmentation and time complexity, idk)
@DaedalusCommunity
@DaedalusCommunity 28 күн бұрын
@@kgibbershnoxss Yeah, I guess one could extend it enough to apply some form of reference counting. Not the best sort of garbage collection, but better than nothing :)
@Skyb0rg
@Skyb0rg 28 күн бұрын
Is a bitmap commonly used? I thought the most common is a freelist since that makes scanning easy and is an implicit data structure (so it works well with things like sbrk).
@DaedalusCommunity
@DaedalusCommunity 28 күн бұрын
You're right, some implementations use linked lists as a support structure. It's really a matter of tradeoffs, for example bitmaps offer random access, hence for example one can check if a block is free in O(1) as opposed to O(n) for lists, but a free-space bitmap occupies more space compared to freelists. I've seen both approaches, but I believe that bitmaps lend themselves better as a didactic tool in our case :)
@redcrafterlppa303
@redcrafterlppa303 26 күн бұрын
​@@DaedalusCommunityalso a bitmap may allow for some advanced algorithms to cheaply determine best fit. While you can combine continuous blocks of memory in a free list to 1 node requiring a simple O(n) answer to best fit. Rather the complex algorithm could theoretically and or practically outperform the free list is something I think would be interesting to find out.
@lack_of_awareness
@lack_of_awareness 26 күн бұрын
free lists themselves would require allocations OUTSIDE of your allocator. complicates things. also any type of linked-list structure is usually slow in practice
@Skyb0rg
@Skyb0rg 26 күн бұрын
@@lack_of_awareness The advantage of free lists is that they *do not* require allocations outside the allocator. When a block is free, you can store the metadata in the free chunk of memory itself. And this strategy is used by glibc malloc so it’s definitely not too slow!
@redcrafterlppa303
@redcrafterlppa303 26 күн бұрын
@@lack_of_awareness the freelist is usually somewhat deterministic in size as it's (not strickly) coupled to the memory it holds. And the free list is more than capable of governing over itself. About linked structures. Often you can unroll linked structures to a dynamic array and indices cutting the cost past the benefit point. On the fly I could just find gnu libstdc++ stating they are using a freelist. In fact a number of freelists for threads. Therefore I guess the cost of the freelist seems to be outweight by the benefits.
@nikhilsajwan7411
@nikhilsajwan7411 28 күн бұрын
Let's go malloc
@TeH.j0keR
@TeH.j0keR 28 күн бұрын
From 1 to TempleOS.
@ENDESGA
@ENDESGA 29 күн бұрын
I love your content so much. Cannot wait to watch this
@achyuthvishwamithra
@achyuthvishwamithra Ай бұрын
2:43, boot sector size is 512 bytes tho correct?
@DaedalusCommunity
@DaedalusCommunity Ай бұрын
Yes
@achyuthvishwamithra
@achyuthvishwamithra Ай бұрын
Modern operating systems use paging tho correct? How does CS, DS, SS & ES registers help in the context of paging?
@DaedalusCommunity
@DaedalusCommunity Ай бұрын
Paging and segmentation are independent ways to access memory. The relevant difference in this case is that paging is managed by the OS, whereas segmentation must be managed at compile time. In our community OS we have implemented paging, hence we do not use those registers anymore.
@achyuthvishwamithra
@achyuthvishwamithra Ай бұрын
What is tele-type mode? Please explain, how BIOS can fetch data from input devices such as keyboard, mice, through interrupts? Does BIOS have an interrupt handler before the OS is initialized?
@DaedalusCommunity
@DaedalusCommunity Ай бұрын
In real mode there is an interrupt vector table starting at memory location 0 and consisting of 256 entries that is used to resolve the BOS interrupts. As for teletype mode, it's simply one name of the procedure called by executing int 0x10 with ah = 0x0e.
@carolinadeoliveiragregorio3653
@carolinadeoliveiragregorio3653 Ай бұрын
Can you continue the os tutorial?
@GyanPrakash-xo5gs
@GyanPrakash-xo5gs Ай бұрын
1) [bits 16] [org 0x10] start: cli mov ax, 0 mov ss, ax mov bp, 0x7c00 mov sp, bp push 0 mov ax, 231 stackify: aam push ax cmp ah, 0 je print mov al, ah jmp stackify print: pop ax cmp al, 0 je end mov ah, 0x0e add al, '0' int 0x10 jmp print end: hlt times 510 - ($ - $$) db 0 dw 0xaa55 2) [bits 16] [org 0x7c00] start: mov ax, 0 mov ss, ax mov bp, 0x7c00 mov sp, bp input: mov ah, 0 int 0x16 cmp al, 0x0D je input_end push ax mov ah, 0x0e int 0x10 jmp input input_end: mov ah, 0x0e mov al, 10 int 0x10 mov al, 13 int 0x10 display: cmp sp, bp je end dec bp dec bp mov ah, 0x0e mov al, [bp] int 0x10 jmp display end: hlt times 510 - ($ - $$) db 0 dw 0xaa55
@GyanPrakash-xo5gs
@GyanPrakash-xo5gs Ай бұрын
Homework: [bits 16] [org 0x7c00] start: call main hlt print: ; Prints to screen the string pointed by register bx mov ah, 0x0e mov al, [bx] cmp al, 0 je return inc bx int 0x10 jmp print return: ret scan_stdin: ; Writes stdin to string pointed by bx mov ah, 0 int 0x16 cmp al, 0x0D ; Enter key je return_stdin mov [bx], al inc bx mov ah, 0x0e int 0x10 jmp scan_stdin return_stdin: mov al, 0 mov [bx], al mov ah, 0x0e mov al, 10 ; Line Feed int 0x10 mov al, 13 ; Carriage Return int 0x10 ret main: mov bx, prompt call print mov bx, input call scan_stdin mov bx, reply call print mov bx, input call print mov bx, welcome call print ret prompt: db "Enter your name: ", 0 reply: db "Hello ", 0 welcome: db ", Welcome!", 0 input: times 16 db 0 times 510 - ($ - $$) db 0 dw 0xAA55
@AnandaCharia
@AnandaCharia Ай бұрын
🤯
@jma42
@jma42 Ай бұрын
I feel like programming in pure functional just makes more sense in programming overall, it makes it way easier to model stuff, break down code into components in a sound way, crazy robust typing system, way less stuff to learn, lesser updates, lesser changes, lesser hidden obscure magic, and standardized code structure that allows for some great features like making it easy to have several languages as compilation targets. The problem really is that the community now is way too convinced that the right thing to do is "use the right tool for the job" and ironically javascript is being used in almost every domain possible, and its not helping that most of them think using functional languages must only be used in something like algorithmically-intensive mathematics problem or some research paper.
@DaedalusCommunity
@DaedalusCommunity Ай бұрын
There are right tools for the job (ocaml for interpreters, matlab/octave for computation...), js is just not the right tool for any job lol
@lepidoptera9337
@lepidoptera9337 23 күн бұрын
Feelings have no place in science and engineering. Everything you just said is complete nonsense. :-)
@Naturyyy314
@Naturyyy314 Ай бұрын
I am 10 :0
@DaedalusCommunity
@DaedalusCommunity Ай бұрын
Keep learning every day :)
@bilditup1
@bilditup1 Ай бұрын
I think I understood how this works-great job there, I really appreciate it!-but not why I would ever want to use it. It seems substantially less clear and intuitive than writing in an imperative style, even in the off-chance that one is already familiar with lambda calculus. It seems like something that might have a kind of elegance or charm to it, but at the high cost of having to painstakingly rewrite your own ‘code’ in order to ever feel comfortable with it, akin to learning a foreign language (the kind that you speak, I mean) that uses an entirely different word order, set of characters, phonemes, etc from your native tongue (the difference being, I know why I’d want to do that, but not why I’d want to code functionally). I’m sure this is, somehow, a failure of imagination on my part. Can you maybe point to some simple code examples or real-life programs that might start to demonstrate why I’d want to do things this way?
@bilditup1
@bilditup1 Ай бұрын
…some of the other threads here have touched on this, but I’m still kind of curious about how using it in everyday situations rather than rarefied ones would be like. I’ll have to think on this/eventually try it, I guess
@DaedalusCommunity
@DaedalusCommunity Ай бұрын
I think there are two main reasons to use functional languages or featutes. The first one, that I've talked about in other responses, is that functional features make for neater and less error-prone code. If you've ever used rust, you'll know what I mean. Pattern matching is extremely useful even when mixed with imperative-style code; using optionals instead of Null makes it impossible to write code with certain errors, such as null references; using immutable variables (or rules for mutability) also avoids certain errors regarding references. These are real, everyday reasons for using functional features, that improve the quality of life of the programmer significantly. My most common mistakes just vaporized away, leaving me with easier-to-debug code. The second reason is that functional languages can be used as a formal basis to construct languages that look familiar to those acquainted with imperative and OOP languages, but are functional under the hood and come with all the advantages of funlangs. Examples of this are, again, rust, but also the do-notation from Haskell. Other concepts that were borrowed from FP to other languages are typeclasses, which are a much neater way to divide code into classes than traditional classes. These are the same as rust traits. Can't really produce any code examples rn because I'm on the bus, but if you have any questions I'll gladly help :)
@lepidoptera9337
@lepidoptera9337 23 күн бұрын
@@DaedalusCommunity Rust is a complete abomination. It's a language that patches training wheels to training wheels. Pattern matching is only useful if you have patterns to match, which I almost never do for the programs that I have to write, so that argument is simply user dependent. I have no idea where something like a null-reference would come from. Bu definition a reference always points to a valid memory location. Are you talking about null-pointers? Pointers are simply arbitrary absolute or relative addresses. One can't program hardware dependent software without them. Try writing an operating system without pointers. It's not going to happen. How about something as trivial as a round-robin scheduler? Nope. Not a chance. All you are telling me here is that you have never taken a computer science class and you have also never written a non-trivial program that operates on something beyond user-space.
@ZZaGGrrUzz
@ZZaGGrrUzz Ай бұрын
Is there any real benefit of not using temporary variables inside a function?..
@DaedalusCommunity
@DaedalusCommunity Ай бұрын
You can use them in functional programming as well in a way, they're just not quite "variables". E.g. you can do let x = e in e' where e' is an expression that uses x. The main difference is that the value of x is immutable, which is very convenient and is, as you may know, a key feature of rust. The reason I say it's covenient is that using temp variables to move information within your program makes for very error-prone code (especially if you're dealing with pointers and particularly null pointers), whereas you'll find that, if you program in rust or ocaml, there will just be fewer ways in which your code *can* be wrong. You'll eliminate a bunch of kinds of errors that are common for code written in an imperative style.
@DaedalusCommunity
@DaedalusCommunity 2 ай бұрын
Chad Thunderfrog
@bettyswunghole3310
@bettyswunghole3310 2 ай бұрын
This is very interesting stuff! I'm half tempted to go and buy a second-hand PC that I can basically ruin by experimenting on its boot sector! 😅
@tetsballer1835
@tetsballer1835 2 ай бұрын
this is the shit my boss thinks I understand