We're sorry but this page doesn't work properly without JavaScript enabled. Please enable it to continue.
Feedback

A minimal pure object-oriented reflective language

00:00

Formal Metadata

Title
A minimal pure object-oriented reflective language
Title of Series
Number of Parts
490
Author
License
CC Attribution 2.0 Belgium:
You are free to use, adapt and copy, distribute and transmit the work or content in adapted or unchanged form for any legal purpose as long as the work is attributed to the author in the manner specified by the author or licensor.
Identifiers
Publisher
Release Date
Language

Content Metadata

Subject Area
Genre
Abstract
Pharo is a minimalist reflective dynamically typed object-oriented language. Pharo is inspired from Smalltalk: Its full syntax fits on a postcard. Its model is simple: everything is an object instance of a class, methods are all public virtual, attributes are first class objects and are protected. There is single inheritance and traits. And nothing else! (see http://mooc.pharo.org). Still Pharo is a real language that is started to be used in industry http://pharo.org/success and http://consortium.pharo.org. The entire Pharo stack is MIT. Pharo reflective core is bootstrapped from source code. Experiences shows that we can have down to 11k (adding 2 smallint) and that a simple web app can be trim down to 500 kb. In this talk I will present Pharo in a nutshell: Syntax, model, but also user stories. I will show the vision of the project and where we want to go. I will present some key architectural choices. I will show some powerful features such as stack on the fly reification and their application: contextual breakpoint, on the fly program transformation. Bio: I'm one of the core developer of Pharo, head of the consortium and helping consortium engineers.
33
35
Thumbnail
23:38
52
Thumbnail
30:38
53
Thumbnail
16:18
65
71
Thumbnail
14:24
72
Thumbnail
18:02
75
Thumbnail
19:35
101
Thumbnail
12:59
106
123
Thumbnail
25:58
146
Thumbnail
47:36
157
Thumbnail
51:32
166
172
Thumbnail
22:49
182
Thumbnail
25:44
186
Thumbnail
40:18
190
195
225
Thumbnail
23:41
273
281
284
Thumbnail
09:08
285
289
Thumbnail
26:03
290
297
Thumbnail
19:29
328
Thumbnail
24:11
379
Thumbnail
20:10
385
Thumbnail
28:37
393
Thumbnail
09:10
430
438
Programming languageProgramming languageSound effectDigital photographyGrass (card game)Lecture/Conference
Source codeProcess (computing)AerodynamicsSoftwareComputer programmingElement (mathematics)MereologyCoefficient of determinationSpecial unitary groupDigital photographyIntegrated development environmentStaff (military)Programming languageSoftware developerLecture/ConferenceComputer animation
SoftwareSource codeComputer animation
Model theoryObject modelProgramming languageObservational studyObject-oriented programmingComputer animation
Object modelComputer animation
Dynamical systemInstance (computer science)Virtual realityAttribute grammarModel theorySingle-precision floating-point formatInheritance (object-oriented programming)Order (biology)Object-oriented programmingRule of inferenceInstance (computer science)Physical systemFunction (mathematics)System callAttribute grammarSocial classType theoryComputer animation
SubsetVirtual machineProgramming languageSource codeRun time (program lifecycle phase)Coefficient of determinationDigital photography
Object-oriented programmingImmersion (album)Digital photographyCodeReflection (mathematics)Object-oriented programmingSemiconductor memoryComputer animation
Social classObject-oriented programmingImmersion (album)Reflection (mathematics)Message passingSocial classComputer programmingComputer animation
Object-oriented programmingMessage passingPhysical systemObject-oriented programmingPolymorphism (materials science)Real numberAreaComputer animation
ImplementationPolymorphism (materials science)Rule of inferenceComputer animation
ImplementationPhysical systemBoolean algebraLogische ProgrammierspracheSource codeRevision controlUser interfaceType theoryPrimitive (album)Fluid staticsOperator (mathematics)Programming languageSocial classMessage passingObject-oriented programmingDevice driverPhysical systemIntegrated development environmentGraph coloringImplementationStructural loadPower (physics)UsabilityInstance (computer science)Constructor (object-oriented programming)User interfaceSoftware developerVertex (graph theory)Different (Kate Ryan album)Dependent and independent variablesType theoryBoolean algebraSource codeComputer animation
Presentation of a groupComputer configurationRepresentation (politics)Object-oriented programmingVisualization (computer graphics)ResultantCodePower (physics)Software frameworkMatrix (mathematics)Observational studyWorkstation <Musikinstrument>Degree (graph theory)Right angleAreaXMLComputer animation
Moment of inertiaObject-oriented programmingDirectory serviceComputer fileSystem callComputer animation
Meta elementReliefData dictionarySource codeImplementationPower (physics)Multiplication signInstance (computer science)Visualization (computer graphics)Software developerPhysical systemMessage passingView (database)Process (computing)Video gameDemosceneLocal ringWorkstation <Musikinstrument>Extension (kinesiology)Integrated development environmentComputer animation
DebuggerSource codeComputer wormExecution unitDebuggerIntegrated development environmentMathematicsCoefficient of determinationLimit (category theory)Real numberMathematical analysisQuicksortEmailComputer virusComputer animationSource code
Programming languageDebuggerInterpreter (computing)Physical systemPlanningVolume (thermodynamics)Digital photographyComputer animation
Computer networkSocket-SchnittstelleComputer programmingComputer programmingInternet der DingeCartesian coordinate systemWeb 2.0Computer animation
AreaInternet service providerComputer animation
Programming languageProgramming languageIntegrated development environmentVideo gameMultiplication signComputer programmingHand fanPower (physics)FamilyComputer animation
Electronic mailing listGroup actionCurve fittingGroup actionFreewareLatin squareDifferent (Kate Ryan album)Computer animationPanel painting
Copenhagen interpretationInvertible matrixReflection (mathematics)Social classObject-oriented programmingComputer animation
Enterprise architectureOpen sourceLevel (video gaming)Content (media)
Open sourceTelecommunicationCore dumpXML
TelecommunicationSlide ruleGoodness of fitEmailExpert systemElectronic mailing listDynamical systemCausalitySource code
Multiplication signSet (mathematics)Different (Kate Ryan album)Level (video gaming)Computer animation
Computer wormMereologyCartesian coordinate systemGoodness of fitMultiplication signProduct (business)Computer animation
Web 2.0Complex (psychology)Cartesian coordinate systemInternet der DingeComputer animationProgram flowchart
Process (computing)Source codeDampingPresentation of a groupMultiplication signCodeBuildingControl flowDigital photographyComputer animation
Primitive (album)CodeInformationProgramming languageEquivalence relationMessage passingIntegerNumberOrder of magnitudeObject-oriented programmingPoint (geometry)Virtual machineMultiplication signCASE <Informatik>Queue (abstract data type)Forcing (mathematics)ForestRhombusFamilyUniform resource locatorLecture/Conference
Point cloudFacebookOpen source
Transcript: English(auto-generated)
Good morning, this talk is Faro, the idea is presenting Faro, that is not a new language, but it still is a minimal, pure-object -oriented, reflective language that is quite small in itself, but is very powerful because on top of it we have created a lot of things.
This talk was intended to be presented by Stéphane Ducasse, but I am not Stéphane Ducasse, sorry, he has a problem with arriving here with the trains in France, we are in the middle of a really big strike, it's not a problem at all, but sometimes makes things a little more difficult.
Well, I am Paolo Desone, I am one of the engineers working in the Faro Consortium, basically I am working also in the development of Faro with Stéph, so I want to present it, I think it will not be the same but I will do the best that I can.
Well, Faro, what is Faro? Well, Faro is a small talk inspired language and environment, and it's not new, but this question is always, we have it, why to use Faro? Yes, Faro.
Because for us, the most important thing, and the thing that we want to share with you, because we see that you are also a language enthusiast, and you like a lot the simplicity and the elegance of the language, is that it's elegant, and it's a really small syntax, we can write the syntax in a postcard, and it has a simple but powerful object model.
This is the whole syntax of Faro, sorry if some of the details will not be able to be seen, but this is it, this is the full syntax, we only have this, and with this, we have a pretty nice object model on top of
it, basically dynamically type system, where everything is an object, everything is an instance of a class, and the class also are objects. Also, we have, our old methods are public, we don't have the idea of private methods, they are
virtual, so they are automatically executed from the subclasses, and we can have override without caring at all. All attributes are protected for us, and we are using single inheritance, and with a small asterisk there, that I will talk later. Faro is fully writing in itself, all they call Faro is bootstrapped from the sources, even the virtual machine is
mostly writing in a subset of Smalltalk, a subset of Faro, and we can modify everything in the language itself, in the runtime, even during we are executing it, so it's so flexible to change or improve it, or even destroy it.
Faro also is highly immersive, what we want to say with this, that in Faro, nothing is a black box, you can check the code of all the methods, modify them, and improve it, or do it worse, but the important thing is that we can always learn from that, and get new ideas.
It's fully inspectable, we can check all the objects in the image, all the objects in the memory, and we can change them, and they have a lot of reflective API to modify. Also, you can interact with all the objects, and classes, and methods, and also objects, you can take
a class and inspect it, or send messages to modify it in your program, and do nice reflective things. As I told you before, we only have objects and messages, it's a real pure object-oriented world, and everything
that we have in the system are based in objects, and we use a lot the polymorphism to implement the stuff. For example, if we want to implement not, we have a false not, it should return true, and true not should return false, we let the receiver decide, we will use it doing a polymorphism.
So, for example, we will have three classes, one for the whole boolean with the common behavior, but one for false, and one for true, because as every object, even true and false are instances of a class, the behavior of true and false are in their respective classes.
And this is the implementation. And this is not just a theoretical thing, if you check in the system, if you inspect the methods, and check the source code of them, and to modify, this is the implementation. So, with this not-so-much concept, we have a very powerful language and environment that basically does not
have a lot of the things that we see in many object-oriented languages, or mainstream object-oriented languages. Because, for example, we don't need the idea of constructor, because basically a constructor for us is sending a message to a well-known object, usually a class.
Or, well, we need a node type declaration, as it's a dynamically typed language, we don't need interfaces, or type factories, or different solutions, because of the type system we are using. The idea of having different visibilities for us is not important, because basically we want to give
the power to the developer, and if the developer wants to send a message, he should be able. At the end, it's responsible or not for breaking or making the things work. Also, a nice thing that we have in Faro is that as we have everything as an object, we have the idea of customizing the representation of objects, and have nice inspectors on top of it.
Basically, what we can do on all the objects is that we can execute code directly, interactively, and with this, see the different results. For example, we can take and re-implement how every object is visualized, and it's so easy of doing
this that we can, for example, integrate with a powerful visualization framework that we have that is called ROSL. We say, okay, for this object, we will represent it in this way, or we will have it represented as an array. At the end, the matrix Q is an array of arrays, but we can implement it in more beautiful things.
For example, if we inspect a directory, there is an easy implemented way of presenting it as an explorer of this directory. For example, if you inspect one file reference that is an image, it just shows the image in the inspector.
This also goes for all the objects that we have, and objects that are not usually accessible. For example, in this one, we are inspecting a method from a method dictionary in the class, one of the methods that we'll execute when we are executing or sending messages to instances of dice handles, so they will have this implementation of plus.
From the compile method we are inspecting, we have many views, but one is to see the AST node, and as this is an AST node, someone has took the time and said, okay, I will do an extension, but every time you are inspecting the AST node, I will provide a
new view that just shows the source code of the method and highlights the node that you are selecting. This gives a lot of power to open the system and create new visualizations and new tools in an easy way.
Because as we are developers, we think a lot about how to have a faster development process. And one thing that I really love about Fado is that it is a live programming environment. You can basically develop in the debugger. This is our base debugger, where you can execute Go and do debugger stuff, but also you can come here and modify this method,
and once you modify the method, it will recompile the method, and you can restart the execution from there. If you recompile the method, of course it will restart from the beginning of the method, it will not do the analysis to see the changes and restart in the middle, but it's powerful enough to do a real nice TDD experience, because you can really create the test and let all the other methods empty,
and you start debugging it until you provide the smallest solution possible. A nice other thing that we have is that this debugger is basically as moldable as everything else in the system.
So for example, one of the users of Fado has implemented, using the same debugger, a debugger that, this is a language called Viena, if I remember well, and they have implemented an interpreter in Fado, but debugging the interpreter is boring and takes a lot of work, so they have
created a debugger on top of the debugger to debug the language of the interpreter. So this ability to create new tools and to inspect objects, we can do it not only for developing the Fado itself and tools for Fado,
but also we do it or we try to sell to you and to everyone that live programming can be something that we can do everywhere, and we can do it in web apps, sockets, applications using sockets, IoT applications, anywhere. Basically, our goal as a community is basically to generate the tools or generate the small layers where you can invent your own future
or you can provide new business ideas or new research ideas and produce innovation and produce new nice things of that.
Basically, we are aware that or we want you to make a successful life of programming in Fado and be also fan of it or both at the same time, and the idea is to provide a powerful language and environment where we can do innovative things.
To that, one of the things that are more to me is more produced, more proud, is the community of Fado. We are a really nice community. Fado and all the tools are used by a lot of research groups all over the world, a lot of different places, from Latin America, in North America, in Africa, in Asia, a lot in Europe,
but all over the world and it's very nice to see that. We have a lot of teachers giving classes, object-oriented introductory course, advanced reflective course,
and different usually object-oriented courses in Fado all over the world. So it's very nice. Also, these different professors and all the community have produced a lot of open source books that are available to anybody to download, to produce new content, to take it, destroy it, do whatever they want.
Also, we have a very nice tool that is an open MOOC. It's not only available for everyone, but also it's open source. You can access the video, you can access the presentations, the material, whatever you want. You can change it, you can use it in your lessons or just for fun.
One nice thing that we have, and now it's more active, usually here used to be a slide talking about the mailing list, but now the mailing list is so far away because the nice things happen in Discord. There is much nicer communication where we interact more dynamically.
And it's very, very nice. And it's a good place for beginners and also for experts and just to talk and sometimes only to hang out. Also, we have a set of different publications that we try to do almost regularly.
It's difficult because it takes time to do things nice, but we try to continue producing material all the time. Basically, we are not alone in the world. Basically, all this is part of a big community.
We have a lot of companies and universities and research institutes that they are using. Some to produce pure research, some to produce applicative research, but also a lot of companies that they use it further because it's good for their productivity.
We have a lot of many success stories, but it will take a lot of time. From commercial applications to research applications, applications for mobile, for applications on IoT or simple web or complex web applications, as you want to see.
The most important thing for me is that Faro is open, it's available, you can use it, you can hack it, you can break it, you can do whatever you want. Basically, to me it's very addictive, but maybe you like it or not.
We have all our source code in GitHub. You can check all the things that we have there. It's always bootstrapped from the code. We have an ICI process that is trying to build all the time Faro from scratch and see when we break it. This is all my presentation. I hope you like it.
I'm open to questions. If not, you can pass through our stand in the K building and we can talk longer and longer and take office. Orbeez. When you say, okay, if I have integers, then every integer is itself an object,
and if I do addition, then I send a message to that object with the other object that you add to it as an information to message.
But at some point under the hood, you really do want to add those two numbers on your actual computer. Well, actually, yes. The question was how it solved the problem. For example, when adding two different integers, at the end someone has to execute it in the machine and produce the sum.
Basically, what we have is as many other languages using virtual machines, we have at the end a layer of primitives. We tried that this layer of primitive is the smallest as possible. For example, adding two integers or adding two floats, we were required to have a primitive.
The same when we want to send a message, for example. We tried to reduce it, and even in some of the cases, when we have primitives, you can check the code and you see the fallback code. Because, for example, for adding two integers, it can be done only in FARO. Many orders of magnitude is lower than doing directly, but it can be done.
So you can see in the primitive execution, the small talk code that can be replaced in that. The idea is also that, with the time starting to see, okay, this primitive, we want to show at least how it could be done in small talk,
or which is the equivalent in the small talk code that should work.