SlideShare a Scribd company logo
Purely functional
data structures
@tkaczmarzyk
blog.kaczmarzyk.net
Tomek “Kosior” Kaczmarzyk
Purely functional
data structures
@tkaczmarzyk
blog.kaczmarzyk.net
Tomek “Kosior” Kaczmarzyk
meh...
?
WAT!?
Achievement unlocked!
WTF Level 3
whoami
Just wandering around the world,
developing software
@tkaczmarzyk
blog.kaczmarzyk.net
Tomek “Kosior” Kaczmarzyk
Recently hired by Siili Solutions
Agenda
1. Examples of PF data structures
2. GIT internals
- lists
- queues
“Bad programmers worry about the code.
Good programmers worry about
data structures and their relationships.”
Linus Torvalds
Part 1:
PF data structures
- how do they work?
Java
public class DefensiveList<T> {
private List<T> values;
public DefensiveList(List<T> values) {
values = new ArrayList<>(values);
}
public DefensiveList<T> add(T elem) {
List<T> copy = new ArrayList<>(values);
copy.add(elem);
return new DefensiveList<T>(copy);
}
}
functional lists
[1, 2, 3].head() = 1
[1, 2, 3].tail() = [2, 3]
[1, 2, 3].cons(7) = [7, 1, 2, 3]
1
2
1
3
2
1
3
2
1
Nil
3 Nil
2
1
mylist =
3 Nil
2
1
mylist =
= mylist.tail()
3 Nil
2
1
7
mylist =
= mylist.tail()
= mylist.tail()
.cons(7)
functional queues
[1, 2, 3].head() = 1
[1, 2, 3].tail() = [2, 3]
[1, 2, 3].cons(7) = [7, 1, 2, 3]
[1, 2, 3].snoc(7) = [1, 2, 3, 7]
q = { [1, 2, 3], [6, 5, 4] }
front list
rear list
(reversed)
{ [], [] }
snoc(2)
{ [2], [] }
{ [], [] }
snoc(2)
{ [2], [] }
{ [], [] }
snoc(3)
{ [2], [3] }
snoc(2)
{ [2], [] }
{ [], [] }
snoc(3)
{ [2], [3] }
snoc(4)
{ [2], [4, 3] }
snoc(2)
{ [2], [] }
{ [], [] }
snoc(3)
{ [2], [3] }
snoc(4)
{ [2], [4, 3] }
snoc(5)
{ [2], [5, 4, 3] }
tail
{ [2], [5, 4, 3] }
{ [], [5, 4, 3] } ???
tail
{ [2], [5, 4, 3] }
{ [], [5, 4, 3] } ???
{ [3, 4, 5], [] }
Computional
cost
$$$
{ [1, 2], [] }
snoc
(3)
{ [1, 2], [3] }
snoc
snoc
(3)
(4)
{ [1, 2], [4, 3] }
snoc
snoc
(3)
(4)
tail
{ [2], [4, 3] }
snoc
snocsnoc
(3)
(4) (5)
tail
{ [2], [5, 4, 3] }
snoc
snoc tailsnoc
(3)
(4) (5)
tail
{ [3, 4, 5], [] }
snoc
snoc tailsnoc
(3)
tail
(4) (5)
tail
{ [4, 5], [] }
snoc
snoc tailsnoc
(3)
tail
(4) (5)
tail
O(1)
O(1) O(1) O(1) O(m)
{ [4, 5], [] }
O(1)
snoc
snoc tailsnoc
(3)
tail
(4) (5)
tail
O(1)
O(1) O(1) O(1) O(m)
{ [4, 5], [] }
O(1)
newList = mylist.snoc(3)
.snoc(4)
.tail()
.snoc(5)
.tail()
.tail();
newList = mylist.snoc(3)
.snoc(4)
.tail()
.snoc(5);
newList.tail();
newList.tail();
newList.tail();
newList.tail();
The problem
of multiple futures
Achievement unlocked!
Tribute
snoc
snoc tailsnoc
(3)
tail
(4) (5)
tail
snoc
snoc tailsnoc
(3)
tail
(4) (5)
tail
tail
tail
tail
tail tail
tail
snoc
(6)
lazy evaluation
& memoization
to the rescue!
class Suspension<T> {
private Supplier<T> suspendedFun;
private T calculatedValue;
public Suspension(Supplier<T> suspendedFun) {
this.suspendedFun = suspendedFun;
}
public T force() {
if (calculatedValue == null) {
calculatedValue = suspendedFun.get();
}
return calculatedValue;
}
}
Suspension<Integer> memoizedRandom
= new Suspension<>(() -> new Random().nextInt());
println(memoizedRandom.force()); // genereted here
println(memoizedRandom.force()); // cached value
println(memoizedRandom.force()); // on subsequent calls
interface Stream<T> {
Stream<T> tail();
Stream<T> append(Suspension<Stream<T>> other);
Stream<T> reverse();
boolean isEmpty();
}
interface Stream<T> {
Stream<T> tail();
Stream<T> append(Suspension<Stream<T>> other);
Stream<T> reverse();
boolean isEmpty();
}
class Empty<T> implements Stream<T> {
public Stream<T> tail() {
throw new UnsupportedOptionException(); }
public Stream<T> append(Suspension<Stream<T>> other){
return other.force();
}
public Stream<T> reverse() { return this; }
public boolean isEmpty() { return true; }
}
class NonEmpty<T> implements Stream<T> {
private T head;
private Suspension<Stream<T>> tail;
public NonEmpty(T head, Suspension<Stream<T>> tail) {
this.head = head;
this.tail = tail;
}
public Stream<T> tail() { return tail.force(); }
public Stream<T> append(Suspension<Stream<T>> other) {
return new NonEmpty<>(
this.head,
new Suspension<>(() -> this.tail().append(other)));
}
public Stream<T> reverse() {
// executes the full reverse...
}
public boolean isEmpty() { return false; }
}
class Queue<T> {
private Stream<T> front; private int lenF;
private Stream<T> rear; private int lenR;
private Queue(Stream front, int lenF, Stream rear, int lenR){
// ordinary assignments...
}
public static <T> Queue<T> queue(
Stream front, int lenF, Stream rear, int lenR){
if (lenR <= lenF) {
return new Queue<T>(front, lenF, rear, lenR);
} else
return new Queue<T>(
front.append(new Suspension<>(() -> rear.reverse())),
lenF + lenR,
new Empty<T>(),
0);
}
public Queue<T> tail() {
return queue(front.tail(), lenF - 1, rear, lenR);
}
}
Q { [1, 2, 3, 4], [7, 6, 5] }
Q { [2, 3, 4], [7, 6, 5] }
tail
Q {[3, 4].append(susp([7, 6, 5].rev())), []}
tail
tail
suspended reverse
is created here
Q {[4].append(susp([7, 6, 5].rev())), []}
tail
tail
suspended reverse
is created here
tail
Q {[5, 6, 7], []}
tail
tail
suspended reverse
is created here
tail tail
and forced here!
O(m)
Q {[5, 6, 7], []}
tail
tail
suspended reverse
is created here
tail tail
and forced here!
O(m)
at least
m x tail()
with O(1)
tail
tail tail tail
at least
m x tail()
with O(1)
tail
tail tail tail
at least
m x tail()
with O(1)
tail tail
tail tail
tail
tail tail tail
at least
m x tail()
with O(1)
tail tail
tail tail
it's the same (==)
Suspension!
tail
tail tail tail
at least
m x tail()
with O(1)
tail tail
tail tail
it's the same (==)
Suspension!
tail
tail
tail
tail tail tail
at least
m x tail()
with O(1)
tail tail
tail tail
it's the same (==)
Suspension!
tail
tail
different Suspensions
but each pays for m x O(1)
amortization
vs
worst-case
1 op
number
0
1
20
system
response time
[s]
2 3 ... 100 200... 199
worst-case DS
amortized DS
there is a solution
for that as well
but let's skip the details :)
Part 2:
Git internals
becoming legendary
working
directory
repository
working
directory
repository
file A
file B
working
directory
repository
file A
file B
A1 B1
working
directory
repository
file A
file B
A1 B1snapshot
1
working
directory
repository
file A
file B
A1 B1snapshot
1
(v2)
working
directory
repository
file A
file B
A1 B1snapshot
1
B2snapshot
2(v2)
working
directory
repository
file A
file B
A1 B1snapshot
1
B2snapshot
2
(v2)
(v2)
working
directory
repository
file A
file B
A1 B1snapshot
1
B2snapshot
2
dir1
file C
(v2)
(v2)
working
directory
repository
file A
file B
A1 B1snapshot
1
snapshot
2
B2
dir1
file C
snapshot
3
A2
C1
(v2)
(v2)
ec11312 386ad51 6740724
1796e2f
cca7cf6
ec11312 386ad51 6740724
1796e2f
cca7cf6
fileA.txt fileB.txt dir1
fileC.txt
100644 blob fa49b07797 fileA.txt
100644 blob 1f7a7a472a fileB.txt
040000 tree d8329fc1cc7 dir1
just a file!
repository
.git/objects
00
1c
ff
......
1674f7...
96e261...
ec1131...
commit
1
commit
2
commit
3
commit tree da3b911d93889f6f35ddf4
parent e78dca6f8f5e7dc825ded27094e0
author Kosior <t@kaczmarzyk.net>
committer Kosior <t@kaczmarzyk.net>
example commit :)
once again:
just a text file!
88bd
2a3ac
9a789
8ffda
88bd
2a3ac
9a789
8ffda master
hotfix
88bd
2a3ac
9a789
8ffda
hotfix
HEAD
master
HEAD
master
HEAD
master
HEAD
master
HEAD
master
Is Git a purely functional
data structure!?
88bd
2a3ac
9a789
8ffda
hotfix
master
a36c
HEAD
88bd
2a3ac
9a789
8ffda
hotfix
master
a36c HEAD
88bd
2a3ac
9a789
8ffda
hotfix
master
a36c HEAD7e89
88bd
2a3ac
9a789
8ffda
hotfix
master
a36c
HEAD
7e89
6f3a2
88bd
2a3ac
9a789
8ffda
hotfix
master
a36c
HEAD
7e89
6f3a2
88bd
2a3ac
9a789
8ffda
hotfix
master
a36c
HEAD
7e89
6f3a2still available
(until gc)
the power of simplicity
recap
* immutability is powerful
* PF data structures
can be damn effective!
* they can become a way
to create legendary software :-)
Purely functional
data structures
@tkaczmarzyk
blog.kaczmarzyk.net
thanks!
Tomek “Kosior” Kaczmarzyk
Acknowledgements:
“Purely functional data structures” by Chris Okasaki
http://git-scm.com/book
Photo credits:
https://www.flickr.com/photos/jdhancock/9544541664/
https://www.flickr.com/photos/janimut/14609601810/
https://www.flickr.com/photos/macwagen/2819684/
https://www.flickr.com/photos/matt_gibson/2580896289/
https://www.flickr.com/photos/hktang/4243300265/
https://www.flickr.com/photos/funfilledgeorgie/10922459733/
https://www.flickr.com/photos/celinesphotographer/
4044569502/
https://www.flickr.com/photos/edsonhong1/5685375541/
https://www.flickr.com/photos/ch-weidinger/17341905336/
https://www.flickr.com/photos/toomuchdew/9284836919/

More Related Content

What's hot

Unit8
Unit8Unit8
Unit8
md751
 
Prototypes
PrototypesPrototypes
Prototypes
alexisabril
 
Secuencias Recursivas, Sucesiones Recursivas & Progresiones con Geogebra
Secuencias Recursivas, Sucesiones Recursivas & Progresiones con GeogebraSecuencias Recursivas, Sucesiones Recursivas & Progresiones con Geogebra
Secuencias Recursivas, Sucesiones Recursivas & Progresiones con Geogebra
Jose Perez
 
The elements of a functional mindset
The elements of a functional mindsetThe elements of a functional mindset
The elements of a functional mindset
Eric Normand
 
Ruby's Arrays and Hashes with examples
Ruby's Arrays and Hashes with examplesRuby's Arrays and Hashes with examples
Ruby's Arrays and Hashes with examples
Niranjan Sarade
 
The Ring programming language version 1.5.2 book - Part 24 of 181
The Ring programming language version 1.5.2 book - Part 24 of 181The Ring programming language version 1.5.2 book - Part 24 of 181
The Ring programming language version 1.5.2 book - Part 24 of 181
Mahmoud Samir Fayed
 
Building social network with Neo4j and Python
Building social network with Neo4j and PythonBuilding social network with Neo4j and Python
Building social network with Neo4j and Python
Andrii Soldatenko
 
The Chain Rule, Part 1
The Chain Rule, Part 1The Chain Rule, Part 1
The Chain Rule, Part 1
Pablo Antuna
 
DAW: Duplicate-AWare Federated Query Processing over the Web of Data
DAW: Duplicate-AWare Federated Query Processing over the Web of DataDAW: Duplicate-AWare Federated Query Processing over the Web of Data
DAW: Duplicate-AWare Federated Query Processing over the Web of Data
Muhammad Saleem
 
Implementing IN operator in Scala
Implementing IN operator in ScalaImplementing IN operator in Scala
Implementing IN operator in Scala
Boston Area Scala Enthusiasts
 
Ruby Language: Array, Hash and Iterators
Ruby Language: Array, Hash and IteratorsRuby Language: Array, Hash and Iterators
Ruby Language: Array, Hash and Iterators
Sarah Allen
 
Queue in swift
Queue in swiftQueue in swift
Queue in swift
joonjhokil
 
Python - Lecture 4
Python - Lecture 4Python - Lecture 4
Python - Lecture 4
Ravi Kiran Khareedi
 
Tree Top
Tree TopTree Top
Tree Top
eventRT
 
Git objects v2
Git objects v2Git objects v2
Git objects v2
Chen Guangyu
 
Intro to OTP in Elixir
Intro to OTP in ElixirIntro to OTP in Elixir
Intro to OTP in Elixir
Jesse Anderson
 
heapsort_bydinesh
heapsort_bydineshheapsort_bydinesh
heapsort_bydinesh
Dinesh Kumar
 
R intro 20140716-advance
R intro 20140716-advanceR intro 20140716-advance
R intro 20140716-advance
Kevin Chun-Hsien Hsu
 
The easiest consistent hashing
The easiest consistent hashingThe easiest consistent hashing
The easiest consistent hashing
DaeMyung Kang
 
The Weather of the Century
The Weather of the CenturyThe Weather of the Century
The Weather of the Century
MongoDB
 

What's hot (20)

Unit8
Unit8Unit8
Unit8
 
Prototypes
PrototypesPrototypes
Prototypes
 
Secuencias Recursivas, Sucesiones Recursivas & Progresiones con Geogebra
Secuencias Recursivas, Sucesiones Recursivas & Progresiones con GeogebraSecuencias Recursivas, Sucesiones Recursivas & Progresiones con Geogebra
Secuencias Recursivas, Sucesiones Recursivas & Progresiones con Geogebra
 
The elements of a functional mindset
The elements of a functional mindsetThe elements of a functional mindset
The elements of a functional mindset
 
Ruby's Arrays and Hashes with examples
Ruby's Arrays and Hashes with examplesRuby's Arrays and Hashes with examples
Ruby's Arrays and Hashes with examples
 
The Ring programming language version 1.5.2 book - Part 24 of 181
The Ring programming language version 1.5.2 book - Part 24 of 181The Ring programming language version 1.5.2 book - Part 24 of 181
The Ring programming language version 1.5.2 book - Part 24 of 181
 
Building social network with Neo4j and Python
Building social network with Neo4j and PythonBuilding social network with Neo4j and Python
Building social network with Neo4j and Python
 
The Chain Rule, Part 1
The Chain Rule, Part 1The Chain Rule, Part 1
The Chain Rule, Part 1
 
DAW: Duplicate-AWare Federated Query Processing over the Web of Data
DAW: Duplicate-AWare Federated Query Processing over the Web of DataDAW: Duplicate-AWare Federated Query Processing over the Web of Data
DAW: Duplicate-AWare Federated Query Processing over the Web of Data
 
Implementing IN operator in Scala
Implementing IN operator in ScalaImplementing IN operator in Scala
Implementing IN operator in Scala
 
Ruby Language: Array, Hash and Iterators
Ruby Language: Array, Hash and IteratorsRuby Language: Array, Hash and Iterators
Ruby Language: Array, Hash and Iterators
 
Queue in swift
Queue in swiftQueue in swift
Queue in swift
 
Python - Lecture 4
Python - Lecture 4Python - Lecture 4
Python - Lecture 4
 
Tree Top
Tree TopTree Top
Tree Top
 
Git objects v2
Git objects v2Git objects v2
Git objects v2
 
Intro to OTP in Elixir
Intro to OTP in ElixirIntro to OTP in Elixir
Intro to OTP in Elixir
 
heapsort_bydinesh
heapsort_bydineshheapsort_bydinesh
heapsort_bydinesh
 
R intro 20140716-advance
R intro 20140716-advanceR intro 20140716-advance
R intro 20140716-advance
 
The easiest consistent hashing
The easiest consistent hashingThe easiest consistent hashing
The easiest consistent hashing
 
The Weather of the Century
The Weather of the CenturyThe Weather of the Century
The Weather of the Century
 

Similar to Purely functional data structures

Python 101 language features and functional programming
Python 101 language features and functional programmingPython 101 language features and functional programming
Python 101 language features and functional programming
Lukasz Dynowski
 
Declare Your Language: Transformation by Strategic Term Rewriting
Declare Your Language: Transformation by Strategic Term RewritingDeclare Your Language: Transformation by Strategic Term Rewriting
Declare Your Language: Transformation by Strategic Term Rewriting
Eelco Visser
 
Spark_Documentation_Template1
Spark_Documentation_Template1Spark_Documentation_Template1
Spark_Documentation_Template1
Nagavarunkumar Kolla
 
Compiler Construction | Lecture 5 | Transformation by Term Rewriting
Compiler Construction | Lecture 5 | Transformation by Term RewritingCompiler Construction | Lecture 5 | Transformation by Term Rewriting
Compiler Construction | Lecture 5 | Transformation by Term Rewriting
Eelco Visser
 
Day 4b iteration and functions for-loops.pptx
Day 4b   iteration and functions  for-loops.pptxDay 4b   iteration and functions  for-loops.pptx
Day 4b iteration and functions for-loops.pptx
Adrien Melquiond
 
Useful javascript
Useful javascriptUseful javascript
Useful javascript
Lei Kang
 
Clojure for Java developers - Stockholm
Clojure for Java developers - StockholmClojure for Java developers - Stockholm
Clojure for Java developers - Stockholm
Jan Kronquist
 
L13 string handling(string class)
L13 string handling(string class)L13 string handling(string class)
L13 string handling(string class)
teach4uin
 
Intoduction to numpy
Intoduction to numpyIntoduction to numpy
Intoduction to numpy
Faraz Ahmed
 
Intro to Machine Learning with TF- workshop
Intro to Machine Learning with TF- workshopIntro to Machine Learning with TF- workshop
Intro to Machine Learning with TF- workshop
Prottay Karim
 
Recentrer l'intelligence artificielle sur les connaissances
Recentrer l'intelligence artificielle sur les connaissancesRecentrer l'intelligence artificielle sur les connaissances
Recentrer l'intelligence artificielle sur les connaissances
Mathieu d'Aquin
 
WOTC_Import
WOTC_ImportWOTC_Import
WOTC_Import
Luther Quinn
 
Clojure made simple - Lightning talk
Clojure made simple - Lightning talkClojure made simple - Lightning talk
Clojure made simple - Lightning talk
John Stevenson
 
Data Types
Data TypesData Types
Data Types
Masters Academy
 
Data types
Data typesData types
Data types
Masters Academy
 
ScalaBlitz
ScalaBlitzScalaBlitz
CS4200 2019 | Lecture 5 | Transformation by Term Rewriting
CS4200 2019 | Lecture 5 | Transformation by Term RewritingCS4200 2019 | Lecture 5 | Transformation by Term Rewriting
CS4200 2019 | Lecture 5 | Transformation by Term Rewriting
Eelco Visser
 
TDD with Elm
TDD with ElmTDD with Elm
TDD with Elm
Nicolas Umiastowski
 
Into Clojure
Into ClojureInto Clojure
Into Clojure
Alf Kristian Støyle
 
Clojure made really really simple
Clojure made really really simpleClojure made really really simple
Clojure made really really simple
John Stevenson
 

Similar to Purely functional data structures (20)

Python 101 language features and functional programming
Python 101 language features and functional programmingPython 101 language features and functional programming
Python 101 language features and functional programming
 
Declare Your Language: Transformation by Strategic Term Rewriting
Declare Your Language: Transformation by Strategic Term RewritingDeclare Your Language: Transformation by Strategic Term Rewriting
Declare Your Language: Transformation by Strategic Term Rewriting
 
Spark_Documentation_Template1
Spark_Documentation_Template1Spark_Documentation_Template1
Spark_Documentation_Template1
 
Compiler Construction | Lecture 5 | Transformation by Term Rewriting
Compiler Construction | Lecture 5 | Transformation by Term RewritingCompiler Construction | Lecture 5 | Transformation by Term Rewriting
Compiler Construction | Lecture 5 | Transformation by Term Rewriting
 
Day 4b iteration and functions for-loops.pptx
Day 4b   iteration and functions  for-loops.pptxDay 4b   iteration and functions  for-loops.pptx
Day 4b iteration and functions for-loops.pptx
 
Useful javascript
Useful javascriptUseful javascript
Useful javascript
 
Clojure for Java developers - Stockholm
Clojure for Java developers - StockholmClojure for Java developers - Stockholm
Clojure for Java developers - Stockholm
 
L13 string handling(string class)
L13 string handling(string class)L13 string handling(string class)
L13 string handling(string class)
 
Intoduction to numpy
Intoduction to numpyIntoduction to numpy
Intoduction to numpy
 
Intro to Machine Learning with TF- workshop
Intro to Machine Learning with TF- workshopIntro to Machine Learning with TF- workshop
Intro to Machine Learning with TF- workshop
 
Recentrer l'intelligence artificielle sur les connaissances
Recentrer l'intelligence artificielle sur les connaissancesRecentrer l'intelligence artificielle sur les connaissances
Recentrer l'intelligence artificielle sur les connaissances
 
WOTC_Import
WOTC_ImportWOTC_Import
WOTC_Import
 
Clojure made simple - Lightning talk
Clojure made simple - Lightning talkClojure made simple - Lightning talk
Clojure made simple - Lightning talk
 
Data Types
Data TypesData Types
Data Types
 
Data types
Data typesData types
Data types
 
ScalaBlitz
ScalaBlitzScalaBlitz
ScalaBlitz
 
CS4200 2019 | Lecture 5 | Transformation by Term Rewriting
CS4200 2019 | Lecture 5 | Transformation by Term RewritingCS4200 2019 | Lecture 5 | Transformation by Term Rewriting
CS4200 2019 | Lecture 5 | Transformation by Term Rewriting
 
TDD with Elm
TDD with ElmTDD with Elm
TDD with Elm
 
Into Clojure
Into ClojureInto Clojure
Into Clojure
 
Clojure made really really simple
Clojure made really really simpleClojure made really really simple
Clojure made really really simple
 

Recently uploaded

Automated software refactoring with OpenRewrite and Generative AI.pptx.pdf
Automated software refactoring with OpenRewrite and Generative AI.pptx.pdfAutomated software refactoring with OpenRewrite and Generative AI.pptx.pdf
Automated software refactoring with OpenRewrite and Generative AI.pptx.pdf
timtebeek1
 
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
 
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
 
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
 
Measures in SQL (SIGMOD 2024, Santiago, Chile)
Measures in SQL (SIGMOD 2024, Santiago, Chile)Measures in SQL (SIGMOD 2024, Santiago, Chile)
Measures in SQL (SIGMOD 2024, Santiago, Chile)
Julian Hyde
 
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
 
A Study of Variable-Role-based Feature Enrichment in Neural Models of Code
A Study of Variable-Role-based Feature Enrichment in Neural Models of CodeA Study of Variable-Role-based Feature Enrichment in Neural Models of Code
A Study of Variable-Role-based Feature Enrichment in Neural Models of Code
Aftab Hussain
 
Using Query Store in Azure PostgreSQL to Understand Query Performance
Using Query Store in Azure PostgreSQL to Understand Query PerformanceUsing Query Store in Azure PostgreSQL to Understand Query Performance
Using Query Store in Azure PostgreSQL to Understand Query Performance
Grant Fritchey
 
What is Augmented Reality Image Tracking
What is Augmented Reality Image TrackingWhat is Augmented Reality Image Tracking
What is Augmented Reality Image Tracking
pavan998932
 
Atelier - Innover avec l’IA Générative et les graphes de connaissances
Atelier - Innover avec l’IA Générative et les graphes de connaissancesAtelier - Innover avec l’IA Générative et les graphes de connaissances
Atelier - Innover avec l’IA Générative et les graphes de connaissances
Neo4j
 
OpenMetadata Community Meeting - 5th June 2024
OpenMetadata Community Meeting - 5th June 2024OpenMetadata Community Meeting - 5th June 2024
OpenMetadata Community Meeting - 5th June 2024
OpenMetadata
 
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
 
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
 
Need for Speed: Removing speed bumps from your Symfony projects ⚡️
Need for Speed: Removing speed bumps from your Symfony projects ⚡️Need for Speed: Removing speed bumps from your Symfony projects ⚡️
Need for Speed: Removing speed bumps from your Symfony projects ⚡️
Łukasz Chruściel
 
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
 
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
 
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
 
原版定制美国纽约州立大学奥尔巴尼分校毕业证学位证书原版一模一样
原版定制美国纽约州立大学奥尔巴尼分校毕业证学位证书原版一模一样原版定制美国纽约州立大学奥尔巴尼分校毕业证学位证书原版一模一样
原版定制美国纽约州立大学奥尔巴尼分校毕业证学位证书原版一模一样
mz5nrf0n
 
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
 
Fundamentals of Programming and Language Processors
Fundamentals of Programming and Language ProcessorsFundamentals of Programming and Language Processors
Fundamentals of Programming and Language Processors
Rakesh Kumar R
 

Recently uploaded (20)

Automated software refactoring with OpenRewrite and Generative AI.pptx.pdf
Automated software refactoring with OpenRewrite and Generative AI.pptx.pdfAutomated software refactoring with OpenRewrite and Generative AI.pptx.pdf
Automated software refactoring with OpenRewrite and Generative AI.pptx.pdf
 
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
 
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
 
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
 
Measures in SQL (SIGMOD 2024, Santiago, Chile)
Measures in SQL (SIGMOD 2024, Santiago, Chile)Measures in SQL (SIGMOD 2024, Santiago, Chile)
Measures in SQL (SIGMOD 2024, Santiago, Chile)
 
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
 
A Study of Variable-Role-based Feature Enrichment in Neural Models of Code
A Study of Variable-Role-based Feature Enrichment in Neural Models of CodeA Study of Variable-Role-based Feature Enrichment in Neural Models of Code
A Study of Variable-Role-based Feature Enrichment in Neural Models of Code
 
Using Query Store in Azure PostgreSQL to Understand Query Performance
Using Query Store in Azure PostgreSQL to Understand Query PerformanceUsing Query Store in Azure PostgreSQL to Understand Query Performance
Using Query Store in Azure PostgreSQL to Understand Query Performance
 
What is Augmented Reality Image Tracking
What is Augmented Reality Image TrackingWhat is Augmented Reality Image Tracking
What is Augmented Reality Image Tracking
 
Atelier - Innover avec l’IA Générative et les graphes de connaissances
Atelier - Innover avec l’IA Générative et les graphes de connaissancesAtelier - Innover avec l’IA Générative et les graphes de connaissances
Atelier - Innover avec l’IA Générative et les graphes de connaissances
 
OpenMetadata Community Meeting - 5th June 2024
OpenMetadata Community Meeting - 5th June 2024OpenMetadata Community Meeting - 5th June 2024
OpenMetadata Community Meeting - 5th June 2024
 
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
 
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
 
Need for Speed: Removing speed bumps from your Symfony projects ⚡️
Need for Speed: Removing speed bumps from your Symfony projects ⚡️Need for Speed: Removing speed bumps from your Symfony projects ⚡️
Need for Speed: Removing speed bumps from your Symfony projects ⚡️
 
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
 
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
 
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
 
原版定制美国纽约州立大学奥尔巴尼分校毕业证学位证书原版一模一样
原版定制美国纽约州立大学奥尔巴尼分校毕业证学位证书原版一模一样原版定制美国纽约州立大学奥尔巴尼分校毕业证学位证书原版一模一样
原版定制美国纽约州立大学奥尔巴尼分校毕业证学位证书原版一模一样
 
GreenCode-A-VSCode-Plugin--Dario-Jurisic
GreenCode-A-VSCode-Plugin--Dario-JurisicGreenCode-A-VSCode-Plugin--Dario-Jurisic
GreenCode-A-VSCode-Plugin--Dario-Jurisic
 
Fundamentals of Programming and Language Processors
Fundamentals of Programming and Language ProcessorsFundamentals of Programming and Language Processors
Fundamentals of Programming and Language Processors
 

Purely functional data structures