Press "Enter" to skip to content

Cython Tutorial – Bridging between Python and C/C++ for performance gains


00:00:01what’s going on everybody and welcome to

00:00:03a site on introduction tutorial we’ve

00:00:06got a lot of things to cover I’m going

00:00:07to try to get everything fit into one

00:00:10single video so let’s get to it so first

00:00:12of all what is scythe on so I thought is

00:00:14a superset of the Python language so

00:00:17what this basically means is it’s going

00:00:18to act as a bridge between Python and C

00:00:21/ C++ and this means we’re going to go

00:00:24both ways we can go from Python to C C++

00:00:26or C++ back to Python and a lot of times

00:00:29we’re going to do this all in one fell

00:00:30swoop now the glory of site ton is you

00:00:34can do this without really knowing

00:00:35anything about C C++ it’s just going to

00:00:37generate that code for you now why would

00:00:40you want to do this well there’s quite a

00:00:42few reasons like there’s some kind of

00:00:44objects and like classes and attributes

00:00:48stuff like that that are just going to

00:00:49be more beneficial if we did it and C

00:00:51but actually some of the main gains

00:00:54you’re going to see or just from typing

00:00:56information and that’s it so cases are

00:01:00if you’ve been programming Python long

00:01:01enough and you’ve been doing things in

00:01:02Python you might have heard something

00:01:03like I’ve heard where it’s like hey

00:01:06syntax why are you using Python for

00:01:08machine learning when you could use C or

00:01:11C++ and it would be so much faster well

00:01:14that’s because I’m actually not just

00:01:16using Python I’m using Python and which

00:01:18is have just so happens to be wrapping C

00:01:20or C++ right that’s what we do so a lot

00:01:24of libraries are actually C optimized

00:01:27libraries like numpy pandas these are c

00:01:30optimized libraries they just happen to

00:01:32have basically a python api for you so

00:01:34in most most cases you can actually find

00:01:38but already made c optimized library for

00:01:41whatever you’re trying to do but many

00:01:43times you can’t how or at least

00:01:44sometimes you can’t so one way that you

00:01:47can it still improve the speed of your

00:01:49Python program is to use something like

00:01:51scythe on so the the main thing that at

00:01:56least at the very basic level that you

00:01:58can very simply do a scythe on there’s a

00:02:00lot of really advanced stuff that you

00:02:01can do size on as well but the basic

00:02:03thing that you can do is just add typing

00:02:06information so python is a dynamically

00:02:09typed programming

00:02:10language what that means is when you

00:02:11type in a variable you just say x equals

00:02:14five but later on X could equal Gary and

00:02:17you’re not going to have any you know at

00:02:18least you’re not gonna have any super

00:02:19errors relating to at one point it was a

00:02:23integer and now it’s a string you might

00:02:26have other errors in your code because

00:02:28of that but because it’s a dynamically

00:02:30typed language the variable we don’t

00:02:32have to actually tell the programming

00:02:34language hey this is going to be an

00:02:37integer or this is going to be a float

00:02:39the problem is every time that variable

00:02:41is referenced python has to say wait

00:02:43hold on a second let’s see is this an

00:02:45INT is this a full stream okay okay here

00:02:48it is yeah it’s definitely a string

00:02:50right this takes time now if you’re only

00:02:53doing this once or something in a whole

00:02:55program you don’t really have to add

00:02:57typing information but when you start to

00:02:59scale out the usage of variables either

00:03:02in for loops or maybe you’re just a very

00:03:05large website that has a ton of traffic

00:03:07and you’re scaling just in that way

00:03:10adding typing information can help you

00:03:12so much so that’s what we’re going to be

00:03:15showing here so anyways to get seith on

00:03:18what you’re going to need is first of

00:03:20all you’re going to need to where why

00:03:24are you doing this to me right now

00:03:25there we go so pip install or pip 3

00:03:28install scythe on now I already have it

00:03:30although this might try to put it to

00:03:31Python 2 yeah anyway pip install scythe

00:03:34on this is actually a Python 3 tutorials

00:03:36so actually I would do three install

00:03:38size on anyway yeah I already have it

00:03:41the other thing you need is a compiler

00:03:43or C compiler so if you’re on Linux you

00:03:47already have one yay GCC should be

00:03:50already here if you’re on Mac it should

00:03:53be like Apple’s Xcode I think you can

00:03:55grab and that has GCC I don’t know much

00:03:58about Mac’s so if you’re on a Mac and

00:04:00that doesn’t work for you sorry

00:04:01go to scythe ons website though and they

00:04:04have like a bunch of blurbs on there if

00:04:06you’re on Windows you can use mingw

00:04:08that’s probably the easiest one to use

00:04:10but it’s still a pain in the butt that’s

00:04:11why I’m filming this on a butsu anyway

00:04:15but yeah it can be done it’s just a

00:04:19massive pain so anyway

00:04:22once you have sight on once you have a

00:04:24compiler you’re ready to rumble so what

00:04:26I’m going to do is make a new folder I’m

00:04:29going to call it sites on tutorials and

00:04:32we’re going to go ahead go on in there

00:04:33and the first thing that we’re going to

00:04:35do is let’s just let me just show us to

00:04:37a new document example underscore PI dot

00:04:41pi and let me just open this so what I

00:04:47mean by like static and dynamic type

00:04:49variables it’s like in Python you could

00:04:50say x equals 5 right but in other

00:04:53languages you might have like int x

00:04:56equals 5

00:04:57now what’s icons going to expect of us

00:05:00is either see def is x equals whatever

00:05:03or not or it can be like see PDF can’t x

00:05:09equals 5 something like that now I’ll

00:05:11talk a little bit more about those when

00:05:12we get there but that’s kind of what it

00:05:14is like so this is dynamic right X

00:05:16actually doesn’t have to be an integer

00:05:18like later on like I was saying before

00:05:20we could say X is actually Gary screw

00:05:23this autocomplete anyway um cool so now

00:05:28let’s go ahead and example pie

00:05:31let’s do define tests tests will take

00:05:35one parameter that will be X and mental

00:05:37retains y equals zero for now and then

00:05:40we’re going to stay cool on in whole

00:05:42range of X : y plus equals I and then

00:05:49we’re going to return Y we also could

00:05:53say Y plus equal never mind anyway

00:05:57that’s good enough we’ll go ahead and

00:06:00say that and that’s our regular Python

00:06:02program now what if we wanted to compile

00:06:04is with scythe on we haven’t added any

00:06:07typing information or anything like that

00:06:08but any time we do do that we have to

00:06:11compile it to Saipan so first let me

00:06:13show you just how simple it is to

00:06:15compile to cycle so and create like a

00:06:18shared object and all that so first

00:06:19let’s go ahead and go to file save as

00:06:24example sigh dot pi X so dot py x

00:06:30that’s it save it done so now what we

00:06:35need to do is create the setup PI so

00:06:38let’s go ahead and new document setup

00:06:42sup PI let’s open that in sublime and

00:06:46now we’re going to do is from this utils

00:06:50core imports setup just like a typical

00:06:54stuffs up high and then what we’re going

00:06:56to say is from scythe on bill that’s

00:06:59capital C capital B import scythe on

00:07:02eyes not typical so now we’re going to

00:07:04say is setup and then the extension

00:07:08modules that we’re going to be using EXT

00:07:10underscore modules is equal to syphon

00:07:12eyes and then whatever our actual pyx

00:07:16file is so that’s going to be example

00:07:18dot on earth rather example size dot d Y

00:07:22X and that’s it for the setup pipe so

00:07:25really there’s other things we can pass

00:07:27in here but just for super simple

00:07:29purposes this is really it

00:07:32that’s all you got to do so now all we

00:07:36have to do is actually run this so we’ll

00:07:39open in terminal bring this over here

00:07:42can I do this you know can I do this I’d

00:07:47like to zoom in I know there’s a command

00:07:49for it sorry anyway hopefully this is a

00:07:53simple enough anyway so python 3 set up

00:07:55high build underscore ext – – in place

00:08:00we wish I could make that bigger you can

00:08:04go ahead and run that let’s see if it

00:08:06could control put I tried ctrl + it must

00:08:11be because I’m in a virtual machine cool

00:08:16anyway we’ll run that looks great bunch

00:08:19of stuff we don’t understand but that’s

00:08:20ok the thing that we care about is right

00:08:24here so it’s this this s oh this shared

00:08:27object so what’s created for us is our C

00:08:30file some build information in here but

00:08:32we don’t really worry about that and but

00:08:34actually what we care about is right

00:08:36here this is actual examples sign now

00:08:39what we could do now is new folder

00:08:42I call this step for deprecated and then

00:08:44I’m going to take example sigh what toss

00:08:47it in debt I didn’t mean to go into

00:08:49death as well anyway now what we can do

00:08:52is we can go and do new document testing

00:08:59dot hi Wow got a little excited there

00:09:05anyway and now what we can do is we can

00:09:10import example underscore sign now again

00:09:13I moved example signup pyx just so you

00:09:16can see that it doesn’t import that file

00:09:18but it won’t if you had that file

00:09:21locally it’s still not going to import

00:09:22it like dot pyx is not going to get

00:09:24imported I hope I’m not mistaken on that

00:09:27but pretty sure right example underscore

00:09:31side dot test five so save that we’ll

00:09:35come over here and Python 3 testing dot

00:09:39PI is it not oh it doesn’t won’t print

00:09:42it that doesn’t matter anyway it ran

00:09:46that’s all that matters I don’t want to

00:09:47print it out right now we will get to

00:09:49some more output information later

00:09:50anyway that’s how simple it is to at

00:09:53least build and all that with sight on

00:09:55right so now all we have to do is add

00:09:57typing information you don’t have to you

00:09:59can add as much or as little typing

00:10:01information as you want okay so it’s

00:10:05really up to you how deep down the

00:10:08rabbit hole of scythe on you want to go

00:10:09so let’s start slowly going down the

00:10:13hole now I put the declarations in fact

00:10:17I think I’m just going to pull it out

00:10:19because I don’t really feel like

00:10:25that way to type them all out you can go

00:10:27to Python program internet to get all

00:10:29these as well but I’ll just pull this

00:10:32over cool so these are just your

00:10:36declaration so if you’ve got integers

00:10:40hopefully you can see that well here we

00:10:43go so if you have an integer you can

00:10:45it’s just see that int characters car

00:10:47float double right single precision

00:10:51double precision list Dix objects okay

00:10:56and then you’ve got def CDF and CP def

00:10:59for like your actual functions def it’s

00:11:01just a regular Python function it’s in

00:11:03Python only can’t be referenced within C

00:11:05you’ve got C deaths this is a pure C

00:11:08function and then you’ve got CP def

00:11:10which is C in Python so it goes both

00:11:13ways

00:11:13so a common question is um you know

00:11:17since basically because what CP that’s

00:11:19going to do is also generate a way to do

00:11:21it in Python for you whereas C death is

00:11:24only in scythe on so you could only

00:11:27reference that internally you wouldn’t

00:11:29be able to reference that in any of your

00:11:30Python so then some people might ask

00:11:32like okay why don’t we always just use

00:11:34CP def right well there might be some

00:11:36things of see that you just can’t do in

00:11:40Python so you have to do see death okay

00:11:43so it’s there if you need it I’ve never

00:11:46done anything because I don’t know

00:11:48enough about C I’ve never done anything

00:11:51that I needed to use G def I’ve just

00:11:53always use CP def but if you’re like

00:11:55real talented and C and you know a lot

00:11:57of tricks to the trade see def you might

00:11:59use but not me

00:12:01so anyway there’s that so so those are

00:12:05the various declarations that we can use

00:12:08so now we can do is go back to example

00:12:11scipy YX and what are all the things

00:12:14that we can do here so one thing that we

00:12:17can do is like X we know X is going well

00:12:24we’re going to we’re going to enforce

00:12:25that X is going to be can’t twice so int

00:12:28X so in the parameters you don’t have to

00:12:31do seed of CP def you don’t do anything

00:12:33like that really you’re doing it right

00:12:36here so

00:12:36death in this case is going to just

00:12:39simply be a Python function but we can

00:12:41make it C PDF if we want to we can also

00:12:45specify what the return is going to be

00:12:48in our case it’s going to be an int so

00:12:51this is kind of confusing so normally I

00:12:55wouldn’t necessarily cover that

00:12:56immediately so first of all just we’ll

00:12:58leave this alone let’s just give typing

00:13:00information to X well that’s possible

00:13:02and hopefully by the end I’ll come back

00:13:04and throw that in there but then we’re

00:13:07going to come down here Y so Y again is

00:13:10just going to be in can’t so we’re going

00:13:11to do we’re going to say see death why

00:13:14because um so I guess I’ll just go ahead

00:13:19and contradict myself but in there’s

00:13:21really no reason to what we won’t ever

00:13:25need to access Y again so we can just

00:13:28use C def here so I guess probably what

00:13:30I should the way I should have said it

00:13:32is my functions like the actual

00:13:33functions up here I would never use most

00:13:37likely see dev I don’t think I’ve ever

00:13:38actually defined a whole function at CF

00:13:42but anyway that’s what I was thinking

00:13:45when I was going through it I’m sorry

00:13:46anyway see def why because we’re not

00:13:49going to access Y anywhere but this

00:13:51function also I so this is just think

00:13:55this can get kind of tricky but yet you

00:13:57want to pay attention to really all of

00:13:59the variables so in this case I is a

00:14:02variable and believe it or not Python is

00:14:05going to ask every single time we hit

00:14:07this I bar and here as well what’s the

00:14:12type of I well we can help it and we can

00:14:15say see this int I and we forgot to give

00:14:18into one here so anyway I was too busy

00:14:21explaining why I just kind of true to

00:14:23myself so see deaf int I and we don’t

00:14:25have to give it a starting value there’s

00:14:28no no point so there’s that then you’ve

00:14:31got I eyes already been defined X has

00:14:34already been or rather I already has a

00:14:35type X already has a type why are the

00:14:37other type I has a type Y has a type now

00:14:40now that we’re at the end though Y is

00:14:42actually the return so instead what I’m

00:14:45going to say is see PDF

00:14:46in because we return an int so aunt is

00:14:51like what’s the value of the function so

00:14:54that’s why you’ve got int coming up here

00:14:57because this function is returning an

00:15:00int kind of like this bat this variable

00:15:02right isn’t so right before the function

00:15:04and you give what it’s going to return

00:15:06you don’t have to do this by the way we

00:15:08could just use def it would be totally

00:15:10fine anyway CP def int test into X yeah

00:15:15I think this is all good so we can save

00:15:17that and we really just moved to run

00:15:20setup PI again hopefully we’ll get away

00:15:23with that yes and then we can test it

00:15:26again okay but that’s relatively um not

00:15:29exciting right now so what we’re going

00:15:31to do now is come back over to testing

00:15:34and let’s go ahead and let’s import Tyne

00:15:37it will say sine equals time it dot

00:15:40climate assignment and we’re going to

00:15:46run I think we can do just one line so

00:15:51we’re going to say example underscore

00:15:53owes its I dot or example side dot test

00:15:58let’s say five and then this means a set

00:16:02up

00:16:02so we’ll say set up equals and this will

00:16:04be import example sigh kind of running

00:16:09off the screen hopefully I can get this

00:16:11to fit

00:16:19cool and then we’re going to say PI it

00:16:22will we need one more variable here

00:16:24let’s do a number equals 100 and then

00:16:34what we’re going to do is go ahead and

00:16:36take this line copy paste we’re going to

00:16:38call this now PI and example PI import

00:16:44example underscore PI cool all right so

00:16:49those are the values so none of those

00:16:50print let’s print psych on opine for the

00:16:54x so basically what this does if you

00:16:56don’t know what time it does I do have a

00:16:58tutorial that you can go python permanet

00:16:59search time it and you’ll get a brief

00:17:02tutorial on it it just times how long

00:17:04these take to to go and you can do like

00:17:07whole chunks of them set up we’ll just

00:17:09import it first so we don’t calculate

00:17:12how long did the import take and it’s

00:17:15just a really handy thing to actually

00:17:16time operations because these operations

00:17:19are really really fast and tiny changes

00:17:22in what’s going on just in the

00:17:23background on your computer kind of

00:17:25seriously effect if you just use like

00:17:27import time to time these operations and

00:17:30probably number 100 is too low as well

00:17:32but anyway let’s just test it so print

00:17:36and let’s say Saipan is and it will be

00:17:40some variable X faster and then we’ll

00:17:45say dot format at what spy out of sign

00:17:50so let’s do

00:17:57[Music]

00:18:03pi /

00:18:05yeah basically how many times a psyphon

00:18:07go into Python sorry my brain is I think

00:18:14that’s right

00:18:14anyway now so now we’re going to go

00:18:23ahead and do is just run this in the

00:18:25terminal so come over here

00:18:28and now let’s run Python 3 testing dot

00:18:30pi for 10 minutes up let’s go over here

00:18:35where did we say – oh right here time it

00:18:40try again

00:18:41cool so in this case we can I mean this

00:18:44is a little hard to read but we’ve got

00:18:46the multiplier here and so we see

00:18:48saikhan is actually 8 times faster

00:18:50around one more time this can still vary

00:18:52yeah 12 times faster now eight times

00:18:57right so because let’s go ahead and do

00:19:00let’s look at thousand maybe ten

00:19:03thousand hopefully we can run that

00:19:05pretty quickly oh my god still a huge

00:19:11variance okay somewhere between five and

00:19:16fifteen times faster anyway bottom line

00:19:20is it’s clearly faster like we haven’t

00:19:22actually been slower so that’s not too

00:19:26bad now what I like to do is is try to

00:19:31drive home why is it faster though so

00:19:34coming back to here here where’s the the

00:19:44largest gain being made so for example

00:19:48what if we said you know if we didn’t do

00:19:53this like what if we just got rid of I

00:19:55here and is just remove that save and

00:19:59then now let’s just rebuild retest and

00:20:03then hmm

00:20:05that’s um not much faster now it’s

00:20:08actually slower whoops oh shoot what did

00:20:10I do

00:20:10I think I

00:20:10rebuilt it there we go anyway slower a

00:20:14little faster little faster slower

00:20:15slower right so just that line made a

00:20:20huge difference right

00:20:22what if okay so clearly into eye matters

00:20:25what about what oh I’m not appreciate

00:20:28commenting should work it yeah there’s

00:20:30no reason why that won’t work but I’m

00:20:31just going to leave it anyways let’s

00:20:34rebuild test it again

00:20:36Oh exception

00:20:39why reference before oh yeah what a noob

00:20:49try again there we go so um so now it’s

00:20:57like three four nine three four four

00:21:01four four okay so clearly that one also

00:21:03matters right that made a big difference

00:21:06okay

00:21:08trying to think of what else we could do

00:21:10we could we could take away the typing

00:21:11information for X now this should be

00:21:15checked only once right it’ll it’ll go

00:21:19through a range but it should only be

00:21:21checked once so I’m going to wager

00:21:22that’s not going to have a huge impact

00:21:24but let’s see so we can build let’s test

00:21:27right

00:21:28test test test right not a big impact

00:21:32because it was only referenced one time

00:21:34okay

00:21:36tracked I think we’re all set on all the

00:21:39other variables at this point so so that

00:21:42wasn’t really truly necessary so what

00:21:44I’m trying to point to though is that

00:21:46the huge gain happened basically

00:21:48everything that was involved in this for

00:21:50loop because every time we go through it

00:21:52we’ve got to reference that variable

00:21:54except for X because X is only value X

00:21:57isn’t being reassessed every single time

00:22:00we go through this loop how do I know

00:22:02that because we didn’t gain games by you

00:22:06know not chain you know like like object

00:22:08we all need the reference value of X

00:22:10once before we know okay how many loops

00:22:11or interations are we going to do we

00:22:13don’t need to read you know keep

00:22:14rear-ending what is X what is X that’s

00:22:17not that we don’t have to do that so

00:22:19anyway okay so that’s one thing now

00:22:22knowing what we know

00:22:24in this loop so you know maybe you want

00:22:27to impress all your friends who aren’t

00:22:29Python programmers and you want to say

00:22:30this is why I use Python and I know how

00:22:33to make Python so fast so what’s one way

00:22:35that we could make this better

00:22:37because a lot of times you know maybe

00:22:38you’ve heard that scythe on can help you

00:22:40be like 200 times faster right so what

00:22:43could we do well we could just make that

00:22:46that four leaf larger so like what if we

00:22:48said rather than five what if we said

00:22:525000 we might have to change this number

00:22:56of iterations let’s do a thousand save

00:23:00we don’t need to rebuild we just test

00:23:02again boom 119 times faster they’re out

00:23:0736 that’s ugly let’s go back to get one

00:23:091801 24 okay so we’re pretty we’re

00:23:13pretty ballin at this point on stripe

00:23:1550,000 Oh taking forever come on it’s

00:23:22going to be faster Wow

00:23:25I think we went down in speed 140 times

00:23:29we’re going with that one

00:23:30okay so we’ve written code that’s 140

00:23:33times faster anyway okay so there are at

00:23:39least a few examples or at least one

00:23:42example of some simple code but adding

00:23:45some simple typing information which

00:23:47ones actually mattered which ones really

00:23:48didn’t matter for example two let’s get

00:23:50rid of the definition here so let’s just

00:23:53take away that entire top line again

00:23:56this shouldn’t have really a huge effect

00:23:58I hope I’m not wrong but Python 3

00:24:01testing dot pi obvious we left our loop

00:24:04gigantic but anyway cool yeah so but

00:24:07they’re going to have like a huge impact

00:24:09in before like 36

00:24:10yeah cool so so that’s not really

00:24:13essential that you give it this the only

00:24:16time I may be essential really prime in

00:24:17my opinion is if it needed to be a seed

00:24:19if but anyway or if you’re calling the

00:24:22function whole bunch of times in a loop

00:24:25make it CP desc

00:24:26give the return of it and then give this

00:24:29of

00:24:31okay now let me go ahead and build that

00:24:35one more time let’s test it and I want

00:24:37to show one more thing for I let you all

00:24:40go and that is the the HTML kind of

00:24:44conversion that you can get from this so

00:24:49so what I’d like to do is let’s take and

00:24:56try and set how I want to do this

00:24:58because we can’t let’s go to example dot

00:25:04pi so let’s copy this paste so weird is

00:25:12pasting the original example dot PI into

00:25:14the new example side out pyx kind of

00:25:17what we had initially I saved it and

00:25:19then now I’m going to do is go into the

00:25:21terminal and I am going to do I think

00:25:25it’s just Saipan – a and then let’s call

00:25:30this what was the example it’s just

00:25:34example underscore Sun vample underscore

00:25:36its size dot p YX will run that and what

00:25:42this does is it just creates your C file

00:25:47and ah even though this is here it

00:25:50doesn’t create your s o file I don’t

00:25:54know why I wish if it was a single file

00:25:56you could just do size on a rather and

00:25:58have the setup PI or some form of saipan

00:26:01if somebody knows that you can do that

00:26:03without setup pi let me know because it

00:26:05doesn’t make any sense like why wouldn’t

00:26:07you just be able to build it with just

00:26:09the size on call but for whatever reason

00:26:11you can but what I’m interested in is

00:26:13the HTML file it produces so what we can

00:26:16do is we can open this in Firefox and

00:26:19basically as it tells you right here the

00:26:22yellow lines hint at your Python

00:26:24interaction interestingly enough y

00:26:26equals zero

00:26:27apparently isn’t super close I think

00:26:30it’s there it’s just the least

00:26:32interactive to Python but anyway you can

00:26:35see all of you know how close are we in

00:26:37in Python so clearly the definition is

00:26:40just pure Python and

00:26:41then the for loop is very heavy in

00:26:44Python so now we can close this and

00:26:47let’s go back here let’s just do ctrl Z

00:26:51save and then let’s now do the same

00:26:54thing again we’ll get a new HTML file

00:26:57let’s open that one and now we get

00:27:00basically only one line that’s the first

00:27:03line which is CP def because we wanted

00:27:06to be able to reference it and use it in

00:27:07Python but other than that the rest of

00:27:11this is nowhere near Python okay so

00:27:16anyway pretty cool so so what has it

00:27:19done for you basically like this for

00:27:21loop has been written for you in C so

00:27:25that’s in this file here and I don’t

00:27:27know about you but I’m not going to

00:27:29write like especially if you have like a

00:27:30large Python program I mean it’s going

00:27:32to generate like yeah like let’s say 50

00:27:34lines of Python then generate like

00:27:36hundreds of lines in C for you which

00:27:39would be very annoying to to write

00:27:41yourself and I probably would not be

00:27:42successful but obviously this is it’s

00:27:45pretty successful super tested I like I

00:27:48said before it’s used in a lot of large

00:27:50libraries like numpy pandas um’s and so

00:27:52on it’s a huge list of packages that use

00:27:55scythe on okay I think that we’ve made

00:28:00it through everything I wanted to cover

00:28:01at the the most basic level hopefully

00:28:04that was simple enough

00:28:06I personally was really surprised I had

00:28:09looked into scythe on quite a few times

00:28:10in the past and I just kind of found the

00:28:13documentation to be not so great I found

00:28:15a lot of kind of like tutorials on

00:28:17Saipan but it was really like talks on

00:28:19Saipan without actually showing exactly

00:28:22the code and so for the longest time I

00:28:25just couldn’t figure out Saipan but then

00:28:27when I figured it out and I realized oh

00:28:28my gosh it’s basically at least a

00:28:31beginner insight on all it is just

00:28:33typing information that’s it there are

00:28:38more interesting things that you can do

00:28:40obviously if you’re C programmer or C++

00:28:43there’s some other things you should

00:28:45look into also we can’t do it in this

00:28:48for loop but there are certain things

00:28:51that we can add with like with no guild

00:28:53so this will release the Gil for you

00:28:55you can do things unfortunately you’re

00:28:57not going to be able to do this you’re

00:28:59not going to be able to modify this

00:29:00without the Gil obviously you couldn’t

00:29:02do that and see anyways like you

00:29:03couldn’t

00:29:04you’d have to handle for that but

00:29:06there’s some things that you can do

00:29:08without the Gil as long as they’re not

00:29:10you know changing some sort of shared

00:29:12variable or something like that but yeah

00:29:14there’s there’s quite a few other things

00:29:16that we can do with scythe on and I

00:29:18might cover them more in the future but

00:29:19at even the most basic level just adding

00:29:22typing information can give you huge

00:29:24improvements so anyways that’s all for

00:29:27now

00:29:27if you have questions comments concerns

00:29:29something specific you’d like me to

00:29:30cover in scythe on feel free to let me

00:29:33know below otherwise as always thanks

00:29:36for watching things for all those for

00:29:37subscriptions and I will see you in

00:29:39another video