[ANN] 12 Things to Know About Google's Go
От: remark Россия http://www.1024cores.net/
Дата: 14.11.09 09:59
Оценка: 71 (5)
12 Things to Know About Google's Go Programming Language

Статья понравилась. На половину техническая, наполовину описывает историю создания и философию, основана на интервью с одним из основных разработчиков — Rob Pike. Вообще занятно, что за разработчиками стоят — Unix, C, HotSpot, Plan9...


1024cores — all about multithreading, multicore, concurrency, parallelism, lock-free algorithms
Re: [ANN] 12 Things to Know About Google's Go
От: Mr.Cat  
Дата: 14.11.09 22:55
Оценка: +1
Здравствуйте, remark, Вы писали:
R>12 Things to Know About Google's Go Programming Language

Раз уж на rsdn пошли Go-треды, выражу свое мнение на этот счет.

Интересно, что нигде, где говорят про Go я еще не видел упоминания Newsqueak или Limbo, на которых, я так понимаю, основано "ядро Go" что-ли и к которым по крайней мере Пайк прикладывал лапы. Например, решето на основе каналов из тьюториала — один в один, есть в этом видео.

Сравниваем.
Go (http://golang.org/doc/progs/sieve1.go).
// Copyright 2009 The Go Authors. All rights reserved.
// Use of this source code is governed by a BSD-style
// license that can be found in the LICENSE file.

package main

import "fmt"

// Send the sequence 2, 3, 4, ... to returned channel 
func generate() chan int {
    ch := make(chan int);
    go func() {
        for i := 2; ; i++ {
            ch <- i
        }
    }();
    return ch;
}

// Filter out input values divisible by 'prime', send rest to returned channel
func filter(in chan int, prime int) chan int {
    out := make(chan int);
    go func() {
        for {
            if i := <-in; i%prime != 0 {
                out <- i
            }
        }
    }();
    return out;
}

func sieve() chan int {
    out := make(chan int);
    go func() {
        ch := generate();
        for {
            prime := <-ch;
            out <- prime;
            ch = filter(ch, prime);
        }
    }();
    return out;
}

func main() {
    primes := sieve();
    for {
        fmt.Println(<-primes)
    }
}


Newsqueak (перепечатывал со слайдов).
counter := prog(c: chan of int) {
  i := 1;
  for(;;)
    c <-= (i = i+1);
};

filter := prog(prime: int, revc: chan of int, send: chan of int) {
  i: int;
  for(;;) {
    if((i = <-recv) % prime)
      send <-= i;    
  }
};

sieve := prog(prime: chan of int) {
  c := mk(chan of int);
  begin counter(c);
  p: int;
  for(;;) {
    prime <-= p <- c;
    newc := mk(chan of int);
    begin filter(p, c, newc);
    c := newc;
  }
};

prime := mk(chan of int);
begin sieve(prime); # note pattern: begin with channel

#Use prime here


Как это называется? Терминальная стадия NIH у Гугла, которая не позволяет упоминать о предшественниках. Ну допустим у Go новый компилер (даже 2 или 3 вроде), допустим поменялась какая-то мишура, навроде системы модулей, ну подкрутили синтаксис до большей жаваподобности — но ведь это не повод забывать о легаси. Или я что-то недопонимаю, и в Go что-то принципиально сделано по-другому. Система типов? Работа с каналами?

Ведь это не случайно — об использовании Go в качестве замены питоножавасям. Limbo, емнип — язык системного программирования в ОС Inferno. Да и в Plan9 вроде используется (в упомянутом видео, емнип, говорится о том, что Limbo используется в оконной системе Plan9).

Поскольку первый Go-тред
Автор: Курилка
Дата: 11.11.09
превратился невесть во что, я с твоего позволения буду негодовать в этом.
Re[2]: [ANN] 12 Things to Know About Google's Go
От: Cyberax Марс  
Дата: 14.11.09 23:14
Оценка:
Здравствуйте, Mr.Cat, Вы писали:

MC>Как это называется? Терминальная стадия NIH у Гугла, которая не позволяет упоминать о предшественниках. Ну допустим у Go новый компилер (даже 2 или 3 вроде), допустим поменялась какая-то мишура, навроде системы модулей, ну подкрутили синтаксис до большей жаваподобности — но ведь это не повод забывать о легаси. Или я что-то недопонимаю, и в Go что-то принципиально сделано по-другому. Система типов? Работа с каналами?

Вроде бы и не скрывается, что Go слизан с Оберона и всяких прочих Лимбов.

Отличие Go в том, что его всё-таки планируют дальше развивать.

MC>Ведь это не случайно — об использовании Go в качестве замены питоножавасям. Limbo, емнип — язык системного программирования в ОС Inferno. Да и в Plan9 вроде используется (в упомянутом видео, емнип, говорится о том, что Limbo используется в оконной системе Plan9).

Тут есть отличия. Лимбо не использует мусоросборщика, там классический подсчёт ссылок (со всеми их проблемами).
Sapienti sat!
Re[3]: [ANN] 12 Things to Know About Google's Go
От: Mr.Cat  
Дата: 14.11.09 23:28
Оценка:
Здравствуйте, Cyberax, Вы писали:
C>Вроде бы и не скрывается, что Go слизан с Оберона и всяких прочих Лимбов.
Мне в этой фразе видится сравнение ежа с ужом. Я не прав?

C>Отличие Go в том, что его всё-таки планируют дальше развивать.

Что нас дальше ждет? Plan9 или Inferno под торговой маркой "Гуглоось"?

C>Тут есть отличия. Лимбо не использует мусоросборщика, там классический подсчёт ссылок (со всеми их проблемами).

Это сильно влияет на дизайн языка и "паттерны программирования" лимбо? У меня есть подозрения, что нет, т.к. в том же питоне сразу и не скажешь, что нет нормального gc. Вроде еще go компилится в нативный код, а у лимбо — vm.
Re[4]: [ANN] 12 Things to Know About Google's Go
От: Mr.Cat  
Дата: 14.11.09 23:30
Оценка:
Здравствуйте, Mr.Cat, Вы писали:
MC>Здравствуйте, Cyberax, Вы писали:
C>>Вроде бы и не скрывается
И да, как-то уж совсем вскользь это упоминается.
Re[5]: [ANN] 12 Things to Know About Google's Go
От: Красин Россия  
Дата: 15.11.09 06:43
Оценка:
Здравствуйте, Mr.Cat, Вы писали:

MC>И да, как-то уж совсем вскользь это упоминается.

Ничего себе вскользь! Language Design FAQ

What are Go's ancestors?
Go is mostly in the C family (basic syntax), with significant input from the Pascal/Modula/Oberon family (declarations, packages), plus some ideas from languages inspired by Tony Hoare's CSP, such as Newsqueak and Limbo (concurrency).

Re[6]: [ANN] 12 Things to Know About Google's Go
От: Mr.Cat  
Дата: 15.11.09 14:21
Оценка:
Здравствуйте, Красин, Вы писали:
К>Ничего себе вскользь! Language Design FAQ
К>

What are Go's ancestors?
К>Go is mostly in the C family (basic syntax), with significant input from the Pascal/Modula/Oberon family (declarations, packages), plus some ideas from languages inspired by Tony Hoare's CSP, such as Newsqueak and Limbo (concurrency).

Это как раз вскользь — "some ideas".
Re[7]: [ANN] 12 Things to Know About Google's Go
От: Геннадий Васильев Россия http://www.livejournal.com/users/gesha_x
Дата: 15.11.09 14:39
Оценка:
Здравствуйте, Mr.Cat, Вы писали:

MC>Это как раз вскользь — "some ideas".


ИМХО, вполне достаточный реверанс. Важно же не что откуда есть пошло, а что получилось в итоге.
Я знаю только две бесконечные вещи — Вселенную и человеческую глупость, и я не совсем уверен насчёт Вселенной. (c) А. Эйнштейн
P.S.: Винодельческие провинции — это есть рулез!
Re[8]: [ANN] 12 Things to Know About Google's Go
От: Mr.Cat  
Дата: 15.11.09 14:53
Оценка:
Здравствуйте, Геннадий Васильев, Вы писали:
ГВ>ИМХО, вполне достаточный реверанс. Важно же не что откуда есть пошло, а что получилось в итоге.
В том то и дело, что я пока не понимаю, чего там получилось нового.
Re[9]: [ANN] 12 Things to Know About Google's Go
От: Геннадий Васильев Россия http://www.livejournal.com/users/gesha_x
Дата: 15.11.09 15:26
Оценка:
Здравствуйте, Mr.Cat, Вы писали:

MC>В том то и дело, что я пока не понимаю, чего там получилось нового.


Только и исключительно сочетание.
Я знаю только две бесконечные вещи — Вселенную и человеческую глупость, и я не совсем уверен насчёт Вселенной. (c) А. Эйнштейн
P.S.: Винодельческие провинции — это есть рулез!
Re[10]: [ANN] 12 Things to Know About Google's Go
От: Mr.Cat  
Дата: 15.11.09 16:00
Оценка:
Здравствуйте, Геннадий Васильев, Вы писали:
ГВ>Только и исключительно сочетание.
Надо мне будет освежить свои знания, но по-моему там сочетание лимбо с лимбо.
Re[11]: [ANN] 12 Things to Know About Google's Go
От: Геннадий Васильев Россия http://www.livejournal.com/users/gesha_x
Дата: 15.11.09 16:03
Оценка:
Здравствуйте, Mr.Cat, Вы писали:

ГВ>>Только и исключительно сочетание.

MC>Надо мне будет освежить свои знания, но по-моему там сочетание лимбо с лимбо.

Даже если так, то как это влияет на оценку самого Go?
Я знаю только две бесконечные вещи — Вселенную и человеческую глупость, и я не совсем уверен насчёт Вселенной. (c) А. Эйнштейн
P.S.: Винодельческие провинции — это есть рулез!
Re[12]: [ANN] 12 Things to Know About Google's Go
От: Mr.Cat  
Дата: 15.11.09 16:06
Оценка:
Здравствуйте, Геннадий Васильев, Вы писали:
ГВ>Даже если так, то как это влияет на оценку самого Go?
Никак. Просто я с некоторой неприязнью отношусь к хайпу вокруг давно известных вещей.
Re[13]: [ANN] 12 Things to Know About Google's Go
От: Геннадий Васильев Россия http://www.livejournal.com/users/gesha_x
Дата: 15.11.09 16:17
Оценка: -1
Здравствуйте, Mr.Cat, Вы писали:

ГВ>>Даже если так, то как это влияет на оценку самого Go?

MC>Никак. Просто я с некоторой неприязнью отношусь к хайпу вокруг давно известных вещей.

Так нет никакого хайпа, вроде. Может, журналисты и поднимут, конечно. Ну так у них профессия такая. А вообще ничего принципиально нового в программировании не изобретается уж лет сорок как. Только композиционная игра с перепевами старых мелодий — на всё можно найти прототипы 65-го, 72-го, 68-го года выпуска. Ну в крайнем случае — 80-го.
Я знаю только две бесконечные вещи — Вселенную и человеческую глупость, и я не совсем уверен насчёт Вселенной. (c) А. Эйнштейн
P.S.: Винодельческие провинции — это есть рулез!
Re[2]: [ANN] 12 Things to Know About Google's Go
От: z00n  
Дата: 15.11.09 17:53
Оценка: 13 (2)
Здравствуйте, Mr.Cat, Вы писали:


MC>Интересно, что нигде, где говорят про Go я еще не видел упоминания Newsqueak или Limbo, на которых, я так понимаю, основано "ядро Go" что-ли и к которым по крайней мере Пайк прикладывал лапы.


Пайк говорит что идеи заимстваны (это большей частью его собственные идеи), но реализация другая. По мне это просто чтобы избежать возможных судебных разбитательств с Bell Labs или кто там сейчас.

MC>Сравниваем.

MC>Go (http://golang.org/doc/progs/sieve1.go).

Я, как человек, который прочитал Inferno Programming with Limbo(PDF) — примеры Go даже смотреть не стал


MC>Ведь это не случайно — об использовании Go в качестве замены питоножавасям. Limbo, емнип — язык системного программирования в ОС Inferno. Да и в Plan9 вроде используется (в упомянутом видео, емнип, говорится о том, что Limbo используется в оконной системе Plan9).

Там использовали язык Alef, который в точности Newsqueak++. Потом они вынесли каналы в сишную либу.
Re[3]: [ANN] 12 Things to Know About Google's Go
От: Mr.Cat  
Дата: 15.11.09 20:11
Оценка:
Здравствуйте, z00n, Вы писали:
Z>Пайк говорит что идеи заимстваны (это большей частью его собственные идеи), но реализация другая. По мне это просто чтобы избежать возможных судебных разбитательств с Bell Labs или кто там сейчас.
Т.е. получается, Пайк сбежал в гугол со своим языком, там его переименовали и разработали новый компилятор?
Re[4]: [ANN] 12 Things to Know About Google's Go
От: z00n  
Дата: 15.11.09 20:50
Оценка:
Здравствуйте, Mr.Cat, Вы писали:

MC>Здравствуйте, z00n, Вы писали:

Z>>Пайк говорит что идеи заимстваны (это большей частью его собственные идеи), но реализация другая. По мне это просто чтобы избежать возможных судебных разбитательств с Bell Labs или кто там сейчас.
MC>Т.е. получается, Пайк сбежал в гугол со своим языком, там его переименовали и разработали новый компилятор?

Насколько я понимаю, Пайк давно работает в гугле. В своей презентации 2006 года он упоминал Sawzall(2003) — язык для параллельной обработки данных.
Но список разработчиков подозрительно напоминает plan9 тусовку последних лет (Russ Cox например, видоизмененная Glenda на логотипе etc).
Re[5]: [ANN] 12 Things to Know About Google's Go
От: z00n  
Дата: 15.11.09 21:08
Оценка: :)
Здравствуйте, z00n, Вы писали:

Z>Насколько я понимаю, Пайк давно работает в гугле. В своей презентации 2006 года он упоминал Sawzall(2003) — язык для параллельной обработки данных.

Z>Но список разработчиков подозрительно напоминает plan9 тусовку последних лет (Russ Cox например, видоизмененная Glenda на логотипе etc).

На самом деле это все прямым текстом написано в статье, которая начинает топик:

4. Google's Go owes some debt to Bell Labs' Plan 9
Plan 9 is a distributed operating system developed as the research successor to Unix at Bell Labs. Pike and Thompson were part of the original Plan 9 team at Bell Labs. And Go team member Russ Cox also was a Plan 9 developer.
Although there was not a lot of direct use of Plan 9 technology in creating Go, the link between team members is not the only connection.
The Plan 9 team produced some programming languages of its own, such as Alef and Limbo, which had a slight impact on the direction of Go. "We didn't pull out those languages and look at them again," Pike said. "But I think a better way to express it is that, particularly on the concurrency side of things—the parallel programming side of things—those languages are kind of in the same family tree and inspired by the same approach."
Pike added, "Ken's compiler is entirely new ... it uses the Plan 9 compiler suite, linker and assembler, but the Go compiler is all new. So we borrowed a little technology, but that's just the compiler, that's not the vision. And naturally some of the people working on the project were around from the Plan 9 days, so there's got to be some intellectual cross-breeding there. But this wasn't an attempt to do a Plan 9. This is a language, not an operating system, and they address different things. Go doesn't even have a Plan 9 port at this point, although it would be nice to have one."


(мне это слегка напоминает "ебаа нобаа" из "Little Britain"
Re[5]: [ANN] 12 Things to Know About Google's Go
От: Mr.Cat  
Дата: 15.11.09 23:29
Оценка:
Здравствуйте, z00n, Вы писали:
Z>Glenda
А мне всегда казалось, что это мальчик.
Re[6]: [ANN] 12 Things to Know About Google's Go
От: Mr.Cat  
Дата: 15.11.09 23:32
Оценка:
Здравствуйте, z00n, Вы писали:
Z>(мне это слегка напоминает "ебаа нобаа" из "Little Britain"
Как человек, знакомый с английским языком довольно поверхностно, поинтересуюсь на всякий случай. Юмор в том, что подсудимая (ый?) много, быстро и неразборчиво говорит — или надо вслушиваться в смысл произносимого?
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.