think in erlang! - codesync.global€¦ · © 2020 cisco and/or its affiliates. all rights...
TRANSCRIPT
![Page 1: Think in Erlang! - codesync.global€¦ · © 2020 Cisco and/or its affiliates. All rights reserved. Cisco Public #CodeBEAMSF Which programming language do you work with? Erlang Elixir](https://reader034.vdocuments.us/reader034/viewer/2022050523/5fa67ebbd645cf3fe37fc528/html5/thumbnails/1.jpg)
Viktória FördősErlanger @ Cisco NSO Core5 March 2020, Code BEAM SF
Think in Erlang!
![Page 2: Think in Erlang! - codesync.global€¦ · © 2020 Cisco and/or its affiliates. All rights reserved. Cisco Public #CodeBEAMSF Which programming language do you work with? Erlang Elixir](https://reader034.vdocuments.us/reader034/viewer/2022050523/5fa67ebbd645cf3fe37fc528/html5/thumbnails/2.jpg)
© 2020 Cisco and/or its affiliates. All rights reserved. Cisco Public #CodeBEAMSF
Which programming language was the first you learnt?
Java
Pascal
C
Basic
![Page 3: Think in Erlang! - codesync.global€¦ · © 2020 Cisco and/or its affiliates. All rights reserved. Cisco Public #CodeBEAMSF Which programming language do you work with? Erlang Elixir](https://reader034.vdocuments.us/reader034/viewer/2022050523/5fa67ebbd645cf3fe37fc528/html5/thumbnails/3.jpg)
© 2020 Cisco and/or its affiliates. All rights reserved. Cisco Public #CodeBEAMSF
Which programming language was the first you used professionally?
Python
C/C++
PHP
JavaCobol
![Page 4: Think in Erlang! - codesync.global€¦ · © 2020 Cisco and/or its affiliates. All rights reserved. Cisco Public #CodeBEAMSF Which programming language do you work with? Erlang Elixir](https://reader034.vdocuments.us/reader034/viewer/2022050523/5fa67ebbd645cf3fe37fc528/html5/thumbnails/4.jpg)
© 2020 Cisco and/or its affiliates. All rights reserved. Cisco Public #CodeBEAMSF
Which programming language do you work with?
Erlang
Elixir
Other
![Page 5: Think in Erlang! - codesync.global€¦ · © 2020 Cisco and/or its affiliates. All rights reserved. Cisco Public #CodeBEAMSF Which programming language do you work with? Erlang Elixir](https://reader034.vdocuments.us/reader034/viewer/2022050523/5fa67ebbd645cf3fe37fc528/html5/thumbnails/5.jpg)
© 2020 Cisco and/or its affiliates. All rights reserved. Cisco Public #CodeBEAMSF
Imperative paradigm
![Page 6: Think in Erlang! - codesync.global€¦ · © 2020 Cisco and/or its affiliates. All rights reserved. Cisco Public #CodeBEAMSF Which programming language do you work with? Erlang Elixir](https://reader034.vdocuments.us/reader034/viewer/2022050523/5fa67ebbd645cf3fe37fc528/html5/thumbnails/6.jpg)
© 2020 Cisco and/or its affiliates. All rights reserved. Cisco Public #CodeBEAMSF© 2020 Cisco and/or its affiliates. All rights reserved. Cisco Public
Statements, describing how to execute the program.
Goal is achieved through statechanges.
Focus is on the control flow.
Imperative
![Page 7: Think in Erlang! - codesync.global€¦ · © 2020 Cisco and/or its affiliates. All rights reserved. Cisco Public #CodeBEAMSF Which programming language do you work with? Erlang Elixir](https://reader034.vdocuments.us/reader034/viewer/2022050523/5fa67ebbd645cf3fe37fc528/html5/thumbnails/7.jpg)
© 2020 Cisco and/or its affiliates. All rights reserved. Cisco Public #CodeBEAMSF
Is Erlang an imperative programming language?
![Page 8: Think in Erlang! - codesync.global€¦ · © 2020 Cisco and/or its affiliates. All rights reserved. Cisco Public #CodeBEAMSF Which programming language do you work with? Erlang Elixir](https://reader034.vdocuments.us/reader034/viewer/2022050523/5fa67ebbd645cf3fe37fc528/html5/thumbnails/8.jpg)
© 2020 Cisco and/or its affiliates. All rights reserved. Cisco Public #CodeBEAMSF
Declarative paradigm
![Page 9: Think in Erlang! - codesync.global€¦ · © 2020 Cisco and/or its affiliates. All rights reserved. Cisco Public #CodeBEAMSF Which programming language do you work with? Erlang Elixir](https://reader034.vdocuments.us/reader034/viewer/2022050523/5fa67ebbd645cf3fe37fc528/html5/thumbnails/9.jpg)
© 2020 Cisco and/or its affiliates. All rights reserved. Cisco Public #CodeBEAMSF© 2020 Cisco and/or its affiliates. All rights reserved. Cisco Public
What we learn first• High level
• Quick prototyping & testing
• No mutable objects
![Page 10: Think in Erlang! - codesync.global€¦ · © 2020 Cisco and/or its affiliates. All rights reserved. Cisco Public #CodeBEAMSF Which programming language do you work with? Erlang Elixir](https://reader034.vdocuments.us/reader034/viewer/2022050523/5fa67ebbd645cf3fe37fc528/html5/thumbnails/10.jpg)
© 2020 Cisco and/or its affiliates. All rights reserved. Cisco Public #CodeBEAMSF© 2020 Cisco and/or its affiliates. All rights reserved. Cisco Public
Next, we learn• Lambda calculus
• Function application• Function abstraction• Function composition• Higher order functions• Fix point theorem
![Page 11: Think in Erlang! - codesync.global€¦ · © 2020 Cisco and/or its affiliates. All rights reserved. Cisco Public #CodeBEAMSF Which programming language do you work with? Erlang Elixir](https://reader034.vdocuments.us/reader034/viewer/2022050523/5fa67ebbd645cf3fe37fc528/html5/thumbnails/11.jpg)
© 2020 Cisco and/or its affiliates. All rights reserved. Cisco Public #CodeBEAMSF
DataData Data
DataData
Data
DataDataData
Data
DataData
Data
Data DataData
Data DataData Data
DataDataData
Data
Data
![Page 12: Think in Erlang! - codesync.global€¦ · © 2020 Cisco and/or its affiliates. All rights reserved. Cisco Public #CodeBEAMSF Which programming language do you work with? Erlang Elixir](https://reader034.vdocuments.us/reader034/viewer/2022050523/5fa67ebbd645cf3fe37fc528/html5/thumbnails/12.jpg)
© 2020 Cisco and/or its affiliates. All rights reserved. Cisco Public #CodeBEAMSF
Function f: X -> Y
Input x
Output y = f(x)
IO model
![Page 13: Think in Erlang! - codesync.global€¦ · © 2020 Cisco and/or its affiliates. All rights reserved. Cisco Public #CodeBEAMSF Which programming language do you work with? Erlang Elixir](https://reader034.vdocuments.us/reader034/viewer/2022050523/5fa67ebbd645cf3fe37fc528/html5/thumbnails/13.jpg)
© 2020 Cisco and/or its affiliates. All rights reserved. Cisco Public #CodeBEAMSF© 2020 Cisco and/or its affiliates. All rights reserved. Cisco Public
i(A, h(f(A), g(A)))
Data Transformation Function A
CB
D
E
B = f(A),
C = g(A),D = h(B, C),E = i(A, D)
![Page 14: Think in Erlang! - codesync.global€¦ · © 2020 Cisco and/or its affiliates. All rights reserved. Cisco Public #CodeBEAMSF Which programming language do you work with? Erlang Elixir](https://reader034.vdocuments.us/reader034/viewer/2022050523/5fa67ebbd645cf3fe37fc528/html5/thumbnails/14.jpg)
© 2020 Cisco and/or its affiliates. All rights reserved. Cisco Public #CodeBEAMSF
Erlang
![Page 15: Think in Erlang! - codesync.global€¦ · © 2020 Cisco and/or its affiliates. All rights reserved. Cisco Public #CodeBEAMSF Which programming language do you work with? Erlang Elixir](https://reader034.vdocuments.us/reader034/viewer/2022050523/5fa67ebbd645cf3fe37fc528/html5/thumbnails/15.jpg)
© 2020 Cisco and/or its affiliates. All rights reserved. Cisco Public #CodeBEAMSF© 2020 Cisco and/or its affiliates. All rights reserved. Cisco Public
Based on data dependencies
Concurrency
![Page 16: Think in Erlang! - codesync.global€¦ · © 2020 Cisco and/or its affiliates. All rights reserved. Cisco Public #CodeBEAMSF Which programming language do you work with? Erlang Elixir](https://reader034.vdocuments.us/reader034/viewer/2022050523/5fa67ebbd645cf3fe37fc528/html5/thumbnails/16.jpg)
© 2020 Cisco and/or its affiliates. All rights reserved. Cisco Public #CodeBEAMSF© 2020 Cisco and/or its affiliates. All rights reserved. Cisco Public
Evaluates a function.
Has its own world.
Uses signals to communicate with the outside world.
Process
![Page 17: Think in Erlang! - codesync.global€¦ · © 2020 Cisco and/or its affiliates. All rights reserved. Cisco Public #CodeBEAMSF Which programming language do you work with? Erlang Elixir](https://reader034.vdocuments.us/reader034/viewer/2022050523/5fa67ebbd645cf3fe37fc528/html5/thumbnails/17.jpg)
© 2020 Cisco and/or its affiliates. All rights reserved. Cisco Public #CodeBEAMSF© 2020 Cisco and/or its affiliates. All rights reserved. Cisco Public
Network is not always reliable. Things will fail. “Let it crash!”
Distributed
![Page 18: Think in Erlang! - codesync.global€¦ · © 2020 Cisco and/or its affiliates. All rights reserved. Cisco Public #CodeBEAMSF Which programming language do you work with? Erlang Elixir](https://reader034.vdocuments.us/reader034/viewer/2022050523/5fa67ebbd645cf3fe37fc528/html5/thumbnails/18.jpg)
© 2020 Cisco and/or its affiliates. All rights reserved. Cisco Public #CodeBEAMSF
Think in Erlang
Process
DistributionEmbrace failure Function
Data IO model
![Page 19: Think in Erlang! - codesync.global€¦ · © 2020 Cisco and/or its affiliates. All rights reserved. Cisco Public #CodeBEAMSF Which programming language do you work with? Erlang Elixir](https://reader034.vdocuments.us/reader034/viewer/2022050523/5fa67ebbd645cf3fe37fc528/html5/thumbnails/19.jpg)
© 2020 Cisco and/or its affiliates. All rights reserved. Cisco Public #CodeBEAMSF
Case Study
![Page 20: Think in Erlang! - codesync.global€¦ · © 2020 Cisco and/or its affiliates. All rights reserved. Cisco Public #CodeBEAMSF Which programming language do you work with? Erlang Elixir](https://reader034.vdocuments.us/reader034/viewer/2022050523/5fa67ebbd645cf3fe37fc528/html5/thumbnails/20.jpg)
Intent-BasedTools
DevOps CI/CDPipeline
OSS/BSSSystems
Scripts andApplication
ServiceOrchestration
![Page 21: Think in Erlang! - codesync.global€¦ · © 2020 Cisco and/or its affiliates. All rights reserved. Cisco Public #CodeBEAMSF Which programming language do you work with? Erlang Elixir](https://reader034.vdocuments.us/reader034/viewer/2022050523/5fa67ebbd645cf3fe37fc528/html5/thumbnails/21.jpg)
© 2020 Cisco and/or its affiliates. All rights reserved. Cisco Public #CodeBEAMSF© 2020 Cisco and/or its affiliates. All rights reserved. Cisco Public
Network Services
VPNs, ACLs.
![Page 22: Think in Erlang! - codesync.global€¦ · © 2020 Cisco and/or its affiliates. All rights reserved. Cisco Public #CodeBEAMSF Which programming language do you work with? Erlang Elixir](https://reader034.vdocuments.us/reader034/viewer/2022050523/5fa67ebbd645cf3fe37fc528/html5/thumbnails/22.jpg)
© 2020 Cisco and/or its affiliates. All rights reserved. Cisco Public #CodeBEAMSF© 2020 Cisco and/or its affiliates. All rights reserved. Cisco Public
The problem
Service lifecycle management.
![Page 23: Think in Erlang! - codesync.global€¦ · © 2020 Cisco and/or its affiliates. All rights reserved. Cisco Public #CodeBEAMSF Which programming language do you work with? Erlang Elixir](https://reader034.vdocuments.us/reader034/viewer/2022050523/5fa67ebbd645cf3fe37fc528/html5/thumbnails/23.jpg)
© 2020 Cisco and/or its affiliates. All rights reserved. Cisco Public #CodeBEAMSF© 2020 Cisco and/or its affiliates. All rights reserved. Cisco Public
NSO needs
• Service model – IO model
• Mapping from service input parameters to actual device configuration. - Data transformation function.
Service lifecycle management: create, update, delete.
NSO way
![Page 24: Think in Erlang! - codesync.global€¦ · © 2020 Cisco and/or its affiliates. All rights reserved. Cisco Public #CodeBEAMSF Which programming language do you work with? Erlang Elixir](https://reader034.vdocuments.us/reader034/viewer/2022050523/5fa67ebbd645cf3fe37fc528/html5/thumbnails/24.jpg)
© 2020 Cisco and/or its affiliates. All rights reserved. Cisco Public #CodeBEAMSF
Tail-f FASTMAP algorithm
to network
DELETE
NSO API
UNDO
NSO CORE
CREATE
NSO API
User code - CREATE
NSO CORE
UNDO
to network
NSO API
UPDATE
UNDO
User code - CREATE
NSO CORE
NEW UNDO
to network
![Page 25: Think in Erlang! - codesync.global€¦ · © 2020 Cisco and/or its affiliates. All rights reserved. Cisco Public #CodeBEAMSF Which programming language do you work with? Erlang Elixir](https://reader034.vdocuments.us/reader034/viewer/2022050523/5fa67ebbd645cf3fe37fc528/html5/thumbnails/25.jpg)
© 2020 Cisco and/or its affiliates. All rights reserved. Cisco Public #CodeBEAMSF
Tail-f Reactive FASTMAP algorithm
NSO API
UPDATE
UNDO
User code - CREATE
NSO CORE
NEW UNDO
to network
![Page 26: Think in Erlang! - codesync.global€¦ · © 2020 Cisco and/or its affiliates. All rights reserved. Cisco Public #CodeBEAMSF Which programming language do you work with? Erlang Elixir](https://reader034.vdocuments.us/reader034/viewer/2022050523/5fa67ebbd645cf3fe37fc528/html5/thumbnails/26.jpg)
© 2020 Cisco and/or its affiliates. All rights reserved. Cisco Public #CodeBEAMSF
Think in Erlang
Process
DistributionEmbrace failure Function
Data IO model