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?

12,192 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
  • Could you use an extra $1750 a week? I'm guessing you could right? If you would like to see how you could make this type of money, right from the comfort of your own home, you absolutely need to check out this short free video. ➤➤ http://scamcb.com/ezpayjobs/pdf
       Reply 
    Are you sure you want to  Yes  No
    Your message goes here
  • Dating for everyone is here: ♥♥♥ http://bit.ly/39pMlLF ♥♥♥
       Reply 
    Are you sure you want to  Yes  No
    Your message goes here
  • Dating direct: ♥♥♥ http://bit.ly/39pMlLF ♥♥♥
       Reply 
    Are you sure you want to  Yes  No
    Your message goes here
  • High Paying Jobs On Facebook And Twitter... How? ♣♣♣ http://t.cn/AieX6y8B
       Reply 
    Are you sure you want to  Yes  No
    Your message goes here
  • 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

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

×