SlideShare a Scribd company logo
The best language in the
world
@voiser
david@seedtag.com
It’s a really good solution for some
problems
You should have a clear idea of:
N-ary trees, DFT
Visitor[T] pattern
Two kinds of VM: “JVM” vs “Virtualbox”
Frontend
A simple language is actually quite complex
VM
Bytecode
generator
Type checkerAST
Native
Backend
Optimizer
Standard
library
Memory
management
AST
transformations
DSL / General purpose?
Functional? OO?
Native / VM / JIT?
Existing VM? My own VM?
Frontend
My recommendation:
Start here and make a simple VM
VM
Bytecode
generator
Type checkerAST
Native
Backend
Optimizer
Standard
library
Memory
management
AST
transformations
https://github.com/voiser/vm-example
a = 1
b = 2
c = a + b
print(c)
File
def(a)
int(1)
def(b)
int(2)
def(c)
call(+)
ref(a) ref(b)
call(print)
ref(c)
NFile(
NDef(a,
NInt(1))
NDef(b,
NInt(2))
NDef(c,
NCall(+,
NRef(a),
NRef(b)))
NCall(print,
NRef(c))))
Dynamic typing
Stack based machine
AST traversal
Frame:
Stack + Local variables + Previous frame
Frame:
Stack + Local variables + Previous frame
Stack representation:
[s0, s1, s2]
Frame:
Stack + Local variables + Previous frame
Locals representation
{a:x, b:y}
Frame:
Stack + Local variables + Previous frame
Frame representation:
[...] {...}
Frame operations:
frame.push(object) -> ()
frame.pop() -> object
frame.setlocal(str, object) -> ()
frame.pushlocal(str) -> ()
frame.call() -> ()
Rule Zero:
Functions are represented by
objects
Rule One:
Each function gets its
parameters from the stack, in
reverse parameter order, and
pushes a single element
when returning.
interface FrameCallable {
void call(frame);
}
class PrintFunction() implements FrameCallable {
def call(frame) {
o = frame.pop(); // by Rule Zero
System.out.println(o);
frame.push(new Null()); // by Rule One
}
}
class SumFunction() implements FrameCallable {
def call(frame) {
i2 = frame.pop(); // by Rule Zero
i1 = frame.pop(); // by Rule Zero
sum = new Integer(i1.i + i2.i);
frame.push(sum); // by Rule One
}
}
The initial frame has a bunch
of locals that represent the
basic language functions
Frame getRootFrame() {
rootFrame = new Frame()
frame.setlocal(print, new PrintFunction())
frame.setlocal(+, new SumFunction())
frame
}
[]
{print:…,+:...}
Let’s define a traverse operation
void traverse(frame, node) {
???
}
NInt(x)
Rule:
Basic data nodes are
represented by runtime
objects
NInt(x)
frame.push(new Integer(x))
NDef(a,x)
traverse(frame, x)
frame.setlocal(a, frame.pop())
NRef(a)
frame.pushlocal(a)
NCall(a, params)
frame2 = new frame()
params.foreach{ p =>
traverse(frame, p)
frame2.push(frame.pop())
}
frame2.pushlocal(a)
frame2.call()
frame.push(frame2.pop())
ZASCA!ZASCA!A virtual machine!
NFile(
NDef(a,
NInt(1))
NDef(b,
NInt(2))
NDef(c,
NCall(+,
NRef(a),
NRef(b)))
NCall(print,
NRef(c))))
[],
{print,+}
NFile(
NDef(a,
NInt(1))
NDef(b,
NInt(2))
NDef(c,
NCall(+,
NRef(a),
NRef(b)))
NCall(print,
NRef(c))))
[],
{print,+}
NFile(
NDef(a,
NInt(1))
NDef(b,
NInt(2))
NDef(c,
NCall(+,
NRef(a),
NRef(b)))
NCall(print,
NRef(c))))
[Int(1)],
{print,+}
NFile(
NDef(a,
NInt(1))
NDef(b,
NInt(2))
NDef(c,
NCall(+,
NRef(a),
NRef(b)))
NCall(print,
NRef(c))))
[],
{print,+,a:Int(1)}
NFile(
NDef(a,
NInt(1))
NDef(b,
NInt(2))
NDef(c,
NCall(+,
NRef(a),
NRef(b)))
NCall(print,
NRef(c))))
[],
{print,+,a:Int(1)}
NFile(
NDef(a,
NInt(1))
NDef(b,
NInt(2))
NDef(c,
NCall(+,
NRef(a),
NRef(b)))
NCall(print,
NRef(c))))
[Int(2)],
{print,+,a:Int(1)}
NFile(
NDef(a,
NInt(1))
NDef(b,
NInt(2))
NDef(c,
NCall(+,
NRef(a),
NRef(b)))
NCall(print,
NRef(c))))
[],
{print,+,a:Int(1),b:Int(2)}
NFile(
NDef(a,
NInt(1))
NDef(b,
NInt(2))
NDef(c,
NCall(+,
NRef(a),
NRef(b)))
NCall(print,
NRef(c))))
[],
{print,+,a:Int(1),b:Int(2)}
NFile(
NDef(a,
NInt(1))
NDef(b,
NInt(2))
NDef(c,
NCall(+,
NRef(a),
NRef(b)))
NCall(print,
NRef(c))))
[],
{}
[],
{print,+,a:Int(1),b:Int(2)}
NFile(
NDef(a,
NInt(1))
NDef(b,
NInt(2))
NDef(c,
NCall(+,
NRef(a),
NRef(b)))
NCall(print,
NRef(c))))
[],
{}
[Int(1)],
{print,+,a:Int(1),b:Int(2)}
NFile(
NDef(a,
NInt(1))
NDef(b,
NInt(2))
NDef(c,
NCall(+,
NRef(a),
NRef(b)))
NCall(print,
NRef(c))))
[Int(1)],
{}
[],
{print,+,a:Int(1),b:Int(2)}
NFile(
NDef(a,
NInt(1))
NDef(b,
NInt(2))
NDef(c,
NCall(+,
NRef(a),
NRef(b)))
NCall(print,
NRef(c))))
[Int(1)],
{}
[Int(2)],
{print,+,a:Int(1),b:Int(2)}
NFile(
NDef(a,
NInt(1))
NDef(b,
NInt(2))
NDef(c,
NCall(+,
NRef(a),
NRef(b)))
NCall(print,
NRef(c))))
[Int(2),Int(1)],
{}
[],
{print,+,a:Int(1),b:Int(2)}
NFile(
NDef(a,
NInt(1))
NDef(b,
NInt(2))
NDef(c,
NCall(+,
NRef(a),
NRef(b)))
NCall(print,
NRef(c))))
[+,Int(2),Int(1)],
{}
[],
{print,+,a:Int(1),b:Int(2)}
NFile(
NDef(a,
NInt(1))
NDef(b,
NInt(2))
NDef(c,
NCall(+,
NRef(a),
NRef(b)))
NCall(print,
NRef(c))))
[Int(3)],
{}
[],
{print,+,a:Int(1),b:Int(2)}
NFile(
NDef(a,
NInt(1))
NDef(b,
NInt(2))
NDef(c,
NCall(+,
NRef(a),
NRef(b)))
NCall(print,
NRef(c))))
[],
{}
[Int(3)],
{print,+,a:Int(1),b:Int(2)}
NFile(
NDef(a,
NInt(1))
NDef(b,
NInt(2))
NDef(c,
NCall(+,
NRef(a),
NRef(b)))
NCall(print,
NRef(c))))
[Int(3)],
{print,+,a:Int(1),b:Int(2)}
NFile(
NDef(a,
NInt(1))
NDef(b,
NInt(2))
NDef(c,
NCall(+,
NRef(a),
NRef(b)))
NCall(print,
NRef(c))))
[],
{print,+,a:Int(1),b:Int(2),c:Int(3)}
NFile(
NDef(a,
NInt(1))
NDef(b,
NInt(2))
NDef(c,
NCall(+,
NRef(a),
NRef(b)))
NCall(print,
NRef(c))))
[]
{}
[],
{print,+,a:Int(1),b:Int(2),c:Int(3)}
NFile(
NDef(a,
NInt(1))
NDef(b,
NInt(2))
NDef(c,
NCall(+,
NRef(a),
NRef(b)))
NCall(print,
NRef(c))))
[]
{}
[Int(3)],
{print,+,a:Int(1),b:Int(2),c:Int(3)}
NFile(
NDef(a,
NInt(1))
NDef(b,
NInt(2))
NDef(c,
NCall(+,
NRef(a),
NRef(b)))
NCall(print,
NRef(c))))
[Int(3)]
{}
[],
{print,+,a:Int(1),b:Int(2),c:Int(3)}
NFile(
NDef(a,
NInt(1))
NDef(b,
NInt(2))
NDef(c,
NCall(+,
NRef(a),
NRef(b)))
NCall(print,
NRef(c))))
[print,Int(3)]
{}
[],
{print,+,a:Int(1),b:Int(2),c:Int(3)}
NFile(
NDef(a,
NInt(1))
NDef(b,
NInt(2))
NDef(c,
NCall(+,
NRef(a),
NRef(b)))
NCall(print,
NRef(c))))
[Null]
{}
[],
{print,+,a:Int(1),b:Int(2),c:Int(3)}
“3” appears in the console...
NFile(
NDef(a,
NInt(1))
NDef(b,
NInt(2))
NDef(c,
NCall(+,
NRef(a),
NRef(b)))
NCall(print,
NRef(c))))
[]
{}
[Null],
{print,+,a:Int(1),b:Int(2),c:Int(3)}
NFile(
NDef(a,
NInt(1))
NDef(b,
NInt(2))
NDef(c,
NCall(+,
NRef(a),
NRef(b)))
NCall(print,
NRef(c))))
[Null],
{print,+,a:Int(1),b:Int(2),c:Int(3)}
def plus1(x) {
x + 1
}
print(plus1(9))
NFile(
NDef(plus1,
NFn([x],
NCall(+,
NRef(x),
NInt(1)))),
NCall(print,
NCall(plus1,
NInt(9)))
class AstFunction(nfn) implements FrameCallable {
def call(frame) {
nfn.args.reverse.each { p =>
frame.storelocal(p, frame.pop())
}
traverse(frame, nfn.body)
}
}
NFn(args,body) frame.push(new AstFunction(node))
NFile(
NDef(plus1,
NFn([x],
NCall(+,
NRef(x),
NInt(1)))),
NCall(print,
NCall(plus1,
NInt(9)))
[],
{print,+}
NFile(
NDef(plus1,
NFn([x],
NCall(+,
NRef(x),
NInt(1)))),
NCall(print,
NCall(plus1,
NInt(9)))
[new AstFunction(node)],
{print,+}
NFile(
NDef(plus1,
NFn([x],
NCall(+,
NRef(x),
NInt(1)))),
NCall(print,
NCall(plus1,
NInt(9)))
[],
{print,+,plus1:new AstFunction(node)}
if (condition) then
(true branch)
else
(false branch)
NIf(c, t, f)
traverse(frame, c)
if is_true(frame.pop())
traverse(frame, t)
else
traverse(frame, f)
Dynamic typing
Stack based machine
Bytecode generation
NFile(
NDef(a,
NInt(1))
NDef(b,
NInt(2))
NDef(c,
NCall(+,
NRef(a),
NRef(b)))
NCall(print,
NRef(c))))
PUSHINT 1
NFile(
NDef(a,
NInt(1))
NDef(b,
NInt(2))
NDef(c,
NCall(+,
NRef(a),
NRef(b)))
NCall(print,
NRef(c))))
PUSHINT 1
STORELOCAL a
NFile(
NDef(a,
NInt(1))
NDef(b,
NInt(2))
NDef(c,
NCall(+,
NRef(a),
NRef(b)))
NCall(print,
NRef(c))))
PUSHINT 1
STORELOCAL a
PUSHINT 2
NFile(
NDef(a,
NInt(1))
NDef(b,
NInt(2))
NDef(c,
NCall(+,
NRef(a),
NRef(b)))
NCall(print,
NRef(c))))
PUSHINT 1
STORELOCAL a
PUSHINT 2
STORELOCAL b
NFile(
NDef(a,
NInt(1))
NDef(b,
NInt(2))
NDef(c,
NCall(+,
NRef(a),
NRef(b)))
NCall(print,
NRef(c))))
PUSHINT 1
STORELOCAL a
PUSHINT 2
STORELOCAL b
PUSHLOCAL a
NFile(
NDef(a,
NInt(1))
NDef(b,
NInt(2))
NDef(c,
NCall(+,
NRef(a),
NRef(b)))
NCall(print,
NRef(c))))
PUSHINT 1
STORELOCAL a
PUSHINT 2
STORELOCAL b
PUSHLOCAL a
PUSHLOCAL b
NFile(
NDef(a,
NInt(1))
NDef(b,
NInt(2))
NDef(c,
NCall(+,
NRef(a),
NRef(b)))
NCall(print,
NRef(c))))
PUSHINT 1
STORELOCAL a
PUSHINT 2
STORELOCAL b
PUSHLOCAL a
PUSHLOCAL b
PUSHLOCAL +
CALL
NFile(
NDef(a,
NInt(1))
NDef(b,
NInt(2))
NDef(c,
NCall(+,
NRef(a),
NRef(b)))
NCall(print,
NRef(c))))
PUSHINT 1
STORELOCAL a
PUSHINT 2
STORELOCAL b
PUSHLOCAL a
PUSHLOCAL b
PUSHLOCAL +
CALL
STORELOCAL c
NFile(
NDef(a,
NInt(1))
NDef(b,
NInt(2))
NDef(c,
NCall(+,
NRef(a),
NRef(b)))
NCall(print,
NRef(c))))
PUSHINT 1
STORELOCAL a
PUSHINT 2
STORELOCAL b
PUSHLOCAL a
PUSHLOCAL b
PUSHLOCAL +
CALL
STORELOCAL c
PUSHLOCAL c
NFile(
NDef(a,
NInt(1))
NDef(b,
NInt(2))
NDef(c,
NCall(+,
NRef(a),
NRef(b)))
NCall(print,
NRef(c))))
PUSHINT 1
STORELOCAL a
PUSHINT 2
STORELOCAL b
PUSHLOCAL a
PUSHLOCAL b
PUSHLOCAL +
CALL
STORELOCAL c
PUSHLOCAL c
PUSHLOCAL print
CALL
What if I…
… create a native library with a bunch of
functions like:
integer_new()
integer_sum()
print(), etc.
What if I…
… generate assembly instead of
bytecodes
What if I…
… compile the assembly and link it
against my native library
BOOM!BOOM!A native language!
BOOM!BOOM!Now with free memory leaks!
Frontend
So far...
Optimizer
Bytecode
generator
Type checkerAST
Native
Backend
VM
Standard
library
Memory
management
AST
transformations
Frontend
Optimizer
Bytecode
generator
Type checkerAST
Native
Backend
VM
Standard
library
Memory
management
AST
transformations
antlr / lex / yacc / bison asm, ast, ...
LLVMRicher language
Type theory
Thank you!

More Related Content

What's hot

Design Patterns - Compiler Case Study - Hands-on Examples
Design Patterns - Compiler Case Study - Hands-on ExamplesDesign Patterns - Compiler Case Study - Hands-on Examples
Design Patterns - Compiler Case Study - Hands-on Examples
Ganesh Samarthyam
 
Futures e abstração - QCon São Paulo 2015
Futures e abstração - QCon São Paulo 2015Futures e abstração - QCon São Paulo 2015
Futures e abstração - QCon São Paulo 2015
Leonardo Borges
 
First-Class Patterns
First-Class PatternsFirst-Class Patterns
First-Class Patterns
John De Goes
 
ES6 - Next Generation Javascript
ES6 - Next Generation JavascriptES6 - Next Generation Javascript
ES6 - Next Generation Javascript
Ramesh Nair
 
Profiling and optimization
Profiling and optimizationProfiling and optimization
Profiling and optimization
g3_nittala
 
Scala - where objects and functions meet
Scala - where objects and functions meetScala - where objects and functions meet
Scala - where objects and functions meet
Mario Fusco
 
The Design of the Scalaz 8 Effect System
The Design of the Scalaz 8 Effect SystemThe Design of the Scalaz 8 Effect System
The Design of the Scalaz 8 Effect System
John De Goes
 
ES6 in Real Life
ES6 in Real LifeES6 in Real Life
ES6 in Real Life
Domenic Denicola
 
"Немного о функциональном программирование в JavaScript" Алексей Коваленко
"Немного о функциональном программирование в JavaScript" Алексей Коваленко"Немного о функциональном программирование в JavaScript" Алексей Коваленко
"Немного о функциональном программирование в JavaScript" Алексей Коваленко
Fwdays
 
Halogen: Past, Present, and Future
Halogen: Past, Present, and FutureHalogen: Past, Present, and Future
Halogen: Past, Present, and Future
John De Goes
 
Pragmatic Real-World Scala (short version)
Pragmatic Real-World Scala (short version)Pragmatic Real-World Scala (short version)
Pragmatic Real-World Scala (short version)
Jonas Bonér
 
Demystifying functional programming with Scala
Demystifying functional programming with ScalaDemystifying functional programming with Scala
Demystifying functional programming with Scala
Denis
 
Lambda выражения и Java 8
Lambda выражения и Java 8Lambda выражения и Java 8
Lambda выражения и Java 8
Alex Tumanoff
 
Fun with Lambdas: C++14 Style (part 2)
Fun with Lambdas: C++14 Style (part 2)Fun with Lambdas: C++14 Style (part 2)
Fun with Lambdas: C++14 Style (part 2)
Sumant Tambe
 
MTL Versus Free
MTL Versus FreeMTL Versus Free
MTL Versus Free
John De Goes
 
Explaining ES6: JavaScript History and What is to Come
Explaining ES6: JavaScript History and What is to ComeExplaining ES6: JavaScript History and What is to Come
Explaining ES6: JavaScript History and What is to Come
Cory Forsyth
 
Collection Core Concept
Collection Core ConceptCollection Core Concept
Collection Core Concept
Rays Technologies
 
Scalaz By Example (An IO Taster) -- PDXScala Meetup Jan 2014
Scalaz By Example (An IO Taster) -- PDXScala Meetup Jan 2014Scalaz By Example (An IO Taster) -- PDXScala Meetup Jan 2014
Scalaz By Example (An IO Taster) -- PDXScala Meetup Jan 2014
Susan Potter
 
Joy of scala
Joy of scalaJoy of scala
Joy of scala
Maxim Novak
 
Initial Java Core Concept
Initial Java Core ConceptInitial Java Core Concept
Initial Java Core Concept
Rays Technologies
 

What's hot (20)

Design Patterns - Compiler Case Study - Hands-on Examples
Design Patterns - Compiler Case Study - Hands-on ExamplesDesign Patterns - Compiler Case Study - Hands-on Examples
Design Patterns - Compiler Case Study - Hands-on Examples
 
Futures e abstração - QCon São Paulo 2015
Futures e abstração - QCon São Paulo 2015Futures e abstração - QCon São Paulo 2015
Futures e abstração - QCon São Paulo 2015
 
First-Class Patterns
First-Class PatternsFirst-Class Patterns
First-Class Patterns
 
ES6 - Next Generation Javascript
ES6 - Next Generation JavascriptES6 - Next Generation Javascript
ES6 - Next Generation Javascript
 
Profiling and optimization
Profiling and optimizationProfiling and optimization
Profiling and optimization
 
Scala - where objects and functions meet
Scala - where objects and functions meetScala - where objects and functions meet
Scala - where objects and functions meet
 
The Design of the Scalaz 8 Effect System
The Design of the Scalaz 8 Effect SystemThe Design of the Scalaz 8 Effect System
The Design of the Scalaz 8 Effect System
 
ES6 in Real Life
ES6 in Real LifeES6 in Real Life
ES6 in Real Life
 
"Немного о функциональном программирование в JavaScript" Алексей Коваленко
"Немного о функциональном программирование в JavaScript" Алексей Коваленко"Немного о функциональном программирование в JavaScript" Алексей Коваленко
"Немного о функциональном программирование в JavaScript" Алексей Коваленко
 
Halogen: Past, Present, and Future
Halogen: Past, Present, and FutureHalogen: Past, Present, and Future
Halogen: Past, Present, and Future
 
Pragmatic Real-World Scala (short version)
Pragmatic Real-World Scala (short version)Pragmatic Real-World Scala (short version)
Pragmatic Real-World Scala (short version)
 
Demystifying functional programming with Scala
Demystifying functional programming with ScalaDemystifying functional programming with Scala
Demystifying functional programming with Scala
 
Lambda выражения и Java 8
Lambda выражения и Java 8Lambda выражения и Java 8
Lambda выражения и Java 8
 
Fun with Lambdas: C++14 Style (part 2)
Fun with Lambdas: C++14 Style (part 2)Fun with Lambdas: C++14 Style (part 2)
Fun with Lambdas: C++14 Style (part 2)
 
MTL Versus Free
MTL Versus FreeMTL Versus Free
MTL Versus Free
 
Explaining ES6: JavaScript History and What is to Come
Explaining ES6: JavaScript History and What is to ComeExplaining ES6: JavaScript History and What is to Come
Explaining ES6: JavaScript History and What is to Come
 
Collection Core Concept
Collection Core ConceptCollection Core Concept
Collection Core Concept
 
Scalaz By Example (An IO Taster) -- PDXScala Meetup Jan 2014
Scalaz By Example (An IO Taster) -- PDXScala Meetup Jan 2014Scalaz By Example (An IO Taster) -- PDXScala Meetup Jan 2014
Scalaz By Example (An IO Taster) -- PDXScala Meetup Jan 2014
 
Joy of scala
Joy of scalaJoy of scala
Joy of scala
 
Initial Java Core Concept
Initial Java Core ConceptInitial Java Core Concept
Initial Java Core Concept
 

Similar to The best language in the world

Generic Functional Programming with Type Classes
Generic Functional Programming with Type ClassesGeneric Functional Programming with Type Classes
Generic Functional Programming with Type Classes
Tapio Rautonen
 
Building High-Performance Language Implementations With Low Effort
Building High-Performance Language Implementations With Low EffortBuilding High-Performance Language Implementations With Low Effort
Building High-Performance Language Implementations With Low Effort
Stefan Marr
 
Deep Learning and TensorFlow
Deep Learning and TensorFlowDeep Learning and TensorFlow
Deep Learning and TensorFlow
Oswald Campesato
 
Swug July 2010 - windows debugging by sainath
Swug July 2010 - windows debugging by sainathSwug July 2010 - windows debugging by sainath
Swug July 2010 - windows debugging by sainath
Dennis Chung
 
Deep learning study 3
Deep learning study 3Deep learning study 3
Deep learning study 3
San Kim
 
Full-Stack JavaScript with Node.js
Full-Stack JavaScript with Node.jsFull-Stack JavaScript with Node.js
Full-Stack JavaScript with Node.js
Michael Lehmann
 
Clojure+ClojureScript Webapps
Clojure+ClojureScript WebappsClojure+ClojureScript Webapps
Clojure+ClojureScript Webapps
Falko Riemenschneider
 
python beginner talk slide
python beginner talk slidepython beginner talk slide
python beginner talk slide
jonycse
 
Java 5 6 Generics, Concurrency, Garbage Collection, Tuning
Java 5 6 Generics, Concurrency, Garbage Collection, TuningJava 5 6 Generics, Concurrency, Garbage Collection, Tuning
Java 5 6 Generics, Concurrency, Garbage Collection, Tuning
Carol McDonald
 
Clojure Intro
Clojure IntroClojure Intro
Clojure Intro
thnetos
 
Getting started with Clojure
Getting started with ClojureGetting started with Clojure
Getting started with Clojure
John Stevenson
 
Леонид Шевцов «Clojure в деле»
Леонид Шевцов «Clojure в деле»Леонид Шевцов «Clojure в деле»
Леонид Шевцов «Clojure в деле»
DataArt
 
Pune Clojure Course Outline
Pune Clojure Course OutlinePune Clojure Course Outline
Pune Clojure Course Outline
Baishampayan Ghose
 
(map Clojure everyday-tasks)
(map Clojure everyday-tasks)(map Clojure everyday-tasks)
(map Clojure everyday-tasks)
Jacek Laskowski
 
Intro to Deep Learning, TensorFlow, and tensorflow.js
Intro to Deep Learning, TensorFlow, and tensorflow.jsIntro to Deep Learning, TensorFlow, and tensorflow.js
Intro to Deep Learning, TensorFlow, and tensorflow.js
Oswald Campesato
 
Java VS Python
Java VS PythonJava VS Python
Java VS Python
Simone Federici
 
A Sceptical Guide to Functional Programming
A Sceptical Guide to Functional ProgrammingA Sceptical Guide to Functional Programming
A Sceptical Guide to Functional Programming
Garth Gilmour
 
PHP 7 – What changed internally? (PHP Barcelona 2015)
PHP 7 – What changed internally? (PHP Barcelona 2015)PHP 7 – What changed internally? (PHP Barcelona 2015)
PHP 7 – What changed internally? (PHP Barcelona 2015)
Nikita Popov
 
Byterun, a Python bytecode interpreter - Allison Kaptur at NYCPython
Byterun, a Python bytecode interpreter - Allison Kaptur at NYCPythonByterun, a Python bytecode interpreter - Allison Kaptur at NYCPython
Byterun, a Python bytecode interpreter - Allison Kaptur at NYCPython
akaptur
 
C#
C#C#
C#
Joni
 

Similar to The best language in the world (20)

Generic Functional Programming with Type Classes
Generic Functional Programming with Type ClassesGeneric Functional Programming with Type Classes
Generic Functional Programming with Type Classes
 
Building High-Performance Language Implementations With Low Effort
Building High-Performance Language Implementations With Low EffortBuilding High-Performance Language Implementations With Low Effort
Building High-Performance Language Implementations With Low Effort
 
Deep Learning and TensorFlow
Deep Learning and TensorFlowDeep Learning and TensorFlow
Deep Learning and TensorFlow
 
Swug July 2010 - windows debugging by sainath
Swug July 2010 - windows debugging by sainathSwug July 2010 - windows debugging by sainath
Swug July 2010 - windows debugging by sainath
 
Deep learning study 3
Deep learning study 3Deep learning study 3
Deep learning study 3
 
Full-Stack JavaScript with Node.js
Full-Stack JavaScript with Node.jsFull-Stack JavaScript with Node.js
Full-Stack JavaScript with Node.js
 
Clojure+ClojureScript Webapps
Clojure+ClojureScript WebappsClojure+ClojureScript Webapps
Clojure+ClojureScript Webapps
 
python beginner talk slide
python beginner talk slidepython beginner talk slide
python beginner talk slide
 
Java 5 6 Generics, Concurrency, Garbage Collection, Tuning
Java 5 6 Generics, Concurrency, Garbage Collection, TuningJava 5 6 Generics, Concurrency, Garbage Collection, Tuning
Java 5 6 Generics, Concurrency, Garbage Collection, Tuning
 
Clojure Intro
Clojure IntroClojure Intro
Clojure Intro
 
Getting started with Clojure
Getting started with ClojureGetting started with Clojure
Getting started with Clojure
 
Леонид Шевцов «Clojure в деле»
Леонид Шевцов «Clojure в деле»Леонид Шевцов «Clojure в деле»
Леонид Шевцов «Clojure в деле»
 
Pune Clojure Course Outline
Pune Clojure Course OutlinePune Clojure Course Outline
Pune Clojure Course Outline
 
(map Clojure everyday-tasks)
(map Clojure everyday-tasks)(map Clojure everyday-tasks)
(map Clojure everyday-tasks)
 
Intro to Deep Learning, TensorFlow, and tensorflow.js
Intro to Deep Learning, TensorFlow, and tensorflow.jsIntro to Deep Learning, TensorFlow, and tensorflow.js
Intro to Deep Learning, TensorFlow, and tensorflow.js
 
Java VS Python
Java VS PythonJava VS Python
Java VS Python
 
A Sceptical Guide to Functional Programming
A Sceptical Guide to Functional ProgrammingA Sceptical Guide to Functional Programming
A Sceptical Guide to Functional Programming
 
PHP 7 – What changed internally? (PHP Barcelona 2015)
PHP 7 – What changed internally? (PHP Barcelona 2015)PHP 7 – What changed internally? (PHP Barcelona 2015)
PHP 7 – What changed internally? (PHP Barcelona 2015)
 
Byterun, a Python bytecode interpreter - Allison Kaptur at NYCPython
Byterun, a Python bytecode interpreter - Allison Kaptur at NYCPythonByterun, a Python bytecode interpreter - Allison Kaptur at NYCPython
Byterun, a Python bytecode interpreter - Allison Kaptur at NYCPython
 
C#
C#C#
C#
 

Recently uploaded

Unveiling the Advantages of Agile Software Development.pdf
Unveiling the Advantages of Agile Software Development.pdfUnveiling the Advantages of Agile Software Development.pdf
Unveiling the Advantages of Agile Software Development.pdf
brainerhub1
 
LORRAINE ANDREI_LEQUIGAN_HOW TO USE ZOOM
LORRAINE ANDREI_LEQUIGAN_HOW TO USE ZOOMLORRAINE ANDREI_LEQUIGAN_HOW TO USE ZOOM
LORRAINE ANDREI_LEQUIGAN_HOW TO USE ZOOM
lorraineandreiamcidl
 
What is Master Data Management by PiLog Group
What is Master Data Management by PiLog GroupWhat is Master Data Management by PiLog Group
What is Master Data Management by PiLog Group
aymanquadri279
 
Revolutionizing Visual Effects Mastering AI Face Swaps.pdf
Revolutionizing Visual Effects Mastering AI Face Swaps.pdfRevolutionizing Visual Effects Mastering AI Face Swaps.pdf
Revolutionizing Visual Effects Mastering AI Face Swaps.pdf
Undress Baby
 
GreenCode-A-VSCode-Plugin--Dario-Jurisic
GreenCode-A-VSCode-Plugin--Dario-JurisicGreenCode-A-VSCode-Plugin--Dario-Jurisic
GreenCode-A-VSCode-Plugin--Dario-Jurisic
Green Software Development
 
UI5con 2024 - Keynote: Latest News about UI5 and it’s Ecosystem
UI5con 2024 - Keynote: Latest News about UI5 and it’s EcosystemUI5con 2024 - Keynote: Latest News about UI5 and it’s Ecosystem
UI5con 2024 - Keynote: Latest News about UI5 and it’s Ecosystem
Peter Muessig
 
E-commerce Application Development Company.pdf
E-commerce Application Development Company.pdfE-commerce Application Development Company.pdf
E-commerce Application Development Company.pdf
Hornet Dynamics
 
Transform Your Communication with Cloud-Based IVR Solutions
Transform Your Communication with Cloud-Based IVR SolutionsTransform Your Communication with Cloud-Based IVR Solutions
Transform Your Communication with Cloud-Based IVR Solutions
TheSMSPoint
 
Hand Rolled Applicative User Validation Code Kata
Hand Rolled Applicative User ValidationCode KataHand Rolled Applicative User ValidationCode Kata
Hand Rolled Applicative User Validation Code Kata
Philip Schwarz
 
SWEBOK and Education at FUSE Okinawa 2024
SWEBOK and Education at FUSE Okinawa 2024SWEBOK and Education at FUSE Okinawa 2024
SWEBOK and Education at FUSE Okinawa 2024
Hironori Washizaki
 
Why Choose Odoo 17 Community & How it differs from Odoo 17 Enterprise Edition
Why Choose Odoo 17 Community & How it differs from Odoo 17 Enterprise EditionWhy Choose Odoo 17 Community & How it differs from Odoo 17 Enterprise Edition
Why Choose Odoo 17 Community & How it differs from Odoo 17 Enterprise Edition
Envertis Software Solutions
 
Energy consumption of Database Management - Florina Jonuzi
Energy consumption of Database Management - Florina JonuziEnergy consumption of Database Management - Florina Jonuzi
Energy consumption of Database Management - Florina Jonuzi
Green Software Development
 
Essentials of Automations: The Art of Triggers and Actions in FME
Essentials of Automations: The Art of Triggers and Actions in FMEEssentials of Automations: The Art of Triggers and Actions in FME
Essentials of Automations: The Art of Triggers and Actions in FME
Safe Software
 
Graspan: A Big Data System for Big Code Analysis
Graspan: A Big Data System for Big Code AnalysisGraspan: A Big Data System for Big Code Analysis
Graspan: A Big Data System for Big Code Analysis
Aftab Hussain
 
8 Best Automated Android App Testing Tool and Framework in 2024.pdf
8 Best Automated Android App Testing Tool and Framework in 2024.pdf8 Best Automated Android App Testing Tool and Framework in 2024.pdf
8 Best Automated Android App Testing Tool and Framework in 2024.pdf
kalichargn70th171
 
LORRAINE ANDREI_LEQUIGAN_HOW TO USE WHATSAPP.pptx
LORRAINE ANDREI_LEQUIGAN_HOW TO USE WHATSAPP.pptxLORRAINE ANDREI_LEQUIGAN_HOW TO USE WHATSAPP.pptx
LORRAINE ANDREI_LEQUIGAN_HOW TO USE WHATSAPP.pptx
lorraineandreiamcidl
 
2024 eCommerceDays Toulouse - Sylius 2.0.pdf
2024 eCommerceDays Toulouse - Sylius 2.0.pdf2024 eCommerceDays Toulouse - Sylius 2.0.pdf
2024 eCommerceDays Toulouse - Sylius 2.0.pdf
Łukasz Chruściel
 
Microservice Teams - How the cloud changes the way we work
Microservice Teams - How the cloud changes the way we workMicroservice Teams - How the cloud changes the way we work
Microservice Teams - How the cloud changes the way we work
Sven Peters
 
Oracle 23c New Features For DBAs and Developers.pptx
Oracle 23c New Features For DBAs and Developers.pptxOracle 23c New Features For DBAs and Developers.pptx
Oracle 23c New Features For DBAs and Developers.pptx
Remote DBA Services
 
What is Augmented Reality Image Tracking
What is Augmented Reality Image TrackingWhat is Augmented Reality Image Tracking
What is Augmented Reality Image Tracking
pavan998932
 

Recently uploaded (20)

Unveiling the Advantages of Agile Software Development.pdf
Unveiling the Advantages of Agile Software Development.pdfUnveiling the Advantages of Agile Software Development.pdf
Unveiling the Advantages of Agile Software Development.pdf
 
LORRAINE ANDREI_LEQUIGAN_HOW TO USE ZOOM
LORRAINE ANDREI_LEQUIGAN_HOW TO USE ZOOMLORRAINE ANDREI_LEQUIGAN_HOW TO USE ZOOM
LORRAINE ANDREI_LEQUIGAN_HOW TO USE ZOOM
 
What is Master Data Management by PiLog Group
What is Master Data Management by PiLog GroupWhat is Master Data Management by PiLog Group
What is Master Data Management by PiLog Group
 
Revolutionizing Visual Effects Mastering AI Face Swaps.pdf
Revolutionizing Visual Effects Mastering AI Face Swaps.pdfRevolutionizing Visual Effects Mastering AI Face Swaps.pdf
Revolutionizing Visual Effects Mastering AI Face Swaps.pdf
 
GreenCode-A-VSCode-Plugin--Dario-Jurisic
GreenCode-A-VSCode-Plugin--Dario-JurisicGreenCode-A-VSCode-Plugin--Dario-Jurisic
GreenCode-A-VSCode-Plugin--Dario-Jurisic
 
UI5con 2024 - Keynote: Latest News about UI5 and it’s Ecosystem
UI5con 2024 - Keynote: Latest News about UI5 and it’s EcosystemUI5con 2024 - Keynote: Latest News about UI5 and it’s Ecosystem
UI5con 2024 - Keynote: Latest News about UI5 and it’s Ecosystem
 
E-commerce Application Development Company.pdf
E-commerce Application Development Company.pdfE-commerce Application Development Company.pdf
E-commerce Application Development Company.pdf
 
Transform Your Communication with Cloud-Based IVR Solutions
Transform Your Communication with Cloud-Based IVR SolutionsTransform Your Communication with Cloud-Based IVR Solutions
Transform Your Communication with Cloud-Based IVR Solutions
 
Hand Rolled Applicative User Validation Code Kata
Hand Rolled Applicative User ValidationCode KataHand Rolled Applicative User ValidationCode Kata
Hand Rolled Applicative User Validation Code Kata
 
SWEBOK and Education at FUSE Okinawa 2024
SWEBOK and Education at FUSE Okinawa 2024SWEBOK and Education at FUSE Okinawa 2024
SWEBOK and Education at FUSE Okinawa 2024
 
Why Choose Odoo 17 Community & How it differs from Odoo 17 Enterprise Edition
Why Choose Odoo 17 Community & How it differs from Odoo 17 Enterprise EditionWhy Choose Odoo 17 Community & How it differs from Odoo 17 Enterprise Edition
Why Choose Odoo 17 Community & How it differs from Odoo 17 Enterprise Edition
 
Energy consumption of Database Management - Florina Jonuzi
Energy consumption of Database Management - Florina JonuziEnergy consumption of Database Management - Florina Jonuzi
Energy consumption of Database Management - Florina Jonuzi
 
Essentials of Automations: The Art of Triggers and Actions in FME
Essentials of Automations: The Art of Triggers and Actions in FMEEssentials of Automations: The Art of Triggers and Actions in FME
Essentials of Automations: The Art of Triggers and Actions in FME
 
Graspan: A Big Data System for Big Code Analysis
Graspan: A Big Data System for Big Code AnalysisGraspan: A Big Data System for Big Code Analysis
Graspan: A Big Data System for Big Code Analysis
 
8 Best Automated Android App Testing Tool and Framework in 2024.pdf
8 Best Automated Android App Testing Tool and Framework in 2024.pdf8 Best Automated Android App Testing Tool and Framework in 2024.pdf
8 Best Automated Android App Testing Tool and Framework in 2024.pdf
 
LORRAINE ANDREI_LEQUIGAN_HOW TO USE WHATSAPP.pptx
LORRAINE ANDREI_LEQUIGAN_HOW TO USE WHATSAPP.pptxLORRAINE ANDREI_LEQUIGAN_HOW TO USE WHATSAPP.pptx
LORRAINE ANDREI_LEQUIGAN_HOW TO USE WHATSAPP.pptx
 
2024 eCommerceDays Toulouse - Sylius 2.0.pdf
2024 eCommerceDays Toulouse - Sylius 2.0.pdf2024 eCommerceDays Toulouse - Sylius 2.0.pdf
2024 eCommerceDays Toulouse - Sylius 2.0.pdf
 
Microservice Teams - How the cloud changes the way we work
Microservice Teams - How the cloud changes the way we workMicroservice Teams - How the cloud changes the way we work
Microservice Teams - How the cloud changes the way we work
 
Oracle 23c New Features For DBAs and Developers.pptx
Oracle 23c New Features For DBAs and Developers.pptxOracle 23c New Features For DBAs and Developers.pptx
Oracle 23c New Features For DBAs and Developers.pptx
 
What is Augmented Reality Image Tracking
What is Augmented Reality Image TrackingWhat is Augmented Reality Image Tracking
What is Augmented Reality Image Tracking
 

The best language in the world