LINUX.ORG.RU

Go 1.9

 


1

6

Команда разработчиков Go представила релиз Go 1.9. Релиз доступен на странице загрузки. В данном релизе имеется много изменений в языке, стандартной библиотеке, среде выполнения и инструментарии. Большая часть усилий разработчиков была положена на усовершенствование среды выполнения и инструментария.

Наиболее важным изменением языка является введение псевдонимов типов. Объявление псевдонима типа выглядит следующим образом:

type T1 = T2

Это объявление вводит псевдоним Т1 для типа Т2, таким же образом, как byte всегда был псевдонимом для uint8. Дизайн-документ псевдонимов типов и статья о рефакторинге объясняют это дополнение более детально.

Новый пакет math/bits предоставляет функции подсчета и обработки битов для целых беззнаковых чисел, которые, когда это возможно, реализуются специальными инструкциями CPU. Например, в системах x86-64 bits.TrailingZeros(x) использует инструкцию BSF.

Пакет sync добавил новый тип Map, безопасный для многопоточного доступа. Важно понимать, что это не общая замена типа Map; обратитесь к документации, чтобы узнать, когда она должна использоваться.

В пакет testing также добавлено дополнение. Новый метод Helper, добавленный к testing.T и testing.B, отмечает вызывающую функцию в качестве тестовой вспомогательной функции. Когда тестовый пакет печатает информацию о файле и строке, он показывает местоположение вызова вспомогательной функции вместо строки в самой вспомогательной функции.

Пакет time теперь прозрачно отслеживает монотонное время в каждом временном значении, делая вычисление длительности между двумя временными значениями безопасной операцией.

Наконец, в рамках усилий, направленных на ускорение работы компилятора, Go 1.9 компилирует функции в пакете одновременно.

Go 1.9 включает в себя еще много дополнений, улучшений и исправлений. Полный список изменений и дополнительную информацию об улучшениях можно найти в примечаниях к выпуску Go 1.9.

Чтобы отпраздновать релиз, группы пользователей Go по всему миру проводят вечеринки.

>>> Подробности



Проверено: Klymedy ()

Ответ на: комментарий от menangen

Писал парсер на go, получилось в 11 раз (!) больше строк кода

Дык и слава бГГ! :) Питон и был сделан для таких как ты ******* :)

anonymous ()
Ответ на: комментарий от mersinvald

вполне обоснованной критики их недоязыяка седалища годетей
mersinvald

Этот трэшак ты назвал «вполне обоснованной критикой»? Не нюхай свои носки когда сюда постишь, всё равно угар получается заметным :)

Вот тебе официальный линк на тему: https://blog.golang.org/toward-go2 - чейтай! :)

Хотя у тебя всё равно треснет ибо там:

The goals we have for Go today are the same as in 2007. We want to make programmers more effective at managing two kinds of scale: production scale, especially concurrent systems interacting with many other servers, exemplified today by cloud software; and development scale, especially large codebases worked on by many engineers coordinating only loosely, exemplified today by modern open-source development. These kinds of scale show up at companies of all sizes. Even a five-person startup may use large cloud-based API services provided by other companies and use more open-source software than software they write themselves. Production scale and development scale are just as relevant at that startup as they are at Google.

Our goal for Go 2 is to fix the most significant ways Go fails to scale.

Ну и:

The goals for Go have not changed since the beginning, but the constraints on Go certainly have. The most important constraint is existing Go usage. We estimate that there are at least half a million Go developers worldwide, which means there are millions of Go source files and at least a billion of lines of Go code. Those programmers and that source code represent Go's success, but they are also the main constraint on Go 2.

Go 2 must bring along all those developers. We must ask them to unlearn old habits and learn new ones only when the reward is great.

После чего у ржавых начинает бить фонтан :-))))) Удачи. /thread

anonymous ()
Ответ на: комментарий от menangen

Писал парсер на go, получилось в 11 раз (!) больше строк кода, чем на питоне.

Зато на гоу это будет во много раз быстрее работать, соберется в один бинарник и под любую популярную платформу не выходя из линукса. Про твою криворукость, я не буду упоминать...

AUX ★★ ()
Последнее исправление: AUX (всего исправлений: 1)

Лень читать всю портянку. Скажите в краце: всё brain-dead со своими generics отметились?

beastie ★★★★★ ()
Ответ на: комментарий от beastie

Нет. Ждем последних тормозов из этой п*@$обратит ;-)

anonymous ()
Ответ на: комментарий от menangen

Писал парсер на go, получилось в 11 раз (!) больше строк кода, чем на питоне. Забросил go после этого парсера, моё время дороже.

Я тут писал один и тот же утилиту/демон на Go и Rust. И что меня удивило, так это то что объем кода получился примерно одинаковый. Мне казалось что код на Rust должен быть раза в два короче. Там тоже был парсер конфигурационного файла, около 150 строк в обеих случаях.

urxvt ★★★★★ ()
Ответ на: комментарий от AUX

На гоу он, кстати, что тоже позабавило, был как раз в 11-12 раз быстрее, стартовал тоже реще. Но... если запускаешь его раза 2-3 в день, то разницы не так уж и много - отработает он за 0.2 сек или за 2 - особо не замечаешь разницы, а, вот, писанина на гоу - не сказал бы что такое уж удовольствие писать все эти парсеры на указателях и структурах, имхо, скучная задача, которую питон 🐍 решает меньшими слезами.

menangen ★★★★★ ()
Ответ на: комментарий от urxvt

Мне в go понравился только рантайм, как язык - фигня, D гораздо приятнее, ещё меня напрягали типы в Go, какое-то мозго...тво было то ли с приведением/каст, то ли ещё с чем, меня это и на swift иногда тоже напрягает, что я не могу итерироваться по интервалу двух UInt, только по Int, потому, что встроенные методы типа range работают только с Int и никак иначе, это не приятно, постоянно кастовать Uint к Int на каждый чих, к тому же в таком приведении типов Unsigned int может выйти за пределы Int, и это головная боль...

menangen ★★★★★ ()

Самый большой недостаток Go - это mental retardation его сообщества. Да вот даже этот тред почитать, ну клиника же. Вопрос в том, притягивает ли он дегенератов или делает?

anonymous ()
Ответ на: комментарий от menangen

на гоу - не сказал бы что такое уж удовольствие писать все эти парсеры на указателях и структурах

В чем проблема? ООП в нужном количестве есть, интерфейсы есть, что ещё надо то?

AUX ★★ ()
Ответ на: комментарий от menangen

Мне в go понравился только рантайм, как язык - фигня, D гораздо приятнее

У тебя странный вкус! Всесто обмазавания абстракциями и классами, тебе предлогают простой и понятный синтаксис.

AUX ★★ ()
Ответ на: комментарий от AUX

тебе предлогают простой и понятный синтаксис.

Тебе предлогают, а ты не соглошайся.

anonymous ()
Ответ на: комментарий от anonymous

Замени Go на linux.org.ru и окажешься прав.

Deleted ()
Ответ на: комментарий от Deleted

Если бы всё было так просто. Но что-то слабо верится, что /r/golang тоже пробивает дно лишь потому, что там все с ЛОРа. Иные смищные персонажи вовсе обретают своими высказываниями всеобщую славу в /r/programmingcirclejerk, 9 тысяч человек подписались на кунсткамеру с целью поржать с гоферов.

anonymous ()
Ответ на: комментарий от iZEN

Компилятор раста можно собрать собой же. Вопрос в том откуда брать ту версию которой будешь собирать. Либо с самого первого релиза собирать и хранить локально, либо скачать собранный кем-то компилятор и уже им собирать из исходников. Как я понимаю ты выбрал второй вариант?

NextGenenration ★★ ()
Ответ на: комментарий от AUX

Зато на гоу это будет во много раз быстрее работать, соберется в один бинарник и под любую популярную платформу не выходя из линукса.

С тем же успехом можно хоть .net взять

Про твою криворукость, я не буду упоминать...

Покажи свои руки сам

NextGenenration ★★ ()
Ответ на: комментарий от AUX

Всесто обмазавания абстракциями и классами, тебе предлогают простой и понятный синтаксис

Можно подумать что синтаксис - замена абстракциям. Такое скажешь.

NextGenenration ★★ ()
Ответ на: комментарий от saahriktu

А у вас в слаке так и принято пакеты через Яндекс и Гугл диски распространять?

arcanis ★★★ ()
Ответ на: комментарий от arcanis

В Слаке принято распространять в первую очередь слакбилды. Основная часть слакбилдов распространяется через slackbuilds.org. Но, там жёсткие критерии к слакбилдам. Поэтому я и ещё некоторые слаководы распространяем слакбилды другими путями, например, через github. А Eric Hameleers (alienBob) распространяет и слакбилды и пакеты через http://www.slackware.com/~alien/slackbuilds/ . Тот, кто идёт таким путём, платит нехилые деньги за хостинг. Или ищет FTP'шники (которых в последнее время днём с огнём не найдёшь). Потому, что сейчас все переехали в облака. И по этой же причине не платят больших денег за хостинг. Зачем, если облака бесплатны?

saahriktu ★★★★★ ()
Ответ на: комментарий от menangen

Аналогично, очень много бойлерплейта получается, не понимаю что там говорят про хорошую читаемость кода, когда кода целая простыня выходит.

wist512 ()
Ответ на: комментарий от AUX

Можно пример в студию? А то я ни разу не нашёл читаемого и компактного примера.

NextGenenration ★★ ()
Ответ на: комментарий от NextGenenration

Не?

package main

import (
	"fmt"
)

type A int

type B struct {
	A
}

func (a A) Say() {
	fmt.Println("Hello A")

}

func (a A) Go() {
	fmt.Println("Go!")

}

func (b B) Say() {
	fmt.Println("Hello B")

}

func main() {

	b := new(B)

	b.Say()
	b.Go()

}
AUX ★★ ()
Ответ на: комментарий от menangen

Руки из жопы - это твоя проблема,

а не Go...

anonymous ()
Ответ на: комментарий от AUX

Зачем тебе такой изврат?

В хозяйстве пригодится же! (С какой стати я должен подстраиваться под язык, если проблему проще решить именно так?) Я знал что не сможет же!

NextGenenration ★★ ()
Ответ на: комментарий от NextGenenration

Твой подход поражает! Одну лыжину на балконе тоже хранишь? В хозяйстве пригодится же!

AUX ★★ ()
Ответ на: комментарий от NextGenenration

Напиши твой вариант на любом другом языке, чтобы посмотреть чего ты хочешь и нужно ли оно вообще.

AUX ★★ ()
Ответ на: комментарий от NextGenenration

Не видел никогда в деле, обычно стоит в углу.

AUX ★★ ()
Ответ на: комментарий от AUX
using System;
using System.Collections.Generic;

namespace Test {
  public class Base {
    public void WhoAmI() {
      Console.Write(GetType().ToString() + "\t");
    }
    
    public virtual void Do() {
      Console.WriteLine("Base");
    }
  }
  
  public class Child : Base {
    public override void Do() {
      Console.WriteLine("Child");
    }
  }
  
  public class Run() {
    public static void Main() {
      var l = new List<Base>() { new Base(), new Child(), new Base() };
      l.ForEach(i => {
        i.WhoAmI();
        i.Do();
      });
    }
  }
}

Это может быть использованно для кучи вещей. К примеру сложить все элементы игрового уровня в одну коллекцию. Или разные элементы синтаксического дерева. Или ...

NextGenenration ★★ ()
Ответ на: комментарий от menangen

Для серверной разработки? И взлетело? Создаётся впечатление, что ещё таки рановато. Речь про проекты какой-то компании или личные?

anonymous ()
Ответ на: комментарий от menangen

благо под Linux прекрасно работает

Только под Ubuntu. На Fedora / Centos не хватает libblocksruntime, который впрочем можно установить с copr. А потом часов 5 компиляции. Ничего сложного, нужно выполнить 1 команду из README, слегка изменив названия пакетов (в основном, *-dev на *-devel). Но вот как потом получить .tar.gz вместо жирной пачки директорий / файлов, я так и не разобрался, флаг --installable_package вызывает ошибку, в результате - лишь пустой архив.

anonymous ()
Ответ на: комментарий от menangen

благо под Linux прекрасно работает

Только core и только под убунтой.

RazrFalcon ★★★★★ ()
Ответ на: комментарий от menangen

Зачем ныть в ветке про Go, если

у тебя руки под SWIFT заточены? Это опять же только твоя проблема.

anonymous ()
Ответ на: Зачем ныть в ветке про Go, если от anonymous

Это опять же только твоя проблема.

Просто человек не писал достаточно много кода, если только для себя то вообще не в счет!

AUX ★★ ()
Ответ на: комментарий от NextGenenration
package main

import (
	"fmt"
)

type A interface {
	Say()
}

type B struct {}

func (B) Say() {
	fmt.Println("im B")
}

func Go(a A) {
	fmt.Println("a says")
	a.Say()
}

func main() {
	var b B
	Go(b)
}
a says
im B
anonymous ()
Ответ на: комментарий от anonymous

Я уже видел пример с интерфейсом. У интерфейса можно реализовать методы? Посмотри на мой пример - там у каждого класса есть метод WhoAmI работающий на рефлексии(не суть важно). В итогде для родителя и потомка мне нужно - 1 родитель, 1 потомок(2 сущности). В go для этого нужно - 1 интерфейс, 1 родитель, 1 потомок(3 сущности). При изменении родителя мне в go потребуется менять 1 интерфейс(не нужно к примеру в c#), 1 родителя. А я просил без boilerplate

NextGenenration ★★ ()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.