LINUX.ORG.RU

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

 , , ,


0

0

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

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

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

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

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

★★★

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

>...и вершины ООП С++.

Ето шютка-юмора такой? Да?

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

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

>однако я не верю в нее :-)

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

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

> У вас просто проблема с русским языком. Вы неверно понимаете словосочетание "частный случай". Класс представляет собой частный случай неймспейса потому, что КАЖДЫЙ класс ЯВЛЯЕТСЯ неймспейсом. Т.е. класс = неймспейс + прочие свойства. А не наоборот.

Это у кого-то другого проблемы с русским языком, и с логикой. Если класс частный случай, то как раз должно быть "класс = неймспейс - подмножество_свойств_неймспейса". МИНУС, мля.

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

> Ну тогда скажите, в каком месте это входит в вашу мантру "наследование, инкапсуляция, полиморфизм"? Или всё-таки Generic Programming есть надстройка над ООП?

Дарагой друк, ты типерь в игноре. Устал я от твоей глупости.

Перевожу для тебя то, что ты сам написал:

"Сахар, - белый; Чай, - горячий; Белый и горячий, - сладкий чай. А вовсе не белый карлик."

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

> Неа. Сначала по первому, а потом ещё может по перегрузкам методов. Короче, сам чёрт ногу сломит.

Нет, по перегрузкам методов диспатч идет во время компиляции, он не зависит от динамических типов. Это ненастоящий диспатч, с тем же успехом можно давать методам разные имена. Overriding vs. overloading.

faustus
()

Скачал, заглянул в стандартную библиотеку, всплакнул, стер и помыл руки с мылом.

Будь у меня ежедневно на работе 20% оплаченного конторой свободного времени, я бы все равно не стал писать с нуля имплементацию zlib/png/tls/xml на некоем языке...

Желаю удачи. Она им очень понадобится.

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

> для простоты объяснения возьмем множетвенное наследование (МН)

Не вижу связи между множественным наследованием и простотой.

> в тип-наследник, который может быть записан (в плюсах) как МН<Тип1,Тип2>

Зачем?

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

> в языках со статической проверкой типов виртуальный метод *может* быть использован для динамической проверки, однако это не значет, что он *является* динамической проверкой типа

Он именно ей и является. По определению.

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

>Будь у меня ежедневно на работе 20% оплаченного конторой свободного времени, я бы все равно не стал писать с нуля имплементацию zlib/png/tls/xml на некоем языке...

Ну нужно же чтобы обкатать язык что-то на нем написать для начала.

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

> Это у кого-то другого проблемы с русским языком, и с логикой. Если класс частный случай, то как раз должно быть "класс = неймспейс - подмножество_свойств_неймспейса". МИНУС, мля.

Вы тоже плохо знаете русский. Кроме того, хамите. Это печально. А ещё бабочку напялили.

http://mirslovarei.com/content_psy/CHASTNYJ-SLUCHAJ-31741.html

Если А - частный случай Б, то А обладает ВСЕМИ свойствами Б. Понятно?

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

> Нет, по перегрузкам методов диспатч идет во время компиляции,

При компиляции, после компиляции - это уже частности. Как реализуете - так и будет. Главное, что название метода одно, а поведения - разные.

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

> Дарагой друк, ты типерь в игноре. Устал я от твоей глупости.

Ох уж эти невежи, такие ранимые.

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

> Будь у меня ежедневно на работе 20% оплаченного конторой свободного времени, я бы все равно не стал писать с нуля имплементацию zlib/png/tls/xml на некоем языке...

Ну я думаю им не хотелось мешать managed-код с чужими unmanaged-библиотеками.

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

Увы и ах, в Go ни о какой динамической линковке речи не идет. И возможности как-то связаться со статической либой на С, тоже пока не обнаружено. Потому и налисапедили они свою стандартную библиотеку с нуля...

% 8g hello.go % 8l hello.8 % ./8.out hello, world % ldd ./8.out statically linked

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

faustus

Вообще, если по уму, то return тоже нужно запретить. А значения возвращать как в Матлабе.

Не троллинга ради, а только просвещения для: почему нужно запретить return и как возвращают значения функции в Матлабе?

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

И, кстати, размер 8.out - 580k. strip отказался браться за этот бинарник... Делаем выводы.

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

> Не троллинга ради, а только просвещения для: почему нужно запретить return и как возвращают значения функции в Матлабе?

Потому что return в середине функции - это тот же goto, только в профиль. 21-й век на дворе, пора уже сообществу программистов осилить структурированное программирование (про ООП я вообще молчу).

В Матлабе же в прототипе функции определяется переменная, которая и содержит возвращаемое значение. Это эквивалентно определению переменной в начале функции, и возвращению её в конце функции.

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

> как возвращают значения функции в Матлабе?

Примерно как в паскакале:

function area = traparea(a,b,h) area = 0.5*(a+b)*h;

function [r,theta] = cart2plr(x,y) r = sqrt(x^2 + y^2); theta = atan2(y,x);

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

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

> Потому что return в середине функции - это тот же goto, только в профиль.

Ога. Долой return, даёшь call/cc!

> 21-й век на дворе, пора уже сообществу программистов осилить структурированное программирование

Если в вашем понимании это добровольное создание себе сложностей на пустом месте - то лучше не надо.

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

>Увы и ах, в Go ни о какой динамической линковке речи не идет. И возможности как-то связаться со статической либой на С, тоже пока не обнаружено

В FAQ сказано что линковаться с либами на Си можно.

>И, кстати, размер 8.out - 580k.

HW на С++ с Intel C++ compiler и SGI iostreams вообще ~800 Кб занимал. Даже Мейерс на это жаловался.

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

> Если в вашем понимании это добровольное создание себе сложностей на пустом месте - то лучше не надо.

А я считаю - необходимо заставлять народ писать цельные, логичные программы. А не абы как, по пути наименьшего сопротивления - тут break, там return, свитчи еще суют везде. Пусть пишут структурально и с ООП. В конце получается красивый результат тогда, а быдлопрограммисты переходят на следующую ступень просветления.

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

Да, и правда в FAQ что-то про это есть. Однако это все пустые слова, ибо gccgo неюзабельно из-за вот этого:

Some Go features are not yet implemented in gccgo. As of 2009-11-06, the following are not implemented:

* Garbage collection is not implemented. There is no way to free memory. Thus long running programs are not supported.

* goroutines are implemented as NPTL threads with a fixed stack size. The number of goroutines that may be created at one time is limited.

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

> А я считаю - необходимо заставлять народ писать цельные, логичные программы.

Да. Но это достигается оргмерами, а не лишними ограничениями.

> А не абы как, по пути наименьшего сопротивления - тут break, там return, свитчи еще суют везде.

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

> Пусть пишут структурально и с ООП.

Почему не ФП? Там ещё цельнее и логичнее. Бряки и ретурны не существуют в принципе.

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

> * Garbage collection is not implemented.

Короче, оказывается, реализации языка-то ещё по факту и нет.

"А как дысал, как дысал!"

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

Позволю себе вмешаться в ваш спор.

По поводу "частного случая":

По ссылке, которую предоставил уважаемый yk4ever, дано следующее определение частного случая: "Вообще – любой образец в классе, который так или иначе _выделяется_ на фоне других". Исходя из определения, образец N1 класса A может не обладать всеми свойствами образца N2 класса А. Таким образом, если класс А - это совокупность свойств всех образцов, входящих в этот класс (т.е. N1+N2+...+Nn), то N1 (или N2 или Nn) может НЕ обладать ВСЕМИ свойствами класса А.

В итоге получается, что yk4ever не прав, и подтвердил свою неправоту ссылкой на определение частного случая. Вот такая логика.

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

> однако я не верю в нее :-)

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

не надо путать виртуальную машину (а ля llvm) и типизацию времени компиляции

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

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

> Почему не ФП? Там ещё цельнее и логичнее.

Ну, далеко не каждый быдлопрограммист осилит ФП. Для этого нужен интеллект.

> Бряки и ретурны не существуют в принципе.

А call/cc на что? Да та же лямбда, при правильном подходе, почище goto будет.

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

> то N1 (или N2 или Nn) может НЕ обладать ВСЕМИ свойствами класса А.

Тогда он не входит в этот класс. По определению.

Идите, идите уже в школу, учите матлогику. Выучите - поговорим.

yk4ever
()

> за счет системы модулей и явного указания зависимостей

Ну наконец-то они посмотрели, что изобрёл Вирт лет 20 назад.

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

> Тогда он не входит в этот класс. По определению.

Читайте определение до просветления.

Подсказка: все свойства Nn принадлежат классу А, но это не все свойства, которые есть у класса А. По другому: свойства Nn есть подмножество свойств класса А.

Если по вашему, то N1 = N2 = Nn.

> Идите, идите уже в школу, учите матлогику. Выучите - поговорим.

Может быть формулами написать для тормозов?

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

> Больше она нигде не прижилась из-за своей злобности.

Думаю, не из-за злобности, а из-за трудности эффективной реализации. Но можно добиться того же эффекта с помощью continuation passing style.

Зато call/cc очень мощная штука, я ей в свое время имплементировал coroutines - просто как небольшое задание на курсе. А тут - goroutines какие-то на уровне языка - велосипеды сплошные.

faustus
()

хорошая новость. общественность одобряет

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

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

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

> если по уму, то return тоже нужно запретить. А значения возвращать как в Матлабе.
Как будто все тут знают этот матлаб... К тому же проприетарный

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

Вот формулами:

Для простоты будем считать, что в классе A два образца N1 и N2.

"любой образец" - значит все образцы принадлежат классу А, т.е. A = N1 + N2, т.е. A * N1 = N1, A * N2 = N2,

"образец выделяется" следовательно N1 - N2 = K > 0, т.е. N1 = N2 + K и K * N2 = 0

Подставляем: A = N2 + K + N2 = N2 + K, и т.к. K * N2 = 0 получаем A != N2

Что и требовалось доказать.

PS: "+" объединение, "-" - разность, "*" - пересечение, "=" - равно, "!=" - не равно.

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

>Вот видите, как всё сложно с этим ООП. Каждый его как хочет, так и трактует. По-моему сложности с пониманием только у тебя. ООП - Объектно Ориентированное Программирование. Какое из этих трех слов тебе непонятно? Ключевое слово - объект. Объект это экземпляр класса. Класс подразумевает интерфейс, инкапсуляцию и наследование. отсюда и растут те самые 3 слова, без них нет класса, точнее теряется весь его профит. Наличие интерфейсов (как совокупности сигнатур методов) и наследования порождает виртуальные методы и полиморфизм (одно имя, разное поведение).

>Дактайпинг - это, по вашему, не полиморфизм? Это не полиморфизм. Это типизация. Но заодно открывает возможность к полиморфизму. Строгая типизация к ООП имеет весьма опосредованное отношение. Просто в ООП со строгой типизацией жить гораздо проще, т.к. компилятор следит за соответствием типов. Утиная типизация не менее строга, чем проверка наследования от какого-то класса (по сути та же проверка интерфейса, но более тупая).

>наследование - это всего лишь реализация интерфейса, неявно определённого предком. Когда есть интерфейсы - наследование не нужно. Это неверно. Что, если нужно общее поведение у нескольких типов? Уверен, что наследование в большей степени было придумано для этого, а не для сохранения интерфейса.

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

> Как будто все тут знают этот матлаб... К тому же проприетарный

Ну как в Паскале.

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

> Три вложенных цикла, где из внутреннего надо вывалиться совсем наружу. Это для гото вообще основной валидный юзкейс.

Согласен. Хотя можно ввести флаг и три раза написать break. Но это более громоздко.

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

> Мне больше про юникс понравилось.

Только ты ее не понял.

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

>"любой образец" - значит все образцы принадлежат классу А, т.е. A = N1 + N2, т.е. A * N1 = N1, A * N2 = N2,

неверно.

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

> Согласен. Хотя можно ввести флаг и три раза написать break. Но это более громоздко.

это вдобавок тормозит, не функционально (и не распараллеливается)

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

www_linux_org_ru

разница не столько в образовании, а в попытках задуматься «а не чушь ли я пишу»; образование, однако, этому способствует

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

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

>> * Garbage collection is not implemented.

>Короче, оказывается, реализации языка-то ещё по факту и нет.

Их две. Родная не линкуется с кодом gcc.

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

yk4ever

Хихи. Дактайпинг - это, по вашему, не полиморфизм?

Что есть дактайпинг? Спрашиваю потому что предчувствую что гугль сразу научит плохому.

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

>> ..2056 год. в школах на уроках информатики детки пишут код своего генератора велосипедов языков

> Вам, уважаемый, видимо в школе не рассказывают про то что давно существует YACC :) LOL

OMG! Вас в школе мучали YACCок ((( У вас наверно даже в контру сыграть времени не было ( OMG!

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