Player is loading...

Embed

Copy embed code

Transcriptions

Note: this content has been automatically generated.
00:00:04
okay i run my name is john i'm the pitches shouldn't that if if a working on
00:00:10
the the to compare and they like to talk to you about this cool new format we quite
00:00:14
tasty and what it means for the future of scare ah ah so to begin with ah i'd
00:00:20
like to talk about upgrading is cast so imagine your writing this act really could up he's kinda
00:00:26
and choosing a scared to drive but it's got to fourteen was just freeze a few days ago it has all this
00:00:32
cool new things like when you corrections and you really want to use it so you say okay i'm just going to change
00:00:37
this correction in my program from two twelve to fourteen and
00:00:41
if you just use this class so not every then that's fine
00:00:44
but as soon as you have dependencies which have been already compared
00:00:49
against two twelve you can't do that uh because it is the
00:00:53
finances won't be able to use when you still not every in
00:00:56
the new version of the car and uh there's the finances themselves
00:01:00
might not be able to a bright to scatter for teen until
00:01:05
their own dependencies have been upgraded to scatter for teen and whoa
00:01:10
ah screen is rated cough okay it's
00:01:18
how can i i if it's you know it's ah so what needs to happen is first order of uh
00:01:29
dependencies are the root of the tree which usually are things like scared tends to scare check cats need to
00:01:35
upgrade to two fourteen then uh the libraries that uses
00:01:40
this rubber is that we depend on you to upgrade it
00:01:43
and then finally you can start using skirt to for putting 'em so why does
00:01:48
this happen what what's going on here exactly ah so to expand that first thing to
00:01:53
explain what binary compatibility is so uh in a very big no chair i imagine
00:02:00
i have a project a which is compared against some specific version x. of project be
00:02:06
and then i want to run this project with a different version of project
00:02:10
week and if it doesn't fork where it doesn't fork resume insect crush at
00:02:15
one time when we say that x. and one why are binary incompatible and
00:02:20
if you want more details you should go to each c. d. score some
00:02:23
torque uh which is a new to base about yeah about how to design
00:02:26
libraries for source and binary compatibility okay uh uh so we understand this but
00:02:32
why what this kind of need to break binary compatibility every two years lack
00:02:37
is is just a fact of life um so so you really it's because like
00:02:43
you want to change things like because you realise there's some other way to do
00:02:46
things or better way to do things all the way that didn't exist before but
00:02:50
sunshine is a really hard or almost impossible to make without breaking binary compatibility so
00:02:57
in a way to to be given to to for transition the biggest of exchanges
00:03:01
or or multiple ones but the biggest one what anyone could infiltrate uh based on
00:03:07
the news report for the for the for this in java eight which means um
00:03:11
number of things that the implementation of special much simpler but it also means that
00:03:16
the uh including and to be completely different situ used this cat we given um
00:03:22
i think i'd classified uh you couldn't use it be for the
00:03:27
us cut to twelve compact classified because they just didn't uh speak
00:03:31
the same uh language and from two for two two fourteen um
00:03:37
of of the main reason for working men are competitive was not
00:03:41
at the level of a language itself but with would've been over standard library we
00:03:45
have us to not collection was redesigned and particular of a euro q. of classes which
00:03:50
is something that is very but basically impossible to change uh we for breaking binary compatibility
00:03:55
due to how virgin works okay but ah yeah there's always a good reason basically but
00:04:03
uh can we can we maintain compatibility worst here everything's gonna and yeah i i don't
00:04:09
really know but yeah maybe we should try because unlike barking competitor over time is is such
00:04:15
a a click makes it really hard for people to upgrade to train versions so so maybe
00:04:20
we can try to do things that you to be different and see how it goes um
00:04:25
have things like when interesting example of how things can be done exists already is gonna and that's
00:04:32
it's gonna g. s. so so it's you can say well it's not really like it's on language but
00:04:38
i mean kind of is really it's uh it pretends to be a camper pretty inverted tree look cool compared to there's a
00:04:43
lot of things it's crazy ah and was three crazies that it
00:04:47
has maintained binary compatibility for more than four yeah zack longer when
00:04:51
the times the lifetime of us correction uh and what what this
00:04:58
means so this this multiple things 'cause gonna g. s. provides a
00:05:01
j. d. n. a. p. i. for a like using those catches
00:05:05
gunfire are for the noisy to plug ins effect that we'd also
00:05:09
indian is going to output javascript but when you make a
00:05:12
schedule guess a project and you uh like publish your jar
00:05:18
two maven the job doesn't count ten j. j.'s files and set
00:05:21
contents is g. s. i. r. files which is you slack on
00:05:25
custom intermediates presentation that sky g. s. uses and when you compare
00:05:31
your own project uh this guy just encourage going to take all this
00:05:35
is j. c. i. offers from all your dependencies as input to
00:05:39
eventually produce javascript and that number is a bunch of interesting things that
00:05:43
could program optimisation since vector the schedules can see everything that uses
00:05:48
it's able to do really requires you to musicians will also means but
00:05:53
uh i don't know if they decide to change how to generate javascript we can still
00:05:58
use oh it is g. s. i. r. fires and because there's like a version number in
00:06:03
this race hellfire we can just uh decide oh this is an old file but we
00:06:07
know how to interpret it to make it do things the way we want to do now
00:06:12
and that's like the secret to maintain compatibility for a very long time
00:06:17
um okay so what we get from that but can we make our own format which would be a
00:06:23
bit what is you say are used to javascript uh to to teach it to j. v. m. transfers
00:06:31
uh maybe uh so those are the idea would be to store the output of one of
00:06:36
the compiler faces and uh based on that we can jack restart accomplish and from that point on
00:06:43
uh but well when we put this thing in the compartment parents
00:06:47
so expensive that have to show you the compiler pipeline uh so
00:06:53
you thought we've some source kind of fire and then that night
00:06:57
it happens and in the end you get one or more classifiers
00:07:01
ah so now we need to get a beep beep into the magic to expand
00:07:05
what's going on so first thing is we're going to prospect find it into the tree
00:07:11
oh what does that mean are so i start by rushing yards
00:07:15
am pressing an expression like up here is an expression uh the
00:07:19
process was going to say to see that and say okay that's
00:07:22
that's an identifier and the the identifier is via the string option basically
00:07:28
uh and then if i do hope that it and then the parser because of uh don't know that this is some kind of
00:07:34
selection so that's reprinted with a select tree not which takes the
00:07:38
uh thing we prosper option and then set x. m. out of its
00:07:45
and then if i but parents and put some
00:07:48
constant here then this becomes an application of something which
00:07:51
is represented with the pipeline that uh which has a
00:07:55
second parameter takes a literal which is a constant five
00:08:00
okay so so that makes sense but um once you have these three
00:08:06
uh what can you do we feed you can't really do anything with
00:08:09
it yet 'cause it's a only syntactic it doesn't have any semantic information
00:08:14
until like what the code is doing so the next step the bits that
00:08:20
is type or which is like taking this pen type tree and type
00:08:23
checking it um and the way tech checking walks i'm not going to explain
00:08:28
lack of details 'cause that many many more towards wharf of material but
00:08:35
uh we start at the top of the roots so we have already prostrate
00:08:40
and to check check apply first we need to type jacket children something to type check select
00:08:44
and tactics selected type i don't and to type i don't we know all this is an identifier
00:08:51
uh for option so at this point we have some information about that
00:08:55
scripts we know what's uh and names we really have no parents a source file
00:09:01
we know what's on august buff and based on that we can say that a lack
00:09:06
of dish in this context results to it that up for example and uh here on
00:09:11
the train the details but basically i have has another tree like structure tree present types
00:09:17
uh but you understand refuses a that option but really the compiler is going to like make up some
00:09:23
uh some type for a and then he's going to make up some type for selecting opt out of a
00:09:30
ah ah so okay now we have the type of or if and we can go back up one level to try to select
00:09:37
so to to select we need to look for some the element some for some uh if you
00:09:42
could tell them in a that much and it's going to get a type like maybe into two int
00:09:50
and once we have this information we can then uh
00:09:53
type apply not by a first typing for a constant five
00:09:57
and the type of five these five because we have singleton types fortress
00:10:03
and we know when we can just varies you see that by applying this thing to that think we must get
00:10:10
and since i'm unveils one very big thing i've crossed over here is that taking can
00:10:16
also create new trees so uh as you're probably familiar right for right lists of one two
00:10:23
then um this is going to be current writing does that apply of one two and the way this
00:10:28
works is uh when i'm type checking you just so this is jack and apply now that we've seen before
00:10:35
and then uses some identifier and one sector checked it i'm going to look at the
00:10:40
expected type and expected type is something that must be applied and we know this because
00:10:46
we're coming from and apply not so because of this the compare are you going to
00:10:51
say okay i have to introduce but don't apply here to be able to take checklist incorrectly
00:10:57
and there's many many ways in which the type checker can create new trees and like
00:11:01
that of course uh most important when instead i just implicit resolution up to get resolution uh
00:11:09
so for access that max uh when we get to when you have seen that three
00:11:14
looking for is going to say well this is actually an effort that takes some uh
00:11:18
a given parameter something physical matter and i'm just going to give it
00:11:22
shows you doing to resolve that parameter is going to create a tree forts
00:11:27
uh and the other important thing to note is that for this is an
00:11:32
item button process so if we take this tree which has been typed ones
00:11:37
and if we try to retake it again to compare is not going to keep inserting new trees except
00:11:41
you there's a bug in the new does that apply to the top rated at plenty that happen before um
00:11:47
and this is going to be very important for what i'm going to freighter but it's already
00:11:52
very very useful as a concept for debugging because it means about as uh we go full compare
00:11:58
faces and we start transforming the trees we can always like sanity check that what we're doing makes
00:12:04
sense by redoing the type checking and a very
00:12:07
fine but indeed or four types much art correct
00:12:13
ah okay so i know we've seen like the biggest piece of the pie are and
00:12:19
novell as we can replace the magic by the actual the rest of the compare um
00:12:25
so i'm going to explain what is things do so picture is uh
00:12:30
in something that's exist within scare twins carefree
00:12:34
and the the original motivation is separate computation so
00:12:41
if you uh just produce some classifier ah in your class for you're going to have
00:12:46
methods in this may further to go i'm going to have types this times are going
00:12:50
to be j. v. and types like a variety stuff into that j. v. m. type
00:12:55
is going to be just because of the j. v. m. for because jarvis reports uh generates
00:13:01
oh there's also some extra information but the g. d. m.
00:13:04
doesn't choose but but jealousy uses to um to get type parameter
00:13:09
information so at some point somewhere in that class i will write all this may for that we say returns a list actually it
00:13:15
returns a list of int uh but but we can isn't doesn't
00:13:20
support of course all this cut types because colour has many more
00:13:24
sort of types that java has an particularly could have higher kind
00:13:28
it types union types or that kind of stuff so uh huh
00:13:33
we need to store this information somewhere in the classifier
00:13:37
all around uh where we can use it because uh if
00:13:41
i can prior to fires a that's going be that's gonna um if i've once i've i'm done comparing a that's correct
00:13:48
i start comparing be that's colour with the results of the first completion on the cusp of any to nova types
00:13:55
of but the skeleton pirate uh used for the first thing
00:13:59
i can quite so this information is the chicken information which is
00:14:04
towards in the class fines gonna to and i'm going to explain how it's stored in the t. v. uh in a few minutes
00:14:12
ah so picker itself is not going to transform any three it's
00:14:16
just going to like not information and story to a a site and
00:14:20
then it's going to take the trajectory and proceed to the next
00:14:23
phase and i see next phase it's actually next fifty phase uh so
00:14:29
all of this a small faces are going to take this very high rather
00:14:33
your subject re we have which represents a oscar program and beat by beat
00:14:39
we're going to transform them into something which can be run on the j.
00:14:44
v. and on some of our backend and once we've done all this simplification steps
00:14:50
uh we get to the back and uh and which uh back unjust civil a piece of code which is
00:14:55
going to take or trees and when to emit classifiers
00:14:59
for them or j. was create a or something some morphine
00:15:03
okay another question is uh among all these things are where should
00:15:07
we put out a obvious new intermediate representation that we want to store
00:15:13
and of course i put it in the middle it's the picker and because at
00:15:20
when we are at the peak or phase we're just after we've type check trees
00:15:24
which means we have all the semantic information needed to understand what opera one has to do
00:15:30
but we we haven't yet done all the simplifications which
00:15:35
uh eventually allow us to run on a some specific a run time
00:15:42
so are well what we put in his fight
00:15:45
exactly what what's the point so the first main parties
00:15:50
is something that can be that should be able to evolve as we go forward news conversions we have new ideas we
00:15:57
find things that didn't really work out we want to be able to add
00:16:00
stuff we move stuff or not we remove stuff but the cricket stuff without
00:16:05
breaking existing uh files and has to be as compact as possible because
00:16:11
this this files are going to be in every jar you distribute so
00:16:15
uh we try to make the comp formats uh something that does not have a
00:16:20
huge overhead and it has to present all the information you need for computation so you
00:16:26
you need to be able to take the test devalues inputs and get to have
00:16:30
the same thing that you would have gotten if you had started from those four stars
00:16:35
um hum and then as long as we're doing of that maybe we can add some
00:16:39
extra information that can be used for putting like i. d.s rappers documentation generation et cetera
00:16:47
okay so now i'm going to expand uh the binary format of tasty in some details and to make
00:16:52
that is boring i'm going to use recognise diagrams ah
00:16:56
so the first thing is is awesome constant which uh
00:17:00
is how you see that the fight is it tasted fine and after that um of and the next
00:17:07
two thing are are reprinted isn't natural numbers and i'm going to show which encoding we use for natural numbers
00:17:13
and the result the module version and the mind of irrational format and like the v.
00:17:18
n. gory is a vision is going to be fixed for like the next uh a century
00:17:24
and uh we can just increment minor version without breaking competitive it
00:17:29
and after that comes the name table which is where we store all the names that we're going to
00:17:34
refer to you know program and after that comes a bunch of sections which uh uh where we actually
00:17:41
put the uh type checked abstract syntax trees but what's wait that's why it's called tasty and in expand
00:17:48
formation we want so there can be one or more the sections you should where you have this rip here
00:17:55
um so the name table is just a you need to when uh
00:17:59
when you encoded you have to choose like you have to write than
00:18:03
its strength and then you just right and a bunch of names and
00:18:07
then it's a interesting that's not not just like a bunch of uh
00:18:12
of string constants but the height can have some semantic information
00:18:16
so uh have you have a just basic names which are
00:18:20
just like a bunch of you to have a good points
00:18:23
then you have some more interesting things equity financial for example sometimes
00:18:27
we need to to represent a scanner that hints and we could were present it as a string
00:18:33
we have of the dot is how we we see that
00:18:35
this is actually preferred things but the this is pretty problematic because
00:18:40
i become very hard to distinguish between the names uh that have meaning
00:18:46
but but the compiler uses and the name but we use or then
00:18:49
especially instead are where you can but pretty much anything you want in
00:18:53
the names of the definition if you just enclose them in tactics um
00:19:00
so pretty fine name is represented using some some
00:19:02
tax abuses some constant uh then the uh some length
00:19:07
information and then um just to some part of the pretty fire so in this case it would discover
00:19:12
and the thing your selecting which and in this case would be ins and then wife is just going to be a a
00:19:19
the natural number uh if you're going to the end of set in the name tabor solicitous i'll just pointers to or fix
00:19:26
okay and now we get to the meat of the tasty format
00:19:30
the tasty meat uh which is the obstruction textures section so it starts
00:19:35
with a string which is interesting is going to be an index in
00:19:39
the name table but you get it and then a bunch of statements
00:19:44
and statements and i'm going to show them 'cause there's a
00:19:47
bunch of them but those are basically the trees ah of um
00:19:52
of the format so you can have a package tree to
00:19:55
present a package and import tree a tree for defining a vile
00:20:01
and uh those are very close to how they're represented internally by
00:20:05
the compiler so for example of art is something which has a name
00:20:10
it has a type it may or may not have the right hand side because it
00:20:14
might be abstract and you can have many fire like pride that uh that kind of thing
00:20:21
and um then the other important part is type spencer's so
00:20:27
uh types uh there's also a lot of them and you might
00:20:32
have guessed a but a few interesting ones but you might
00:20:35
recognises tight bounds so this is like when you're right so prototype
00:20:40
of something so type of something we are present that we've uh type pounds
00:20:45
a tiger followed by a have a representation of your balm for better presentation of the
00:20:51
higher up and the type applications actually just of int that's represented with and apply type tyke
00:20:58
uh have a presentation of priests and denver presentation of its arguments which can be easy all of them all
00:21:06
and then turns so that's very close to what we've seen before we d. i. denton select nodes
00:21:12
uh but here we are at the root of it of the tasty formats so it's a beach or novel
00:21:20
uh and here there's an interesting uh an important points that's not very obvious is that not
00:21:26
all of the terms have types but when type language so what does that mean so in
00:21:32
fact to uh avoid wasting space we don't need to starve the types of everything because we
00:21:39
only to screen to store the types of the leaves of the trees so for example the identifiers
00:21:45
once we've uh looked up in the scripts what are the what do they
00:21:50
represent we can still that information in the type of the i don't like
00:21:55
uh but when i do an application i don't need to store the result of the type of the application because
00:22:02
when i'm going to read the tasty tree i can just look at the type of a function
00:22:07
the type of its arguments and then i can really a reef find again the type of the application
00:22:17
and now we get to the extra sections
00:22:20
which are uh after the obstruction texture section so
00:22:25
uh it's very simple one that very useful when it's just the common
00:22:29
section which is going to store a every scared documents in your file
00:22:35
and the way this works is um before every command for going to
00:22:39
store of a pointer to which definition in the uh t. c. uh our
00:22:45
to stay for you it refers to another and for the command the a set of a cut points
00:22:51
which are present the string of the commands and then the position of this convention this was fine and this
00:22:58
information is completely use us for compiling of course but it's really useful if you're an id and you want
00:23:04
to shoot to user of the uh the comment the
00:23:08
documentation comments for the thing you he's hovering over and
00:23:13
uh we also using it for example in the dirty wrapper where you can type
00:23:17
court and dock space than the name of some method is going to look at
00:23:22
the documentation comment from the tasty fire and that's a much more direct way than going from
00:23:28
like get inverse source jar a processing unit and trying to matt much
00:23:33
that we've uh have a look at the trees you have in your compare
00:23:39
and finally a very important section is the position section which stalls
00:23:45
the position so the offset from the beginning of the fight of every tree that has been
00:23:51
written by the user i say user recently because as we've seen before when you type checker program
00:23:56
you're going to uh create new trees which are not written by the users and so this trees
00:24:03
uh you need to be able to distinguish them from those but the user what because when you
00:24:08
holder or something in your idea for example you want to see the type of uh
00:24:13
the thing that's written down and not the type of the syntactic thing to compare our uh
00:24:18
put on top of your current and this uses um pretty interesting data encoding that i'm not
00:24:24
going to detect 'cause it's a bit complicated uh but you can see the for grammar we've
00:24:29
an explanation of these in the just the format that's graphite in the dirty repository
00:24:35
okay cool but yeah what can you do with that stuff
00:24:39
and so they're completely uh we can start with the program
00:24:43
i have a library a which is compiled it's gonna for that one i want to use it which colour for the two
00:24:48
uh how they do that to a white for the coffers of library kate to uh we probably should
00:24:54
first coffee that too i can do that otherwise i found very impatient i could fetch a draw for a
00:25:01
did we classifies cause very they don't uh matter and just
00:25:05
regenerated then from the t. c. friends which are also in the
00:25:09
jar uh and of instead of doing that by hand you could
00:25:13
imagine viterbi tool can automatically do that in the same way that
00:25:18
when you're working with uh be true but what some sources it's
00:25:22
going to automatically fetch resources and compare them and question for you
00:25:26
you'll be too could fetch her tasty can can can compare them and catch them for it
00:25:32
um or and that's a an it yeah i hadn't
00:25:35
thought about that jason's like a proposed a few days ago
00:25:39
you could imagine that you have something like maven or me or
00:25:42
from a van that uh i can automatically uh from the um existing
00:25:48
jobs published nave and create new jobs we've updated classifiers which i
00:25:53
think would be pretty cool 'cause it means that this would work with
00:25:56
any between you want even and uh of course this isn't really is a civil but this is only going to war
00:26:05
either stolen liberate off with the two is designed to be compatible with the standard library
00:26:09
of free that one the kind of things that this can hopefully if is if it's
00:26:14
for example in skin africa to we change again even couldn't have traits for some weird
00:26:18
reason or if we change any of the details of uh how we encode things uh
00:26:26
after type checking and before um cut generation
00:26:30
so you could say okay well i could do that or i could use for
00:26:35
the source files and compare everything from sources um and that's pretty much the same then
00:26:42
but it's not really the same because uh when you're using source files you then you
00:26:47
don't have binary compatibility as a parameter of source compatibility in particular when you upgrade corruption
00:26:54
uh because the type check or a virus and because type inference is so performance collides
00:27:01
a possible sometimes such a problem stop start checking out does something slightly different just because
00:27:06
type in france now wants you in the different way uh you don't have
00:27:11
this problem when you use tasty because it is the trees after type checking
00:27:15
which means we have resulted in peace it's we have inferred all the types
00:27:19
we have result we overloads so all this kind of things which can like
00:27:24
change depending on what the compare decides to do with record your words are not going to change
00:27:31
ah so so tasty of course uh if it was just it is a binary format you
00:27:37
couldn't really do anything useful if it but we have some green around it which makes it much
00:27:41
more useful so first we kind of course generate testifies and that's super is you just take
00:27:46
a dirty uh you can buy stuff and next will that classifies is going to make the tasty
00:27:50
files and and then you can also compiled from the t. c. files directly ah using dash
00:27:58
from deaf tasty when you run a computer you can also declined fire and the combining basically means
00:28:04
taking the tasty trees and then pretty pretty neat and that can be done using the dirty comply
00:28:10
flag i'll just by opening the testifies in his code when you have the dirty pretty in stuart
00:28:17
ah okay and so so far testes
00:28:21
basically the internal format used by the t.
00:28:24
but we have a brother brother like bigger ends and that we wanted to be evil
00:28:30
format for intermission presentation of of star and to provide this can be done uh
00:28:36
there's a approve of concepts gonna to plug in um we work last year
00:28:41
that can take a scared to trees and convert but convert them into tasty
00:28:46
um and so far um it's just there's been a proof of concept but
00:28:52
would like to like try to get this into more user state and the um
00:28:58
the men remaining or a technical issue to fix to do that is just to move that or
00:29:03
the logic i want testing which is currently like part of the t. itself into its own projects
00:29:08
which will cross compile between skirt wins carefree and uh once
00:29:13
we have that we can also think about doing the other direction
00:29:16
where we take the tasty files and produce a and skirt was
00:29:20
able to understand and and can do that that means you could
00:29:24
use the t. i. reason schedule projects of course if there's like a big asterisk here does act
00:29:30
many things that need to be taken into account to make sure that this
00:29:33
is possible but in principle this is something we can achieve i think um
00:29:40
okay and it's another to see nevada my phone okay well should i use
00:29:44
this a tasty thing to be tools and the answer is like most of
00:29:49
a lot actually need to cause there's these uh different but very much related
00:29:54
thinker just reflect a which is going to be easier to use because directly
00:29:59
manipulating does the trees is not easy uh whereas this year effect is something that
00:30:06
um if we're reserve menus cases replacing scared to macros and provides
00:30:11
an a. p. i. which is similar to stretch mark was where your
00:30:14
i'm manipulating trees uh using um i was a library but
00:30:20
uh it can also be used for for putting because of the
00:30:23
trees but this year effect uh exposes a whereas in a skirt too
00:30:29
the um a creepy i exposed basically the other compare intern ours these three factors
00:30:34
to expose something which matches the tasty spec which means it should be something that
00:30:38
can be evolved and something which you can rely on for tuning in particular are
00:30:44
are we wrote um that tasted to that
00:30:47
semantic d. b. um in transpire basically which
00:30:52
warps are using which is implemented using taster effect instead of like as a compare phase or
00:30:58
something which directly reads tasty treats and uh we also have a work in progress implementation of
00:31:05
which takes that testifies and generate h. t. m. l. documentation so it's got doc replacement basically
00:31:11
and that's very interesting because if you start from the tasty to
00:31:14
generate your documentation instead of starting from sources then that means documentation
00:31:19
generation much faster because you don't have to type figure who program
00:31:22
just to uh be able to generate h. t. m. l. i'm not
00:31:28
and for more information you should go see a new crest or commit up wanting to more
00:31:34
ah thank you very much
00:31:46
if or uh
00:31:52
so what it sounds like you could take the t. c. files
00:31:57
unpack them into the jars to put up on the report
00:32:01
yes isn't them understand so when you buy the for twin you
00:32:06
you can post a fee for the comparative into get both actress and testifies in the same output directory
00:32:12
and they're going to be part of the jar you that gets published because of the second fall on 'cause if you can
00:32:18
make a pretty print a image of what we did to the compiled code
00:32:24
isn't that the that you need to do obviously sure something to keep people screwed
00:32:29
yes so if you well so when you when you have java byte code
00:32:35
already like very close to source and you might want to fixate but if you
00:32:38
really don't want to share your current and in the same way that we've stacey
00:32:42
you pulled obfuscate either that's a pretty complicated instead what you could do is just
00:32:48
and not free you probably will offer is a way to to not generate before tasty trees we've already implementations
00:32:54
but just generate enough information to get to the types of all the difference
00:32:59
in a program which is the the bare minimum needed to do separate competition
00:33:05
and the uh but that's not enough to things like in lining where to in
00:33:09
line with what you need to actually get a cut the button fight for example
00:33:12
but for um a lot of other use cases you don't need to for information
00:33:17
of tasty and we could have a mode where ever compare doesn't generate this information
00:33:23
okay
00:33:29
hello to him oh what what do you do uh i mean this
00:33:34
colossal misuse of lime jello letters right so uh_huh be also is too or
00:33:41
which version of the judge and the u. k. um
00:33:46
so no so it's true but if you like if
00:33:50
you write your on library that uses a specific version
00:33:53
objectives discussed a lot every so these comparative java twelve
00:33:58
you won't be able to use it in your project we've a java eighth
00:34:01
easy if it's uses a a new methods which have introduced since java eight
00:34:08
ah we meet there might be a a good do um a good point that we should have
00:34:15
the food in the tasty which reference which version of the j. d. k. we are compiling against
00:34:20
but in general this is the same you should have with any dependency actually if you use
00:34:25
some specific version of a dependency then everything but depends on you need to use at his discretion
00:34:38
yes i'm starting tooling project right now should i focused on bass or semantic the the or
00:34:44
would you use cases should i choose one or the other uh it depends on what kind of
00:34:51
three new interesting so the like the the binary formats themselves some
00:34:55
probably not what you want to focus on you want to focus on
00:34:58
what does mediate guys to do the things i want to do so ah
00:35:02
acts committed is is semantic d. b. as um a way to store information
00:35:07
but the the interesting part is more like the a. p. i. is let's go undetected
00:35:10
you to do cool stuff and if this like you guys are uh what you what
00:35:16
works the best for project then you should use that um well
00:35:20
if you are more interested in doing something that's uh we that can
00:35:24
use a new features of cafe for example then our uh maybe
00:35:28
you can try using tissue effect instead and so it depends a basic
00:35:40
a new one example you explain that uh you still have twos well
00:35:46
standard library compatibility issue like when you said okay i read you some stream
00:35:51
in three point two yeah how is this going to be sold or
00:35:55
it is a tool and what are your plans to to do that
00:35:58
yeah so the the should be if um if someone is gonna three point two decides to to
00:36:04
change the name of of just to something else 'cause we do in fact the name and like that
00:36:10
that uh that would be very hard to to make compatible
00:36:13
it it's not impossible to imagine some way to paper over what
00:36:16
kind of things but i think what we'd like to do instead
00:36:20
you just have more discipline thing okay now that we have um
00:36:24
two in view of the ways to but maintaining binary compatibility is for like
00:36:30
many years it is a possibility we just need to
00:36:33
be a more strict in how we evolve discussed another library
00:36:39
so uh like not redesign it every two years
00:36:44
which i think people will also appreciate
00:36:49
uh other questions
00:36:54
uh_huh
00:36:58
you know the kind of related question like have you discussed using java nine modules
00:37:03
uh_huh could've paper ever that difference by just saying okay well this is what it depends on its
00:37:09
colour to eleven this much it depends on the kind of the the same me you you space that
00:37:15
yes only use like it java compatible you could be i just between themselves and lose colour
00:37:21
yeah that's exposed to him like you could kind of make you would kind of make that forecasts but it's
00:37:27
uh you have a hard parties you can extract isolated thing is using the on castro does or whatever but then
00:37:34
when you did them to interact it gets it gets complicated and
00:37:38
i mean people have been trying to do what we've twenty like for twenty years we factor is g. i. and i don't think it
00:37:44
uh right that's satisfying yet yeah
00:37:57
uh oh would it be like uh in the realm of possibilities to like uh
00:38:02
yeah he's taste is a target for or java or
00:38:05
in other languages yes you could automatically he'll use uh
00:38:11
java libraries colour g. s. are native stuff like
00:38:14
that so it's it's uh i think it's uh
00:38:18
it's possible you'd have to extend tasty somewhat maybe for some of the features of languages
00:38:24
that couldn't be expressed in sky but i think it's a a very interesting thing to
00:38:27
explore because it's true but if you can even if your like your wage writer you make
00:38:33
your own language if you can use tasty as a back can then you get a lot
00:38:37
of things for free you gets a super optimist j. s. backend j. d. m. a native
00:38:44
uh eventually and you can use libraries from the sky consistent
00:38:49
uh and actually norman's current too so it's uh i
00:38:52
think it's a very interesting thing to that could be explored
00:39:03
oh so it is suggested that people cool little should i use features
00:39:10
conversions to become palpable stacy files uh_huh and does that mean the skeleton panel
00:39:16
and we need something that completely exceed full does for the semantics of what
00:39:20
it takes to do little that's the feature there's an excel does that constraining possible
00:39:25
yes it's a radius yeah there's or is this
00:39:28
a tension between like recording things and keeping compatible
00:39:33
and uh that's why i pointed to a a schedule yes which
00:39:38
full react uh the lifetime of the zero point six areas
00:39:42
has maintained competitive for their on uh uh internet or presentation
00:39:46
we're still evaluating it and then you have to work a bit harder to be able to do this like you have to
00:39:54
uh reinterpret old versions of fire is in the new way you
00:39:58
you want things to be done but i think it can be done
00:40:01
for for the things we've one we would like to do for this
00:40:13
who who's done correctly that the binary compatibility is only
00:40:17
on taste meaning if you have a cello on i agree
00:40:20
consume your skull every and you're updating inversion scholar that'd make break yeah yeah the the um
00:40:28
see it when when i say binary compatibility it's a bit weird because what was
00:40:32
binary mean uh like castle classifies a binary is the taste is also binary so
00:40:38
to be clear of as a uh we we would maintain tasty compatibility but not binary compatibility
00:40:45
but then uh evan your job project will be able to uh make
00:40:50
use of uh we compiled classifiers to but for compared with the new version
00:40:57
uh but this project censored would not be recompiled uh from to see if they don't output
00:41:02
easy unless someone makes a taste for java a tasty backend for java which will be cool
00:41:12
i have two questions one is a really do cross compilation has its beauty
00:41:17
like you know you want to target to say to love and that one
00:41:21
uh_huh well that looks good things a little bit different designs uh it's just want this but that's one question uh this uh
00:41:30
a little production that's it we have been and into this
00:41:33
duty to compatibility issues it uh_huh just get last is i
00:41:37
would would that be a bit of a colour like you know let's say lose it is to file but uh that
00:41:44
no new listeners quality but uses a different version of g. t. k.
00:41:48
is that of the to recover from it i will only come or so c. d. eat it
00:41:54
really depends like if if ah like say discuss
00:41:58
another very is compiled against a new g. d. k.
00:42:02
but it doesn't use any of the new features of a. g. n. u. v. new methods for example
00:42:07
then you might still be able to re compile but to give that a baker
00:42:12
ah uh if it does use directly methods inject there's not much you can do the 'cause
00:42:18
even if it does it exist in the g. d. k. version you're trying to use an
00:42:25
and your for your first question and you when you cross compiler you'd see won't we
00:42:29
meet a two different tasty files uh if say in the new version of the compiler
00:42:35
you you generate to you have a different way of representing phase
00:42:39
wreck you you need somehow to stories in a in a different five
00:42:43
and this cruel this would have to where you
00:42:47
could imagine a putting everything in like one big jar
00:42:52
ah and using something like what java support for you can put check different versions
00:42:59
of classifies indifference subdirectory is based on the new version of java better using you can
00:43:04
like eight slash aided class nine slash aided stress in the same drawer and then
00:43:09
one of them is going to be right but you're right and you're probably john wayne
00:43:13
we could maybe have something similar for t. c. files in a
00:43:16
jar depending on this conversion ah not sure how useful that would be
00:43:23
the uh one last question
00:43:29
oh
00:43:32
uh_huh i'm how to work with its colour features that maybe
00:43:36
don't exist uh the previous versions so so you have a tasty
00:43:41
a file you compile with three uh_huh uh i do use union types uh_huh
00:43:47
but you want to use it later to twelve version yeah push good question so
00:43:52
the reading tasty from uh ask uh two has a bunch of gender is in
00:43:57
one of the measures that the oddity features that don't exist instead to so you
00:44:01
have to go on a case by case basis some of these features you can emulate
00:44:06
uh some of them maybe we had some like the minimum amount of project we need in
00:44:12
that uh like for the next national skirt to to make them usable and some of the users
00:44:17
if you try to to use them they just one for collective so compare are we to do like you can
00:44:22
choose this method firms get too because it uses a match type and i don't know how to interpret much types
00:44:29
ah so then a library designer when lighting like the public a. p. i. of there are a
00:44:35
library would have to be careful to read or write things which can be a interpreted by basket winfrey

Share this talk: 


Conference Program

Welcome!
June 11, 2019 · 5:03 p.m.
1575 views
A Tour of Scala 3
Martin Odersky, Professor EPFL, Co-founder Lightbend
June 11, 2019 · 5:15 p.m.
8340 views
A story of unification: from Apache Spark to MLflow
Reynold Xin, Databricks
June 12, 2019 · 9:15 a.m.
1271 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.
2233 views
Techniques for Teaching Scala
Noel Welsh, Inner Product and Underscore
June 12, 2019 · 10:17 a.m.
1296 views
Future-proofing Scala: the TASTY intermediate representation
Guillaume Martres, student at EPFL
June 12, 2019 · 10:18 a.m.
1159 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.
4697 views
Akka Streams to the Extreme
Heiko Seeberger, independent consultant
June 12, 2019 · 11:16 a.m.
1552 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.
5030 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.
1113 views
sbt core concepts
Eugene Yokota, Scala Team at Lightbend
June 12, 2019 · 12:18 p.m.
1656 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.
839 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.
394 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.
514 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.
736 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.
936 views
How are we going to migrate to Scala 3.0, aka Dotty?
Lukas Rytz, Lightbend
June 12, 2019 · 4:46 p.m.
710 views
Concurrent programming in 2019: Akka, Monix or ZIO?
Adam Warski, co-founders of SoftwareMill
June 12, 2019 · 4:47 p.m.
1975 views
ScalaJS and Typescript: an unlikely romance
Jeremy Hughes, Lightbend
June 12, 2019 · 4:48 p.m.
1377 views
Pure Functional Database Programming‚ without JDBC
Rob Norris
June 12, 2019 · 5:45 p.m.
6389 views
Why you need to be reviewing open source code
Gris Cuevas Zambrano & Holden Karau, Google Cloud;
June 12, 2019 · 5:46 p.m.
484 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.
811 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.
376 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.
1342 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.
624 views
Pick your number type with Spire
Denis Rosset, postdoctoral researcher at Perimeter Institute
June 13, 2019 · 11:17 a.m.
245 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.
662 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.
163 views
Compiling to preserve our privacy
Manohar Jonnalagedda and Jakob Odersky, Inpher
June 13, 2019 · 12:17 p.m.
302 views
Building Scala with Bazel
Natan Silnitsky, wix.com
June 13, 2019 · 12:18 p.m.
565 views
245 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.
304 views
Interactive Computing with Jupyter and Almond
Sören Brunk, USU Software AG
June 13, 2019 · 3:46 p.m.
682 views
Scala best practices I wish someone'd told me about
Nicolas Rinaudo, CTO of Besedo
June 13, 2019 · 3:47 p.m.
2713 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.
754 views
Immutable Sequential Maps – Keeping order while hashed
Odd Möller
June 13, 2019 · 4:45 p.m.
278 views
All the fancy things flexible dependency management can do
Alexandre Archambault, engineer at the Scala Center
June 13, 2019 · 4:46 p.m.
390 views
ScalaWebTest - integration testing made easy
Dani Rey, Unic AG
June 13, 2019 · 4:47 p.m.
468 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