SlideShare una empresa de Scribd logo
1 de 50
IronSprog //kristiankristensen.dk twitter.com/kkristensen kristian.kristensen@microsoft.com
Agenda
Why Dynamic Languages
What makes a language “dynamic”?
http://www.flickr.com/photos/35064820@N00/3950391591/
http://www.flickr.com/photos/janineberben/3219556705/
Why Dynamic Languages
Eksempler C# class Program {     static void Main(string[] args)     { Console.WriteLine("Hello World");     }        } Ruby puts “Hello World”
class Customer < ActiveRecord::Base end
DSL
http://www.flickr.com/photos/parksy/828680991/sizes/o/
http://www.flickr.com/photos/jamesdale10/2151196493/ http://www.flickr.com/photos/pandiyan/1339056452/
The traditional view of the world
“CLR hates Dynamic” “The speed of the current system is so low as to render the current implementation useless for anything beyond demonstration purposes.” 		– ActiveState’s report on Python for .NET “The CLI is, by design, not friendly to dynamic languages. Prototypes were built, but ran way too slowly.” – Jon Udell, InfoWorld, Aug. 2003
Dynamic Language Runtime
Dynamic Languages on .NET IronPython IronRuby Iron? VB.NET C# Common Language Runtime
Dynamic Languages on .NET IronPython IronRuby C# VB.NET Others… Dynamic Language Runtime Expression Trees Dynamic Dispatch Call Site Caching Python binder Rubybinder COMbinder JavaScriptbinder Objectbinder
.NET ?.? DLR2 The Common Language Runtime Script Hosting Compiler as a Service ??? .NET 4.0 DLR Expression Trees v2 Call Site Caching Dynamic Dispatch .NET 3.5 LINQ Expression Trees Extension Methods Silverlight .NET 2.0 Generics In Runtime Fast Delegates Dynamic Methods .NET 1.0 GC Reflection JIT BCL Dynamic Codegen Verifier Sandbox
Multiple Language Dynamic Dispatch IronPython x.Foo IronRuby x.Foo C# x.Foo VB.NET x.Foo Dynamic Language Runtime GetMember Name=“Foo”, IgnoreCase=false ObjectBinder PythonBinder RubyBinder COMBinder
Common Language = CLR + DLR Today’s view of the world
Iron languages arefirst class .NET citizens
IronPython “IronPythonis an open-source implementation of the Python programming language which is tightly integrated with the .NET Framework. IronPython can use the .NET Framework and Python libraries, and other .NET languages can use Python code just as easily.” - IronPython.net
IronRuby “IronRuby is a Open Source implementation of the Ruby programming language for .NET and Silverlight, heavily relying on Microsoft's Dynamic Language Runtime.” - IronRuby.net
IronWhat? True language implementation True to the language True to the community True to the experience Excellent performance Great integration with .NET Easy to use .NET libraries Easy to use other .NET languages Easy to use in .NET hosts Easy to use with .NET tools Implementation Running On .NET
Languages on DLR Pictures
Break
Why
Why Iron* Languages?
Ruby Test Framework
[TestClass] public class StackTest{     [TestMethod] public void NewStackHasZeroElements(){ var s = new Stack<string>(); Assert.AreEqual<int>(0,s.Count); }     [TestMethod] public void StackPeekTopElement() { var s = new Stack<string>(); s.Push("bob"); Assert.AreEqual<int>(1,s.Count); Assert.AreEqual<string>("bob",s.Peek()); }     [TestMethod] public void StackPopTopElement() { var s = new Stack<string>(); s.Push("bob"); Assert.AreEqual<string>("bob",s.Pop()); Assert.AreEqual<int>(0,s.Count); } }
describe ".NET Stack Operations" do it "should create an instance with zero elements" do Stack.new.count.should.be 0 end it "should let us peek at the element pushed" do s = Stack.new s.push"bob" s.peek.should.be "bob" s.count.should.be 1 end it "should let us pop the element we pushed" do s = Stack.new s.push"bob" s.pop.should.be "bob" s.count.should.be 0 end end
describe ".NET Stack Operations" do ... end defdescribe(description) print "#{description}" yield puts "end" end
s.count.should.be 3 class PositiveExpectation definitialize(obj) @obj = objend defbe(other) if @obj != other print "Fail: wanted #{@obj} got #{other}" else print "Pass" end end end class Object defshould PositiveExpectation.new(self) end end
Enterprisey
http://www.flickr.com/photos/mirkogarufi/363286628/
.NET interop
(Video)
Easy to embed
// this code assumes language info in app.config varsetup = ScriptRuntimeSetup.ReadConfiguration(); varruntime = new ScriptRuntime(setup); varengine = return runtime.GetEngine("Python"); engine.Execute("2 + 2");
// or you can hard code a specific language varpy_engine= Python.CreateEngine(); py_engine.Execute("2 + 2"); varrb_engine= Ruby.CreateEngine(); rb_engine.Execute("2 + 2");
Bad Paint

Más contenido relacionado

La actualidad más candente

A Type-level Ruby Interpreter for Testing and Understanding
A Type-level Ruby Interpreter for Testing and UnderstandingA Type-level Ruby Interpreter for Testing and Understanding
A Type-level Ruby Interpreter for Testing and Understandingmametter
 
Kevin Whinnery: Write Better JavaScript
Kevin Whinnery: Write Better JavaScriptKevin Whinnery: Write Better JavaScript
Kevin Whinnery: Write Better JavaScriptAxway Appcelerator
 
From rest api to graph ql a 10 year journey
From rest api to graph ql a 10 year journeyFrom rest api to graph ql a 10 year journey
From rest api to graph ql a 10 year journeyArno Schulz
 
TypeProf for IDE: Enrich Development Experience without Annotations
TypeProf for IDE: Enrich Development Experience without AnnotationsTypeProf for IDE: Enrich Development Experience without Annotations
TypeProf for IDE: Enrich Development Experience without Annotationsmametter
 
ITB2019 Real World Scenarios for Modern CFML - Nolan Erck
ITB2019 Real World Scenarios for Modern CFML - Nolan ErckITB2019 Real World Scenarios for Modern CFML - Nolan Erck
ITB2019 Real World Scenarios for Modern CFML - Nolan ErckOrtus Solutions, Corp
 
Performance optimization techniques for Java code
Performance optimization techniques for Java codePerformance optimization techniques for Java code
Performance optimization techniques for Java codeAttila Balazs
 
Introduction to Kotlin coroutines
Introduction to Kotlin coroutinesIntroduction to Kotlin coroutines
Introduction to Kotlin coroutinesRoman Elizarov
 
5 Ways to Build Better Web APIs with Ruby and Rails
5 Ways to Build Better Web APIs with Ruby and Rails5 Ways to Build Better Web APIs with Ruby and Rails
5 Ways to Build Better Web APIs with Ruby and RailsLaunchAny
 
Lock-free algorithms for Kotlin Coroutines
Lock-free algorithms for Kotlin CoroutinesLock-free algorithms for Kotlin Coroutines
Lock-free algorithms for Kotlin CoroutinesRoman Elizarov
 
Zomg: Ruby Command Line and Ruby Debugging
Zomg: Ruby Command Line and Ruby DebuggingZomg: Ruby Command Line and Ruby Debugging
Zomg: Ruby Command Line and Ruby DebuggingJesse Wolgamott
 
Quantum Computing With the Q# Language
Quantum Computing With the Q# LanguageQuantum Computing With the Q# Language
Quantum Computing With the Q# Language.NET Crowd
 

La actualidad más candente (13)

A Type-level Ruby Interpreter for Testing and Understanding
A Type-level Ruby Interpreter for Testing and UnderstandingA Type-level Ruby Interpreter for Testing and Understanding
A Type-level Ruby Interpreter for Testing and Understanding
 
Kevin Whinnery: Write Better JavaScript
Kevin Whinnery: Write Better JavaScriptKevin Whinnery: Write Better JavaScript
Kevin Whinnery: Write Better JavaScript
 
From rest api to graph ql a 10 year journey
From rest api to graph ql a 10 year journeyFrom rest api to graph ql a 10 year journey
From rest api to graph ql a 10 year journey
 
TypeProf for IDE: Enrich Development Experience without Annotations
TypeProf for IDE: Enrich Development Experience without AnnotationsTypeProf for IDE: Enrich Development Experience without Annotations
TypeProf for IDE: Enrich Development Experience without Annotations
 
ITB2019 Real World Scenarios for Modern CFML - Nolan Erck
ITB2019 Real World Scenarios for Modern CFML - Nolan ErckITB2019 Real World Scenarios for Modern CFML - Nolan Erck
ITB2019 Real World Scenarios for Modern CFML - Nolan Erck
 
Performance optimization techniques for Java code
Performance optimization techniques for Java codePerformance optimization techniques for Java code
Performance optimization techniques for Java code
 
Introduction to Kotlin coroutines
Introduction to Kotlin coroutinesIntroduction to Kotlin coroutines
Introduction to Kotlin coroutines
 
5 Ways to Build Better Web APIs with Ruby and Rails
5 Ways to Build Better Web APIs with Ruby and Rails5 Ways to Build Better Web APIs with Ruby and Rails
5 Ways to Build Better Web APIs with Ruby and Rails
 
Lock-free algorithms for Kotlin Coroutines
Lock-free algorithms for Kotlin CoroutinesLock-free algorithms for Kotlin Coroutines
Lock-free algorithms for Kotlin Coroutines
 
Fun Ruby
Fun Ruby Fun Ruby
Fun Ruby
 
Zomg: Ruby Command Line and Ruby Debugging
Zomg: Ruby Command Line and Ruby DebuggingZomg: Ruby Command Line and Ruby Debugging
Zomg: Ruby Command Line and Ruby Debugging
 
Quantum Computing With the Q# Language
Quantum Computing With the Q# LanguageQuantum Computing With the Q# Language
Quantum Computing With the Q# Language
 
Javantura v4 - Java and lambdas and streams - are they better than for loops ...
Javantura v4 - Java and lambdas and streams - are they better than for loops ...Javantura v4 - Java and lambdas and streams - are they better than for loops ...
Javantura v4 - Java and lambdas and streams - are they better than for loops ...
 

Destacado

Membuat efek venom
Membuat efek venomMembuat efek venom
Membuat efek venomAgung Yuwono
 
Centro Nacional de Supercómputo, servicios 2014
Centro Nacional de Supercómputo, servicios 2014 Centro Nacional de Supercómputo, servicios 2014
Centro Nacional de Supercómputo, servicios 2014 Gabriel Ovalle
 
Majd Abdo Resume 3
Majd Abdo Resume 3Majd Abdo Resume 3
Majd Abdo Resume 3majd abdo
 
make it right elearning F&B
make it right elearning F&Bmake it right elearning F&B
make it right elearning F&BSajib Bhadra
 
My Photo Collection 1
My Photo Collection 1My Photo Collection 1
My Photo Collection 1The #1
 
travel with perpose waste
travel with perpose wastetravel with perpose waste
travel with perpose wasteSajib Bhadra
 
آیا هنوز به چارچوب‌های جاوااسکریپت نیاز داریم؟
آیا هنوز به چارچوب‌های جاوااسکریپت نیاز داریم؟آیا هنوز به چارچوب‌های جاوااسکریپت نیاز داریم؟
آیا هنوز به چارچوب‌های جاوااسکریپت نیاز داریم؟Web Standards School
 
بوكلت شرح وتدريبات فروع اللغة العربية الجديد للصف السادس الابتدائى للترم الأو...
بوكلت شرح وتدريبات فروع اللغة العربية الجديد للصف السادس الابتدائى للترم الأو...بوكلت شرح وتدريبات فروع اللغة العربية الجديد للصف السادس الابتدائى للترم الأو...
بوكلت شرح وتدريبات فروع اللغة العربية الجديد للصف السادس الابتدائى للترم الأو...أمنية وجدى
 

Destacado (12)

Membuat efek venom
Membuat efek venomMembuat efek venom
Membuat efek venom
 
Penyakit infeksi jantung cn 1
Penyakit infeksi jantung cn 1Penyakit infeksi jantung cn 1
Penyakit infeksi jantung cn 1
 
Centro Nacional de Supercómputo, servicios 2014
Centro Nacional de Supercómputo, servicios 2014 Centro Nacional de Supercómputo, servicios 2014
Centro Nacional de Supercómputo, servicios 2014
 
Mirza Asadullah Khan Ghalib - Diwan Naat o Manqabat
Mirza Asadullah Khan Ghalib - Diwan Naat o ManqabatMirza Asadullah Khan Ghalib - Diwan Naat o Manqabat
Mirza Asadullah Khan Ghalib - Diwan Naat o Manqabat
 
Majd Abdo Resume 3
Majd Abdo Resume 3Majd Abdo Resume 3
Majd Abdo Resume 3
 
make it right elearning F&B
make it right elearning F&Bmake it right elearning F&B
make it right elearning F&B
 
My Photo Collection 1
My Photo Collection 1My Photo Collection 1
My Photo Collection 1
 
Science aurghalbaeislam
Science aurghalbaeislamScience aurghalbaeislam
Science aurghalbaeislam
 
travel with perpose waste
travel with perpose wastetravel with perpose waste
travel with perpose waste
 
Healthy Summer Skin Guide
Healthy Summer Skin GuideHealthy Summer Skin Guide
Healthy Summer Skin Guide
 
آیا هنوز به چارچوب‌های جاوااسکریپت نیاز داریم؟
آیا هنوز به چارچوب‌های جاوااسکریپت نیاز داریم؟آیا هنوز به چارچوب‌های جاوااسکریپت نیاز داریم؟
آیا هنوز به چارچوب‌های جاوااسکریپت نیاز داریم؟
 
بوكلت شرح وتدريبات فروع اللغة العربية الجديد للصف السادس الابتدائى للترم الأو...
بوكلت شرح وتدريبات فروع اللغة العربية الجديد للصف السادس الابتدائى للترم الأو...بوكلت شرح وتدريبات فروع اللغة العربية الجديد للصف السادس الابتدائى للترم الأو...
بوكلت شرح وتدريبات فروع اللغة العربية الجديد للصف السادس الابتدائى للترم الأو...
 

Similar a Iron Sprog Tech Talk

4 JVM Web Frameworks
4 JVM Web Frameworks4 JVM Web Frameworks
4 JVM Web FrameworksJoe Kutner
 
Iron* - An Introduction to Getting Dynamic on .NET
Iron* - An Introduction to Getting Dynamic on .NETIron* - An Introduction to Getting Dynamic on .NET
Iron* - An Introduction to Getting Dynamic on .NETKristian Kristensen
 
TechDays - IronRuby
TechDays - IronRubyTechDays - IronRuby
TechDays - IronRubyBen Hall
 
Use React tools for better Angular apps
Use React tools for better Angular appsUse React tools for better Angular apps
Use React tools for better Angular appsMartin Hochel
 
Javazone 2010-lift-framework-public
Javazone 2010-lift-framework-publicJavazone 2010-lift-framework-public
Javazone 2010-lift-framework-publicTimothy Perrett
 
Iron Languages - NYC CodeCamp 2/19/2011
Iron Languages - NYC CodeCamp 2/19/2011Iron Languages - NYC CodeCamp 2/19/2011
Iron Languages - NYC CodeCamp 2/19/2011Jimmy Schementi
 
Ruby off Rails---rack, sinatra and sequel
Ruby off Rails---rack, sinatra and sequelRuby off Rails---rack, sinatra and sequel
Ruby off Rails---rack, sinatra and sequelJiang Wu
 
Groovy Update - JavaPolis 2007
Groovy Update - JavaPolis 2007Groovy Update - JavaPolis 2007
Groovy Update - JavaPolis 2007Guillaume Laforge
 
.NET and C# introduction
.NET and C# introduction.NET and C# introduction
.NET and C# introductionPeter Gfader
 
Davide Cerbo - Kotlin loves React - Codemotion Milan 2018
Davide Cerbo - Kotlin loves React - Codemotion Milan 2018Davide Cerbo - Kotlin loves React - Codemotion Milan 2018
Davide Cerbo - Kotlin loves React - Codemotion Milan 2018Codemotion
 
XML Schema Patterns for Databinding
XML Schema Patterns for DatabindingXML Schema Patterns for Databinding
XML Schema Patterns for DatabindingPaul Downey
 
Web Development Environments: Choose the best or go with the rest
Web Development Environments:  Choose the best or go with the restWeb Development Environments:  Choose the best or go with the rest
Web Development Environments: Choose the best or go with the restgeorge.james
 
IronRuby for the Rubyist
IronRuby for the RubyistIronRuby for the Rubyist
IronRuby for the RubyistWill Green
 
Playing with d3.js
Playing with d3.jsPlaying with d3.js
Playing with d3.jsmangoice
 
Domain Specific Languages In Scala Duse3
Domain Specific Languages In Scala Duse3Domain Specific Languages In Scala Duse3
Domain Specific Languages In Scala Duse3Peter Maas
 
Softshake 2013: Introduction to NoSQL with Couchbase
Softshake 2013: Introduction to NoSQL with CouchbaseSoftshake 2013: Introduction to NoSQL with Couchbase
Softshake 2013: Introduction to NoSQL with CouchbaseTugdual Grall
 
Javascript Frameworks Comparison - Angular, Knockout, Ember and Backbone
Javascript Frameworks Comparison - Angular, Knockout, Ember and BackboneJavascript Frameworks Comparison - Angular, Knockout, Ember and Backbone
Javascript Frameworks Comparison - Angular, Knockout, Ember and BackboneDeepu S Nath
 
Exploring SharePoint with F#
Exploring SharePoint with F#Exploring SharePoint with F#
Exploring SharePoint with F#Talbott Crowell
 
DSL Construction with Ruby - ThoughtWorks Masterclass Series 2009
DSL Construction with Ruby - ThoughtWorks Masterclass Series 2009DSL Construction with Ruby - ThoughtWorks Masterclass Series 2009
DSL Construction with Ruby - ThoughtWorks Masterclass Series 2009Harshal Hayatnagarkar
 

Similar a Iron Sprog Tech Talk (20)

4 JVM Web Frameworks
4 JVM Web Frameworks4 JVM Web Frameworks
4 JVM Web Frameworks
 
Iron* - An Introduction to Getting Dynamic on .NET
Iron* - An Introduction to Getting Dynamic on .NETIron* - An Introduction to Getting Dynamic on .NET
Iron* - An Introduction to Getting Dynamic on .NET
 
Ruby on Rails Presentation
Ruby on Rails PresentationRuby on Rails Presentation
Ruby on Rails Presentation
 
TechDays - IronRuby
TechDays - IronRubyTechDays - IronRuby
TechDays - IronRuby
 
Use React tools for better Angular apps
Use React tools for better Angular appsUse React tools for better Angular apps
Use React tools for better Angular apps
 
Javazone 2010-lift-framework-public
Javazone 2010-lift-framework-publicJavazone 2010-lift-framework-public
Javazone 2010-lift-framework-public
 
Iron Languages - NYC CodeCamp 2/19/2011
Iron Languages - NYC CodeCamp 2/19/2011Iron Languages - NYC CodeCamp 2/19/2011
Iron Languages - NYC CodeCamp 2/19/2011
 
Ruby off Rails---rack, sinatra and sequel
Ruby off Rails---rack, sinatra and sequelRuby off Rails---rack, sinatra and sequel
Ruby off Rails---rack, sinatra and sequel
 
Groovy Update - JavaPolis 2007
Groovy Update - JavaPolis 2007Groovy Update - JavaPolis 2007
Groovy Update - JavaPolis 2007
 
.NET and C# introduction
.NET and C# introduction.NET and C# introduction
.NET and C# introduction
 
Davide Cerbo - Kotlin loves React - Codemotion Milan 2018
Davide Cerbo - Kotlin loves React - Codemotion Milan 2018Davide Cerbo - Kotlin loves React - Codemotion Milan 2018
Davide Cerbo - Kotlin loves React - Codemotion Milan 2018
 
XML Schema Patterns for Databinding
XML Schema Patterns for DatabindingXML Schema Patterns for Databinding
XML Schema Patterns for Databinding
 
Web Development Environments: Choose the best or go with the rest
Web Development Environments:  Choose the best or go with the restWeb Development Environments:  Choose the best or go with the rest
Web Development Environments: Choose the best or go with the rest
 
IronRuby for the Rubyist
IronRuby for the RubyistIronRuby for the Rubyist
IronRuby for the Rubyist
 
Playing with d3.js
Playing with d3.jsPlaying with d3.js
Playing with d3.js
 
Domain Specific Languages In Scala Duse3
Domain Specific Languages In Scala Duse3Domain Specific Languages In Scala Duse3
Domain Specific Languages In Scala Duse3
 
Softshake 2013: Introduction to NoSQL with Couchbase
Softshake 2013: Introduction to NoSQL with CouchbaseSoftshake 2013: Introduction to NoSQL with Couchbase
Softshake 2013: Introduction to NoSQL with Couchbase
 
Javascript Frameworks Comparison - Angular, Knockout, Ember and Backbone
Javascript Frameworks Comparison - Angular, Knockout, Ember and BackboneJavascript Frameworks Comparison - Angular, Knockout, Ember and Backbone
Javascript Frameworks Comparison - Angular, Knockout, Ember and Backbone
 
Exploring SharePoint with F#
Exploring SharePoint with F#Exploring SharePoint with F#
Exploring SharePoint with F#
 
DSL Construction with Ruby - ThoughtWorks Masterclass Series 2009
DSL Construction with Ruby - ThoughtWorks Masterclass Series 2009DSL Construction with Ruby - ThoughtWorks Masterclass Series 2009
DSL Construction with Ruby - ThoughtWorks Masterclass Series 2009
 

Último

Passkey Providers and Enabling Portability: FIDO Paris Seminar.pptx
Passkey Providers and Enabling Portability: FIDO Paris Seminar.pptxPasskey Providers and Enabling Portability: FIDO Paris Seminar.pptx
Passkey Providers and Enabling Portability: FIDO Paris Seminar.pptxLoriGlavin3
 
Moving Beyond Passwords: FIDO Paris Seminar.pdf
Moving Beyond Passwords: FIDO Paris Seminar.pdfMoving Beyond Passwords: FIDO Paris Seminar.pdf
Moving Beyond Passwords: FIDO Paris Seminar.pdfLoriGlavin3
 
Data governance with Unity Catalog Presentation
Data governance with Unity Catalog PresentationData governance with Unity Catalog Presentation
Data governance with Unity Catalog PresentationKnoldus Inc.
 
Top 10 Hubspot Development Companies in 2024
Top 10 Hubspot Development Companies in 2024Top 10 Hubspot Development Companies in 2024
Top 10 Hubspot Development Companies in 2024TopCSSGallery
 
The Future Roadmap for the Composable Data Stack - Wes McKinney - Data Counci...
The Future Roadmap for the Composable Data Stack - Wes McKinney - Data Counci...The Future Roadmap for the Composable Data Stack - Wes McKinney - Data Counci...
The Future Roadmap for the Composable Data Stack - Wes McKinney - Data Counci...Wes McKinney
 
Abdul Kader Baba- Managing Cybersecurity Risks and Compliance Requirements i...
Abdul Kader Baba- Managing Cybersecurity Risks  and Compliance Requirements i...Abdul Kader Baba- Managing Cybersecurity Risks  and Compliance Requirements i...
Abdul Kader Baba- Managing Cybersecurity Risks and Compliance Requirements i...itnewsafrica
 
2024 April Patch Tuesday
2024 April Patch Tuesday2024 April Patch Tuesday
2024 April Patch TuesdayIvanti
 
Design pattern talk by Kaya Weers - 2024 (v2)
Design pattern talk by Kaya Weers - 2024 (v2)Design pattern talk by Kaya Weers - 2024 (v2)
Design pattern talk by Kaya Weers - 2024 (v2)Kaya Weers
 
Genislab builds better products and faster go-to-market with Lean project man...
Genislab builds better products and faster go-to-market with Lean project man...Genislab builds better products and faster go-to-market with Lean project man...
Genislab builds better products and faster go-to-market with Lean project man...Farhan Tariq
 
TeamStation AI System Report LATAM IT Salaries 2024
TeamStation AI System Report LATAM IT Salaries 2024TeamStation AI System Report LATAM IT Salaries 2024
TeamStation AI System Report LATAM IT Salaries 2024Lonnie McRorey
 
Emixa Mendix Meetup 11 April 2024 about Mendix Native development
Emixa Mendix Meetup 11 April 2024 about Mendix Native developmentEmixa Mendix Meetup 11 April 2024 about Mendix Native development
Emixa Mendix Meetup 11 April 2024 about Mendix Native developmentPim van der Noll
 
Testing tools and AI - ideas what to try with some tool examples
Testing tools and AI - ideas what to try with some tool examplesTesting tools and AI - ideas what to try with some tool examples
Testing tools and AI - ideas what to try with some tool examplesKari Kakkonen
 
Unleashing Real-time Insights with ClickHouse_ Navigating the Landscape in 20...
Unleashing Real-time Insights with ClickHouse_ Navigating the Landscape in 20...Unleashing Real-time Insights with ClickHouse_ Navigating the Landscape in 20...
Unleashing Real-time Insights with ClickHouse_ Navigating the Landscape in 20...Alkin Tezuysal
 
MuleSoft Online Meetup Group - B2B Crash Course: Release SparkNotes
MuleSoft Online Meetup Group - B2B Crash Course: Release SparkNotesMuleSoft Online Meetup Group - B2B Crash Course: Release SparkNotes
MuleSoft Online Meetup Group - B2B Crash Course: Release SparkNotesManik S Magar
 
Glenn Lazarus- Why Your Observability Strategy Needs Security Observability
Glenn Lazarus- Why Your Observability Strategy Needs Security ObservabilityGlenn Lazarus- Why Your Observability Strategy Needs Security Observability
Glenn Lazarus- Why Your Observability Strategy Needs Security Observabilityitnewsafrica
 
Generative AI - Gitex v1Generative AI - Gitex v1.pptx
Generative AI - Gitex v1Generative AI - Gitex v1.pptxGenerative AI - Gitex v1Generative AI - Gitex v1.pptx
Generative AI - Gitex v1Generative AI - Gitex v1.pptxfnnc6jmgwh
 
Modern Roaming for Notes and Nomad – Cheaper Faster Better Stronger
Modern Roaming for Notes and Nomad – Cheaper Faster Better StrongerModern Roaming for Notes and Nomad – Cheaper Faster Better Stronger
Modern Roaming for Notes and Nomad – Cheaper Faster Better Strongerpanagenda
 
Time Series Foundation Models - current state and future directions
Time Series Foundation Models - current state and future directionsTime Series Foundation Models - current state and future directions
Time Series Foundation Models - current state and future directionsNathaniel Shimoni
 
The Role of FIDO in a Cyber Secure Netherlands: FIDO Paris Seminar.pptx
The Role of FIDO in a Cyber Secure Netherlands: FIDO Paris Seminar.pptxThe Role of FIDO in a Cyber Secure Netherlands: FIDO Paris Seminar.pptx
The Role of FIDO in a Cyber Secure Netherlands: FIDO Paris Seminar.pptxLoriGlavin3
 
The Fit for Passkeys for Employee and Consumer Sign-ins: FIDO Paris Seminar.pptx
The Fit for Passkeys for Employee and Consumer Sign-ins: FIDO Paris Seminar.pptxThe Fit for Passkeys for Employee and Consumer Sign-ins: FIDO Paris Seminar.pptx
The Fit for Passkeys for Employee and Consumer Sign-ins: FIDO Paris Seminar.pptxLoriGlavin3
 

Último (20)

Passkey Providers and Enabling Portability: FIDO Paris Seminar.pptx
Passkey Providers and Enabling Portability: FIDO Paris Seminar.pptxPasskey Providers and Enabling Portability: FIDO Paris Seminar.pptx
Passkey Providers and Enabling Portability: FIDO Paris Seminar.pptx
 
Moving Beyond Passwords: FIDO Paris Seminar.pdf
Moving Beyond Passwords: FIDO Paris Seminar.pdfMoving Beyond Passwords: FIDO Paris Seminar.pdf
Moving Beyond Passwords: FIDO Paris Seminar.pdf
 
Data governance with Unity Catalog Presentation
Data governance with Unity Catalog PresentationData governance with Unity Catalog Presentation
Data governance with Unity Catalog Presentation
 
Top 10 Hubspot Development Companies in 2024
Top 10 Hubspot Development Companies in 2024Top 10 Hubspot Development Companies in 2024
Top 10 Hubspot Development Companies in 2024
 
The Future Roadmap for the Composable Data Stack - Wes McKinney - Data Counci...
The Future Roadmap for the Composable Data Stack - Wes McKinney - Data Counci...The Future Roadmap for the Composable Data Stack - Wes McKinney - Data Counci...
The Future Roadmap for the Composable Data Stack - Wes McKinney - Data Counci...
 
Abdul Kader Baba- Managing Cybersecurity Risks and Compliance Requirements i...
Abdul Kader Baba- Managing Cybersecurity Risks  and Compliance Requirements i...Abdul Kader Baba- Managing Cybersecurity Risks  and Compliance Requirements i...
Abdul Kader Baba- Managing Cybersecurity Risks and Compliance Requirements i...
 
2024 April Patch Tuesday
2024 April Patch Tuesday2024 April Patch Tuesday
2024 April Patch Tuesday
 
Design pattern talk by Kaya Weers - 2024 (v2)
Design pattern talk by Kaya Weers - 2024 (v2)Design pattern talk by Kaya Weers - 2024 (v2)
Design pattern talk by Kaya Weers - 2024 (v2)
 
Genislab builds better products and faster go-to-market with Lean project man...
Genislab builds better products and faster go-to-market with Lean project man...Genislab builds better products and faster go-to-market with Lean project man...
Genislab builds better products and faster go-to-market with Lean project man...
 
TeamStation AI System Report LATAM IT Salaries 2024
TeamStation AI System Report LATAM IT Salaries 2024TeamStation AI System Report LATAM IT Salaries 2024
TeamStation AI System Report LATAM IT Salaries 2024
 
Emixa Mendix Meetup 11 April 2024 about Mendix Native development
Emixa Mendix Meetup 11 April 2024 about Mendix Native developmentEmixa Mendix Meetup 11 April 2024 about Mendix Native development
Emixa Mendix Meetup 11 April 2024 about Mendix Native development
 
Testing tools and AI - ideas what to try with some tool examples
Testing tools and AI - ideas what to try with some tool examplesTesting tools and AI - ideas what to try with some tool examples
Testing tools and AI - ideas what to try with some tool examples
 
Unleashing Real-time Insights with ClickHouse_ Navigating the Landscape in 20...
Unleashing Real-time Insights with ClickHouse_ Navigating the Landscape in 20...Unleashing Real-time Insights with ClickHouse_ Navigating the Landscape in 20...
Unleashing Real-time Insights with ClickHouse_ Navigating the Landscape in 20...
 
MuleSoft Online Meetup Group - B2B Crash Course: Release SparkNotes
MuleSoft Online Meetup Group - B2B Crash Course: Release SparkNotesMuleSoft Online Meetup Group - B2B Crash Course: Release SparkNotes
MuleSoft Online Meetup Group - B2B Crash Course: Release SparkNotes
 
Glenn Lazarus- Why Your Observability Strategy Needs Security Observability
Glenn Lazarus- Why Your Observability Strategy Needs Security ObservabilityGlenn Lazarus- Why Your Observability Strategy Needs Security Observability
Glenn Lazarus- Why Your Observability Strategy Needs Security Observability
 
Generative AI - Gitex v1Generative AI - Gitex v1.pptx
Generative AI - Gitex v1Generative AI - Gitex v1.pptxGenerative AI - Gitex v1Generative AI - Gitex v1.pptx
Generative AI - Gitex v1Generative AI - Gitex v1.pptx
 
Modern Roaming for Notes and Nomad – Cheaper Faster Better Stronger
Modern Roaming for Notes and Nomad – Cheaper Faster Better StrongerModern Roaming for Notes and Nomad – Cheaper Faster Better Stronger
Modern Roaming for Notes and Nomad – Cheaper Faster Better Stronger
 
Time Series Foundation Models - current state and future directions
Time Series Foundation Models - current state and future directionsTime Series Foundation Models - current state and future directions
Time Series Foundation Models - current state and future directions
 
The Role of FIDO in a Cyber Secure Netherlands: FIDO Paris Seminar.pptx
The Role of FIDO in a Cyber Secure Netherlands: FIDO Paris Seminar.pptxThe Role of FIDO in a Cyber Secure Netherlands: FIDO Paris Seminar.pptx
The Role of FIDO in a Cyber Secure Netherlands: FIDO Paris Seminar.pptx
 
The Fit for Passkeys for Employee and Consumer Sign-ins: FIDO Paris Seminar.pptx
The Fit for Passkeys for Employee and Consumer Sign-ins: FIDO Paris Seminar.pptxThe Fit for Passkeys for Employee and Consumer Sign-ins: FIDO Paris Seminar.pptx
The Fit for Passkeys for Employee and Consumer Sign-ins: FIDO Paris Seminar.pptx
 

Iron Sprog Tech Talk

Notas del editor

  1. Spørgsmål: Dynamisk/statisk typede sprog, .NET, JVM, JavaScript, PHP
  2. Fashion: Big trend towards Dynamic Programming, (and Functional Programming and Concurrency) – this has come out of the trend for programming languages and frameworks becoming more concerned with productivity (where previously they were concerned with efficiency.)Fame: Lots of well-known people in the community (DHH, Martin Fowler, Charles Nutter, Uncle Bob, etc.)Weight Loss: Do more with less codeConvention over configuration Text Editor is enough (for some)Interest: What is possible, what can I do?Fortune: There are jobs that require skills in dynamic languages. Fortune might be overegging it a bit...Credit: Mark Bloodworth
  3. Dynamic programming language is a term used broadly in computer science to describe a class of high levelprogramming languages that execute at runtime many common behaviors that other languages might perform during compilation, if at all. These behaviors could include extension of the program, by adding new code, by extending objects and definitions, or by modifying the type system, all during program execution. These behaviors can be emulated in nearly any language of sufficient complexity, but dynamic languages provide direct tools to make use of them.Dynamic languages and dynamic typing are not identical concepts, and a dynamic language need not be dynamically typed, though many dynamic languages are dynamically typed.A programming language is said to use dynamic typing when type checking is performed at run-time (also known as "late-bindng") as opposed to at compile-time. Examples of languages that use dynamic typing include JavaScript, Lisp, Perl, PHP, Python, Ruby, and Smalltalk. Compared to static typing (or 'early-binding'), dynamic typing is more flexible because of theoretical limitations on the decidability of certain static program analysis problems; these prevent the same level of flexibility from being achieved with static typing. There is also less code to write for a given functionality, but dynamic typing is slower at execution time.When used by itself, dynamic typing relies much more on testing for the discovery of errors. If code is not executed, then only interpreter checks for syntax can be done, as opposed to the additional type checks done in a statically typed language. These static type checks are necessarily simpler than those which can be applied at run time, since less information is available to the language system then. Infrequently executed code, such as error handlers, might take more effort to test in a dynamic typing context, but equally, there is no illusion that parts of a dynamic program are fit for purpose without them being tested, as opposed to being merely type-checked.Some examples of things done at runtime instead of compile time: Parsing type validation type creation method dispatch Field lookup Inheritance lookupIn a dynamically typed language, since those things are done at runtime, they can be changed at runtime too.Credit: Wikipedia / Harry PiersonBut what does all this mean?
  4. Duck Typing / Dynamic TypingContinuations
  5. Higher Order Functions – Højereordensfunktioner, lambdaClosures -  the closure is basically a snapshot of the stack at the point that the lambda function is created. Then when the function is re-executed the stack is restored to that state before executing the functionhttp://www.flickr.com/photos/35064820@N00/3950391591/
  6. MetaprogrammingCode as data, data as codeMetaprogramming is the writing of computer programs that write or manipulate other programs (or themselves) as their data, or that do part of the work at compile time that would otherwise be done at runtime. In many cases, this allows programmers to get more done in the same amount of time as they would take to write all the code manually, or it gives programs greater flexibility to efficiently handle new situations without recompilation.Wikipedia
  7. Runtime Introspectionhttp://www.flickr.com/photos/janineberben/3219556705/
  8. Simplicity – users believe dynamic code to be simpler than static codeExpressive – syntax, readablePerspective - Examples –amazon, linkedin, facebook app, thoughtworks, Google, etc.Pragmatic Programmer advice – learn one new language a yearFamiliarity – can lead us to conclusionsMindset – learning and using new languages can help us to think differentlyCredit: Mark Bloodworth
  9. Eksempler på de sprog vi skal kigge på: Python, RubyCredit: Mark Bloodworth
  10. This is a model definition from Ruby on Rails for a DB table named Customers (emphasize the plural). Assuming we’re following the db schema conventions that Rails expects (and Nwind doesn’t), it can go out and grovel the schema from the database and update the class accordingly at runtime.The LINQ to SQL equivalent of this code is nearly 400 lines of generated C# code spit out of a fancy designer that Microsoft needed to build because it would be really time consuming to write the data context code by hand. Plus, you now have two copies of your DB schema to maintain – one in SQL DDL and on in C# - and it’s very important to keep them in sync. The ActiveRecord class, on the other hand, simply picks up the new DB schema automatically. Credit: Harry Pierson, Devhawk
  11. DSL = Domain Specific Language
  12. Sinatraer et web framework for Ruby. I DSL tankenerDomænet web applikationer.Sintraer ~1400 linier kodeVi prøver at lave en simpel demo først, ogbagefterprøver vi at udvide den til at være en fattigmandsfront-end til en søgemaskine.
  13. SlideCredit: John Lam
  14. Slide Credit: John LamCriticismThere are a number of things that I hear repeatedly about dynamic languagesUsually from people who haven’t really used them.Slow: Dynamic languages aren’t compiledBuggy: Static typed languages prevent bugsDifficult: Maintaining large codebase in languages, tool supportDangerous: There is some inherent safety in static typingSome Notes Credit: Mark Bloodworth
  15. Lad os prøve at opsummere forskellene i opfattelser af dynamiske og statiske sprog.Bevidst meget karikeret!Dynamic: Scripting sprog, hurtige, dynamiske typer, kort udviklingshastighed længere køretid, fortolket, hacker culture, slår op på runtimeStatic: Sprog man skriver flysoftware i, langhåret, lang udviklingstid kort køretid, IDE’er, slår op på compiletimeSlide Credit:Bart De Smet
  16. How could Microsoft have screwed up so badly that the CLR is far worse than the JVM for dynamic languages?Jythonshows that dynamic languages can run well on the JVMSlide credit: Jim Hugunin
  17. http://www.flickr.com/photos/john_lam/2232308534/IronPython was originally created by Jim Hugunin, who also was the original creator of Jython. Jim wanted to write a paper titled “Why .NET is a terrible platform for dynamic languages”Detvarikkesådum en ide, ogdetkomIronPythonudafCredit: Harry Pierson
  18. Efter IronPython fandt man ud af der var nogle fællestræk for sprog implementører der gerne vil have dynamiske sprog på CLR’en. De dele trak man ud af IronPython, og arbejdede videre på, og det er endt som DLR’eren.
  19. De smet
  20. Dynamic Codegen:Reflection.EmitFast Delegates important because used in call site caching, generics makes it easier to program with these virtual functions and callsDynamic methods: Part of the System.Reflection.Emit namespace, the DynamicMethod class allows you to create and execute methods at runtime without creating any dynamic assembly or dynamic type.Expression tree: An expression tree provides a method of translating executable code into data.Extension methods: string.WordCount:Count all words in a given string.Expression Trees v2 adds:- Add assignment- Add control-flow- Add dynamic dispatch nodes
  21. Credit: Jim Hugunin
  22. Modsætningen bryder ned, og der kommer et fælles sprog. De 2 verdener kan sameksistere og kommunikereDe Smet
  23. Slide Credit: Jim Hugunin
  24. Detbetyder Iron Sprog erførsteklassepå .NETplatformen, deterikke et appendix, et stedbarnellernogetandetværk. Deterfuldgyldigtmedlemaføkosystemet.De sprog Microsoft laver hedderIronPythonogIronRuby. Derudoverer der en del open source projekter med sprogimplementationer.“IronPython is an open-source implementation of the Python programming language which is tightly integrated with the .NET Framework. IronPython can use the .NET Framework and Python libraries, and other .NET languages can use Python code just as easily.” - IronPython.net“IronRuby is a Open Source implementation of the Ruby programming language for .NET and Silverlight, heavily relying on Microsoft's Dynamic Language Runtime.” - IronRuby.netSome parts Credit: Harry Pierson, Devhawk
  25. Python comes with batteries included.Fuld implementation af Python sprog (syntaks + semantik) plus standardbiblioteker
  26. Targets 1.8.6
  27. Efterrationalisering,De smet
  28. MS-PL, OSI ratified licenseIronRuby takes contributions to libraries
  29. IronJS: compiles Jquery 1.4
  30. Vi har set lidt på hvad dynamiske sprog er, og hvrodan det er implementeret i .NET vha DLR’eren.Så hvad skal vi bruge det til, hvorfor er det interessant for os som .NET udviklere?”Wet your appetite for more”
  31. ”.NET to the dynamic masses”
  32. ”.NET to the dynamic masses””The right tool for the job”Polyglot programmer – den flersprogede programmerhttp://www.istockphoto.com/stock-photo-5245804-carpenter-tool-belt-and-tools-isolated-on-white.php
  33. Easy to extend – skriv udvidelser i .NET/C# i stedet for CEasy to embed – embed som pluginarkitektur, scriptable appsInterop m. Eksisterende .NETDSL”Enterprise apps”Limen mellem den eksisterende investering i Python kode og til .Net til at udnytte de muligheder der er heri.
  34. Credit: Harry Pierson, devhawk
  35. Credit: Harry Pierson, devhawk
  36. Credit: Harry Pierson, devhawk
  37. Credit: Harry Pierson, devhawk
  38. Rails is the killer application for Ruby. Any ruby implementation must be able to run Railshttp://www.flickr.com/photos/mirkogarufi/363286628/
  39. IronBunny. CI with TFS
  40. Credit: Harry Pierson, devhawk
  41. Credit: Harry Pierson, devhawk
  42. http://www.amazon.com/Road-Ahead-Bill-Gates/dp/0453009212/ref=sr_1_2?ie=UTF8&s=books&qid=1264950459&sr=8-2
  43. http://www.britannica.com/EBchecked/topic-art/505178/97220/Traffic-sign-indicating-a-winding-road
  44. IronPython in https://connect.microsoft.com/VisualStudio/feedback/ViewFeedback.aspx?FeedbackID=475830Python 3 support er MIA.VS support manglerpga legalDevhawk
  45. Jimmy: 95% pass rate on ruby spec, 1,5 times faster than MRIRails: above 95%1.0: when the community thinks it’s ready. Focus is on perf and bug fixes to be as compatible as possible with 1.8.6Credit: Harry Pierson, devhawk
  46. Build a dynamic language with the DLRLearn a dynamic languageIncorporate a dynamic language into your architectureCreate a dynamic library for .NETUse C# 4.0 and dynamicSlide credit: John Lam,Some Notes: Mark Bloodworth
  47. Devhawk
  48. Credit: Mark Bloodworth