Player is loading...

Embed

Copy embed code

Transcriptions

Note: this content has been automatically generated.
00:00:09
well oh thanks for coming to my talk oh oh
00:00:13
this is ah a speech he core concepts on a
00:00:16
mall using your coat off from all like bands voting
00:00:20
on and also the s. p. t. or current maintainer
00:00:24
so the oh oh boldest lock is to kind again better intuition
00:00:31
about a sweetie i'm gonna go over a lot of details of their
00:00:34
well uh don't really worry about like fully understanding like details
00:00:38
because the are you know the whole point is to kinda like
00:00:42
see what the design philosophy or the design principles behind as the t. v.
00:00:47
and finally understand like why and what's happening rather than like
00:00:52
dog details so to put it into little context oh on
00:00:57
i speak user point three if you cool that they came out and like december of two thousand eight
00:01:03
so it's actually now at ten and a half
00:01:05
year old build tool just pretty amazing basically cannot trailed
00:01:10
white behind of the bird you know the style and the
00:01:13
or to have a really long history and all these different things
00:01:17
and i've been fortunate to basically maintain maybe last like
00:01:22
for five years of history of you know making it better tool basically
00:01:27
so before it would get in to the actual talk i was just like a plot this
00:01:32
thing called e. s. p. t. by example
00:01:34
all is well reference manual has this one page
00:01:39
the introduces you on how do we basically use the speech he
00:01:44
and one single page starting from all out the minimal build which is
00:01:49
actually just like touch bill dots fallen and that's like a blank file and that's actually a minimal build
00:01:56
and then from there it basically shows you how to port bus fellow version and there
00:02:01
all the way to how to make all da cries application that parking lot checks or whether or something like that
00:02:07
so that's well if you're no someone and you know if your colleagues
00:02:10
asking how do i get under speedy this pretty good just good start
00:02:15
so what appeals to all oh right it's so
00:02:19
there's a paper that came out last year all by
00:02:23
are more cough i'm not sure when pressing at the last thing correctly well mitchell
00:02:29
and actually some keen jones wrote this paper called the other build system all cart
00:02:34
phone using their definition and build system of were built to all
00:02:40
is something that or mace repeatable tasks all so
00:02:45
in there are sort of like a framework of thinking
00:02:48
excel is actually a build tool if you think about and you set up one two functions
00:02:54
right and then you plug in some numbers you're like oh corey cells or something like that
00:02:59
and then the other cells that calculates these numbers where you
00:03:02
basically set something up so that you can repeat the process
00:03:06
and just so you know bill basically is there's all
00:03:09
all things that happens no basically said stop the repeatable tasks
00:03:14
and there are specific designs that the bill to use how which will look into
00:03:20
the other aspect i think that is a really specifically set out
00:03:24
on and the o. s. p. d.'s manual we're getting started page
00:03:28
well i smell like got to know more more as i was
00:03:31
maintaining s. p. t. v. it's it's ah casually functional build tool
00:03:37
what i mean by that is that i'm not really claim like purely functional building right
00:03:44
well but it's actually like i sometimes joke that the s. p. t.
00:03:48
is one of the bill tool that pretends that the side effect doesn't exerts
00:03:52
on is a lot of the well for philosophy work on you know the concept around the
00:03:58
speech he is based on the all functional
00:04:01
programming and door several key aspects of that like
00:04:06
the i think the use of the mutable data structures well that's well
00:04:09
down art and the the as we'll get into at the it's it really
00:04:16
things about howl and wendy if facts of our trigger and how it's
00:04:21
handled and it's really you know there's a lot of thinking to wars
00:04:25
when and how and how you compose the facts so that's basically what
00:04:29
makes it more functional build tool well i think than the more traditional ones
00:04:35
so you know traditional of a good good start
00:04:40
fourteen a good starting point for the functional programming i think think about a fact right
00:04:45
because by capturing is on the fact our as a data structure
00:04:51
basically you're making the rest of the application more like are we capable pure function as essentially
00:04:57
so there's actually data structure inside of a speak eagle state on
00:05:04
and what we track and there is basically we track of of dog build structure
00:05:11
and it doesn't really track it but
00:05:13
conceptually it also maps into your desk
00:05:18
so your source code your you know class files and jars and libraries you
00:05:24
can think of them essentially as an effect right and there is oops oh on
00:05:32
a concept called the command inside obviously t. v. and
00:05:38
oh it's as of first come like approximation you
00:05:40
can think of command and as dos take transmission function
00:05:46
right so you start off with some sort of state all that has some file and
00:05:51
then you do some sort of fang using command then you go to the next state right
00:05:58
so that's probably go one important thing is that parents
00:06:02
or processed sequentially as like a state more naps you know like if you're familiar with that
00:06:09
art so basically it maps procedural code and it's you have the state
00:06:15
and then you go to another stay as you process something using command
00:06:19
and this is fairly low level construct so if you're a like a plugin authors out there
00:06:25
i my suggestion actually is to avoid using this command
00:06:29
your creating providing command well it's also important to
00:06:33
know that the what aspect of s. p. t.
00:06:36
is handled by command and why it behaves in certain ways so let's concede examples of command alright
00:06:43
on wall though i hope for command i'll say is actually help so oh
00:06:49
you know if you're gonna i'm familiar with this p. t. you know work or like get to learn more
00:06:54
help is actually a pretty good command orange type top and just gonna list want of commands and there
00:06:59
on tasks is another right interesting command that this is not really doing anything but
00:07:05
just listing a bunch of like pass that's all you know located into your build structure
00:07:10
um projects project a low basically these are
00:07:15
also listing out the sub projects in your build
00:07:18
on set becomes a little more interesting right like a set is basically our command that
00:07:25
changes your build all by taking the or the setting expression
00:07:31
d. i'm not sure if everyone is familiar with the next
00:07:34
one it's a semi colon command so command as composer will
00:07:40
using our multi command cause any call art
00:07:44
this is well this particular or syntax is all
00:07:48
new to s. p. t. wonder three i'll which or c. two came out a lot of few days ago
00:07:54
before you needed like salman khan in the front also you have
00:07:57
to say some common command want and then some common common to
00:08:01
oh and then your version that will be command wants in common common
00:08:04
to well basically you're able to compose sequential a whole bunch of cracks
00:08:09
and the other one that more people may be familiar with is
00:08:13
a plus plus not command that switches dog current all scholar version
00:08:18
and plus plus cause version than our
00:08:22
that basically forces or particular score aversion even
00:08:25
if it's not listed under cross colour of versions what's then plus command basically you know
00:08:33
issues the command aghast different versions of this call
00:08:37
so when i you know like these are basically details you have to memorise those bar
00:08:42
you can see how command basically is kind of compose was almost like string early right
00:08:48
show command is something that you see everyday all without really
00:08:52
not issuing at is the actual interactive
00:08:55
show itself is implemented as a command
00:08:59
that's occurring you to type something and they just only one of the command and then
00:09:06
once it it's not on the issues that show command again
00:09:10
so it's basically a command designed to ask you one question
00:09:14
we get into the act command the actually go and is the are sort of like all
00:09:19
lifting command or there's more details we need to get into
00:09:23
to like explain what this exactly yes bought when you type compile
00:09:29
oh i'll act command is what's actually processing the other tasks
00:09:34
so getting back to the state right so what state or these bunch of things change
00:09:41
on how open task like as i don't think it's really changing your state
00:09:46
well remember s. p. t. v.s stay concept tracks both to build structure
00:09:51
as well as you as you that's right so when you type project well
00:09:56
it's actually changing double structure a little bit because there isn't one of the build structure
00:10:01
is looking at your current project so that would change the interpretation uh when you type
00:10:08
or imply what passed or something like that i because you just switch to your current also project
00:10:13
all set obviously that issues on other settings so that changeable structure
00:10:18
and the other is basically kind of changes both well depending on what the command one ends
00:10:23
an act command like i said it affects more your of your desk because that's where compilation happens
00:10:30
so um let's think about like what why
00:10:34
wall where they create like stay in command right
00:10:38
on his heart gets back to the the paper of the all the bills system apart
00:10:46
which is that if you think cars below are you know
00:10:51
state to be like a full of water like the us
00:10:55
the command basically kinda gives you like a predictable checkpoint that like
00:11:00
the l. s. p. t. will come to a stop point right
00:11:03
and it's come like this down and it's you the user you get
00:11:07
to change which way the next flow of the water is going to be
00:11:11
um so if you want to do like compile or test i'll that's
00:11:15
dos work a stopping point where it gives you and this guy like is
00:11:21
designed partially because s. p. t. is an interactive
00:11:25
build tool like if we didn't have like interaction
00:11:29
you don't really need to have state right just like do your thing but because we come back to those
00:11:35
you know those interactive nets are economic sense to write
00:11:41
this and like uh stay and like the transition of state
00:11:44
so too i like uh make a diagram about this it kinda looks like that's
00:11:48
right so we have a shell like was the it's designed to ask exactly one question
00:11:53
and you typed command and effects happen sort of on the side
00:11:58
are they almost doesn't matter if the o. r. jar file is created or not a lot of times because
00:12:04
you know your problem mostly working with the or like error message or something like that the fact
00:12:09
that it compile that's probably good or not for a a or like where you're running a past your
00:12:13
you're not really looking at the jar of the past you're actually looking at the results of the test
00:12:18
ah so the fact that it failed or succeeded those are
00:12:21
more interesting bands and war they you know presented us today
00:12:25
user locks basically so you issue commands and what you get
00:12:29
back is the locks and in effect on happens on the side
00:12:34
all next i want to talk about the are
00:12:38
just well british movie called the uh about time
00:12:42
on so like some people call it the or or what prime trouble
00:12:47
actually because it's the same on i think director as all of actually
00:12:51
and the oh like watching different like a movie that involves like upon troubling
00:12:56
and they are i think this one like you get into look all the and all them and then
00:13:00
the family they're able to go back to the past point in their life and then they redo at home
00:13:07
and there's it's one paper that was written i think in like nineteen seventy eight or
00:13:11
something like that called your plan clocks and the ordering of events in the distributive system
00:13:17
and it's like oh i i only really like one or two papers well there's like one really interesting paper i really recommend
00:13:23
part not just for like people who's interested in like
00:13:26
functional programming bought like distributive system like market and stuff
00:13:30
well so we're not gonna give it a four paper that talks a lot like you know logical clock and all the cool stuff
00:13:37
but see if you're trying to one of the things you have to worry about is like like event correlations
00:13:42
but like just pry right like you already have a physical
00:13:47
clock that works right if you think about like the oh
00:13:51
speed of light and observe abilities and all
00:13:53
that stuff you get really rely on physical time
00:13:58
so what you have to actually think about in the distributed systems or even
00:14:01
like threats and stuff like that is to think about pine without using clock
00:14:08
and this is what like the so process the upper
00:14:12
or that's going up word that's actually time that's going up
00:14:16
and you can think of process p. q. n. r. has like under the individual person
00:14:22
or in our case like uh for ad or program or something like that right
00:14:26
and the points like you want p. two p. three these are quite bats
00:14:32
so a distributed event so as long as lost some event is happening within the single process
00:14:38
you know what happened and before it is pretty easy to track because it's happening within the
00:14:43
single you know like o'clock or something like that right so this arrow this lamp words are all
00:14:50
yeah as as it happened well before so a happened before we right
00:14:58
but what if there's like two prophecies right so what how do you
00:15:03
define that is basically your let's say you're able to somehow send message right
00:15:07
well uh so the sending of the message isn't of
00:15:10
that are reception of the message is also an event
00:15:15
and be it says that when dawn message was received
00:15:20
the it's assumed that you know the perception of the message all a lot of sending
00:15:25
of the message happens before be so similarly you can draw this exact same out here
00:15:30
and this l. distribute events work right to summarise an like more like us
00:15:36
easier to write fashion it's like a a or b. and
00:15:39
right now are all be means a does not happen before
00:15:45
what's interesting is the the using the us you can actually
00:15:49
almost like a mathematically defined the definition of or concurrent means
00:15:54
in this definition can cry means that two distinct events a. m. b.
00:15:59
or concurrent uh if neither you know a happens before being nor be happens before right
00:16:08
sometimes this is cool like independent are events but i think an krakow
00:16:13
like sounds cool well because people think of it in terms of time
00:16:17
so
00:16:20
what this means is that in the distributors system
00:16:22
sounds can currency is actually a ball causal effect right
00:16:28
because if two difference if there there's no
00:16:32
causality beefy between those two these are call concurrent
00:16:38
so kayak to colour functional programming on how to express this concept
00:16:44
in functional programming is d. r. applicable font or on i
00:16:49
don't wanna get too much into this because of we're gonna
00:16:51
funk or it's awful we will be like a really great talk which there actually is well i which i went to call
00:16:57
all the all the things you traverse all by all the colour all last year's
00:17:03
or scallop days talks about this you call that the all the model font or
00:17:08
on so basically think you can think of ass map
00:17:13
right in this example the cold snap that i wrote you have
00:17:17
like three dots on more like some of varying into lots on
00:17:20
and you're adding those two things so that's basically all there is
00:17:24
to at all but if you think about what these two things are
00:17:29
two and three there are no box right and they don't
00:17:32
realise each other they it doesn't matter if they happen before or
00:17:38
you know they're basically expressed as some something that's happening sort of concurrently
00:17:44
and compare this against ah for comprehension
00:17:49
which is basically all like um you know
00:17:53
oh look flat map basically right so if in
00:17:57
using five map everything is sort like seek seek financial
00:18:01
right it's like because there's a potential at which the value
00:18:05
that was returned from the first might be used in the next
00:18:09
so although or semantics of dawn monad is
00:18:14
basically similar to like go up procedural syntax essentially
00:18:18
and how still uses do and install we use for
00:18:23
right so if you can draw like the uh the lamp
00:18:26
what sorrow the there's an arrow from like get lying and then
00:18:31
to print land and then get line i get something like that so you can almost write it as a procedure code right
00:18:39
compare this against the all the all the speech he basically
00:18:45
our i co wrote the cell using the older i'll i speak user dot twelve style
00:18:51
you can emphasise the connection to the up look at it from peter
00:18:56
so you have a couple of compiling compile and some like
00:19:01
made up function call i mean the task name bar right
00:19:05
there was this thing called like couples and then you can type map and
00:19:10
these two things c. n. b. would happen essentially concurrently because you know that's
00:19:16
it's happening in trouble and then combining these two facts you do something else and then you put that and from
00:19:23
on this was kinda like it makes sense once you understand as well
00:19:27
it was not difficult as an introductory thing to come to get into
00:19:32
so us p. t. one worst monies are reverting introduced a stock value macro
00:19:38
are you know why it's good and bad because come like a high is these aspect under the rock so
00:19:43
like you don't fully reach the understanding of what's gonna
00:19:46
happening well don't value is pretty much doing what's written about
00:19:54
so that's basically not little of competition that's happening and
00:19:59
if you are drawn like out just diagram a little better like
00:20:02
having will be easier to understand so similarly tall pine goes up right
00:20:08
so you have compiled slice compile but in a box bar also in a box
00:20:16
and interesting way like these two tasks are is happening before too
00:20:25
so
00:20:27
there is sort of got line in the sand other time space almost
00:20:32
so which means that by that time this opening curly
00:20:36
brace of the flu is hit compilation is already done
00:20:41
so and up the l. s. b. t. v. s. l. dot values not of function call
00:20:47
it's basically the declaration that your task depends on the other task
00:20:55
and this can be actually compose you know multiple layers basically
00:21:00
and so if you have like a past fast that probably depends
00:21:04
on compile which is typically how tests are right like it's internally depending
00:21:08
trends every on your compilation and and then you also depend
00:21:11
on some other to task on these things basically can compose
00:21:19
so what's the point of that are like we're really doing this like a bad like a graph
00:21:27
and it's basically like this concept khomeini melody
00:21:33
and that as when you're running not command
00:21:38
we try ask is executed at most once
00:21:43
and for the input that was changed right b. s. p. d. doesn't fully it did a second part
00:21:51
ah for some of the other tasks um bought the oh oh if you think about what that means
00:21:58
so like what sorta due to instead of that value lets say imagine this was
00:22:02
like a function call or something like that right so there's a call function it compile
00:22:07
what would happen is that the our comp comply with just from like three four five different times
00:22:13
every time it needs to be like call right if it's just like your function
00:22:18
because like a few is is cold calling compile passes calling
00:22:22
compile you know like some other jarring and whatever is calling compile
00:22:28
so in order to avoid that oh you want to basically
00:22:31
calculate often sort like in a way like if you think of
00:22:35
it as a caching mechanism that compile during the course of
00:22:39
a single run of a command on is called exactly all once
00:22:46
the second part right that can like makes it more interesting and that's why i was mentioning this whole pine plank
00:22:53
is if you can camp clay that's certain tasks are
00:22:57
essentially independent or concurrent art you can do perl processing
00:23:03
and the speed it does this by default automatically just by looking
00:23:07
at the graph of tasks are cool concurrently or imperil process your tasks
00:23:16
finally we can kind of talk about what act corps commander still weighing are there's
00:23:20
like um minor details on all the anger get thing like if you're don b.
00:23:27
the multiple project and all you've seen this thing aggregate or what
00:23:31
it's doing is that when you type compile all it basically broadcasts
00:23:36
thought task processing to current also project as well as the ones that's listed in
00:23:43
the aggregate west so if you're in the remote in this case all agree get
00:23:48
you tell comply al gore compile andrew compile basically are and then it basically does
00:23:54
all pro processing or the particular task model was typed out lots whacked command still
00:24:05
so how does this can relate back to like the state diagram i was writing right
00:24:10
so this is kinda how conceptually i think of the
00:24:14
what's happening on might not be exactly like that's what like
00:24:18
so first there is a supplemental reload off which actually
00:24:22
is what happens when you put up a speedy itself
00:24:25
and uh basically sets point of settings right so setting itself is also in the code that graph
00:24:32
and then it goes goes to like s. zero stick like your initial
00:24:35
state and s. t. d.'s as low okay it's ready to do some stuff
00:24:40
our that's when all the your settings are now initialised and evaluated using the bad
00:24:46
on and then you type something in there then it will
00:24:50
basically perl process bunch of tasks and then goes to ask
00:24:54
for and then you type something else and you got us
00:24:57
to right so this is not a good distinguish how distinction between
00:25:01
setting versus well tasks basically is all the task of the one that
00:25:08
was like the or get fired up once you like issue the commands
00:25:15
so if you're applying offers of prefer tasks are for
00:25:20
the plugin extensions because this is basically automatically come possible
00:25:24
on and command is steak fall and
00:25:28
it's sequential well if you want something sequential
00:25:33
crown my actually be exactly what you've been looking for right like if you think about release procedure
00:25:39
that is something you want something to be like really sequential like even if it
00:25:43
takes a lot of time you walk hand fangs well test planes you wanna release slayings
00:25:49
right so i actually have like if you
00:25:52
like custom command i use only for releasing bangs
00:25:57
well for a majority of the times i think task is all really good good place to start on it
00:26:06
so i can deal oh there's one other thing we've been working on a lot and the l. r.
00:26:11
s. p. t. one point three or dislike we've
00:26:14
improved and the last like go recently visited looking around
00:26:19
so rubber the whole like all the water thing that you have to
00:26:23
hand cranked applied compiler something every time and uh let's say just one like
00:26:27
just let s. p. d. say past all the time or compile the time
00:26:32
although is actually really great way to basically
00:26:35
say hello past quirk prospectus quick is basically a
00:26:39
command task now runs only the failed past and
00:26:43
whatever that was changed so it's essentially incremental pastor
00:26:47
so tell the task work all if you don't like remember one thing is pretty great way
00:26:53
and s. p. g. one three uses all native code to
00:26:58
look into the file system on that one x. one those
00:27:02
and the tax any file changes and then shoots off still combine this with a turban about
00:27:08
it gives a really great experience of just like running past well you don't use it the file
00:27:17
so to cry like a dog a little bit into the all the
00:27:22
state right now because i've mentioned that were built structure a little bit
00:27:27
are made oh just gonna give a quick overview uh of what what's
00:27:30
inside of dollar bills structure although i don't think there's anything super surprising
00:27:35
well there's a cup we're behaviours or you know people may
00:27:38
have kind of vague ideas so i'm just gonna clarify what's happening
00:27:42
so no structure basically there's like the old there's each
00:27:47
day old house also share your eye all your i
00:27:50
typically is your just like your you absolute path in
00:27:54
your that's basically well you can actually potentially refer to other
00:27:59
places in the desk to have like a multiple or building which is called the our source dependency
00:28:06
all i will plug in a. s. p. t. sir roger that's able
00:28:10
to switch between dos source dependency and the binary difference even watch it out
00:28:16
on the old mostly is are like you can think of
00:28:20
it as a set of some products and the t. value store
00:28:26
and saw project consists pretty much of a like a
00:28:30
scholar version which sometimes like all that like axis of
00:28:34
evil because it's low on the con you takes acts
00:28:36
like an axis what's actually not arm and all configuration
00:28:43
right what's configuration
00:28:46
duration is like what you see like us compile run time passed are
00:28:50
you can make your cost someone's well i generally recommend you don't really
00:28:55
make too many obese and thought what makes a configuration versus in something that's not my
00:29:01
task is that if it has its own source code yet has all its own dependency graph
00:29:07
it's likely all it's a configuration right so tess is a great example right because it has
00:29:12
its own test as a source can and has test has its own different like dog dependency graph
00:29:18
well it can why has the second like intrinsic relationship with or
00:29:22
you know in the compile run time is the one that you use
00:29:25
like as a provided and stuff like that where some things are
00:29:29
now available during the run time but you want to use only during
00:29:32
file so there's a slight distinction between the all around
00:29:36
and compile bought mostly you think about compartment passed right
00:29:40
so there is the all extension like the extends relationship
00:29:44
tossed accents on time and on time next and compile
00:29:48
and then there's this cave east or
00:29:52
q. value store oh basically you have name version organisation and like
00:29:57
your use you know usual like the same kind of stuff on
00:30:02
well we actually scope these things and different like the dimensions
00:30:07
so you can say this the old version this build organisation
00:30:12
or to compile compile or something like that right and b.
00:30:17
is basically we have distinct values for each the different microscope things
00:30:23
so what's going well dive into the the scoping all causes can like a more confusing part i
00:30:28
think about s. p. t. v. is out there is basically three scope things are an s. p. d.
00:30:34
or the maximum you can have is like there's
00:30:36
like few compile consul scores the options right on
00:30:43
and first is also project on those pretty clear right you have some product
00:30:50
on as an axes and you don't have to specify at
00:30:54
then it actually goes to the current product so typically
00:30:58
when it's like name by means it's current projects name
00:31:01
so if you say this build this build is on actually you
00:31:07
can think of as as special saw project you can scope things than
00:31:11
so if you want to have a setting that's comment or your soul projects
00:31:16
on our that's the one that i typically use like our version
00:31:20
number or a scholar version or like any of these like our
00:31:25
so what type of publishing settings you will always go but and this the old
00:31:30
off so that you don't have to like we specify a inside each of some project
00:31:36
but sometimes it doesn't work because there's like overriding rules and all that stuff what does build is pretty good
00:31:43
zero is one that you don't usually see as a bill offers are bought like if
00:31:48
your bargain up there is you want to be cannot be aware of the is it existence
00:31:53
oh it's basically well older like a name was global but
00:31:56
well was gonna a bit confusing so i rename that zero
00:32:00
global basically is zeroes last year source euro or so for a sing sing waxes is zero
00:32:06
configuration again we talked about what compound fast it's pretty clear
00:32:11
in task is comical weird one where you can stop a set and
00:32:16
to a specific task off again this typically you see this more as
00:32:21
like a plug in settings bought the console sliced policy option as calm
00:32:25
like yeah it does cost the option that gets activated only during consul asked
00:32:31
right so yeah like what are you talked about the fact that he's or
00:32:35
automatically scoff to current saw product right
00:32:38
the other stuff basically default to zero so
00:32:42
let's say if you type name that's basically flew let's say current project is for the so it's true slash
00:32:49
name and the other screen axes basically default zero so
00:32:54
it's two zero zero nine or so that's basically uh
00:32:59
so what support of key values store right arm so only apart from the
00:33:04
fact that we use this for this whole up look at of composition bang
00:33:08
well the interesting thing about this fact that we have this expose
00:33:12
it t. m. value is mike espy teases as to be able
00:33:17
to soften sparked what the build looks like what you can do
00:33:20
that by typing in slacked off so if you type inspect cost
00:33:26
that will basically point out what is speech he
00:33:29
would eventually result that all particular command into specific key
00:33:34
and what that and task depends on and what's a delegation ordering
00:33:38
and if you type inspect trade cast it basically comes up with this like an ascii art is like well
00:33:44
the first thing i think i contributed s. p. t.
00:33:47
was to display this line which is repeatedly calls the or
00:33:51
in stacked and finds l. all what the transit of task out
00:33:55
past work all on this kind of goes on to many pages probably
00:34:01
so a lot of interesting aspect what's a compared to like maven or something
00:34:06
is that the all because you look key and value you can like reassign these or we why are these
00:34:12
colour gives you like almost like of super flexible extensible the extension points
00:34:17
you want to like customised faster customise compilation or customise or sorts of flags
00:34:22
is like it's right there for you to just
00:34:26
switch up basically and also the plug ins themselves
00:34:32
oh they also expose sir next action points right so there's like
00:34:37
well joe arsenal like a play and all these different bangs these
00:34:40
are all times implemented partially as i speak the plug and you
00:34:44
can then customise the behaviour upon our which is kinda more difficult
00:34:48
if there's like a specific phases like and like a maidens case
00:34:52
well you can have to like make sure you know what other plug ins are doing before you were after we and stuff like that right
00:35:00
so the setting expressions loss pretty basic bought you know the you have
00:35:05
some sort of key and operator and the body the operators all we recommend
00:35:11
all our colony calls plus equals and possible seagulls there used to be more about
00:35:17
typically we recommend these three on and what how like it's not super clear is
00:35:25
this is essentially like a command right because we're changing the state of the bill so
00:35:31
in you know why you can think of this as your issuing like a sack command
00:35:35
so this is like you start off with a go blank slate and individual setting
00:35:40
expressions is actually mediating the state law but i mean this happens like when we
00:35:45
load so it's not explicitly doing that well if you can buy mentally think of
00:35:49
it as like these are like uh you know changing of the internal billed state
00:35:55
so the setting expression itself you know you can see the scoping like those little like builds
00:36:00
the spilled slash organisation and don't value is along that
00:36:05
basically looks up and you know we talked about this whole that relationship
00:36:11
the tricky part is next on um how do they delegate
00:36:18
right so when you have something like four past console a saucy options
00:36:24
on there's a specific rule that s. p. t. users is like i can't
00:36:29
like i try to reverse engineer it by like looking at the source code
00:36:32
on and there's lookout now documentation and the speech he bought the
00:36:38
just basically this flight rules right on the first
00:36:43
is gonna try really hard to work for this exact
00:36:47
for x. you know look over your x. is that right or test council's policy options what if it's not there
00:36:55
on the first thing is gonna try is is gonna get rid of the all thought in task
00:37:01
and so the substitute that with zero i like or uses dot dot arrow notation
00:37:06
to say so substitute are so it's for past policy options is what's gonna work first
00:37:14
and then than what what next thing is gonna trying is that okay why don't wanna put it back
00:37:20
so it's gonna try it it's not in past what if it's an round town
00:37:25
so it's not right for on time console a saucy options and compile and then zero
00:37:32
and then eventually it will go up to the or you know e.
00:37:37
so some project passes and strife it's not in core is the dust build is it and zero
00:37:42
so it kinda like goals op these different like a routes
00:37:46
to almost like an inheritance basically off to
00:37:50
look for this particular setting value of saucy options
00:37:56
what is kind of weird um is that it doesn't
00:38:00
the translator evaluation doesn't carry is all regional context
00:38:05
and this is if i'd say there's in english it almost doesn't make
00:38:09
sense or i'm talking about right so that's only can like i explained us
00:38:14
is in the object oriented language there's consequently got dynamic
00:38:19
dispatch or something where the pointer of the us with this
00:38:24
patch into dos uh projects matter right so if you
00:38:27
imagine something like this the old slash version chronicles name right
00:38:32
on you it probably expect the name to be the president well stuffs name when
00:38:37
the version as refer to inside of the all basie bell b. projects all something fast
00:38:44
on but that's not how it works in s. p. t. basically that contacts that fact about this
00:38:50
version and is referred to from b. project doesn't carry over
00:38:54
so that's the old slash version would probably contain the route
00:38:59
projects name therefore be something colony goals would end up
00:39:05
or showing up tall rich projects name ends of the or
00:39:09
just like bees octane so that's come like something you
00:39:12
have to remember essentially is this makes the fact that
00:39:18
the this build or global settings used to be essentially closed on
00:39:23
it's all all this bill can only refer to this build settings
00:39:29
and the global can only refer to other global
00:39:33
settings only so that's come like all other weird next
00:39:38
the other kinda interesting thing is all you can cannot take advantage
00:39:43
of the dog scoping is the how can you make
00:39:50
your plug ends if your plugin author maximally flexible i right
00:39:57
so in order to make like a maxim all like a flexible space as a plugin hopper
00:40:03
well you should try to do is define your keys in the widest scope
00:40:11
well reference the keys in the narrowest scope right
00:40:16
so this basically allows the delegation rule to this it
00:40:20
you know of three four different places so here is like just collect came up with
00:40:25
options skate arouse all you know like our task on
00:40:31
and let's say there is what sounds like all logic you want to use like i will go right
00:40:35
so you want to us up again provide the upscale object at the
00:40:41
global which is zero zero zero right and as of the full value
00:40:46
but when you actually provide the ops okay task it's off the scope the inside of the compile
00:40:52
because this is a compile also kate and this is automatically scope again to the current so project
00:40:59
which then basically allows of your user or the builder users
00:41:05
the goal this build project and the project compile with
00:41:10
four different places to basically customise the ops location logic
00:41:15
so like you know if you know in typically you only care about one
00:41:20
thank then you can just say just build slash of skate logic and you change it to some other logic
00:41:27
well if you have like five different sub projects and you only want one of
00:41:31
them to be changed you can then the user can scope it and those doesn't work
00:41:37
i
00:41:39
so there is from like i try to make ah four dimensional art map long
00:41:47
so this is basically how the visual presentation of how this whole thing works
00:41:52
on this so there is zero although when the centre
00:41:57
and the sub project coming this way so let's
00:42:02
go look at the saw project first all right
00:42:05
so for you in this particular case like coming all the way in the bottom of the screen
00:42:11
on that's your so project so it's like if you the name or from the base directory right
00:42:17
and then when i can't find a stuff a goes up to this bill and zero right
00:42:22
and then there's configuration and so anything that depends on the base directory
00:42:28
basically can like is on the all the right hand
00:42:31
side i put it like for the right so you have
00:42:35
something like flu slash compile slice of compile and then to run down compile and to touch compile
00:42:43
and then eventually you have this like got a hyper axes that's going in task
00:42:48
ah so basically you can if you can remember the whole delegation rule
00:42:53
no first straw uh if the few compiles policy options
00:42:58
and then if you can find that we're just gonna like try traversing this list about work and stuff like that
00:43:08
so i like the quickly to summarise the uh on
00:43:12
like not looking ahead to uh speak you want three
00:43:15
i mean it's not looking exactly i had i had because it's now or c. two is there are um
00:43:21
is the so one of the main features that we shaped
00:43:25
is ah course yeah our default is turned on it's great
00:43:30
and there is a single super shell which displays are currently pretty all executing tasks
00:43:36
also if you doing pro processing you there's no yeah speaking of tells you which to
00:43:41
task that's all or processing and then there's trouble mode that enables all layer class loader
00:43:48
so previously we were only caching and all stout stella standard library
00:43:54
now we would cash now when the trouble is turned off
00:43:57
on dog class loader forty or the library dependency is also cashed
00:44:03
so i definitely encourage you to try doctor remote all this makes the past and around tasks
00:44:10
really fast to get up off because it doesn't reload and jet all which
00:44:15
takes like few seconds to you are no longer or so your test really fast
00:44:22
right so this is pretty much what i have on thank you and the if you have
00:44:28
any questions maybe i can take one question but like but i think the launch is also starting
00:44:34
so if you have questions all take now well otherwise all you can just come talk to me later
00:44:41
oh yeah
00:44:46
hi
00:44:50
cool okay so huh i'm not sure if i understood correctly the relation
00:44:55
relationship between settings and configurations so yeah what does it actually mean for configuration to extend
00:45:02
to extend another configuration is the effect only visible a no no source
00:45:08
the red rays and dependencies or is it also possible in settings so um
00:45:14
and extending configuration banana uh does the an extended
00:45:18
veneration configuration inherits settings from a an extended configuration
00:45:24
no oh there is no automatic of was setting inheritance
00:45:29
you still have to also plug another if you make your own configuration
00:45:34
you start to redefine old all settings so top part
00:45:39
that gets i think when you publish to like the
00:45:42
palm or something maybe the up our becomes useful to
00:45:46
inherit something well from the point of year all basically traversal
00:45:50
our it's basically used to traverse if it doesn't exist and pass
00:45:54
the goes up to compile all that's works mostly rule about andy or
00:45:59
the inheritance doesn't really mean like exactly all i think
00:46:05
yeah you you still have to do a lot of all workers off if you provide your custom of configuration
00:46:11
okay so uh extending it is about the
00:46:14
source directories and dependencies station wrap yep okay thank
00:46:22
uh_huh or so if i have applauded i'd i'd make mix tapes of
00:46:31
you go to my daughter handle or my website fireball make
00:46:35
state by make every three months so check the so what your

Share this talk: 


Conference Program

Welcome!
June 11, 2019 · 5:03 p.m.
1574 views
A Tour of Scala 3
Martin Odersky, Professor EPFL, Co-founder Lightbend
June 11, 2019 · 5:15 p.m.
8330 views
A story of unification: from Apache Spark to MLflow
Reynold Xin, Databricks
June 12, 2019 · 9:15 a.m.
1267 views
In Types We Trust
Bill Venners, Artima, Inc
June 12, 2019 · 10:15 a.m.
1569 views
Creating Native iOS and Android Apps in Scala without tears
Zahari Dichev, Bullet.io
June 12, 2019 · 10:16 a.m.
2230 views
Techniques for Teaching Scala
Noel Welsh, Inner Product and Underscore
June 12, 2019 · 10:17 a.m.
1292 views
Future-proofing Scala: the TASTY intermediate representation
Guillaume Martres, student at EPFL
June 12, 2019 · 10:18 a.m.
1152 views
Metals: rich code editing for Scala in VS Code, Vim, Emacs and beyond
Ólafur Páll Geirsson, Scala Center
June 12, 2019 · 11:15 a.m.
4695 views
Akka Streams to the Extreme
Heiko Seeberger, independent consultant
June 12, 2019 · 11:16 a.m.
1551 views
Scala First: Lessons from 3 student generations
Bjorn Regnell, Lund Univ., Sweden.
June 12, 2019 · 11:17 a.m.
577 views
Cellular Automata: How to become an artist with a few lines
Maciej Gorywoda, Wire, Berlin
June 12, 2019 · 11:18 a.m.
386 views
Why Netflix ❤'s Scala for Machine Learning
Jeremy Smith & Aish, Netflix
June 12, 2019 · 12:15 p.m.
5014 views
Massively Parallel Distributed Scala Compilation... And You!
Stu Hood, Twitter
June 12, 2019 · 12:16 p.m.
958 views
Polymorphism in Scala
Petra Bierleutgeb
June 12, 2019 · 12:17 p.m.
1112 views
sbt core concepts
Eugene Yokota, Scala Team at Lightbend
June 12, 2019 · 12:18 p.m.
1651 views
Double your performance: Scala's missing optimizing compiler
Li Haoyi, author Ammonite, Mill, FastParse, uPickle, and many more.
June 12, 2019 · 2:30 p.m.
833 views
Making Our Future Better
Viktor Klang, Lightbend
June 12, 2019 · 2:31 p.m.
1682 views
Testing in the postapocalyptic future
Daniel Westheide, INNOQ
June 12, 2019 · 2:32 p.m.
498 views
Context Buddy: the tool that knows your code better than you
Krzysztof Romanowski, sphere.it conference
June 12, 2019 · 2:33 p.m.
393 views
The Shape(less) of Type Class Derivation in Scala 3
Miles Sabin, Underscore Consulting
June 12, 2019 · 3:30 p.m.
2321 views
Refactor all the things!
Daniela Sfregola, organizer of the London Scala User Group meetup
June 12, 2019 · 3:31 p.m.
513 views
Integrating Developer Experiences - Build Server Protocol
Justin Kaeser, IntelliJ Scala
June 12, 2019 · 3:32 p.m.
551 views
Managing an Akka Cluster on Kubernetes
Markus Jura, MOIA
June 12, 2019 · 3:33 p.m.
735 views
Serverless Scala - Functions as SuperDuperMicroServices
Josh Suereth, Donna Malayeri & James Ward, Author of Scala In Depth; Google ; Google
June 12, 2019 · 4:45 p.m.
935 views
How are we going to migrate to Scala 3.0, aka Dotty?
Lukas Rytz, Lightbend
June 12, 2019 · 4:46 p.m.
709 views
Concurrent programming in 2019: Akka, Monix or ZIO?
Adam Warski, co-founders of SoftwareMill
June 12, 2019 · 4:47 p.m.
1973 views
ScalaJS and Typescript: an unlikely romance
Jeremy Hughes, Lightbend
June 12, 2019 · 4:48 p.m.
1376 views
Pure Functional Database Programming‚ without JDBC
Rob Norris
June 12, 2019 · 5:45 p.m.
6365 views
Why you need to be reviewing open source code
Gris Cuevas Zambrano & Holden Karau, Google Cloud;
June 12, 2019 · 5:46 p.m.
483 views
Develop seamless web services with Mu
Oli Makhasoeva, 47 Degrees
June 12, 2019 · 5:47 p.m.
785 views
Implementing the Scala 2.13 collections
Stefan Zeiger, Lightbend
June 12, 2019 · 5:48 p.m.
810 views
Introduction to day 2
June 13, 2019 · 9:10 a.m.
250 views
Sustaining open source digital infrastructure
Bogdan Vasilescu, Assistant Professor at Carnegie Mellon University's School of Computer Science, USA
June 13, 2019 · 9:16 a.m.
373 views
Building a Better Scala Community
Kelley Robinson, Developer Evangelist at Twilio
June 13, 2019 · 10:15 a.m.
245 views
Run Scala Faster with GraalVM on any Platform
Vojin Jovanovic, Oracle
June 13, 2019 · 10:16 a.m.
1337 views
ScalaClean - full program static analysis at scale
Rory Graves
June 13, 2019 · 10:17 a.m.
463 views
Flare & Lantern: Accelerators for Spark and Deep Learning
Tiark Rompf, Assistant Professor at Purdue University
June 13, 2019 · 10:18 a.m.
380 views
Metaprogramming in Dotty
Nicolas Stucki, Ph.D. student at LAMP
June 13, 2019 · 11:15 a.m.
1250 views
Fast, Simple Concurrency with Scala Native
Richard Whaling, data engineer based in Chicago
June 13, 2019 · 11:16 a.m.
623 views
Pick your number type with Spire
Denis Rosset, postdoctoral researcher at Perimeter Institute
June 13, 2019 · 11:17 a.m.
244 views
Scala.js and WebAssembly, a tale of the dangers of the sea
Sébastien Doeraene, Executive director of the Scala Center
June 13, 2019 · 11:18 a.m.
661 views
Performance tuning Twitter services with Graal and ML
Chris Thalinger, Twitter
June 13, 2019 · 12:15 p.m.
2003 views
Supporting the Scala Ecosystem: Stories from the Line
Justin Pihony, Lightbend
June 13, 2019 · 12:16 p.m.
162 views
Compiling to preserve our privacy
Manohar Jonnalagedda and Jakob Odersky, Inpher
June 13, 2019 · 12:17 p.m.
301 views
Building Scala with Bazel
Natan Silnitsky, wix.com
June 13, 2019 · 12:18 p.m.
564 views
242 views
Asynchronous streams in direct style with and without macros
Philipp Haller, KTH Royal Institute of Technology in Stockholm
June 13, 2019 · 3:45 p.m.
303 views
Interactive Computing with Jupyter and Almond
Sören Brunk, USU Software AG
June 13, 2019 · 3:46 p.m.
680 views
Scala best practices I wish someone'd told me about
Nicolas Rinaudo, CTO of Besedo
June 13, 2019 · 3:47 p.m.
2679 views
High performance Privacy By Design using Matryoshka & Spark
Wiem Zine El Abidine and Olivier Girardot, Scala Backend Developer at MOIA / co-founder of Lateral Thoughts
June 13, 2019 · 3:48 p.m.
752 views
Immutable Sequential Maps – Keeping order while hashed
Odd Möller
June 13, 2019 · 4:45 p.m.
274 views
All the fancy things flexible dependency management can do
Alexandre Archambault, engineer at the Scala Center
June 13, 2019 · 4:46 p.m.
389 views
ScalaWebTest - integration testing made easy
Dani Rey, Unic AG
June 13, 2019 · 4:47 p.m.
466 views
Mellite: An Integrated Development Environment for Sound
Hanns Holger Rutz, Institute of Electronic Music and Acoustics (IEM), Graz
June 13, 2019 · 4:48 p.m.
213 views
Closing panel
Panel
June 13, 2019 · 5:54 p.m.
400 views