ash’s blog / все про algorithm

Сортировка на Go

Я почти никогда не пишу в этот блог о программировании, поэтому есть повод написать. Берем сортировку методом пауз, язык программирования Go и смотрим, как там можно применить встроенную в язык параллельность, каналы и горутины.

package main

import(
    "fmt"
    "time"
)

var get_value chan int

func send_value(x int) {
    time.Sleep(int64(x) * 1E8)
    get_value <- x
}

func main() {
    values := []int{3, 1, 9, 7, 2, 6, 4, 8, 5, 10}

    get_value = make(chan int)

    for _, x := range values {
        go send_value(x)
    }
    for range values {
        fmt.Println(<- get_value)
    }
}

Самое большое умиление (изумление?) — отказ компилятора самостоятельно расширять типы, например, попытка умножения int на int64 приводит к ошибке компиляции.

Конструкция с переменной _ и оператором range — типовой подход для обхода массивов без счетчиков.

Очень приятный (хоть и по-паскалевски выглядящий) оператор :=, который позволяет немного экономить на объявлении типа переменной.

Ну а за реализацию конкурентных вычислений — респект и уважуха.

go, programming, fun, algorithm — 3 июля 2011