ruby is dying. what languages are cool now?

73
Ruby is dying What languages are cool now? Michał Konarski u2i.com

Upload: michal-konarski

Post on 13-Apr-2017

1.605 views

Category:

Software


0 download

TRANSCRIPT

Page 1: Ruby is dying. What languages are cool now?

Ruby is dyingWhat languages are cool now?

Michał Konarski

u2i.com

Page 2: Ruby is dying. What languages are cool now?

Seriously, is Ruby dying?

Page 3: Ruby is dying. What languages are cool now?

Ruby Go

https://blog.whoishiring.io/hacker-news-who-is-hiring-thread-part-1/

Who is hiring?

Page 4: Ruby is dying. What languages are cool now?

But let’s look from a different angle...

Page 5: Ruby is dying. What languages are cool now?

http://www.tiobe.com/

TIOBE Index

Page 6: Ruby is dying. What languages are cool now?

Well, not exactly.

But what languages are cool now?

Page 7: Ruby is dying. What languages are cool now?

Let’s look at six of them

Page 8: Ruby is dying. What languages are cool now?

Swift

Page 9: Ruby is dying. What languages are cool now?

Swift

● designed by Apple● released in 2014● created for iOS, macOS, tvOS● multi-paradigm● statically, strongly typed● compiled

Page 10: Ruby is dying. What languages are cool now?

namespacesgenerics

closures

tuplesoperator overloading

native collections

type inference

pattern matching

multiple return types

Read-Eval-Print-Loop (REPL)

Swift features

Page 11: Ruby is dying. What languages are cool now?

Nothing really outstanding.

So, what’s the story behind Swift?

Page 12: Ruby is dying. What languages are cool now?

“We absolutely loved Objective-C, but we had to ask ourselves a question -

what would it be like if we had Objective-C without the baggage of C?”

Tim Cook

Page 13: Ruby is dying. What languages are cool now?

It’s mainly because Objective-C is bad.

And they had nothing else.

Page 14: Ruby is dying. What languages are cool now?

@interface Foo : NSObject@property (readonly) int bar;- (instancetype)initWithBar:(int)bar;+ (instancetype)fooWithBar:(int)bar;@end

@implementation Foo- (instancetype)initWithBar:(int)bar { self = [super init]; if (self) { _bar = bar; }

return self;}

+ (instancetype)fooWithBar:(int)bar { return [[self alloc] initWithBar:bar];}@end

How bad is Objective-C?

http://www.antonzherdev.com/post/70064588471/top-13-worst-things-about-objective-c

Page 15: Ruby is dying. What languages are cool now?

Swift is easier to read

Objective-C

if (myDelegate != nil) {if ([myDelegate respondsToSelector:

@selector(scrollViewDidScroll:)]) {[myDelegate scrollViewDidScroll:myScrollView]

}}

Swift

myDelegate?.scrollViewDidScroll?(myScrollView)

Page 16: Ruby is dying. What languages are cool now?

Why also Swift is better?

● no need to have two separate files (code and headers)● it’s safer (runtime crash on null pointer)● it has automatic ARC (Automatic Reference Counting)● it’s faster● it requires less code● it has namespaces

Page 17: Ruby is dying. What languages are cool now?

It’s not only a language

XCode 8

https://developer.apple.com/xcode/

Page 18: Ruby is dying. What languages are cool now?

It’s not only a language

Swift Playgrounds

http://www.apple.com/swift/playgrounds/

Page 19: Ruby is dying. What languages are cool now?
Page 20: Ruby is dying. What languages are cool now?

● sponsored by Mozilla● announced in 2010● first release in 2012● stable release in 2015● statically, strongly typed● multi-paradigm● compiled

Page 21: Ruby is dying. What languages are cool now?

“The goal of the project is to design and implement a safe, concurrent, practical systems

language”Rust FAQ

Page 22: Ruby is dying. What languages are cool now?

There are not such languages?

Apparently not.

Page 23: Ruby is dying. What languages are cool now?

Current languages are wrong

● there is too little attention paid to safety

● they have poor concurrency support

● they offer limited control over resources

● they stick too much to paradigm

Page 24: Ruby is dying. What languages are cool now?

So let’s create a new high-low level language!

Page 25: Ruby is dying. What languages are cool now?

Rust is a high level language!

● generics ● traits● pattern matching● closures● type inference● automatic memory allocation and deallocation● guaranteed memory safety● threads without data races

Page 26: Ruby is dying. What languages are cool now?

Rust is a low level language!

● no garbage collector● manual memory management● zero-cost abstractions● minimal runtime● as fast as C/C++

Page 27: Ruby is dying. What languages are cool now?

Guaranteed memory safety? How?

Page 28: Ruby is dying. What languages are cool now?

Ownership

fn foo() {

let v1 = vec![1, 2, 3];let v2 = v1;println!("v1[0] is: {}", v1[0]);

}

error: use of moved value: `v

Page 29: Ruby is dying. What languages are cool now?

You can’t have two references to the same object!

Page 30: Ruby is dying. What languages are cool now?

Ownership

stack heap

[1, 2, 3]v1

v2

Page 31: Ruby is dying. What languages are cool now?

There are more such mechanisms.

Page 32: Ruby is dying. What languages are cool now?

Future of Rust

● currently two big projects: servo and rust● other smaller projects: redox, cgmath, Iron, rust-doom● it changes very quickly● it has a good opinion in the community● it will be hard to replace C/C++● It has a steep learning curve

Page 33: Ruby is dying. What languages are cool now?

Go

Page 34: Ruby is dying. What languages are cool now?

Go

● designed in Google in 2007● first release in 2009● stable release in 2016● statically, strongly typed● multi-paradigm, concurrent● compiled

Page 35: Ruby is dying. What languages are cool now?

Standard languages (Java, C++)

● are very strong: type-safe, effective, efficient● great in hands of experts ● used to build huge systems and companies

Page 36: Ruby is dying. What languages are cool now?

Standard languages (Java, C++)

● hard to use● compilers are slow● binaries are huge● desperately need language-aware tools● poorly adapt to clouds, multicore CPUs

Page 37: Ruby is dying. What languages are cool now?

Simpler languages (Python, Ruby, JS)

● easier to learn● dynamically typed (fewer keystrokes)● interpreted (no compiler to wait for)● good tools (interpreters make things easier)

Page 38: Ruby is dying. What languages are cool now?

Simpler languages (Python, Ruby, JS)

● slow● not type-safe● hard to maintain in a big project● very poor at scale● not very modern

Page 39: Ruby is dying. What languages are cool now?

What if we had a static language with dynamic-like syntax?

Page 40: Ruby is dying. What languages are cool now?

A niche for a language

● understandable● statically typed● productive and readable● fast to work in● scales well● doesn't require tools, but supports them well● good at networking and multiprocessing

Page 41: Ruby is dying. What languages are cool now?

Features of Go

● syntax typical for dynamic languages● type inference● fast compilation● garbage collector● memory safety features● built-in concurrency● object oriented without classes and inheritance● lack of generics● compiles to small statically linked binaries

Page 42: Ruby is dying. What languages are cool now?

Interfacestype Animal interface { Speak() string}

type Dog struct {}

func (d Dog) Speak() string {return "Woof!"

}

func SaySomething(a Animal) {fmt.Println(a.Speak())

}

func main() {dog := Dog{}SaySomething(dog)

}

Page 43: Ruby is dying. What languages are cool now?

Built-in concurrency!

Page 44: Ruby is dying. What languages are cool now?

Goroutines

func main() { go expensiveComputation(x, y, z) anotherExpensiveComputation(a, b, c)

}

Page 45: Ruby is dying. What languages are cool now?

Channels

func main() { ch := make(chan int)go expensiveComputation(x, y, z, ch) v2 := anotherExpensiveComputation(a, b, c) v1 := <- chfmt.Println(v1, v2)

}

Page 46: Ruby is dying. What languages are cool now?

Future of Go

● it’s popularity constantly raises● it’s backed by Google● it’s used by Docker, Netflix, Dropbox, CloudFare,

SoundCloud, BBC, New York Times, Uber and others● it’s seen as a good balance between Java-like languages

and Python-like● it easy to learn and powerful● it runs well in cloud environments● might be a good choice for microservices approach

Page 47: Ruby is dying. What languages are cool now?
Page 48: Ruby is dying. What languages are cool now?

● created by José Valim● released in 2012● functional● dynamically, strongly typed● compiled to Erlang VM byte code

Page 49: Ruby is dying. What languages are cool now?

Erlang? Processes!

Page 50: Ruby is dying. What languages are cool now?

Elixir = Erlang with Ruby syntax

Page 51: Ruby is dying. What languages are cool now?

Elixir features

● massively concurrent● scalable● fault-tolerant● great performance● functional, but practical● nice Ruby-like syntax● metaprogramming via macros

Page 52: Ruby is dying. What languages are cool now?

Ruby has Rails.

Page 53: Ruby is dying. What languages are cool now?

Elixir has Phoenix.

Page 54: Ruby is dying. What languages are cool now?

Controllers in Rails

class PagesController < ApplicationController def index @title = params[:title] @members = [ {name: "Chris McCord"}, {name: "Matt Sears"}, {name: "David Stump"}, {name: "Ricardo Thompson"} ] render "index" endend

http://www.littlelines.com/blog/2014/07/08/elixir-vs-ruby-showdown-phoenix-vs-rails/

Page 55: Ruby is dying. What languages are cool now?

Controllers in Phoenix

defmodule Benchmarker.Controllers.Pages do use Phoenix.Controller

def index(conn, %{"title" => title}) do render conn, "index", title: title, members: [ %{name: "Chris McCord"}, %{name: "Matt Sears"}, %{name: "David Stump"}, %{name: "Ricardo Thompson"} ] endend

http://www.littlelines.com/blog/2014/07/08/elixir-vs-ruby-showdown-phoenix-vs-rails/

Page 56: Ruby is dying. What languages are cool now?

Future of Elixir

● new Erlang for the masses● fits highly concurrent niche● attracts Ruby developers● no big company behind● used by Pinterest● will fly on the wings of Phoenix?

Page 57: Ruby is dying. What languages are cool now?
Page 58: Ruby is dying. What languages are cool now?

● created by data scientists● released in 2012● dynamically, strongly typed● compiled

Page 59: Ruby is dying. What languages are cool now?

Compiled one for fast stuff.Interpreted one for visualisation.

Data scientists’ two languages problem:

Page 60: Ruby is dying. What languages are cool now?

Julia features

● solves scientists’ two language problem● familiar syntax● extensive scientific library● user-defined types● multiple dispatch● built-in parallelism ● good performance (comparing to C)

Page 61: Ruby is dying. What languages are cool now?

Single dispatch (Ruby)

a.do_something(b, c)

Only a decides which method to choose.

Page 62: Ruby is dying. What languages are cool now?

Multiple dispatch

julia> f(x::Float64, y::Float64) = 2x + y;

julia> f(2.0, 3.0)7.0

julia> f(2.0, 3)ERROR: MethodError: `f` has no method matching

Here everything decides!

Page 63: Ruby is dying. What languages are cool now?

Future of Julia

● R, MATLAB and C competitor ● unifies scientific software stack● not mature enough yet● small, but growing number of libraries

Page 64: Ruby is dying. What languages are cool now?
Page 65: Ruby is dying. What languages are cool now?

● created by Google● released in 2011● optionally typed● interpreted● translated to JavaScript

Page 66: Ruby is dying. What languages are cool now?

Let’s replace JavaScript!

Page 67: Ruby is dying. What languages are cool now?

Dart vs JavaScript

● class-based (not prototype-based)● normal foreach● named parameters● operator overriding● string interpolation● optional typing● false is false● easy DOM operations

Page 68: Ruby is dying. What languages are cool now?

Looks familiarclass Point { num x; num y;

Point(this.x, this.y); distanceFromOrigin() { return sqrt(x * x + y * y); }}

main() { var p = new Point(2, 3); print(p.distanceFromOrigin());}

Page 69: Ruby is dying. What languages are cool now?

Cascade operator

querySelector('#button') ..text = 'Confirm' ..classes.add('important') ..onClick.listen(

(e) => window.alert('Confirmed!'));

Page 70: Ruby is dying. What languages are cool now?

Future of Dart

● 2016 AdWord UI built in Dart● no Dart VM in browsers● fragmented community● client-side future is dim● backend future looks much better

Page 71: Ruby is dying. What languages are cool now?
Page 73: Ruby is dying. What languages are cool now?

Any questions?

@mjkonarski

michalkonarski

[email protected]