love how Chris gets into the details of how value semantics is achieved in a thoughtful and novel way compared to purely functional languages or Java using string immutability. Copy on write has been around for decades of course, but Swift brings it up the stack considerably.
Rust was exactly what I was thinking of when he was talking about mutable references and the annoying bugs that could ensue. I really like rust's borrowing and ownership design and its strict compiler
@@ConernicusRex Swift is not a serious language when it comes to systems programming. It's a good language but the future of systems and the web is WebAssembly and Rust.
And is there something like a full HM type system like in OCaml and FSharp? Do I need to specify the types, or can do the compiler do that? Complete type inference and pure function checking? Can I check if a given function is pure or not? And is pattern matching exhaustive?
@@shalokshalom type inference is present in swift, and it’s pretty good. The functional aspect of Swift is lagging, things like function purity aren’t checked. Pattern matching is exhaustive by default. As for the type system, not sure; however, HKT aren’t yet supported
In my humble oppinion, C++ does this the best since value semantics is default, reference semantics is opt-in. Furthermore, you can pass by constant reference to provide a read-only view over the data without copying. Then, there is move semantics which is required if you want to make value semantics efficient.
Exactly, it’s great. Ive never used swift but I think he explains that they took that same concept even further by hiding away things like const, private, reference, etc, but making them available if you know what you’re doing and need them.
No swift experience here, but worked with tons of C++. C++ does give you utmost control of value/references/constness. The real downside of C++ to me is how convoluted the wording gets. &, * and const can be mixed in various ways and each of these symbols/keyword have different meanings in different contexts. I love the expressiveness of C++ but it could have been worded better I guess
Well, you can't really beat Rust here though. Rust has learned from C++ and made it better. Like C(++) Rust is "value semantics by default", but also references are const by default, which means that default is also better used. Rust also is move semantics by default, you have to explicitly copy if you want to continue using a variable. So like C++ a function signature in Rust gives pretty much all the Information, but because of better defaults and the enforcement of certain features by the compiler (I. E. That not two mutable references be active at the same time), the function signatures tend to be even better related to the way the values will be used.
4 года назад+1
@@9SMTM6 I believe you, gotta try rust yet, been away from low level stuff for quite a while. If I may ask, would Rust be a good option for coding the low level AI/ML code, like the heavy math? I see it being mentioned a lot for system programming but I am not sure how good it is for SIMD/GPU
Man I can’t tell you the number of times I’ve gotten stuck by that reference semantic thing with Python. It is super annoying and very confusing especially when you’re using someone else’s Library. Thank you for mentioning that.
@@magnushoklandhegdahl1218 is this because when assigning a to b, b gets a pointer to the location in memory of the original array a? so when you change the values at that location in memory, it effects the value assigned to b? whereas if you were to pass by value a copy would be made, and changing the values at location a would no longer effect the value of b?
Excellent clip Lex, thanks for posting, much appreciated. Your channel is one of the best in the world. Thanks for interviewing remarkable brilliant guests and sharing them with the world. A+
You don't have to copy lists in functional languages. Generally speaking of you add something to a list in FP, you create list that points to the old one and your new value. Typically they are implemented as a tree to achieve this
Swift sounds great, but if I understood everything correctly something to some degree similar is done in Rust. There is no copy on write, if you own a string you can just manipulate it. But once you give out a borrow you can't manipulate it anymore. And the receiver can't store away a reference that can change, but if you pass ownership to someone else that one can of course store and change it, if they want to. So you get pretty much the same advantages as with Swift, but you don't need any runtime checks (as you would need with copy on write - there you need to check if you need to make a copy on every write operation). You can do some of that with C++ (e.g. Qt's QString is copy on write internally), but it doesn't track ownership the way Rust does.
@@bloody_albatross You said you did not know what I was talking about. I now defined what software is so next I can describe what software engineering is and try to relate it to my original comment. There are very few languages at commercial scale that can build a complete software program Rust and Python are not that. Even C does not get used as a compete package and C++ is starting to fade.
Java maintains String objects as immutable, but they use String objects pool to reduce consumption of Heap memory while runtime. So the concern guest is saying is very minimal in real world performance and memory consumption.
Java is a monster of memory consumption. A "hello world" Java program takes 1 gigabyte of RAM. Swift chooses reference counting instead of Java-style garbage collection. That means that Swift apps use more memory, but Java apps are faster. In fact, Java memory allocation is faster than C++ memory allocation.
I've never heard these topics discussed in these terms. In functional programming, it's immutability and lazy evaluation. Nice to hear that swift took some inspiration from FP. I tried it when it first came out, but it to me it just felt like another OO language with a nicer, more convenient syntax. Maybe I should take another look at it.
also 3:59 if people are doing work and havent learned about value/ reference types or pointers which is day 1 programming 101 basic stuff then they should probably not be.
So basically Swift neither passes by value, nor passes by reference; it passes by proxy. The proxy is smart enough to keep track of who should get the new value and who should get the old value when mutation occurs. Is this correct?
He invented Swift (coded the POC himself), but maybe more importantly, he invented (and created the POC) of LLVM, the compiler framework that Go, Swift, Rust, Julia (and more) are all built on top of. He enabled the current generation of programming languages. His knowledge of LLVM is invaluable.
Both Swift and F# have value semantics, unlike languages such as C# and Java. He's wrong in saying that immutability means lots of copying. That's not how immutability is implemented in most functional programming languages. His description of what Swift does to implement value semantics is essentially what most functional programming languages do to to get efficient immutability and value semantics. For instance immutable lists and maps in F# are NOT copied when passed as parameters to other functions. Same goes for other data structures.
“Actually good design is something we can feel”. And that’s why Steve Jobs was right since the beginning and Apple is most valuable. Developer experience is of most importance. When it feels good, you build better products.
I don't understand why programmers have a hard time choosing between or understanding reference and value semantics. Do you want that object to exist on its own or not?
8:50 “ There are Tradeoffs with everything.”: it is not computer science it is computer design. Design is about tradeoffs so there is no one answer as in science.
Isn't this the same idea as pass by value or pass by reference in C? I think thsts what im hearing explained here. Do you pass the memory address of what you give to a function or a copy with the same value. Its hard to wrap your head around sometimes because you can pass a variable to a function in C, increment it, but the original variable has not changed because C is a pass by value default language. If you want the function to modify the original variable you pass a pointer to the variable. The pointer is then passed by value and now you have access to the original variable inside the function. I think this is the concept hes talking about.
There is an additon in Swift apparently, which is "copy-on-write". That is, objects are passed by reference, but if a function tries to change an object, the copy is created with those changes instead.
@Balaji Thiruvengadasamy I don't mean to troll but I'm guessing you are using Python wrong. If you want numerical performance you can embed C/CUDA code or use related libs. If you make applications learn to scale.
From my experience, Swift has both value and reference semantics, value for `struct` and reference for `class`? Am I wrong or is Chris talking about non-custom data types?
Swift has both but the recommended course of action is to use structs for everything unless there is some odd reason that won't work. Struct protocols and extensions replace class inheritance. Even SWIFTUI is built with structs - not classes.
@@sedawk I basically use struct types to declare custom data types in my research project, and had an awesome time getting almost all bugs in compile time. I love this language man.
Not particularly a fan of python...but also not convinced by functionality of swift....it certainly is elegant...very clear...as language.....So if u can get things done by using one set of tools...why do u switch to new tools...for doing same task...unless....there is huge performance difference...or some added abilities....
I know it's his baby but does he know what Apple is actually doing with/to it? Let's put to bed the idea that anyone outside of iOS is actually using it seriously, that's a non-starter. In the iOS environment, it's turning into a monstrosity with a new paradigm introduced every other week, MVC, MVVM, SwiftUI. There is no sign that Swift can or will outgrow the very limited iOS ecosystem and even that will be cannibalised by Flutter as a reaction to the overstuffed verbosity of the other mobile languages. It's also strange that in the same train of thought that he suggests C has to do the heavy lifting for Python, he goes on a big tear about the need to pass by value. One of the major reasons everyone always ultimately reverts back to C/C++ for performance is the ability to engineer efficient memory use and speed through proper management of references, specifically opposite of the paradigm Swift is pushing. Jeremy Howard was on a little while ago namedropping Swift as a poor language for computation which is why he was sticking with Python. Even in iOS, most of the heavy lifting is still managed at the C/assembly layer.
@@playea123 Ok. But it just sounds like it's a language with support for a framework you need. Frankly, I think people make far too big a deal of languages when in fact, it's the environment (mobile, web, etc...) or frameworks they are actually interested in. As you eluded, you could likely do just as well in Java, and some of us prefer more verbose, often clearer code. But then Java doesn't have as natural a bridge to M/L, so Python or Swift are better choices for that use case.
@@alexshaykevich509 if someone considers Swift slow for computation why would they choose a gazillion times slower language named python as a better alternative??
@@farrellraafi1301 Simple, because for heavy lifting tasks, as the video points out, the heavy lifting has been abstracted out to C/C++ and CUDA. So FRAMEWORKS, have made Python a good choice for computationally intensive tasks.
If the tensors (and other objects in general) are being passed by value and cloned in Swift, isn't that inefficient? That's the whole point of using references for objects, arrays, maps, etc. is it not?
I’m a mechanical engineering student just getting introduced to programming languages Like matlab, python, and I think C or something used for arduino. Swift sounds interesting; should I get familiar with for my field or should I focus on what I’m learning rn?
As someone who switched from mech to cs. Focus on what you are learning now, as those are the most imperative to what you’ll do in the real world. Swift is basically only used for platform software development most of which you won’t be ever using. Fluids and control systems operate in the strong typed.
I prefer python for its both pass by value and reference. For the game I’m making in python, I use the fact that I can have multiple pointers to objects to help pass values dynamically between classes without global variables.
You can also do this in Swift though, it's just that it encourages the use of value types where it makes sense, but when you actually need shared values you still have solutions for it (for example classes and actors are reference types).
I think that this is actually a bad thing, i prefer Java because it forces you to work around this, making your code cleaner, more readable, and faster. Harder though but not really, because it's actually easier in the long run
I start programming in swift not because is good language, only because i want to make something in iOS and MacOS, but __there nothing like C and C++__
@championchap back in days when everything was written in Assembly (or preferably in Machine) language Unix proved it that even an OS can be written in a High Level Language like C. And today after 2~3 decades compilers are so good at compiling that they can produce a much better apps than an average programmer. That's why I think that we should be writing programs in much higher level languages and leave it on compilers to optimize them and with feed back loop improve their capabilities (which is now possible with A.I. and Machine learning).
Thank you Lex... Also thank you for calling out the BS indirectly!! As an engineer they're pretty much like politicians because we're not allowed to say no, just that things could theoretically happen.
Not sure there’s much difference really. You need to decide in both languages whether you’re using value/reference semantics. In python this is just done his clone().
Hey Lex, new programmer here. One mistake I can easily point out in this conversation is you both have an Aquafina water. Please fix in the next update
The entire language performance discussion is in reference to current CPU technology but if Intel manages to perfect quantum processors and someone like Microsoft manages to build home computers out of it, will performance still be of any concern at all? Wouldn't it make sense for all programmers to build on C and Python rather then learning 10 different languages for different applications in the market?
@@konrain7299 Generally people are using Swift because they want to use Cocoa/CocoaTouch. Unless you're doing some real hacky bullshit you're not porting those frameworks to linux or NT.
I used to be very anti-Apple but recently have gone over to the dark side. Their stuff is really good and I really enjoy programming on their platform. Their tight software/hardware integration has advantages. Apple doesn’t half ass things, they get it done right. Google etc have had so many half-hearted or abandoned projects like ARCore as their “response” to Apple’s ARKit. It’s half baked and now almost abandoned while Apple did it right.
Lex has no idea what he is saying starting at 3:29.. The other nerd is being very specific and is talking about reference vs. value types, but Lex has to meander around and talk about deep and big vague shit of math this and math that
The thing that swift really bothers me is the discouragement of using pointer. It is so often that something can be done easily with some usage of pointers at the very low level of the structure. But in swift, not only do you have to declare it as UnsafePointer, the usage is pretty disconnecting from the other swift codes. So I would rather go back to objc for some really low-level staffs.
Total beginner here. Former Art Student. Craving rules and objectivity. Angry at subjectivity. Starting my coding journey, upon recommendation from a friend, with Swift Playgrounds. Pretty much everything in this video going over my head 🤷♂️
I didn't say that I prefer reference-semantics over value-semantics. They each have their use. I said I prefer that it be explicit, in the language syntax, which mechanism is in use. The "complications" discussed in the video are moot w/ a language where the syntax is explicit.
I love that you interrupt the conversation to clarify on statements your guests make. Many of the times the viewer is wondering the same thing.
it's called normal conversation behavior, not sure why this is blowing your mind
@@botfantasies6229 it’s called “letting someone know that you appreciate them”
You should try it sometime, it feels really good
@@botfantasies6229 no one said it’s blowing their mind. It’s called appreciating someone’s work, not sure why this is making you mad
@@botfantasies6229 probably because it should be normal, but according to the status quo it hardly ever is "normal"
coming soon to python:
from pyswift import *
😂
:D
here you go gist.github.com/jiaaro/e111f0f64d0cdb8aca38
@@chris9352 No wayyy!! That's actually hilarious
🤣
love how Chris gets into the details of how value semantics is achieved in a thoughtful and novel way compared to purely functional languages or Java using string immutability. Copy on write has been around for decades of course, but Swift brings it up the stack considerably.
When I learned C and Pascal, the first thing that I liked is that you can pass practically anything by either value or reference to anything else.
Exactly. You have full control over your code, but with great power comes great responsibility 😉
@@RuslanMasinjila C level* 😁
Love seeing this pure CS stuff. Please include more pure CS! So interesting. Would be awesome to see people involved in Rust.
Chris is especially good at it too, easy to see why he's had an awesome career so far
Rust was exactly what I was thinking of when he was talking about mutable references and the annoying bugs that could ensue. I really like rust's borrowing and ownership design and its strict compiler
Why use Rust when you can use Swift? It's like making an action movie and really angling to cast Frank Stallone.
@@ConernicusRex Swift is not a serious language when it comes to systems programming. It's a good language but the future of systems and the web is WebAssembly and Rust.
@@hackerculture7391 web and systems are entirely separate fields.
Swift really is an elegant language, its taking everything we've learned in the last 30+ years of programming languages and starting on a clean slate.
@@dixztube 👍
@@dixztube That's great
It pains me every time I find out a client’s app is in Objective C and not swift.
And is there something like a full HM type system like in OCaml and FSharp? Do I need to specify the types, or can do the compiler do that? Complete type inference and pure function checking? Can I check if a given function is pure or not? And is pattern matching exhaustive?
@@shalokshalom type inference is present in swift, and it’s pretty good. The functional aspect of Swift is lagging, things like function purity aren’t checked. Pattern matching is exhaustive by default. As for the type system, not sure; however, HKT aren’t yet supported
In my humble oppinion, C++ does this the best since value semantics is default, reference semantics is opt-in. Furthermore, you can pass by constant reference to provide a read-only view over the data without copying. Then, there is move semantics which is required if you want to make value semantics efficient.
Exactly, it’s great. Ive never used swift but I think he explains that they took that same concept even further by hiding away things like const, private, reference, etc, but making them available if you know what you’re doing and need them.
I agree C++ does this the best.
No swift experience here, but worked with tons of C++. C++ does give you utmost control of value/references/constness. The real downside of C++ to me is how convoluted the wording gets. &, * and const can be mixed in various ways and each of these symbols/keyword have different meanings in different contexts. I love the expressiveness of C++ but it could have been worded better I guess
Well, you can't really beat Rust here though.
Rust has learned from C++ and made it better.
Like C(++) Rust is "value semantics by default", but also references are const by default, which means that default is also better used.
Rust also is move semantics by default, you have to explicitly copy if you want to continue using a variable.
So like C++ a function signature in Rust gives pretty much all the Information, but because of better defaults and the enforcement of certain features by the compiler (I. E. That not two mutable references be active at the same time), the function signatures tend to be even better related to the way the values will be used.
@@9SMTM6 I believe you, gotta try rust yet, been away from low level stuff for quite a while. If I may ask, would Rust be a good option for coding the low level AI/ML code, like the heavy math? I see it being mentioned a lot for system programming but I am not sure how good it is for SIMD/GPU
C# knows both value and reference types and has an implicit operation called (un)boxing to switch between value and reference type when needed.
Man I can’t tell you the number of times I’ve gotten stuck by that reference semantic thing with Python. It is super annoying and very confusing especially when you’re using someone else’s Library. Thank you for mentioning that.
Exactly
What is references semantic
@@Julia-zi9cl
a = [1,2,3]
b = a
a[1] = 4
print(b) # will print [1, 4, 3]
@@magnushoklandhegdahl1218 is this because when assigning a to b, b gets a pointer to the location in memory of the original array a? so when you change the values at that location in memory, it effects the value assigned to b? whereas if you were to pass by value a copy would be made, and changing the values at location a would no longer effect the value of b?
@@wow5heyy in python there is no pass by value. every assignment is a reference. you can however make an explicit copy by doing b = list(a) instead
Excellent clip Lex, thanks for posting, much appreciated. Your channel is one of the best in the world. Thanks for interviewing remarkable brilliant guests and sharing them with the world. A+
Started Swift about 2 years, it almost immediately became my favourite language. Going from Swift to Dart felt like such a downgrade.
Same here swift is awesome. Apple poured everything to make swift do everything we want so we can use it in ios development.
Chris Lattner has the mannerisms to be one of those Thermian aliens from the movie Galaxy Quest.
You don't have to copy lists in functional languages. Generally speaking of you add something to a list in FP, you create list that points to the old one and your new value. Typically they are implemented as a tree to achieve this
This is functional programming pilled
Swift sounds great, but if I understood everything correctly something to some degree similar is done in Rust. There is no copy on write, if you own a string you can just manipulate it. But once you give out a borrow you can't manipulate it anymore. And the receiver can't store away a reference that can change, but if you pass ownership to someone else that one can of course store and change it, if they want to. So you get pretty much the same advantages as with Swift, but you don't need any runtime checks (as you would need with copy on write - there you need to check if you need to make a copy on every write operation).
You can do some of that with C++ (e.g. Qt's QString is copy on write internally), but it doesn't track ownership the way Rust does.
The main difference is that Swift can be used as a complete software engineering language which Rust cannot.
@@Art-is-craft What does that even mean? How do you define a "software engineering language"? Can you create UML diagrams in Swift?
@@bloody_albatross
Software is a computer program that run a single machine.
@@Art-is-craft Ah, ok, you're a bot.
@@bloody_albatross
You said you did not know what I was talking about. I now defined what software is so next I can describe what software engineering is and try to relate it to my original comment.
There are very few languages at commercial scale that can build a complete software program Rust and Python are not that. Even C does not get used as a compete package and C++ is starting to fade.
Java maintains String objects as immutable, but they use String objects pool to reduce consumption of Heap memory while runtime. So the concern guest is saying is very minimal in real world performance and memory consumption.
Java is a monster of memory consumption.
A "hello world" Java program takes 1 gigabyte of RAM.
Swift chooses reference counting instead of Java-style garbage collection.
That means that Swift apps use more memory, but Java apps are faster.
In fact, Java memory allocation is faster than C++ memory allocation.
I've never heard these topics discussed in these terms. In functional programming, it's immutability and lazy evaluation. Nice to hear that swift took some inspiration from FP. I tried it when it first came out, but it to me it just felt like another OO language with a nicer, more convenient syntax. Maybe I should take another look at it.
also 3:59 if people are doing work and havent learned about value/ reference types or pointers which is day 1 programming 101 basic stuff then they should probably not be.
So basically Swift neither passes by value, nor passes by reference; it passes by proxy. The proxy is smart enough to keep track of who should get the new value and who should get the old value when mutation occurs. Is this correct?
Wow, this is a smart programmer who talks sense.
He’s a legend in the programming world.
He invented Swift (coded the POC himself), but maybe more importantly, he invented (and created the POC) of LLVM, the compiler framework that Go, Swift, Rust, Julia (and more) are all built on top of. He enabled the current generation of programming languages. His knowledge of LLVM is invaluable.
Both Swift and F# have value semantics, unlike languages such as C# and Java. He's wrong in saying that immutability means lots of copying. That's not how immutability is implemented in most functional programming languages. His description of what Swift does to implement value semantics is essentially what most functional programming languages do to to get efficient immutability and value semantics. For instance immutable lists and maps in F# are NOT copied when passed as parameters to other functions. Same goes for other data structures.
Most functional languages are simply not suitable for general software engineering.
Lex's face change when Chris says "copy on write" and the question that was piling up in his head is answered. :)
“Actually good design is something we can feel”. And that’s why Steve Jobs was right since the beginning and Apple is most valuable. Developer experience is of most importance. When it feels good, you build better products.
oh that's why iOS is the worsets platform for developers..
Python and java is all you need to manifest a Lamborghini
I don't understand why programmers have a hard time choosing between or understanding reference and value semantics. Do you want that object to exist on its own or not?
I like to listen to Chris cause the way he explain things is fairly easy to understand
That cauliflower ear is getting noticable
Ooo. I love both of these languages. Thanks for doing a comparison!
I prefer python .
@@fishfire_2999 why?
8:50 “ There are Tradeoffs with everything.”: it is not computer science it is computer design. Design is about tradeoffs so there is no one answer as in science.
Really reminds me of the Borrow Checker of the language Rust.
"Actually good design is something you can feel" totally agreed. I bought a google phone and miss apple design
Isn't this the same idea as pass by value or pass by reference in C? I think thsts what im hearing explained here. Do you pass the memory address of what you give to a function or a copy with the same value. Its hard to wrap your head around sometimes because you can pass a variable to a function in C, increment it, but the original variable has not changed because C is a pass by value default language. If you want the function to modify the original variable you pass a pointer to the variable. The pointer is then passed by value and now you have access to the original variable inside the function. I think this is the concept hes talking about.
There is an additon in Swift apparently, which is "copy-on-write". That is, objects are passed by reference, but if a function tries to change an object, the copy is created with those changes instead.
Coming from a C and Linux background, Python feels like a natural evolution. Swift feels weird, kind of like JS does.
@Balaji Thiruvengadasamy I don't mean to troll but I'm guessing you are using Python wrong. If you want numerical performance you can embed C/CUDA code or use related libs. If you make applications learn to scale.
Should try to get Rich Hickey on the show!
From my experience, Swift has both value and reference semantics, value for `struct` and reference for `class`? Am I wrong or is Chris talking about non-custom data types?
Swift has both but the recommended course of action is to use structs for everything unless there is some odd reason that won't work. Struct protocols and extensions replace class inheritance. Even SWIFTUI is built with structs - not classes.
@@sedawk I basically use struct types to declare custom data types in my research project, and had an awesome time getting almost all bugs in compile time. I love this language man.
Not particularly a fan of python...but also not convinced by functionality of swift....it certainly is elegant...very clear...as language.....So if u can get things done by using one set of tools...why do u switch to new tools...for doing same task...unless....there is huge performance difference...or some added abilities....
You're god damn right
I know it's his baby but does he know what Apple is actually doing with/to it? Let's put to bed the idea that anyone outside of iOS is actually using it seriously, that's a non-starter. In the iOS environment, it's turning into a monstrosity with a new paradigm introduced every other week, MVC, MVVM, SwiftUI. There is no sign that Swift can or will outgrow the very limited iOS ecosystem and even that will be cannibalised by Flutter as a reaction to the overstuffed verbosity of the other mobile languages. It's also strange that in the same train of thought that he suggests C has to do the heavy lifting for Python, he goes on a big tear about the need to pass by value. One of the major reasons everyone always ultimately reverts back to C/C++ for performance is the ability to engineer efficient memory use and speed through proper management of references, specifically opposite of the paradigm Swift is pushing. Jeremy Howard was on a little while ago namedropping Swift as a poor language for computation which is why he was sticking with Python. Even in iOS, most of the heavy lifting is still managed at the C/assembly layer.
What about it do you find great?
@@playea123 Ok. But it just sounds like it's a language with support for a framework you need. Frankly, I think people make far too big a deal of languages when in fact, it's the environment (mobile, web, etc...) or frameworks they are actually interested in. As you eluded, you could likely do just as well in Java, and some of us prefer more verbose, often clearer code. But then Java doesn't have as natural a bridge to M/L, so Python or Swift are better choices for that use case.
@@alexshaykevich509 if someone considers Swift slow for computation why would they choose a gazillion times slower language named python as a better alternative??
@@playea123 You're assuming all else being equal. If you prefer Java, but have to write an iOS app, you won't be writing Java.
@@farrellraafi1301 Simple, because for heavy lifting tasks, as the video points out, the heavy lifting has been abstracted out to C/C++ and CUDA. So FRAMEWORKS, have made Python a good choice for computationally intensive tasks.
If the tensors (and other objects in general) are being passed by value and cloned in Swift, isn't that inefficient? That's the whole point of using references for objects, arrays, maps, etc. is it not?
No, he explains that no unnecessary copying is made in Swift.
The thing that really annoys me about Python is that you can't really compile it.
So when are we getting swiftpy
Thumbs up for value semantics
Five seconds in, “pythons not great at building libraries because C” 😂😂😂
It is the main reason why Python is not an industry standard for software engineering.
I’m a mechanical engineering student just getting introduced to programming languages Like matlab, python, and I think C or something used for arduino. Swift sounds interesting; should I get familiar with for my field or should I focus on what I’m learning rn?
As someone who switched from mech to cs. Focus on what you are learning now, as those are the most imperative to what you’ll do in the real world. Swift is basically only used for platform software development most of which you won’t be ever using. Fluids and control systems operate in the strong typed.
Great video! Could a whiteboard or blackboard aid communication and discussion?
true that
I prefer python for its both pass by value and reference. For the game I’m making in python, I use the fact that I can have multiple pointers to objects to help pass values dynamically between classes without global variables.
You can also do this in Swift though, it's just that it encourages the use of value types where it makes sense, but when you actually need shared values you still have solutions for it (for example classes and actors are reference types).
I think that this is actually a bad thing, i prefer Java because it forces you to work around this, making your code cleaner, more readable, and faster. Harder though but not really, because it's actually easier in the long run
"Good design is something you can feel"
That's called subjectivity lll
Has swift gone out of the Apple ecosystem yet? I think the real problem for swift adoption outside of Apple is their priorities
I remember this dude from Galaxy Quest.
DUDE!!!
You are our only hope!?
Holy crap I was thinking that in my head and thought of posting a comment but here it is
I start programming in swift not because is good language, only because i want to make something in iOS and MacOS, but
__there nothing like C and C++__
Swift vs Julia?
No comparison. Julia is extremely domain specific for linear algebra.
One should consider making a compiler for python; which will compile python code (obviously optimized) to Machine Language to speed it up...
you mean cython?
@championchap back in days when everything was written in Assembly (or preferably in Machine) language Unix proved it that even an OS can be written in a High Level Language like C. And today after 2~3 decades compilers are so good at compiling that they can produce a much better apps than an average programmer. That's why I think that we should be writing programs in much higher level languages and leave it on compilers to optimize them and with feed back loop improve their capabilities (which is now possible with A.I. and Machine learning).
You need a runtime for the python to make it work.
PHP arrays also do copy on write.
Who is choosing Swift for things that they'd choose Python + C for if Swift didn't exist?
Thank you Lex... Also thank you for calling out the BS indirectly!! As an engineer they're pretty much like politicians because we're not allowed to say no, just that things could theoretically happen.
Was just wondering how swift handles this and RUclips algo came up with this video. I didn’t know the exact terms to search for lol
Increíble podcast, gracias.
This is why "learning to code" is not meant to be taken literally. You should learn how to bypass having to use code as much as possible hahah
Chris is ever the indefatigable pragmatist!
Thanks Lex, thanks Chris :) .
I am superrr new to programming. Are they talking about "pass by reference" vs "pass by value" ?
Just use const. Value semantics are inefficient
Swift fan boy here
For someone curious about defining these in Swift: define the thing as a ‘struct’ to get value semantics, and a ‘class’ for reference semantics.
I love swift
Such a nice bloke
Good Design!!!
Chris is so likeable and although I mostly agree with him so that might be bias.
awesome, thanks
Not sure there’s much difference really. You need to decide in both languages whether you’re using value/reference semantics. In python this is just done his clone().
Two words: Functional Programming ;)
2:50 i know exactly what they r talking about.
probably a retain cycle
Andrew Madsen is the Swift God.
Hey Lex, new programmer here. One mistake I can easily point out in this conversation is you both have an Aquafina water. Please fix in the next update
4:10 Enter Rust
Clojure is another language with value semantics.
Whenever I hear about these fancy features of some fancy language, I think: matlab can do that..
Mat lab is the best calculator
Didn’t realise graham stephan knew so much about programming
Julia is better than both.
Julia will never be a software engineering language and will just be an academic tool.
is Lex High??
Nope he is trying to balance several very complex ideas so as to make the subject manageable for the audience to grasp.
Julia may be a better choice!!
Finally found Julia comment)
Looks like a young Bill Belichick
The entire language performance discussion is in reference to current CPU technology but if Intel manages to perfect quantum processors and someone like Microsoft manages to build home computers out of it, will performance still be of any concern at all? Wouldn't it make sense for all programmers to build on C and Python rather then learning 10 different languages for different applications in the market?
Very interesting
hat kirkirii 🔥🔥
I like python. Swift belongs to apple. If I have to use something like swift, I'd use java or go.
Thats like saying Go belongs to Google. Swift is open source, it runs on Linux and now Windows.
@@konrain7299 Generally people are using Swift because they want to use Cocoa/CocoaTouch. Unless you're doing some real hacky bullshit you're not porting those frameworks to linux or NT.
@@feydrautha191 Swift on server is getting big, theres literally everything from static site generators to serverless framworks
#Lex is a drug, I am getting addicted bro👍
you may want to check yourself into rehab
Lex's IQ is so high, love watching this guy
I never understood phyton popularity in intense projects, and i would never indulge in apple stuff.
I used to be very anti-Apple but recently have gone over to the dark side. Their stuff is really good and I really enjoy programming on their platform. Their tight software/hardware integration has advantages. Apple doesn’t half ass things, they get it done right. Google etc have had so many half-hearted or abandoned projects like ARCore as their “response” to Apple’s ARKit. It’s half baked and now almost abandoned while Apple did it right.
@@mattizzle81
The biggest problem google has it is a back end company that has its hands in to many pies.
Julia is better for ML and data science
Lex has no idea what he is saying starting at 3:29.. The other nerd is being very specific and is talking about reference vs. value types, but Lex has to meander around and talk about deep and big vague shit of math this and math that
He is trying to keep the topic general so as to not get too technical because he could lose 99% of the viewers.
Swift Lover
like and Python Lover Dislike
The thing that swift really bothers me is the discouragement of using pointer. It is so often that something can be done easily with some usage of pointers at the very low level of the structure. But in swift, not only do you have to declare it as UnsafePointer, the usage is pretty disconnecting from the other swift codes. So I would rather go back to objc for some really low-level staffs.
So you're trying to write code for 1980 in a language written in 2013. Gotcha.
Total beginner here. Former Art Student. Craving rules and objectivity. Angry at subjectivity. Starting my coding journey, upon recommendation from a friend, with Swift Playgrounds. Pretty much everything in this video going over my head 🤷♂️
This is like nerd wars lol.
I understood nothing
I'll take explicit value- and reference-semantics any day over all of this.
I never heard a programmer prefer reference semantics, its literally goes against how things should work. Could you expand on what you mean?
I didn't say that I prefer reference-semantics over value-semantics. They each have their use.
I said I prefer that it be explicit, in the language syntax, which mechanism is in use.
The "complications" discussed in the video are moot w/ a language where the syntax is explicit.
@@matthewmurrian it is in this case no? for example structs are value types and classes are reference types.
@@konrain7299No, that's not quite "explicit in syntax."
@@matthewmurrian what do you mean by that
I’m with the 145K people who care I’m glad to be here.. one day I will be among these shabba ranks
This is such a random comparison lol
python is overrate
d
True
Love Swift!