I usually pick up a new language, every 2 months and explore new things - Kushal Das
Inspired by this I decided to pickup a new language after sometime and blog my experiences with that. The inspiration for me to learn Swift was not IOS development, but for machine learning/DL application. Last year fast.ai guru Jeremy Howards conducted a Deep learning from Foundations course copresented with Chris Lattner-creator of Swift, guy who made LLVM compiler. Inspired by them, I start journey with Swift with a hope to contribute to Tensorflow pretty and learn Tensorflow4 Swift.
Promise of Swift
- Infinetely Hackable language - we can go and change even the lowest level in the language, and use these above the hood to get best performance
- Similar to Python (print(), no semi colons)
- Can reach C level speed for programming
- Swift for TensorFlow’s advantages include seamless integration with a modern general-purpose language, allowing for more dynamic and sophisticated models. Fast abstractions can be developed in “user-space” (as opposed to in C/C++, aka “framework-space”), resulting in modular APIs that can be easily customized.
- Can change anything even at lowest level, for TPU’s new represntation of
float called bfloat16
is needed. You can change the base level implementation of float with Swift using LLVM primitives.
Installation
Before hacking a new language, it’s always necessary to setup your working environment for the language. The installation instructions are covered in Swift docs. Swift can be installed in MacOS and Linux.
Since my operating system is Debian10, as I found the local installation with linux a bit tricky, I installed with Docker.
Docker installation is pretty straightword:
docker pull swift
docker run --security-opt seccomp=unconfined -it swift
Semantics
We use let
to make a constant and var
to make a variable. The value of a constant doesn’t need to be known at compile time, but you must assign it a value exactly once. This means you can use constants to name a value that you determine once but use in many places.
var myVar = 42
let myconstant = 42
let var:Double = 70 (specifying type to double)
Strings can be added with values in Swift in it’s own special syntax sugar. The value is written in parentheses, and write a backslash (\)
before the parentheses. For example:
let apples = 3
let oranges = 5
let appleSummary = "I have \(apples) apples."
let fruitSummary = "I have \(apples + oranges) pieces of fruit."
Arrays
We can easily create arrays and dictionaries using brackets([]), and access their elements by writing the index or key in brackets.
var shoppingList = ["catfish", "water", "tulips"]
shoppingList[1] = "bottle of water"
var occupations = [
"Malcolm": "Captain",
"Kaylee": "Mechanic",
]
occupations["Jayne"] = "Public Relations"
You can add new elements to arrays using append:
shoppingList.append("blue paint")
Control flows
We use for-in
to iterate over items in a dictionary by providing a pair of names to use for each key-value pair. Dictionaries are an unordered collection, so their keys and values are iterated over in an arbitrary order.
let interestingNumbers = [
"Prime": [2, 3, 5, 7, 11, 13],
"Fibonacci": [1, 1, 2, 3, 5, 8],
"Square": [1, 4, 9, 16, 25],
]
var largest = 0
for (kind, numbers) in interestingNumbers {
for number in numbers {
if number > largest {
largest = number
}
}
}
print(largest)
Use while
to repeat a block of code until a condition changes. The condition of a loop can be at the end instead, ensuring that the loop is run at least once.
var n = 2
while n < 100 {
n *= 2
}
print(n)
You can keep an index in a loop by using ..<
to make a range of indexes. Very interesting syntax
var total=0
for i in 0..<4 {
total += i
}
print(total)
Currently I am reading a book called Swift from Depth to learn more about the language.
Thanks for reading!
Also do check out my first thoughts about Swift4Tensorflow and how to train a NN with Swift article. Till next time C-x s
!