LINUX.ORG.RU

Google представляет Go

 , , ,


0

0

Go — экспериментальный язык програмирования, разработанный в Google. Основные разработчики языка — Роб Пайк и Кен Томпсон, также известные как разработчики unix и plan9.

Go предназначен в первую очередь для написания крупных серверных приложений и способен сократить время сборки с десятков минут до нескольких секунд (в сравнении с C++) за счет системы модулей и явного указания зависимостей.

В языке отсутствуют классы, исключения, метапрограммирование и ручное управление памятью, однако присутствуют указатели, сборщик мусора и goto. Также на уровне языка поддерживаются легковесные процессы (goroutines) и каналы (channels).

Можно использовать фигурные скобки и юникод в идентификаторах.

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

★★★

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

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

>дактайпинг >... >примерно то же, что и динамическая типизация

Да ты же упоротый! Динамическая типизация это возможность переменной сохранять значения разных типов. Утиная типизация это более гибкая система проверки типов, основанная на сличении интерфейса. Интерфейса в широком смысле (как совокупности сигнатур всех методов).

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

> Давай ка заменим слово "наследование" на subclassing, может тогда ты осилишь понять, что реализация интерфейса это не сабклассинг.

Ага. Зато обратное верно: "сабклассинг" есть частный случай реализации интерфейса.

> И перестань хамить, неуч.

С анонимусами надо строго. Следующий!

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

> Динамическая типизация это возможность переменной сохранять значения разных типов. Утиная типизация это более гибкая система проверки типов,

Да. Поэтому они часто используются вместе.

> основанная на сличении интерфейса.

Подчеркнём: интерфейсы сличаются не полностью, а всего лишь по мере необходимости.

> Интерфейса в широком смысле (как совокупности сигнатур всех методов).

Нет, совершенно необязательно всех.

> Да ты же упоротый!

Анонимусы такие анонимусы. Следующий!

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

> "Если Вы такие умные, что ж Вы строем не ходите ?" - так что-ли ?

В принципе, да.

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

> Что-то? А можешь обосновать?

А что не понятно? В ретурнами посередине функции, control flow получается запутанный, это все равно, что goto. Программировать необходимо структурально и понятно.

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

>Давай ка заменим слово "наследование" на subclassing, может тогда ты осилишь понять, что реализация интерфейса это не сабклассинг.

Наследование это декларация принадлежности типа к какому-то множеству. Множественное наследование - к нескольким множествам.

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

> ретурнами посередине функции, control flow получается запутанный, это все равно, что goto.

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

Самая большая проблема это не ретурны, а сайд эффекты. Вот этого, да, надо избегать. Но "избегать" а не выкручивать руки средствами языка. В жабе вон - уже довыкручивались, scala после этого как бальзам на раны, несмотря на гораздо более строгую типизацию.

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

> Класс обладает не объединением, а пересечением свойств всех его элементов.

Согласен, здесь я и ошибся. Если исходить из определения классификации, то да, класс - это пересечение, а не объединение. Т.е. класс - это множество _общих_ свойств, присущих представителям класса. Признаю, каюсь.

> 1) Рассмотрим класс грибов и образец Puzan

> 2) Все грибы дышат (потребляют кислород, выделяют углекислый газ)

...

> 6) Но тем не менее, он гриб :)

Исходя из вашей классификации, все мы тут грибы.

> А вы - двоечник.

А вот обзываться нехорошо.

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

> Исходя из вашей классификации, все мы тут грибы.

классификация основана на Вашей логике, впрочем, Вы уже поняли свою ошибку

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

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

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

> А что не понятно? В ретурнами посередине функции, control flow получается запутанный, это все равно, что goto. Программировать необходимо структурально и понятно.

Ну что за толстый троль? Множественные точки выхода как раз могут упростить control flow убирая ненужные проверки вида if (status == STATUS_SUXXESS)

anonymous
()

буGоGо :)

имя для языка уже давно было занято

golang.org -> Issue tracker -> I have already used the name for *MY* programming language

I have been working on a programming language, also called Go, for the last 10 years. There have been papers published on this and I have a book. I would appreciate it if google changed the name of this language; as I do not want to have to change my language!

ЗЫ: Goo тоже занято (полудохлый диалект лиспа)

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

>> Исходя из вашей классификации, все мы тут грибы.

> классификация основана на Вашей логике, впрочем, Вы уже поняли свою ошибку

Нифига. Исходя из вашего определения грибов, как раз по правильной классификации мы все грибы. Если "Все грибы дышат (потребляют кислород, выделяют углекислый газ)" является классификацией грибов, то не важно, есть у тебя руки/ноги/голова, ты все равно гриб.

В общем, думаю надо с этим заканчивать. Все равно не по теме спор.

Лучше скажите мне, есть ли объектно-ориентированный язык, как замена C, для применения во встраиваемой технике (в т.ч. в realtime)? С++ не подходит из-за большого и динамического runtime (можно, конечно, использовать только часть C++, но как-то это некрасиво). Когда-то ипонцы решили сделать такой путем обрезания C++ (EC++), но что-то это не вышло за пределы их страны. Язык должен быть предсказуем как по времени выполнения, так и по расходу памяти, т.е. никаких интерпретаторов, гарбаж-коллекторов, динамической типизации и пр.

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

> Ты бы хоть на один аргумент что-то отписал конструктивно.

Я отписал. До вас сразу не дошло. А тратить время на анонимусов глупо. Следующий!

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

> Лучше скажите мне, есть ли объектно-ориентированный язык, как замена C, для применения во встраиваемой технике (в т.ч. в realtime)?

Pascal. Ada.

> С++ не подходит из-за большого и динамического runtime

ООП подразумевает динамический рантайм. Он нужен для диспетчеризации.

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

Pascal не ОО, Ada слишком тяжелая с огромным рантаймом. Уж лучше Oberon.

> ООП подразумевает динамический рантайм. Он нужен для диспетчеризации.

Вовсе нет. В обльшинстве случаев диспетчеризацию можно сделать статически (или псевдодинамически), на базе таблиц.

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

robot12

А что, есть другие задачи ? :) LOL

Конечно: повышение ЧСВ автора, а также его ценности в глазах крупных компаний. А программы обычно пишут на С/C++.

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

> Лучше скажите мне, есть ли объектно-ориентированный язык, как замена C, для применения во встраиваемой технике (в т.ч. в realtime)? С++ не подходит из-за большого и динамического runtime (можно, конечно, использовать только часть C++, но как-то это некрасиво). Когда-то ипонцы решили сделать такой путем обрезания C++ (EC++), но что-то это не вышло за пределы их страны. Язык должен быть предсказуем как по времени выполнения, так и по расходу памяти, т.е. никаких интерпретаторов, гарбаж-коллекторов, динамической типизации и пр.

Ada2005 ?

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

> Не будет она "адекватной". В первую очередь из-за GC. Си много где в риалтайме используется - какой там к чёрту GC.

Оно понятно что гарбаж коллекторы конечно костыль, и выделение на стеке со смарт поинтерами лучше. Мне именно присутствие ГК непонравилось. Почему во всех новых языках обязательно ГК, а не просто смарт поинтеры ? Они ведь гораздо красивее.

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

>Конечно: повышение ЧСВ автора, а также его ценности в глазах крупных компаний.

Интересно, кого из авторов Go Вы имели в виду ?

imho ни одному из них особенно представляться не нужно :)

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

> С какой стати ? Можно пример ?

Вообще, действительно, да. Если GC нет, диспетчеризация по первому аргументу, рефлекшна нет - то рантайм-среда и не нужна.

Тогда что с собой кресты таскают? Просто стандартная бублиотека такая раздутая?

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

> imho ни одному из них особенно представляться не нужно :)

Да и ценность в глазах крупной компании Google уже наблюдается :]

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

>Да и ценность в глазах крупной компании Google уже наблюдается :]

Ну да ... тжаль тов. Завалишин там не работает :)

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

> Тогда что с собой кресты таскают? Просто стандартная бублиотека такая раздутая?

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

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

> http://coding.derkeiler.com/Archive/Ada/comp.lang.ada/2009-02/msg00051.html > http://www.ghs.com/products/safety_critical/gmart.html

Запуск на голом железе - это частный случай (спорить о терминах больше не буду), интересно другое, какой объем рантайма?

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

Собственно, GSTART реализует этот профиль (вторая ссылка).

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

> интересно другое, какой объем рантайма?

libada - 3.1Mb

минимальный бинарь - 425Kb (правда здесь уже и многозадачность, и эксепшены и ещё куча всего)

Но нужно учитывать что можно пересобрать стандартную библиотеку оставив только то что надо. Первая ссылка как раз про это и была.

Плюс сколько там памяти в среднем эмбедеде счас используется ?

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

> Плюс сколько там памяти в среднем эмбедеде счас используется?

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

Вот для средних и больших можно и линукс и C++ и даже питон с явой, а для маленьких и совсем маленьких такой подход уже не прокатит.

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

> а для маленьких и совсем маленьких такой подход уже не прокатит.

Сдаётся мне, что здесь кроме Си ничего и не надо, т.к. вся мощща той же Ады врятли будет востребована.

Правда стоит отметить, что некоторым производителям хочется оторвать всё что болтается за качество их библиотек, особенно когда одни хидера под кучу архитектур с вагоном #ifdef. Вот тут и понимаешь, что препроцессор - зло, причём зло в квадрате, когда его так используют.

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

>Просто стандартная бублиотека такая раздутая?

Я как-то давно увлекался максимальной минимизацией бинарей под виндой и могу сказать про три вещи цепляющиеся за stdlib ограмным месивом из соплей: а) Глобальные и статические объекты и тот код который приклеивается перед main() и вызывает конструкторы глобальных статических объектов. б) Экзепшены и RTTI цепляются всем чем только можно - если где-то в коде есть экзепшены и dynamic_cast, то линкер ругается на огромную кучу неотрезолвленных символов если линкуемся без RTL в) ::operator new()/::operator delete(). Можно написать свой new/delte на базе BSD кода и примитивов ОС и пользоваться глобальными указателями на объекты вместо глобальных объектов инициализируя их в main(), но когда в дело входит RTTI и экзепшены возможность разглючить это болото представляется маловероятной. Старым реализациям C++ stdlib и STL было достаточно только new/delete, новые походу используют все фичи С++.

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

> Сдаётся мне, что здесь кроме Си ничего и не надо, т.к. вся мощща той же Ады врятли будет востребована.

В общем, вся мощща Ады и не нужна, но и простого C недостаточно. Хочется большей абстракции.

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

> Хочется большей абстракции.

Отрываем при пересборке от libada всё что не нужно - exceptions, multitasking, etc... проставляем прагмы - и вперёд. Там много чего оторвать можно - концепция того же рандеву требует крайне нехилой поддержки со стороны рантайма, а обойтись без неё можно, если хочется. Встраиваемые системы при проектировании Ады всегда учитывались, она собственно для них и создавалась.

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

> на embed-девайсе с мозгами ~5-10Кб и никакущим сравнительно процом?

На таком, конечно, нет, а если в 10 раз больше, то вполне.

Никакущесть проца - весьма относительное понятие.

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

> Почему во всех новых языках обязательно ГК, а не просто смарт поинтеры ? Они ведь гораздо красивее.

да, пациент, вам совсем плохо

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

Бендером и Фраем изобретен язык Be - в нем нет ни одного оператора, но есть свои казино и шлюхи...

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

>Кресты бесследно для психики не проходят, нет.

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

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

> Наверно любая запутанная и притянутая за уши концепция с кучей противоречий и исключений привлекает кучу фанатичных зубрилок

...и порождает калЕк и ниасиляторов, которые фанатично ненавидят концепцию.

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

>> Наверно любая запутанная и притянутая за уши концепция с кучей противоречий и исключений привлекает кучу фанатичных зубрилок

>...и порождает калЕк и ниасиляторов, которые фанатично ненавидят концепцию.

Лавуазье видимо ниасилил флогистон.

Absurd ★★★
()

> In Go the rule about visibility of information is simple: if a name (of a top-level type, function, method, constant or variable, or of a structure field or method) is capitalized, users of the package may see it. Otherwise, the name and hence the thing being named is visible only inside the package in which it is declared. This is more than a convention; the rule is enforced by the compiler. In Go, the term for publicly visible names is ''exported''.

Вот что надо было указать в шапке в кратком описании. Такого даже в питоне не наворотили.

Каждому языку по фиче - у питона индентация matters, у Брэма скобки несбалансированы, тут вот - уважительное наименование "публичных" имен, с большой буквы. Где еще какая трава?

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

а чего ему там не быть? golang использует lib9, т.ч. и utf8 есть.

beastie ★★★★★
()

Что то сдается мне что "goto" эволюционирует.

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