SlideShare uma empresa Scribd logo
1 de 33
Baixar para ler offline
Xtreams




Martin Kobetic
Cincom Smalltalk Development



ESUG Barcelona
September 2010
Why?
 * more consistency
 * de-emphasize positionability
 * strict separation between read and write streams
 * scalability
 * transformations / stacking
Basics
Terminal: collection, socket, file, ...

Read Stream: source, get, read:, ...

Write Stream: destination, put:, write:, ...

Transform: read or write
  collecting:, selecting:, ...
  character encoding, compression, marshaling, ...
  substreams & slicing
ReadStream
get               next
read:             next:
read:into:         next:into:startingAt: 1
read:into:at:      next:into:startingAt:
rest              upToEnd
source

(iteration)
do:, collect:, select:, ...
ReadStream - Examples
input := ’hello world’ reading.
input get.
input read: 4.
input rest.
input get.

current := ObjectMemory someObject.
[ current := ObjectMemory nextObjectAfter: current.
   current == 0 ifTrue: [Incomplete zero raise].
   current
] reading
   inject: 0 into: [ :c :e | c + 1 ]
WriteStream
put:              nextPut:
write:            nextPutAll:
write:from:         next:putAll:startingAt: 1
write:from:at:      next:putAll:startingAt:
destination

(positionables)
insert:
insert:from:
insert:from:at:
WriteStream - Examples
output := String new writing.
output write: ’Hello World’.
output close.
output terminal.

String new writing
   write: 5 from: ’Hello World’ reading;
   conclusion.
Terminals
Collections:
  (1 to: 100) reading       |   String new writing

Blocks:
  [ ] reading           |       [ :x | ] writing

Files:
   ObjectMemory imageFilename reading

Sockets & Pipes:
  Stdin reading             |   Stdout writing

Buffers & SharedQueues:
  buffer := RingBuffer new: 4.
  in := buffer writing. out := buffer reading.

CPointers
Terminals - Examples - Blocks
a := 0. b := 1.
fib := [ | x | x := a. a := b. b := b + x. x ] reading.
fib ++ 99; get.

point := 20 @ 20.
[ :x | x printString asComposedText
       displayOn: builder window graphicsContext
       at: (point := point + (0@20))
] writing write: 30 from: fib
Terminals - Examples - Pipes
[ :in :out |
    [ out writing write: ’Hello’; close.
       in reading read: 5
    ] ensure: [ in close. out close ]
] valueWithArguments: UnixPipeAccessor openPair.

Stdout writing write: ’Hello’; flush.
Stdin reading get.
Terminals - Examples - CPointers
buffer := CIntegerType char malloc: 50.
[ buffer writing
     length: 50;
     write: ’Hello World!’.
   buffer reading
     contentsSpecies: ByteString;
     read: 12
] ensure: [ buffer free ]
Transforms
Collection Style:
  collecting:, selecting:, injecting:into:, doing:, ...

Specialized Transforms:
  encoding:, encodingBase64,
  compressing, en/decrypting:key:iv:, hashing:
  interpreting:, marshaling

General Transforms:
  transforming: [ :in :out | ... ]

Substreams:
  ending:(inclusive:), limiting:
Transforms - Examples - Collection Style
random := Random new reading.
random := random collecting: [ :f | (f * 256) floor ].
random contentsSpecies: ByteArray.

sieve := OrderedCollection new.
ones := [ 1 ] reading.
twoAndUp := ones
   injecting: 1
   into: [ :previous :one | previous + one ].
primes := twoAndUp rejecting: [ :i |
   (sieve anySatisfy: [ :p | i  p = 0 ])
      ifTrue: [ true ] ifFalse: [ sieve add: i. false ] ].
primes read: 10.
Transforms - Examples - Character Encoding
input := ’xtreams.cha’ asFilename reading.
input := input encoding: ’utf8’.
input read: 50.
input close.

input := ’xtreams.cha’ asFilename reading.
input contentsSpecies: String.

(#[13 10 10 13] reading encoding: #ascii) rest.
(ByteArray new writing encoding: #ascii)
   cr; conclusion
Transforms - Examples - Cryptographic
(ObjectMemory imageFilename reading hashing: ’md5’)
  -= 0; close; digest.

key := random read: 16.
((String new writing
   encodingBase64
   encrypting: ’aes-128-ecb’ key: key iv: nil)
   compressing
   encoding: #utf8
) write: Object comment;
   conclusion.
Transforms - Examples - Morse Code
Message

  . ... ..- --. -... .- .-. -.-. . .-.. --- -. .- -- -- -..-

Decoding Tree

       - << * >> .
     T          E
   M     N     A   I
  O G K D W R U S
   QZYCXBJP L FVH
Transforms - Morse Code Decoding
(’. ... ..- --. -... .- .-. -.-. . .-.. --- -. .- -- -- -..- ’ reading
    transforming: [ :in :out || node beep |
        node := MorseTree.
        [ beep := in get.
            beep = $
        ] whileFalse: [
            node := beep = $.
               ifTrue: [ node at: 3 ]
               ifFalse: [ node at: 2 ] ].
        out put: node first ]
) rest
Transforms - Morse Code Encoding
(String new writing
  transforming: [ :in :out |
      out write: (Morse at: in get);
        put: $ ]
) write: ’ESUG BARCELONA MMX’;
  close;
  terminal
Substreams
size
   limiting: 10

bounding criteria
  ending: $a
  ending: [ :e | ’abc’ includes: e ]
  ending: ’the end’
Substreams - limiting:
input := (1 to: 50) reading.
messages := Array new writing.
[ [ message := input limiting: input get.
      messages put: message rest
   ] repeat
] on: Incomplete do: [].
messages conclusion.

output := String new writing.
(output limiting: 40) write: Object comment.
output conclusion.
Substreams - ending:
(Object comment reading
  ending: $. inclusive: true) rest.
(Object comment reading
  ending: [ :e | ’.!?’ includes: e ]) rest.
(Object comment reading
  ending: ’Class Variables:’) rest.

output := String new writing.
Number withAllSubclasses do: [ :class |
  [ (output ending: $. inclusive: true)
        write: class comment
  ] on: Incomplete do: [].
  output cr ].
output conclusion
Substreams - Slicers
input := [ 1 ] reading.
slicer := input limiter: 10.
slice := slicer get.
slice rest.

input := ’aaa#bb#c##!1#22#33#444’ reading.
messages := input ender: $!.
parts := messages get ender: $#.
parts collect: [ :p | p rest ].
Substreams - Slicers - Writing
output := ByteArray new writing.
slicer := output limiter: 3.
1 to: 10 do: [ :i |
   [ slicer get write: (ByteArray new: 10 withAll: i)
   ] on: Incomplete do: [] ].
output conclusion.

output := String new writing.
messages := output closer: [ output put: $! ].
#((aa bb cc dd ee) (xxx yy z)) do: [ :m |
   message := messages get.
   parts := message closer: [ message put: $# ].
   m do: [ :p | parts get write: p ] ].
output conclusion
Positioning
Non-positionable streams

  ++
  -= 0



Positionable streams

  position / position:
  available / length
  ++ / --
  += / -=
  explore:
Positioning - Examples
input := ’Hello World!’ reading.
input -= 6; rest.
input += 6; rest.

output := String new writing.
output write: ’Hello World!’.
output += 5; insert: ’, Hello’.
output -= 0; conclusion.
output -= 6; write: ’Earth!’.
output conclusion.
Positioning Non-positionable Streams
a := 5. b := 10.
input := [
   (a := a + 1) < b ifFalse: [ Incomplete zero raise ].
   a ] reading.
input ++ 2; get.
input -= 0; rest.

input := Random new reading positioning.
input read: 5.
input += 0; read: 10.

input buffer: (RingBuffer on: (Array new: 5)).
Positioning Non-positionable Streams
output := self newBottomWriter positioning.
output buffer: (RingBuffer on: (String new: 10)).
output write: ’Hello, World!’.
output -= 6; write: ’Earth!’.
output flush
Positioning - Exploring
separators := ’.!?’ withCRs.
lines := Array new writing.
(Object comment reading
   ender: [ :c | separators includes: c ]
) do: [ :s || line |
   line := s positioning.
   (line explore: [
       [ (line read: 6) = ’Object’
       ] on: Incomplete do: [ :ex | false ] ]
   ) ifTrue: [ lines put: line rest ] ].
lines conclusion
Main Differences
* strictly separated read and write
* stream composition/stacking
* stream end handling
   * reading/skipping past end => exception
   * no #atEnd -> other patterns #rest, iteration
   [ stream atEnd ] whileFalse: [ ... ]
   [ [ ... ] repeat ] on: Incomplete do: [].
* slimmer API, use composition
   * #peek -> #explore: []
   * #upToAll: -> ( #ending: ) rest
Topics Not Covered
* interpreting
* marshaling
* parsing
Project Structure
Core: defines the API and core classes

Terminals: streams for all supported terminals

Transforms: core transform streams

Substreams: streams embedded in other streams (slicing)

Xtras: non-core transforms

Parsing: PEG parsing
Future Directions
* use => fix bugs, inconsistencies
* ending: aPattern
* xml processing
* backward compatibility layer
References
Project Members:
  Michael Lucas-Smith
  Martin Kobetic

Project Site:
  http://code.google.com/p/xtreams/

Code:
  http://www.cincomsmalltalk.com/publicRepository/
  XtreamsDevelopment(Bundle).html

Mais conteúdo relacionado

Mais procurados

Just-In-Time Compiler in PHP 8
Just-In-Time Compiler in PHP 8Just-In-Time Compiler in PHP 8
Just-In-Time Compiler in PHP 8Nikita Popov
 
What\'s New in C# 4.0
What\'s New in C# 4.0What\'s New in C# 4.0
What\'s New in C# 4.0Eyal Vardi
 
Practical basics on c++
Practical basics on c++Practical basics on c++
Practical basics on c++Marco Izzotti
 
Chapter 7 - Input Output Statements in C++
Chapter 7 - Input Output Statements in C++Chapter 7 - Input Output Statements in C++
Chapter 7 - Input Output Statements in C++Deepak Singh
 
What's new in PHP 8.0?
What's new in PHP 8.0?What's new in PHP 8.0?
What's new in PHP 8.0?Nikita Popov
 
Ruby on rails tips
Ruby  on rails tipsRuby  on rails tips
Ruby on rails tipsBinBin He
 
Static Optimization of PHP bytecode (PHPSC 2017)
Static Optimization of PHP bytecode (PHPSC 2017)Static Optimization of PHP bytecode (PHPSC 2017)
Static Optimization of PHP bytecode (PHPSC 2017)Nikita Popov
 
Cs1123 11 pointers
Cs1123 11 pointersCs1123 11 pointers
Cs1123 11 pointersTAlha MAlik
 
Why TypeScript?
Why TypeScript?Why TypeScript?
Why TypeScript?FITC
 
Beauty and Power of Go
Beauty and Power of GoBeauty and Power of Go
Beauty and Power of GoFrank Müller
 
Nikita Popov "What’s new in PHP 8.0?"
Nikita Popov "What’s new in PHP 8.0?"Nikita Popov "What’s new in PHP 8.0?"
Nikita Popov "What’s new in PHP 8.0?"Fwdays
 
SNP STEAM Academy 2017 Class #12
SNP STEAM Academy 2017 Class #12SNP STEAM Academy 2017 Class #12
SNP STEAM Academy 2017 Class #12Markus Van Kempen
 
Cython - close to metal Python
Cython - close to metal PythonCython - close to metal Python
Cython - close to metal PythonTaras Lyapun
 

Mais procurados (20)

Just-In-Time Compiler in PHP 8
Just-In-Time Compiler in PHP 8Just-In-Time Compiler in PHP 8
Just-In-Time Compiler in PHP 8
 
What\'s New in C# 4.0
What\'s New in C# 4.0What\'s New in C# 4.0
What\'s New in C# 4.0
 
Format String Exploitation
Format String ExploitationFormat String Exploitation
Format String Exploitation
 
Practical basics on c++
Practical basics on c++Practical basics on c++
Practical basics on c++
 
Chapter 7 - Input Output Statements in C++
Chapter 7 - Input Output Statements in C++Chapter 7 - Input Output Statements in C++
Chapter 7 - Input Output Statements in C++
 
What's new in PHP 8.0?
What's new in PHP 8.0?What's new in PHP 8.0?
What's new in PHP 8.0?
 
string , pointer
string , pointerstring , pointer
string , pointer
 
Ruby on rails tips
Ruby  on rails tipsRuby  on rails tips
Ruby on rails tips
 
Static Optimization of PHP bytecode (PHPSC 2017)
Static Optimization of PHP bytecode (PHPSC 2017)Static Optimization of PHP bytecode (PHPSC 2017)
Static Optimization of PHP bytecode (PHPSC 2017)
 
Format String
Format StringFormat String
Format String
 
Cs1123 11 pointers
Cs1123 11 pointersCs1123 11 pointers
Cs1123 11 pointers
 
Why TypeScript?
Why TypeScript?Why TypeScript?
Why TypeScript?
 
ProgrammingwithGOLang
ProgrammingwithGOLangProgrammingwithGOLang
ProgrammingwithGOLang
 
Beauty and Power of Go
Beauty and Power of GoBeauty and Power of Go
Beauty and Power of Go
 
Nikita Popov "What’s new in PHP 8.0?"
Nikita Popov "What’s new in PHP 8.0?"Nikita Popov "What’s new in PHP 8.0?"
Nikita Popov "What’s new in PHP 8.0?"
 
Introduction to TypeScript
Introduction to TypeScriptIntroduction to TypeScript
Introduction to TypeScript
 
SNP STEAM Academy 2017 Class #12
SNP STEAM Academy 2017 Class #12SNP STEAM Academy 2017 Class #12
SNP STEAM Academy 2017 Class #12
 
Introduction to TypeScript
Introduction to TypeScriptIntroduction to TypeScript
Introduction to TypeScript
 
Rust言語紹介
Rust言語紹介Rust言語紹介
Rust言語紹介
 
Cython - close to metal Python
Cython - close to metal PythonCython - close to metal Python
Cython - close to metal Python
 

Destaque

Maycafotos2 eviita
Maycafotos2 eviitaMaycafotos2 eviita
Maycafotos2 eviitaangelinayoli
 
WordCamp Utah 2010 Presentation
WordCamp Utah 2010 PresentationWordCamp Utah 2010 Presentation
WordCamp Utah 2010 PresentationJ.R. Farr
 
Maycafotos2 eviita
Maycafotos2 eviitaMaycafotos2 eviita
Maycafotos2 eviitaangelinayoli
 
Secure Communications with VisualWorks - CSTUC 2006
Secure Communications with VisualWorks - CSTUC 2006Secure Communications with VisualWorks - CSTUC 2006
Secure Communications with VisualWorks - CSTUC 2006Martin Kobetic
 
Cryptography for Smalltalkers 2 - ESUG 2006
Cryptography for Smalltalkers 2 - ESUG 2006Cryptography for Smalltalkers 2 - ESUG 2006
Cryptography for Smalltalkers 2 - ESUG 2006Martin Kobetic
 

Destaque (7)

Maycafotos2 eviita
Maycafotos2 eviitaMaycafotos2 eviita
Maycafotos2 eviita
 
Jane Austen Can Get You A Job
Jane Austen Can Get You A JobJane Austen Can Get You A Job
Jane Austen Can Get You A Job
 
Pts
PtsPts
Pts
 
WordCamp Utah 2010 Presentation
WordCamp Utah 2010 PresentationWordCamp Utah 2010 Presentation
WordCamp Utah 2010 Presentation
 
Maycafotos2 eviita
Maycafotos2 eviitaMaycafotos2 eviita
Maycafotos2 eviita
 
Secure Communications with VisualWorks - CSTUC 2006
Secure Communications with VisualWorks - CSTUC 2006Secure Communications with VisualWorks - CSTUC 2006
Secure Communications with VisualWorks - CSTUC 2006
 
Cryptography for Smalltalkers 2 - ESUG 2006
Cryptography for Smalltalkers 2 - ESUG 2006Cryptography for Smalltalkers 2 - ESUG 2006
Cryptography for Smalltalkers 2 - ESUG 2006
 

Semelhante a Xtreams - ESUG 2010

C cheat sheet for varsity (extreme edition)
C cheat sheet for varsity (extreme edition)C cheat sheet for varsity (extreme edition)
C cheat sheet for varsity (extreme edition)Saifur Rahman
 
Ruby and Rails by example
Ruby and Rails by exampleRuby and Rails by example
Ruby and Rails by examplebryanbibat
 
Type safe embedded domain-specific languages
Type safe embedded domain-specific languagesType safe embedded domain-specific languages
Type safe embedded domain-specific languagesArthur Xavier
 
Twisted logic
Twisted logicTwisted logic
Twisted logicashfall
 
GE8151 Problem Solving and Python Programming
GE8151 Problem Solving and Python ProgrammingGE8151 Problem Solving and Python Programming
GE8151 Problem Solving and Python ProgrammingMuthu Vinayagam
 
Dataflow: Declarative concurrency in Ruby
Dataflow: Declarative concurrency in RubyDataflow: Declarative concurrency in Ruby
Dataflow: Declarative concurrency in RubyLarry Diehl
 
Ruby Language - A quick tour
Ruby Language - A quick tourRuby Language - A quick tour
Ruby Language - A quick touraztack
 
Abstracting over Execution with Higher Kinded Types
Abstracting over Execution with Higher Kinded TypesAbstracting over Execution with Higher Kinded Types
Abstracting over Execution with Higher Kinded TypesPhilip Schwarz
 
Rust LDN 24 7 19 Oxidising the Command Line
Rust LDN 24 7 19 Oxidising the Command LineRust LDN 24 7 19 Oxidising the Command Line
Rust LDN 24 7 19 Oxidising the Command LineMatt Provost
 
Learn python in 20 minutes
Learn python in 20 minutesLearn python in 20 minutes
Learn python in 20 minutesSidharth Nadhan
 
Pharo Hands-On: 02 syntax
Pharo Hands-On: 02 syntaxPharo Hands-On: 02 syntax
Pharo Hands-On: 02 syntaxPharo
 
Advanced Patterns with io.ReadWriter
Advanced Patterns with io.ReadWriterAdvanced Patterns with io.ReadWriter
Advanced Patterns with io.ReadWriterWeaveworks
 
A Few of My Favorite (Python) Things
A Few of My Favorite (Python) ThingsA Few of My Favorite (Python) Things
A Few of My Favorite (Python) ThingsMichael Pirnat
 
CS4200 2019 | Lecture 4 | Syntactic Services
CS4200 2019 | Lecture 4 | Syntactic ServicesCS4200 2019 | Lecture 4 | Syntactic Services
CS4200 2019 | Lecture 4 | Syntactic ServicesEelco Visser
 
Dynamic languages, for software craftmanship group
Dynamic languages, for software craftmanship groupDynamic languages, for software craftmanship group
Dynamic languages, for software craftmanship groupReuven Lerner
 
Pharo: Syntax in a Nutshell
Pharo: Syntax in a NutshellPharo: Syntax in a Nutshell
Pharo: Syntax in a NutshellMarcus Denker
 
Ruby and Rails by Example (GeekCamp edition)
Ruby and Rails by Example (GeekCamp edition)Ruby and Rails by Example (GeekCamp edition)
Ruby and Rails by Example (GeekCamp edition)bryanbibat
 
Refactor like a boss
Refactor like a bossRefactor like a boss
Refactor like a bossgsterndale
 
Blocks by Lachs Cox
Blocks by Lachs CoxBlocks by Lachs Cox
Blocks by Lachs Coxlachie
 

Semelhante a Xtreams - ESUG 2010 (20)

C cheat sheet for varsity (extreme edition)
C cheat sheet for varsity (extreme edition)C cheat sheet for varsity (extreme edition)
C cheat sheet for varsity (extreme edition)
 
Python crush course
Python crush coursePython crush course
Python crush course
 
Ruby and Rails by example
Ruby and Rails by exampleRuby and Rails by example
Ruby and Rails by example
 
Type safe embedded domain-specific languages
Type safe embedded domain-specific languagesType safe embedded domain-specific languages
Type safe embedded domain-specific languages
 
Twisted logic
Twisted logicTwisted logic
Twisted logic
 
GE8151 Problem Solving and Python Programming
GE8151 Problem Solving and Python ProgrammingGE8151 Problem Solving and Python Programming
GE8151 Problem Solving and Python Programming
 
Dataflow: Declarative concurrency in Ruby
Dataflow: Declarative concurrency in RubyDataflow: Declarative concurrency in Ruby
Dataflow: Declarative concurrency in Ruby
 
Ruby Language - A quick tour
Ruby Language - A quick tourRuby Language - A quick tour
Ruby Language - A quick tour
 
Abstracting over Execution with Higher Kinded Types
Abstracting over Execution with Higher Kinded TypesAbstracting over Execution with Higher Kinded Types
Abstracting over Execution with Higher Kinded Types
 
Rust LDN 24 7 19 Oxidising the Command Line
Rust LDN 24 7 19 Oxidising the Command LineRust LDN 24 7 19 Oxidising the Command Line
Rust LDN 24 7 19 Oxidising the Command Line
 
Learn python in 20 minutes
Learn python in 20 minutesLearn python in 20 minutes
Learn python in 20 minutes
 
Pharo Hands-On: 02 syntax
Pharo Hands-On: 02 syntaxPharo Hands-On: 02 syntax
Pharo Hands-On: 02 syntax
 
Advanced Patterns with io.ReadWriter
Advanced Patterns with io.ReadWriterAdvanced Patterns with io.ReadWriter
Advanced Patterns with io.ReadWriter
 
A Few of My Favorite (Python) Things
A Few of My Favorite (Python) ThingsA Few of My Favorite (Python) Things
A Few of My Favorite (Python) Things
 
CS4200 2019 | Lecture 4 | Syntactic Services
CS4200 2019 | Lecture 4 | Syntactic ServicesCS4200 2019 | Lecture 4 | Syntactic Services
CS4200 2019 | Lecture 4 | Syntactic Services
 
Dynamic languages, for software craftmanship group
Dynamic languages, for software craftmanship groupDynamic languages, for software craftmanship group
Dynamic languages, for software craftmanship group
 
Pharo: Syntax in a Nutshell
Pharo: Syntax in a NutshellPharo: Syntax in a Nutshell
Pharo: Syntax in a Nutshell
 
Ruby and Rails by Example (GeekCamp edition)
Ruby and Rails by Example (GeekCamp edition)Ruby and Rails by Example (GeekCamp edition)
Ruby and Rails by Example (GeekCamp edition)
 
Refactor like a boss
Refactor like a bossRefactor like a boss
Refactor like a boss
 
Blocks by Lachs Cox
Blocks by Lachs CoxBlocks by Lachs Cox
Blocks by Lachs Cox
 

Último

Unit-IV- Pharma. Marketing Channels.pptx
Unit-IV- Pharma. Marketing Channels.pptxUnit-IV- Pharma. Marketing Channels.pptx
Unit-IV- Pharma. Marketing Channels.pptxVishalSingh1417
 
Advanced Views - Calendar View in Odoo 17
Advanced Views - Calendar View in Odoo 17Advanced Views - Calendar View in Odoo 17
Advanced Views - Calendar View in Odoo 17Celine George
 
Kisan Call Centre - To harness potential of ICT in Agriculture by answer farm...
Kisan Call Centre - To harness potential of ICT in Agriculture by answer farm...Kisan Call Centre - To harness potential of ICT in Agriculture by answer farm...
Kisan Call Centre - To harness potential of ICT in Agriculture by answer farm...Krashi Coaching
 
Activity 01 - Artificial Culture (1).pdf
Activity 01 - Artificial Culture (1).pdfActivity 01 - Artificial Culture (1).pdf
Activity 01 - Artificial Culture (1).pdfciinovamais
 
Presentation by Andreas Schleicher Tackling the School Absenteeism Crisis 30 ...
Presentation by Andreas Schleicher Tackling the School Absenteeism Crisis 30 ...Presentation by Andreas Schleicher Tackling the School Absenteeism Crisis 30 ...
Presentation by Andreas Schleicher Tackling the School Absenteeism Crisis 30 ...EduSkills OECD
 
BAG TECHNIQUE Bag technique-a tool making use of public health bag through wh...
BAG TECHNIQUE Bag technique-a tool making use of public health bag through wh...BAG TECHNIQUE Bag technique-a tool making use of public health bag through wh...
BAG TECHNIQUE Bag technique-a tool making use of public health bag through wh...Sapna Thakur
 
1029-Danh muc Sach Giao Khoa khoi 6.pdf
1029-Danh muc Sach Giao Khoa khoi  6.pdf1029-Danh muc Sach Giao Khoa khoi  6.pdf
1029-Danh muc Sach Giao Khoa khoi 6.pdfQucHHunhnh
 
Accessible design: Minimum effort, maximum impact
Accessible design: Minimum effort, maximum impactAccessible design: Minimum effort, maximum impact
Accessible design: Minimum effort, maximum impactdawncurless
 
Software Engineering Methodologies (overview)
Software Engineering Methodologies (overview)Software Engineering Methodologies (overview)
Software Engineering Methodologies (overview)eniolaolutunde
 
Student login on Anyboli platform.helpin
Student login on Anyboli platform.helpinStudent login on Anyboli platform.helpin
Student login on Anyboli platform.helpinRaunakKeshri1
 
9548086042 for call girls in Indira Nagar with room service
9548086042  for call girls in Indira Nagar  with room service9548086042  for call girls in Indira Nagar  with room service
9548086042 for call girls in Indira Nagar with room servicediscovermytutordmt
 
BASLIQ CURRENT LOOKBOOK LOOKBOOK(1) (1).pdf
BASLIQ CURRENT LOOKBOOK  LOOKBOOK(1) (1).pdfBASLIQ CURRENT LOOKBOOK  LOOKBOOK(1) (1).pdf
BASLIQ CURRENT LOOKBOOK LOOKBOOK(1) (1).pdfSoniaTolstoy
 
A Critique of the Proposed National Education Policy Reform
A Critique of the Proposed National Education Policy ReformA Critique of the Proposed National Education Policy Reform
A Critique of the Proposed National Education Policy ReformChameera Dedduwage
 
Sanyam Choudhary Chemistry practical.pdf
Sanyam Choudhary Chemistry practical.pdfSanyam Choudhary Chemistry practical.pdf
Sanyam Choudhary Chemistry practical.pdfsanyamsingh5019
 
Grant Readiness 101 TechSoup and Remy Consulting
Grant Readiness 101 TechSoup and Remy ConsultingGrant Readiness 101 TechSoup and Remy Consulting
Grant Readiness 101 TechSoup and Remy ConsultingTechSoup
 
Call Girls in Dwarka Mor Delhi Contact Us 9654467111
Call Girls in Dwarka Mor Delhi Contact Us 9654467111Call Girls in Dwarka Mor Delhi Contact Us 9654467111
Call Girls in Dwarka Mor Delhi Contact Us 9654467111Sapana Sha
 
fourth grading exam for kindergarten in writing
fourth grading exam for kindergarten in writingfourth grading exam for kindergarten in writing
fourth grading exam for kindergarten in writingTeacherCyreneCayanan
 
Interactive Powerpoint_How to Master effective communication
Interactive Powerpoint_How to Master effective communicationInteractive Powerpoint_How to Master effective communication
Interactive Powerpoint_How to Master effective communicationnomboosow
 

Último (20)

Unit-IV- Pharma. Marketing Channels.pptx
Unit-IV- Pharma. Marketing Channels.pptxUnit-IV- Pharma. Marketing Channels.pptx
Unit-IV- Pharma. Marketing Channels.pptx
 
Advanced Views - Calendar View in Odoo 17
Advanced Views - Calendar View in Odoo 17Advanced Views - Calendar View in Odoo 17
Advanced Views - Calendar View in Odoo 17
 
Mattingly "AI & Prompt Design: Structured Data, Assistants, & RAG"
Mattingly "AI & Prompt Design: Structured Data, Assistants, & RAG"Mattingly "AI & Prompt Design: Structured Data, Assistants, & RAG"
Mattingly "AI & Prompt Design: Structured Data, Assistants, & RAG"
 
Kisan Call Centre - To harness potential of ICT in Agriculture by answer farm...
Kisan Call Centre - To harness potential of ICT in Agriculture by answer farm...Kisan Call Centre - To harness potential of ICT in Agriculture by answer farm...
Kisan Call Centre - To harness potential of ICT in Agriculture by answer farm...
 
Activity 01 - Artificial Culture (1).pdf
Activity 01 - Artificial Culture (1).pdfActivity 01 - Artificial Culture (1).pdf
Activity 01 - Artificial Culture (1).pdf
 
Presentation by Andreas Schleicher Tackling the School Absenteeism Crisis 30 ...
Presentation by Andreas Schleicher Tackling the School Absenteeism Crisis 30 ...Presentation by Andreas Schleicher Tackling the School Absenteeism Crisis 30 ...
Presentation by Andreas Schleicher Tackling the School Absenteeism Crisis 30 ...
 
BAG TECHNIQUE Bag technique-a tool making use of public health bag through wh...
BAG TECHNIQUE Bag technique-a tool making use of public health bag through wh...BAG TECHNIQUE Bag technique-a tool making use of public health bag through wh...
BAG TECHNIQUE Bag technique-a tool making use of public health bag through wh...
 
1029-Danh muc Sach Giao Khoa khoi 6.pdf
1029-Danh muc Sach Giao Khoa khoi  6.pdf1029-Danh muc Sach Giao Khoa khoi  6.pdf
1029-Danh muc Sach Giao Khoa khoi 6.pdf
 
Accessible design: Minimum effort, maximum impact
Accessible design: Minimum effort, maximum impactAccessible design: Minimum effort, maximum impact
Accessible design: Minimum effort, maximum impact
 
Software Engineering Methodologies (overview)
Software Engineering Methodologies (overview)Software Engineering Methodologies (overview)
Software Engineering Methodologies (overview)
 
Student login on Anyboli platform.helpin
Student login on Anyboli platform.helpinStudent login on Anyboli platform.helpin
Student login on Anyboli platform.helpin
 
9548086042 for call girls in Indira Nagar with room service
9548086042  for call girls in Indira Nagar  with room service9548086042  for call girls in Indira Nagar  with room service
9548086042 for call girls in Indira Nagar with room service
 
BASLIQ CURRENT LOOKBOOK LOOKBOOK(1) (1).pdf
BASLIQ CURRENT LOOKBOOK  LOOKBOOK(1) (1).pdfBASLIQ CURRENT LOOKBOOK  LOOKBOOK(1) (1).pdf
BASLIQ CURRENT LOOKBOOK LOOKBOOK(1) (1).pdf
 
A Critique of the Proposed National Education Policy Reform
A Critique of the Proposed National Education Policy ReformA Critique of the Proposed National Education Policy Reform
A Critique of the Proposed National Education Policy Reform
 
Sanyam Choudhary Chemistry practical.pdf
Sanyam Choudhary Chemistry practical.pdfSanyam Choudhary Chemistry practical.pdf
Sanyam Choudhary Chemistry practical.pdf
 
Grant Readiness 101 TechSoup and Remy Consulting
Grant Readiness 101 TechSoup and Remy ConsultingGrant Readiness 101 TechSoup and Remy Consulting
Grant Readiness 101 TechSoup and Remy Consulting
 
Call Girls in Dwarka Mor Delhi Contact Us 9654467111
Call Girls in Dwarka Mor Delhi Contact Us 9654467111Call Girls in Dwarka Mor Delhi Contact Us 9654467111
Call Girls in Dwarka Mor Delhi Contact Us 9654467111
 
INDIA QUIZ 2024 RLAC DELHI UNIVERSITY.pptx
INDIA QUIZ 2024 RLAC DELHI UNIVERSITY.pptxINDIA QUIZ 2024 RLAC DELHI UNIVERSITY.pptx
INDIA QUIZ 2024 RLAC DELHI UNIVERSITY.pptx
 
fourth grading exam for kindergarten in writing
fourth grading exam for kindergarten in writingfourth grading exam for kindergarten in writing
fourth grading exam for kindergarten in writing
 
Interactive Powerpoint_How to Master effective communication
Interactive Powerpoint_How to Master effective communicationInteractive Powerpoint_How to Master effective communication
Interactive Powerpoint_How to Master effective communication
 

Xtreams - ESUG 2010

  • 1. Xtreams Martin Kobetic Cincom Smalltalk Development ESUG Barcelona September 2010
  • 2. Why? * more consistency * de-emphasize positionability * strict separation between read and write streams * scalability * transformations / stacking
  • 3. Basics Terminal: collection, socket, file, ... Read Stream: source, get, read:, ... Write Stream: destination, put:, write:, ... Transform: read or write collecting:, selecting:, ... character encoding, compression, marshaling, ... substreams & slicing
  • 4. ReadStream get next read: next: read:into: next:into:startingAt: 1 read:into:at: next:into:startingAt: rest upToEnd source (iteration) do:, collect:, select:, ...
  • 5. ReadStream - Examples input := ’hello world’ reading. input get. input read: 4. input rest. input get. current := ObjectMemory someObject. [ current := ObjectMemory nextObjectAfter: current. current == 0 ifTrue: [Incomplete zero raise]. current ] reading inject: 0 into: [ :c :e | c + 1 ]
  • 6. WriteStream put: nextPut: write: nextPutAll: write:from: next:putAll:startingAt: 1 write:from:at: next:putAll:startingAt: destination (positionables) insert: insert:from: insert:from:at:
  • 7. WriteStream - Examples output := String new writing. output write: ’Hello World’. output close. output terminal. String new writing write: 5 from: ’Hello World’ reading; conclusion.
  • 8. Terminals Collections: (1 to: 100) reading | String new writing Blocks: [ ] reading | [ :x | ] writing Files: ObjectMemory imageFilename reading Sockets & Pipes: Stdin reading | Stdout writing Buffers & SharedQueues: buffer := RingBuffer new: 4. in := buffer writing. out := buffer reading. CPointers
  • 9. Terminals - Examples - Blocks a := 0. b := 1. fib := [ | x | x := a. a := b. b := b + x. x ] reading. fib ++ 99; get. point := 20 @ 20. [ :x | x printString asComposedText displayOn: builder window graphicsContext at: (point := point + (0@20)) ] writing write: 30 from: fib
  • 10. Terminals - Examples - Pipes [ :in :out | [ out writing write: ’Hello’; close. in reading read: 5 ] ensure: [ in close. out close ] ] valueWithArguments: UnixPipeAccessor openPair. Stdout writing write: ’Hello’; flush. Stdin reading get.
  • 11. Terminals - Examples - CPointers buffer := CIntegerType char malloc: 50. [ buffer writing length: 50; write: ’Hello World!’. buffer reading contentsSpecies: ByteString; read: 12 ] ensure: [ buffer free ]
  • 12. Transforms Collection Style: collecting:, selecting:, injecting:into:, doing:, ... Specialized Transforms: encoding:, encodingBase64, compressing, en/decrypting:key:iv:, hashing: interpreting:, marshaling General Transforms: transforming: [ :in :out | ... ] Substreams: ending:(inclusive:), limiting:
  • 13. Transforms - Examples - Collection Style random := Random new reading. random := random collecting: [ :f | (f * 256) floor ]. random contentsSpecies: ByteArray. sieve := OrderedCollection new. ones := [ 1 ] reading. twoAndUp := ones injecting: 1 into: [ :previous :one | previous + one ]. primes := twoAndUp rejecting: [ :i | (sieve anySatisfy: [ :p | i p = 0 ]) ifTrue: [ true ] ifFalse: [ sieve add: i. false ] ]. primes read: 10.
  • 14. Transforms - Examples - Character Encoding input := ’xtreams.cha’ asFilename reading. input := input encoding: ’utf8’. input read: 50. input close. input := ’xtreams.cha’ asFilename reading. input contentsSpecies: String. (#[13 10 10 13] reading encoding: #ascii) rest. (ByteArray new writing encoding: #ascii) cr; conclusion
  • 15. Transforms - Examples - Cryptographic (ObjectMemory imageFilename reading hashing: ’md5’) -= 0; close; digest. key := random read: 16. ((String new writing encodingBase64 encrypting: ’aes-128-ecb’ key: key iv: nil) compressing encoding: #utf8 ) write: Object comment; conclusion.
  • 16. Transforms - Examples - Morse Code Message . ... ..- --. -... .- .-. -.-. . .-.. --- -. .- -- -- -..- Decoding Tree - << * >> . T E M N A I O G K D W R U S QZYCXBJP L FVH
  • 17. Transforms - Morse Code Decoding (’. ... ..- --. -... .- .-. -.-. . .-.. --- -. .- -- -- -..- ’ reading transforming: [ :in :out || node beep | node := MorseTree. [ beep := in get. beep = $ ] whileFalse: [ node := beep = $. ifTrue: [ node at: 3 ] ifFalse: [ node at: 2 ] ]. out put: node first ] ) rest
  • 18. Transforms - Morse Code Encoding (String new writing transforming: [ :in :out | out write: (Morse at: in get); put: $ ] ) write: ’ESUG BARCELONA MMX’; close; terminal
  • 19. Substreams size limiting: 10 bounding criteria ending: $a ending: [ :e | ’abc’ includes: e ] ending: ’the end’
  • 20. Substreams - limiting: input := (1 to: 50) reading. messages := Array new writing. [ [ message := input limiting: input get. messages put: message rest ] repeat ] on: Incomplete do: []. messages conclusion. output := String new writing. (output limiting: 40) write: Object comment. output conclusion.
  • 21. Substreams - ending: (Object comment reading ending: $. inclusive: true) rest. (Object comment reading ending: [ :e | ’.!?’ includes: e ]) rest. (Object comment reading ending: ’Class Variables:’) rest. output := String new writing. Number withAllSubclasses do: [ :class | [ (output ending: $. inclusive: true) write: class comment ] on: Incomplete do: []. output cr ]. output conclusion
  • 22. Substreams - Slicers input := [ 1 ] reading. slicer := input limiter: 10. slice := slicer get. slice rest. input := ’aaa#bb#c##!1#22#33#444’ reading. messages := input ender: $!. parts := messages get ender: $#. parts collect: [ :p | p rest ].
  • 23. Substreams - Slicers - Writing output := ByteArray new writing. slicer := output limiter: 3. 1 to: 10 do: [ :i | [ slicer get write: (ByteArray new: 10 withAll: i) ] on: Incomplete do: [] ]. output conclusion. output := String new writing. messages := output closer: [ output put: $! ]. #((aa bb cc dd ee) (xxx yy z)) do: [ :m | message := messages get. parts := message closer: [ message put: $# ]. m do: [ :p | parts get write: p ] ]. output conclusion
  • 24. Positioning Non-positionable streams ++ -= 0 Positionable streams position / position: available / length ++ / -- += / -= explore:
  • 25. Positioning - Examples input := ’Hello World!’ reading. input -= 6; rest. input += 6; rest. output := String new writing. output write: ’Hello World!’. output += 5; insert: ’, Hello’. output -= 0; conclusion. output -= 6; write: ’Earth!’. output conclusion.
  • 26. Positioning Non-positionable Streams a := 5. b := 10. input := [ (a := a + 1) < b ifFalse: [ Incomplete zero raise ]. a ] reading. input ++ 2; get. input -= 0; rest. input := Random new reading positioning. input read: 5. input += 0; read: 10. input buffer: (RingBuffer on: (Array new: 5)).
  • 27. Positioning Non-positionable Streams output := self newBottomWriter positioning. output buffer: (RingBuffer on: (String new: 10)). output write: ’Hello, World!’. output -= 6; write: ’Earth!’. output flush
  • 28. Positioning - Exploring separators := ’.!?’ withCRs. lines := Array new writing. (Object comment reading ender: [ :c | separators includes: c ] ) do: [ :s || line | line := s positioning. (line explore: [ [ (line read: 6) = ’Object’ ] on: Incomplete do: [ :ex | false ] ] ) ifTrue: [ lines put: line rest ] ]. lines conclusion
  • 29. Main Differences * strictly separated read and write * stream composition/stacking * stream end handling * reading/skipping past end => exception * no #atEnd -> other patterns #rest, iteration [ stream atEnd ] whileFalse: [ ... ] [ [ ... ] repeat ] on: Incomplete do: []. * slimmer API, use composition * #peek -> #explore: [] * #upToAll: -> ( #ending: ) rest
  • 30. Topics Not Covered * interpreting * marshaling * parsing
  • 31. Project Structure Core: defines the API and core classes Terminals: streams for all supported terminals Transforms: core transform streams Substreams: streams embedded in other streams (slicing) Xtras: non-core transforms Parsing: PEG parsing
  • 32. Future Directions * use => fix bugs, inconsistencies * ending: aPattern * xml processing * backward compatibility layer
  • 33. References Project Members: Michael Lucas-Smith Martin Kobetic Project Site: http://code.google.com/p/xtreams/ Code: http://www.cincomsmalltalk.com/publicRepository/ XtreamsDevelopment(Bundle).html