so hi everyone

i'm here to talk to be about clay of you have and you know it

may look at be unrelated thought you guys are going to see the collection later

that

so my patient here is tricks plan to be about what's lda and what we

what the first of all better technologies about

and i hope of my patient he's not to get you into compilers because

we just had lunch and you guys may fall asleep well talking about like the

level stuff i don't know people usually don't the like very much to go each

of those details so i'm trying to be as much as possible in some sort

of a high level abstractions so you guys can just you how clinging all of

it works and that's the jitter janeiro i you don't want to best you guys

how it works

so first of all what tell you know

so i'll here is the name of the whole a whole wired infrastructure which is

composed by the front end and i are and

several tools to the meeting i think we call for back a

it has a similar it is the same very has that you anything side

and we call the whole framework alvin but ldm is also the name of the

I R level of this compiler

and it's also the name we give to the bit school which is actually the

same as a byte code but in the elephant word we world we call it

a bit school

so with all the M you can drive like static compilation just as you know

the U C so for example you can a regular com one line that one

will be using D C you can you should the same what would like but

just replace tecc bike lane and it should you use the same results

so for example of for a C source code

you passes through playing and you can it meets that direct executables because it has

an internal simpler board can also emit regulars simplifies in you can pass can pass

it through to be know choose and have your regular object files for your actor

besides that you can use it as some amount of the couple tools so for

example you can people know for the C code you just going should be L

V M I R which you like to do before we call it call and

from the bit code you can do several different types of manipulations you can run

optimizations only but only be a scroll you can it be a simplify is you

can emit object files

you can link bit go together is you have all sorts of operations you can

do on the L V M I R

so

in the example well we generated for example i are using the claim and then

we can run several different optimizations and pass it to L C to which is

that do we used to emit i simply an object files

so

every part in a lot of em have a library so you have like specific

tools which you specific libraries and this way you can now only use whatever you

want you can she beat called for example and then you can compile it to

your some backtracked or the way you want using optimizations you want so it's good

"'cause" you can do several tricks by decoupling the compiler parts

so like you sylvia

first of all it's open source

and as i believe i think it's good you know it's good because we can

have several options it's not here about being better dingy see it's just a different

option it has different features and different interesting problems it solves that it makes a

good choice to use

so it's just about one more option

that can be used to they have a lot several different stuff using the opencal

by

so it's easy it's quite easy to get stuff inside tell em if you need

to tweak the compiler in it's not a stick a very steep learning curve it's

easy to use it as a library to contribute to the project in the communities

very receptive to newcomers so

it's quite exciting to be contributing to all the

so decide that since we have several different the compilers the composites ever different faces

and libraries

it's you can do optimizations in all phases of the compiler so as you see

those you can you can compilation during compiled it i'm just running a regular optimizations

in the I R you can do it only time just running because together all

i'll tell more about that later indicated will run time has support for profiling so

you can the profiling oriented optimization

and besides that there's like a tons of and i think that's is in transformation

spaces with will label is the bit going to several different ways and make it

suitable for whatever type of optimizations someone wants to play with

so decide that the clay from can solve the end which is also the name

for the for the driver it has lots of libraries implementing tools to automatically find

bugs and stuff like that so besides using it as a compiler you can use

it

as tools to check for the correctness of your code i'm giving more examples about

that a bit later in the top

so just be more specific about that also you can actually understand a bit of

the idea

so it's written in C plus i know

people may like C plus but

for L V M it's a quite good language should have a lot the compiler

and using the abstractions and everything like that as i told you before it's really

you can you have several different libraries and can use the library's in the way

you want to use them

and i already told about this

so the front end is basically you can use a front end which is this

is team based

with the with the new support for not quite new but with the addition of

logan supporting tecc you can usually this is see to generate lda my are and

then use the regular libraries and tools well from ldm to actually generate object code

or executable code so you can actually use D C shouldn't today of in my

are in make good use of both optimizations of this is from this is you

not relations from L V M

so it the plugging this called recognise then you can just run it through D

C

and you get all the my are in didn't can just use regular ldm tools

so but besides that we have the plane compiler which is also but to this

library approach

it's gonna because since the design is a bit watering you don't have like to

struggle with generating possible partners is everything dynamic if you want to generate binaries forearm

for example you just need to best the right the right not in the command

line and you get like and i'm binary you don't have to

of course we need to have like our libraries and all that the older change

support around it but if you if you have it it's just a matter of

changing than all which are actually want to generate code for

so it this is it would think about like the very decompose it live approach

of L V M

decide that

elvis also for it meeting goodbye acknowledges of water cold so well especially when you're

programming C plus in your messages templates and i think is when things get really

dirty

i will i rather use going to school while stuff in C plus then using

D C when i want to understand a bit better of what's happening with really

deep compilation everything stuff

because it really provides agnostics and you can holding the three up and see whatever

your marker is a screen up stuff or whatever your complete is expanding in weird

ways

and besides that it also have a static analyser

which is really good choose to check up on the correctness of circled to helping

automatically finding bugs

so all he static analyser be

in the

in the end of the talk

sites that's like i told you before the optimizations yelled game to have like since

we have a positions in the whole lifetime of the compiler we can apply appositions

should the I R which is the most obvious place to put the opposition's because

we don't have to write musicians a specific to a target or specific drawback and

so every optimizations that it it's targeting dependent we can place here so for example

if we want if you wanna have some sort of a generic vehicle that we

can for assortment more specific architecture be goal we can apply optimizations here and leave

it there are just so when we're a beating for certain target we can

apply several different musicians like for example you can apply appositions for vectorisation for X

eighty six for example

and then whenever you have the big gold on your C P U if you're

see if you only have sse it can and we have to see that maybe

X you can use more stuff to reason about side of vectors and we ate

a vax properly

sites that we have the L C to which is the tool of responsible for

actually a invoking be back-ends it has it uses the I R and think boot

and it outputs a saintly files or object files the element has it has both

it has to should to both assemble and disassemble cool and we also have a

parser so for example when you're writing see cool then you use a line call

it actually involved the same parser to parse the line as it in can reason

about the assembly code you wrote inside the C code and give your proper diagnostics

and are actually you can write optimizations that will just change instructions inside the i'd

like or just reasonable constraints that you were that you didn't

you were you couldn't reason about because the code was complex you can also reasons

id a line you do proper feedback

so you can also you can also use a simplify wasn't as input and generate

object files and delete them together you can you can play around in the way

you want

so all that we have that we are well so have that you'd compiler a

difficult father's side that supportive for several we are factors

and we have the T L T O which is use it to really be

goals together

and like i told you guys we have a similar in this is samplers and

several different tools to play with object code and mess around with the low level

stuff

so how does that relate to you norm at all

so that's what i like to introduce and give you how can get all can

benefit from can you know V M how can start using it to i don't

know we proving in several different ways because there are lots of to all their

a lot of those you know them that can be used in get on to

improve development and stuff

so first of all gonna more and he was this L of them incline libraries

it some projects

i don't know much if there are more than to products using it but ones

are the ones that i look it up and i found that using like of

them five which i was already aware of that and we have the developer over

there someone what stop with him

which is actually a softer in their

using L V M whenever you don't have like a specific you to the graphics

it can fall back to using whatever your C P U has to process that

and it's a good fallback

besides that i saw that there's a plug in called you did go to system

that was that will use going to just give hints to do should someone of

programming stuff and giving like whoever's during the program like a V C idea I

Ds do

it seems you know it was like an umbrella for several projects

i was i was i was playing around to see i was playing around with

the in the deep repositories

and with the an on tools and i step into the jhu and always three

in all the you bought stuff that it it's meant to be supported and i

think like why not they can use the static analyser for example or just you

the whole called bayes using clay in see what type of differences it can make

in the in the final executables it may be that for some by there is

would be slower than you see but for someone will be better i don't know

it's just something that i think it should be given that right

so i think for example jhu to noise three can benefit from trying to use

cling

so other stuff that i think that big you know project can benefit from out

from ldm sport we are back in for example for running at you know three

own on a nexus seven it will be a good try to go by using

playing

besides that using elevator bell till choose to have like smaller binary final binaries which

will explain a static analyser in some tool that you can dynamically explore several different

types of bugs like the address and the members any tight

so you're back in a all of them has a very

i stable are back and which emits really good quality code it's easy it apple

uses it for a compiling now us implications in the X gold you can excellent

is all these and claim and uses they are back and to generate go for

them so it's pretty stable it's pretty optimised

and i it also supports the most recent processors of all the army seven of

family of arm processors

and

besides that for example of them by would use the are back antigen you already

does if you want to generate article but you could it could be for example

more optimised so if you think in the case that if you want for example

to have been on running on our devices with all the specific gpus for example

we would use a just regular vector restrictions from the are instruction set like neon

to generate that gold in a better called in actually has a good fallback for

soft a rating for example

i'm not i think is the all the melody in a regular compiler when you're

linking stuff usually come from sickle we generate object goals for each different source you

have and then in the end your link all of them together or you really

on the from actually and then put it on the final executable later that's

that that's how easily a compiler full works

but with all the and the

and the beats code

representation what okay the ways that you can force it me to be it's colds

just invoking calling in and asking it all don't in the old radicals you directly

just can be bit codes

after that you can mix albeit chords together

and have a final module that final module you can actually apply several different types

of oppositions like to go to before including link time up musicians so you so

you can remove several functions that are not being used inside that model because it

can reasons use everything kids inside there so you can use liking triple sitters stuff

what mutations in

actually can a lot of stuff do we did and then you just invoke the

backend for the final module and you have your final executable so this sort of

like opening the couple reasoning in the compiler

not use of is actually we use pretty good code so i think probably some

project singing on can

just we can a bit of the makefiles to just an array of vehicles for

instead of object files and then the ring linking link always goes together apply link

time optimizations i don't know it maybe can benefits lots of projects i would give

it a try

so they stack analyser it's basically

a source code processing to based on playing that will try to reason about your

code and give you information about if you have one in your old what's our

alternative like not only but you stuff that you could have not done in the

call that will improve it or just remove use this is stuff that you're doing

up role so it's really good because

it actually conceded time debugging later could it can catch all sorts of but it's

not perfect but it helps a lot

so and you can also all to you can also do it use it for

all

the some sort of all but i think that

although much as they should you has you can do to use that and that's

why i think it's good to put it in stuff like you bought because whenever

you already have should you the whole three of you projects at the same time

you can just do it using they static analyser images

have a bunch of information of every project yours you're compiling and you can use

that to somehow track regressions just see if some sort of a critical bugs are

not happening between one revision another are at least before releasing stables a stable releases

you can run them and see if there's nothing critical be released to the public

since it's library basic is just a matter of

importing use actually use the library any let major on that

you have the

so i wanted to make a plug and write checks us you're passing the correct

i call back okay you are it's

how difficult would it be

i can tell you for sure like

it will be much difficult because already have all of those you have already have

analysis that will all come to it's three years three yes the trees

so you could probably use call that is already there to do whatever you want

a specific

you know so it shouldn't be difficult because i have a framework for doing that

it's already there

i don't i can tell you exactly how to do it

but

it it's not difficult

i think right now you actually have to com pilot i i'm not sure if

it if

we have like this leave claim his stuff and we have like that the light

stuff that you can actually write logins but for example for the specific type of

plugging that you that you may like to right i don't know which is going

to be the best place to implement a you know going to have like several

blank we have right now three places that you can who came and implement analysis

so some stuff you can just invoke your dynamic compiler analysis and we just best

way but for some other stuff to have to hack into the compiler to do

it

that's what i'm saying just you can have several who points

but not all not all of them you can just

best looking as a parameter

it could be

i don't know we can you can see that later after the top

right

but we have like several different

interface is that we can plug in allows incline

so this that equaliser also helps with improving called quality seashore there like

having the a direct feedback of what sort of mistakes are doing their cool it

also has false positives because it's not a perfect also sometimes it will say that

it

it looks like it has a but it's a it is not the problem is

that the compiler is just not smart enough to see that you already checked something

before in section default one but in general we it works when you can also

report bugs in telephone this sort these improve this

or send a pitcher self improvement

and of course the compilation is a lot slower using the static analyser but you

shouldn't be using it to produce like of production code it was like do those

separate compilations so you can see your analysis

and on impact on your billboard time and stuff like that

so tuesday static analysers three simple once you have blinks at all well you have

like package for going to i don't know about fedora but or you haven't it

ship the second you tool and based can you tool just you just that said

before called here and before make it will cup and just hijacking them you know

and make it use clank tools instead of the regular compilers and i'm not is

your code and then we'll just emits several each stay all male reports telling you

about all sort of different bugs

so i analyse a few of you know projects from the dog you know on

but hard to see how they would react fifty static analyser and what sort of

but we could we could find so i just put it on the web and

i have done for just a few that i was seeing people talking about you

know other talks and i chose a few projects just to show we will be

how does it works

so

for example i put it on blade see how the source code of we use

regarding the buttons and but at least bugs that this data can alike and five

and i found that it's very clean you don't hide it feel like average like

a few that for is of no pointers some money on the on the cal

i argument that is but it's

i find it very clean compared to other projects i've run into

so you can have an idea for example

that's part is actually not a problem but it's just something that you could avoid

so you could have like a

and a bit is a bit smarter code and bit faster code and it keep

track self that's all

what's you see this is like a next email report and

you can click on that several different that assigned a minutes you can if you

go there you can you can actually if you can on the link you can

actually see the full report and just go around and see the types of whatever

so for example for a random that assignment in late it will just show you

all the variables are sleaze

is never read after this attribution so there is there is no point in just

doing this you can just remove this code and probably make your code a bit

faster

it can actually sometimes be a false positive because sometimes you may never it may

not perfectly reasonable what the function is returning but it generally works really well

so that's one of the example for late

i also relative to G streamers should be streamer and that's for this is interesting

because of all the of all the projects i run into that you streamer and

the give to get i mean you think a was one that have like division

by zero so i found like seven divisible by zero in G stream or so

if you want to see the report to see how it generates how we it

shows you the bug

it's very cool because for example if you show they steps

and it show you reach break it to choose getting to that point and reach

sort of condition it assume to take the break so for example in this case

it will select the first hearing dysfunction it can see that the base that

because of the limitation of the function you can also click on that and see

the implementation of the function it's a base that may be zero

and if you follow the cold assuming for example that's all is a greater equal

then me that will could yell the a division by zero in your code role

so it's good to find all simple stuff that sometimes just you like really weird

bugs in the little what's happening

so i also minutes for the evolution data server

because they stack analyser can also sure we were sick of problems that it considered

like a security issues so for example

here we have this are you sure with the safety you idea so i was

like well so this is evolution data server you have like the

a security issue with the a very important function that mainly true

reflects collation so i just went there

just see what was happening but if you could be able to say that this

at E Y D is just should before they actually set you might be that's

considered dangerous so this is actually a false positive because you already look it before

so you were you were calling it again without checking what it retards because we're

ready check before what was returned

so and i also run into should be okay to see how much average you

will be your then actually that was a bunch of them

and they're probably can be more if it if they static analyser can be told

to reason about some constructs of but kitty because it has it uses like really

you mohawk and stuff like that

so but it's just good to find simple and

it just straightforward stuff so

can dispatch quickly

so this is the your model we have like

thirty three for

but i've but lot of them are actually really bugs just the logic at first

probably security issues

do to another computer user and i mean

just to analyser

i don't know i look it up i found some people that running to right

running on V but i didn't see the output

also decaf all some blocks same but people or not like just display there i

mean the book another graphical computes

like you to your you know all i don't know i don't look at i

think it if L at least the developers i know from yourself here fell there

quite they like link in and they use it in their products but i don't

think i don't know if they use it like on your box

and stuff like that

okay

so i think we have the descent advisors

this any factors are actually

for relative also have it on T C is just actually you can reason about

memory access and this that's regarding addresses

in the rerun time it's not a it's not i'm ecstatic cannot is anymore but

it's the libraries that you can link together with circle that will work just a

bit like alright for example and will do you like dynamic found it works

so for example D we have the senate by there

which basically checks for out of a lexus in any type of memory and also

for comments for you have verse

the those types of ever may not be sometimes on might be static analyser so

this limitation on using the like dynamically can you better results so i didn't have

like enough time to run to the all those products like a did misplaced i

can a lighter but i relatively and you it and i couldn't find maybe

runtime errors made i didn't explored those problems and of because i don't know like

the corner cases that would you like can try can probably reach strange golden but

they look at it around did and the them exploded anything

and we also have the members and it either

which is like a just a this is more like o'brien actually a you will

the tech on the july reads

all those tools it will have like a it is lower your go down because

it have like a runtime library in reasonable your code and everything and i just

used a G a huge to for a few products in trying to link using

the absolute bicycles memory it will break

it make just running regular make after you compile the final executable it will just

run a few tests and will just like explode because actually has and one of

a naturalised reads and we'll just i couldn't even like while using the G H

B O because it was some underlies everything in G D so it it's probably

worth taking a look to see if it's

some sort of false positive i don't know i don't believe but

just see what happens in if it's can prove

but that's it is

questions

i just got and analyse it detect a situation where you have in you know

sickle and the

condition that is just one is never modified inside

and that's and those detect and this that happens because for example or whatever and

then forget to assign and it's in the variables mentions

condition

sorry i put your repeat is again like within your everything

so suppose you have a why do you new sequel

it's a for example checks that one bearable is greater than another in

in the and then in the body all that will you'll forget to assign and

use into any of those variables so if it is true initially it will it

will for ever and little we'll just for a little and you also their static

analysing cash such things like for the most simple case can tell you that will

probably run for ever something like if it's a simple case can to i can

i think you can probably write code to try to break it and you know

you can probably put some weird if we gave that we couldn't figure out that

part of people

it will get more

so i just have to make this comment opponent quite funny that you had to

excuse the use of C plus

at the beginning of your talk in this crowd

because when you don't look at it into your results

that it looks like to type of the more macro expansions that are not doing

proper type checking because of programming against you'll it using C

and it's this program was done in C plus it would probably be type checked

and users would not be occurring

so just to come

i guess this is more of sort of administrative issue but i actually found a

bug in the clang static an analyser

and i reported it and you very annoying thing is it seems that L B

M or clang are driven by apple so i just got this mysterious link saying

clone to the internal apple about tracker and as far as i know it's still

open with an unresolved status i'm curious if like there's plans about getting it sort

of away from the apple infrastructure "'cause" it's disappointing that work that gonna report about

there's just this unknown apple what track at that i have no idea what's going

on internally about so i don't really how much capital controls all the M or

if you could give some words on that

is as a matter of fact i just

one fact is that almost part of the developers i hard by and also

there probably do whatever it's probably easier for them to track i don't know i

don't have anything i don't know

i think a for the goal for a nice

i want to us

i know that it's not really three will to do like C equals ceiling

for G C and

you know will build or called with ceiling can not with G C do have

a tool to help developers with the stuff

i couldn't understand it can you okay so we can imagine you have your call

or project and you are using G C and right now we want to ceiling

for as the compiler

and i know it's not really trivial to do this change you have a tool

to help developers with this

well i actually clay try to support most part of what this is he does

including the command line so you should expect that just changing the G C driver

for the clean driver it will work it may not what it works for most

part of the case a lesser implementing some just like if your problem we are

using not just a weird you know like station that a lot of the end

is likely is playing split it's a it's not going to support then you may

run into problems but regarding compiler flags it try to support everything that this is

you support just job to make sure that it that you can just be a

in place you can just replace in and it should work

that that's how we think that it should be

okay because i know that some constant whether or not to build whole districts you

link and

to do some

real hacks to make it happen to like i don't know like fifty percent of

pictures build them

so i just want to us okay it just like i told you maybe there

are some X stations in the cold that clank doesn't support but like regarding just

the compiler flags most part of them are supported or at least ignored if they

don't make sense in how internally ldm the stuff so you couldn't just like have

your compilation broken because some specific this is see flag is not there you know

in inside

okay

regarding statistical analyses and to ask this run on our cool or on actual some

school

sorry

still to come once is this wrong i hope

or not it's before it's on the C I C is form and during the

problem

so it's got like in the I R you already lost much information and a

lot more difficult to reason about

so it's be up there

it's before okay thanks

i first thought licensee

but

so though the playing like the C library accessing it gives you act

as the C N X and everything i found it incredibly restricting compared to what

you get from the traditional C plus

libraries

is there one like any work being done to enable

that stuff

and is it going to

be a little bit more convenient is like right now if i wanna get a

string for token and

i get like a see a string and i have to go and get a

C string from that

is it it's a really inconvenient see

i heard about a lot of complaints about that but

any it's also because it changes a lot right so i don't have any pi

that they're trying to be you know

so that's really i'm sure that if someone just i'd like is

just a proposal will written one probably they may consider it because

it's something that it's far

interest lot of people right but i have seen all works in that direction

nazi not they don't existed but at least i'm not aware of it but i

know it's a should like i see people complaining about that for several years now

so if we're going to start to learn you know around playing in terms of

like building you know static analysers encode checkers

would it even less to instead try to wrap the C plus libraries in the

G object

because it is really inconvenient after a all of the C plus

we were mostly C programmers here

i think we'll probably better just should try to spend our lives the somehow ye

pi right like with some maybe a guy thing i don't know i it's probably

easier "'cause" you could just use it directly see that all

writing it around and it is not just like receiver suppose busting it's not if

we use G object and wrap that knows and we can use G I R

python and what not to write fairly complex scripts very fast

but i don't know are you guys rapping us you possible stuff and i can

already

i could i just don't know like i think they're both way to solve it

i don't know which one is better "'cause" i have a big that place and

love to tell you what i think would be better at i don't use the

it guy myself so

i'm not aware like of all the trouble that it mainly it's too but it's

something that we can we can discuss letter and take a look and i can

give you feedback if i have anything to compensate i guess my comment in mostly

is that

actually maintaining a stable at i

would be huge

of course agree

you just you specifically major there are back in the curious about other non X

eighty six architectures like instant he acts do you know what the status of the

level of support is on that hi don't think it table enough if it has

i don't i the last time i look

hundred or a four

there L in back and still for every architecture that

both fedora and realm support

so

the cabby us there

powerpc thirty two and S three ninety

not us or not

the sixty four bit power industry ninety work

thirty two works

by then

i expect that dorm sixty four stuff work

X eighty six maybe six people

what else is there

it has more back-ends and that actually there's

there's a the backend for our six hundred

and later at and gpus there's a back and forth in called P C X

which is what people are using

sort of common i are

opencl

and a couple of other architectures we don't have to work

or like that

textile and

and then that'd chips

there in varying stages of quality and you find occasionally there's like jen go you

feel serialise this instruction correctly but they really much past

three to three is far more consumable in this respect than three that's you was

three that's it was missing

was missing both idea was a power and see and systems E

and market

you only one of you just to free to talk of that's about ldm and

playing

everything

i think