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
11. 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
12. 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
13. 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
14. 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
15. 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
16. 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
17. 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
21. 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
22. let Swift =
IMHO, it looks more like Perl6 than any other!
31. 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
32. 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
33. 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
34. 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
35. 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
37. 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
38. 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
39. 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
40. 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
41. 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
42. that’s it (for now)
for q in questions {
q.answer()
}
42