Successfully reported this slideshow.
We use your LinkedIn profile and activity data to personalize ads and to show you more relevant ads. You can change your ad preferences anytime.

Introducing Swift - and the Sunset of Our Culture?

11,924 views

Published on

Apple recently released a language called Swift. As a language it appears to be the best of both worlds -- a script language that emits native codes. But I've got a feeling it means more than just a language. The talk roughly consists of 4 parts as follows:

* Introducing Swift
* Script Languages vs "Compiler" Languages
* Free Software vs. Open Source
* The Sunset of Our Culture

Published in: Engineering, Software
  • Unlock Her Legs - How to Turn a Girl On In 10 Minutes or Less... ◆◆◆ https://tinyurl.com/y52uv4vq
       Reply 
    Are you sure you want to  Yes  No
    Your message goes here
  • Hello! Get Your Professional Job-Winning Resume Here - Check our website! https://vk.cc/818RFv
       Reply 
    Are you sure you want to  Yes  No
    Your message goes here
  • Hello! Get Your Professional Job-Winning Resume Here - Check our website! https://vk.cc/818RFv
       Reply 
    Are you sure you want to  Yes  No
    Your message goes here
  • nice, find more latest PPTs on www.ThesisScientist.com.
       Reply 
    Are you sure you want to  Yes  No
    Your message goes here

Introducing Swift - and the Sunset of Our Culture?

  1. 1. Introducing Swift - and the Sunset of Our Culture @dankogai 1
  2. 2. Introducing Swift - and the Sunset of Our Culture? 2
  3. 3. Introducing Swift 3
  4. 4. https://developer.apple.com/swift/ 5
  5. 5. Hello, world! use v5.16; say "Hello, world!"; 6
  6. 6. Hello, world! println("Hello, world!") // no main() required 7
  7. 7. FizzBuzz #!/usr/bin/env perl -l print+(Fizz)[$_%3].(Buzz)[$_%5]||$_ for 1..100 ! # http://developer.cybozu.co.jp/takesako/2007/05/ fizzbuzz.html 8
  8. 8. FizzBuzz println(1) println(2) println("Fizz") println(4) println("Buzz") println("Fizz") println(7) println(8) println("Fizz") println("Buzz") println(11) println("Fizz") println(13) println(14) println("FizzBuzz") println(16) println(17) println("Fizz") println(19) println("Buzz") println("Fizz") println(22) println(23) println("Fizz") println("Buzz") println(26) println("Fizz") println(28) println(29) println("FizzBuzz") println(31) println(32) println("Fizz") println(34) println("Buzz") println("Fizz") println(37) println(38) println("Fizz") println("Buzz") println(41) println("Fizz") println(43) println(44) println("FizzBuzz") println(46) println(47) println("Fizz") println(49) println("Buzz") println("Fizz") println(52) println(53) println("Fizz") println("Buzz") println(56) println("Fizz") println(58) println(59) println("FizzBuzz") 9
  9. 9. FizzBuzz - Lowest IQ println(1) println(2) println("Fizz") println(4) println("Buzz") println("Fizz") println(7) println(8) println("Fizz") println("Buzz") println(11) println("Fizz") println(13) println(14) println("FizzBuzz") // cf. https://twitter.com/dankogai/status/494976616796127232 10
  10. 10. FizzBuzz for n in 1...100 { let f = n % 3 == 0 ? "Fizz" : "" let b = n % 5 == 0 ? "Buzz" : "" let fb = f + b; println(fb.isEmpty ? "(n)" : fb) } 11
  11. 11. FizzBuzz - func func fizzbuzz(n:Int) -> String { let f = n % 3 == 0 ? "Fizz" : "" let b = n % 5 == 0 ? "Buzz" : "" let fb = f + b; return fb.isEmpty ? String(n) : fb } for n in 1...100 { println(fizzbuzz(n)) } 12
  12. 12. FizzBuzz - method extension Int { func fizzbuzz() -> String { let f = self % 3 == 0 ? "Fizz" : "" let b = self % 5 == 0 ? "Buzz" : "" let fb = f + b; return fb.isEmpty ? String(self) : fb } } for n in 1...100 { println(n.fizzbuzz()) } 13
  13. 13. FizzBuzz - getter extension Int { var fizzbuzz:String { let f = self % 3 == 0 ? "Fizz" : "" let b = self % 5 == 0 ? "Buzz" : "" let fb = f + b; return fb.isEmpty ? String(self) : fb } } for n in 1...100 { println(n.fizzbuzz) } 14
  14. 14. FizzBuzz - subscript class FizzBuzz { subscript (n:Int)->String { let f = n % 3 == 0 ? "Fizz" : "" let b = n % 5 == 0 ? "Buzz" : "" let fb = f + b; return fb.isEmpty ? String(n) : fb } } let fizzbuzz = FizzBuzz() for n in 1...100 { println(fizzbuzz[n]) } 15
  15. 15. FizzBuzz - generator extension FizzBuzz : SequenceType { func generate() -> GeneratorOf<String> { var n = 0 return GeneratorOf<String> { if n == 100 { return nil } return self[++n] } } } let fizzbuzz = FizzBuzz() for s in fizzbuzz { println(s) } 16
  16. 16. FizzBuzz - optional let fizzbuzz = [ 3:"Fizz",5:"Buzz",6:"Fizz",9:"Fizz", 10:"Buzz",12:"Fizz",0:"FizzBuzz" ] for n in 1...100 { println(fizzbuzz[n % 15] ?? "(n)") } 17
  17. 17. FizzBuzz - functionally let fizzbuzz = [ 3:"Fizz",5:"Buzz",6:"Fizz",9:"Fizz", 10:"Buzz",12:"Fizz",0:"FizzBuzz" ] Array(1...100) .map { fizzbuzz[$0 % 15] ?? "($0)" } .map { println($0) } 18
  18. 18. FizzBuzz - operator infix operator => { associativity left precedence 95 } func => <A,R> (lhs:A, rhs:A->R)->R { return rhs(lhs) } let fizzbuzz = [ 3:"Fizz",5:"Buzz",6:"Fizz",9:"Fizz", 10:"Buzz",12:"Fizz",0:"FizzBuzz" ] Array(1...100).map { fizzbuzz[n % 15] ?? "(n)" => println } 19
  19. 19. Demo
  20. 20. let Swift = Of course, it also greatly benefited from the experiences hard-won by many other languages in the field, drawing ideas from Objective-C, Rust, Haskell, Ruby, Python, C#, CLU, and far too many others to list. - Chris Lattner
  21. 21. let Swift = IMHO, it looks more like Perl6 than any other!
  22. 22. let Swift = what.perl6.was.supposed .to.be!
  23. 23. Script Languages vs "Compiler" Languages 24
  24. 24. http://www.perl6.org/archive/talks/2000/als/talk.html 25
  25. 25. Write Run Type Languages Compiled Harder Faster Static C, C++, Java Scripted Easier Slower Dynamic Perl, Ruby, Python,JS 26
  26. 26. Write Run Type Languages Compiled Harder Faster Static C, C++, Java Ideal? Easier Faster Static + ! Type Inference Swift? Scripted Easier Slower Dynamic Perl, Ruby, Python,JS 27
  27. 27. The Sunset of Our Culture? 28
  28. 28. http://danielvdende.com/gdc2014/ 29
  29. 29. http://danielvdende.com/gdc2014/ 30
  30. 30. Bottom-up languages are "discovered" • Perl for those C is too hard • Perl for those awk is too limited • PHP for those who considers perl too hard • Python for those who considers perl too easy • Ruby for those who cosiders -> too much 31
  31. 31. Top-down languages are "delivered" • Java by Sun -> Oracle • JS by Netscape -> MS -> Google and Apple • Dart and Go by Google • Swift by Apple 32
  32. 32. How Apple Delivers Their Products • Release a few good products • Microsoft: C#, F#, Silverlight, TypeScript… • Google: Dart and go • Facebook: Hack? What the Heck? • Apple: Swift • Among a few good products, languages are the fewest • Only two since 1984 - HyperTalk, AppleScript (I know Dylan but only its name) 33
  33. 33. How Apple Delivers Their Products • "Innovation is not about creating something extraordinary today: it is about making something ordinary tomorrow" — @chibicode • "We’d be lucky if we sold 10 million iPhones" — steve Jobs • More iPhones are sold in a month these days 34
  34. 34. How Apple Delivers Their Products • "Swift is an innovative new programming language for Cocoa and Cocoa Touch." • Then why "lldb -repl" invokes Swift? • I coundn’t find anything special to Cocoa and Cocoa Touch in Swift. 35
  35. 35. Swift is a general purpose language 36
  36. 36. Swift is a general purpose language • Emits native code. • UnsafePointer<()> • @asmname • Inherits libc and Foundation • rejects legacy syntax of (Objective-)?C • Will it achieve C++ and Java did not — replace C? Time will tell… 37
  37. 37. Will Swift go OSS? • No promise. Just guesses. • clang is OSS • lldb -repl • Swift itself is not platform-specific • Once OSS, you can never close it • Android 3.X has set a very bad example 38
  38. 38. Top-down > Bottom-up? • Perl6 = Still Crazy After All These Years • Perl5: two years just to add subroutine signature • Swift: two weeks to change T[] to [T] 39
  39. 39. A language for getting the jobs done • But who gives you the job? • And if your job giver offer you a lanugage, who can resist? 40
  40. 40. There’s more than one language to do it • OS X bundles more languages than any other OS • Perl is there to stay • /usr/bin/perl -v # 5.18.2 as of Yosemite DP6 • Available even without Xcode! • Among others • ruby 2.0.0, python 2.7.6, php 5.5.14… • But mind the mindshare and mindshift 41
  41. 41. that’s it (for now) for q in questions { q.answer() } 42

×