LINUX.ORG.RU

Язык программирования Go. Стоит ли?

 


0

3

Собираюсь взяться за этот ЯП. Есть что о нём сказать плохого? Пробежал глазами по гайду - вроде, ничё так, симпатичненько. Радует, что он компилируемый. Это гарантирует приемлемую скорость выполнения. Метайте критические стрелы.



Последнее исправление: maxcom (всего исправлений: 5)
Ответ на: комментарий от anonymous

да?

О'кей. Мне вот интересны девушки. И? Также не могу найти время и для них в том числе.

/* короче The end */ - от меня слишком много офтопа.

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

Покажи пример кода, который бы работал и при этом был бы написан без малейшего понимания. AI пока что не изобрели, я не верю, что такое возможно.

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

Покажи пример кода, который бы работал и при этом был бы написан без малейшего понимания.

string Str=RadDateTimePicker1.SelectedDate.ToString();
            SqlConnection myConn =
new SqlConnection("Data Source=LPThink;Initial Catalog=Zayavka;Integrated Security=True");
SqlCommand myCmd =  new SqlCommand("UPDATE AKT_NARIAD SET  date_vipolnenia=\'" +
                   str + "\' WHERE id_akt_nariad=" + RadComboBox3.SelectedValue.ToString(), myConn);
myConn.Open();
try
{
    myCmd.ExecuteNonQuery();
}
catch (Exception exp)
{

}
myConn.Close();

вот пожалуйста. Код из чьего-то курсового. Был составлен методом копипаста, тыка(особенно строки подключения). С появлением освоивших LINQ, необходимость в тыке отпала полностью: все делается мышкой и копипастой. И это, я вам доложу, не самый худший пример.

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

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

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

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

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

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

А шарп то тут при чем? Что, только для него визардов да визуальных редакторов понаделали, что ли? Сам по себе шарп не упрощает никак работу этим самым редакторам.

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

И что тут такого специфичного для шарпа?

В шарпе вообще нет ничего специфичного, похоже, в этом и вин.

Что, только для него визардов да визуальных редакторов понаделали, что ли?

Ну и у какого ещё языка есть такой набор? (сам спросил, сам ответил - VB)

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

Я жду, пока кто нить скажет что питон имеет С-подобный синтаксис;-)


Ну, в википедии написано, что ГВР «использовал наиболее непротиворечивые конструкции из Си», так что в некотором роде это так.
Правда, там же написано, что в Python строгая типизация, с чем кое-кто несогласен ;).

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

Правда, там же написано, что в Python строгая типизация, с чем кое-кто несогласен ;).

Википедия прекрасна! http://ru.wikipedia.org/wiki/Строгая_типизация

Строгая типизация подразумевает выполнение следующих обязательных условий:

...

4) Неявное преобразование типов не допускается (то есть транслятор воспринимает любую попытку использовать значение не того типа, который был описан для переменной, параметра, функции или операции, как синтаксическую ошибку).

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

вот здесь:

Неявное преобразование типов не допускается

в частности про метод __coerce__ слышали?

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

либо набирают тех, кому на другое место не устроитЬся

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

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

В шарпе порог вхождения довольно таки высокий.

начальный порог вхождения там довольно-таки низок.

И лямбды тебе, и генерики, и линки всякие.

а это к _порогу_ вхождения отношения не имеет. Опять же, когда я лет 9 назад первый раз с шарпом столкнулся, ничем из этого ещё и не пахло

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

можно писать ничего вообще не понимая

Отличный язык.

жесть

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

я удивлен, почему ещё лисп с хаскелями не упомянули

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

Я даже слышал про функцию coerce).
Какое же это неявное. Четко прописанные логичные правила, которые любой более-менее опытный питонописатель знает, и которыми к тому же можно управлять.
Но вашу позицию по этому вопросу я понял.

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

Какое же это неявное.

Ну метод __coerce__ то вызывается автоматом если есть. Так что вполне себе неявное. Я бы сказал, что это способ задания правил для неявного преобразования типов (неявного - потому что не приходиться писать явного приведения). И где после этого строгость типизации?;-)

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

AIv ★★★★★
()
Ответ на: комментарий от quantum-troll

Оно весь gtk статично прилинковывает что-ли?

Можно посмотреть что динамически линкуется и какие символы содержит бинарник с помощью ldd и readelf.

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

C# прекрасен уже тем, что на голову лучше Сипипи. Ругать его есть за что, но в целом вполне юзабельная для продакшена вещь.

matumba ★★★★★
()

Уж лучше на F# обратить внимание.

le_legioner ★★
()
Ответ на: Go 1 от anonymous

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

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

Почему не бывает? Есть языки(вроде Go), которые позиционируют себя как языки сугубо практические, но при этом не нацелены на новую нишу и не могут соперничать(нет преимуществ) с теми языками, которые уже имеют существенные позиции в данной нише. У Go ужасный не читаемый синтаксис(не понятно, как смотря на элегантный питон, можно было сделать такого урода). У Go нет никаких семантических плюшек, которые бы давали преимущества ему(как инструменту) на практике. Да и просто «цепляющего» ничего нет... Не «влюбишься»...

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

элегантный питон

Это шутка такая, да?

У Go нет никаких семантических плюшек, которые бы давали преимущества

Выше уже рассказали про «плюшки», мог бы и почитать.

Создатели позиционируют его как среднее между портабельным ассемблером и java-like языками. И он в эту нишу отлично встает.

И «влюбляться» тебя никто не заставляет, продолжай «любить» питон.

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

Так читал же и игрался. Вы про goroutine и channels? И что в них такого особенного? На практике как обычные треды и обычные же безопасные механизмы межтредного обмена. Просто синтаксического сахара. Если ошибаюсь, то поправьте меня.

И мне не только питон нравится. Есть много хороших языков. Да даже страшненький С++ и то ничем не хуже Go...

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

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

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

Так читал же и игрался. Вы про goroutine и channels? И что в них такого особенного? На практике как обычные треды и обычные же безопасные механизмы межтредного обмена. Просто синтаксического сахара. Если ошибаюсь, то поправьте меня.

goroutine - это не обычные треды, это light-треды. Тысячи работающих горутин - не проблема. Кроме них есть еще утиная типизация, возврат нескольких значений из функции, замыкания, defer (это вовсе не finally, как некоторые хотят представить), наконец сборщик мусора. А самое главное - простой, понятный и чистый язык без подводных камней (но с багами, что есть следствие молодости), он мне нравится почти так-же, как scheme.

Да даже страшненький С++ и то ничем не хуже Go...

А C++ - это, извините, клоака. В пример можно привести разницу между плановым языком «эсперанто» и любым натуральным языком. Так вот C++ - это как натуральный язык - куча правил, куча исключений, 15 времен, 20 падежей, да еще и несколько наречий. А Go - эсперанто (по крайней мере пока).

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

А Go - эсперанто

Надеюсь только, что Go будет популярнее эсперанто :)

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

goroutine - это не обычные треды, это light-треды.

light-треды в ерланге, здесь свой подход. Причем оно мапится на треды, но при этом может «покинуть» тред. Все это можно было сделать обычный библиотекой, кстати. В других языках это будет делаться тредами, фиберами, генераторами, сопрограммами и т.п., в зависимости от задачи. Никаких революций.

Кроме них есть еще утиная типизация

Она есть почти во всех динамических языках, в C++(!) за счет шаблонов(в динамике вы можете обеспечить автоматическое создание обертки над объектом, за счет тех же шаблонов), в Haskell за счет тайпклассов(условно).

возврат нескольких значений из функции

Любой язык с кортежами. И даже в кривом С++.

замыкания

Практически любой язык. И даже в кривом С++.

defer

Недоделанный RAII из кривого С++. В D и то лучше сделали.

наконец сборщик мусора

И где его нет? Даже к кривому С++ можно прикрутить. Кроме того, в кривом С++ гораздо меньше мусора производится, а большая часть памяти находится просто во владении автоматически разрушаемых объектов. Соответственно GC нужен в достаточно редких случаях, когда есть циклы и не подходит подсчет ссылок. Но для этого есть сторонние сборщики.

А самое главное - простой, понятный и чистый язык без подводных камней

Это пока им не начали широко пользоваться. Там и камушки всплывут. На счет простоты... Не согласен. Один нечитаемый и неудобный в написании синтаксис чего стоит... Как такое вообще читать и рефакторить?

scheme

Но хоть в этом мы сходимся. Хороший язык.

А C++ - это, извините, клоака

Согласен. Но ему пока нет лучшей альтернативы(кроме чистого Си) для тех задач, где его приходится использовать. Почему я так «наезжаю» на Go? Я надеялся на него. Как и на D. Но посмотрев на оба этих языка, я понял, что потихоньку переводить на него те проекты, что я писал и пишу на С++, нет никакого смысла. Каким бы уродом не был С++... То, что могу, я пишу на Python. Попытался прикрутить еще scheme через guile, но, как-то все плохо... Под JVM пишу(редко правда приходится) на скале :)

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

вокруг Go

всё есть во всём(если всё есть набор тюринг-полных)

вопрос что облегчено для использования для кодера - то впервую очередь и будут использовать не задумываясь (и часто незная альтернатив ибо излишне)

в том же С for(;;){блабла} vs label r;.... r: блабла goto r;

в том же С set/long jump и обмазывайся замыканиями ну и страдай при этом синдромом A-234

Cоздатели(Троица) считают что нуна многопоследовательность,автономность от библиотек при рантайме(стат линк), принижение эксепшенов(совмещение границы функции с отрабатыванием исключения), вагон ставших общих местом нюансов(т.е снижение числа мест где пользователю-кодеру дозволено своивольничать ) которые принудительно закрепили на уровне синтаксиса, ну и так же важно инструментальная обвязка «go чёнадо» т.е выглядит как попытка вытеснить старое окружение (mk прибили?)

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

Так не видно, чтобы на go было проще. Никакой существенной разницы(в отличие от ваших примеров с goto и longjmp). Да и библиотеки делают ровно тоже самое. Да и создание ниток и сопрограмм в Ruby делается ничуть не сложнее. Впрочем, даже в С++11 нитки создаются так же.

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

Ограничения на уровне синтаксиса... Это вы о чем?

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

примите во внимание что в «ядре мира» сейчас дефицит людей занятых в программирование(которое программирование в противоположность изменения констант в шаблоне и его повторная компиляция :) ) из этого по инету различные курсы(бесплатные для скоутинга людей)

ща ситуация(в программирование оборудования наряду с программированием документооборота) перешла на стадию когда как в арифметике вместо римской записи начали массово использовать арабскую нотацию . т.е сейчас ситуация «программирование вторая грамотность» всё острее и острее.

мелочь с прибитием гроздями K&R стиля скобочек (go fmt из коробки) а по серьёзному есть куча другого так же прибитого гвоздями для уменшения цены вхождения.

go со своим рантаймом и статической сборкой при некотором усилии может билбит операционку - на голое железо - дрова как нити и рантайм процессов - получаем многозадачную ось :) src/pkg/runtime/tiny/README

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

Никаких революций.

А про революцию и нет речи. Это эволюция.

Практически любой язык. И даже в кривом С++...

В С++ это всё нужно прикручивать, прибивать, приклеивать и т.д. Он и так монструозен, а с этим всем прикрученым богатством в десять раз монструозней. Как уже сказали, всё везде есть, но в не во всех есть всё.

С эрлангом, руби некорректно сравнивать, у Go другая ниша, пересекающая с ними, но всеж другая.

D - да, неплохой язык, но как-то вяло. И постепенно он тоже заплывает жиром.

Но ему [C++] пока нет лучшей альтернативы(кроме чистого Си) для тех задач, где его приходится использовать.

Проблема в том, что С++ позиционирует себя как язык для всего на свете - от программирования микроконтроллеров до ентерпрайза (даже до веба!). А программисты вдутся на это, и суют его куда ни попадя. Вот например я пол года назад писал на нем одну системку компьютерного зрения. И вот сейчас смотрю на код, и вижу, что на Go получилось бы значительно красивей и проще.

После Go мне нравится Java, я на ней долго писал, с java-1.2 до java-5, в основном только положительные впечатления (если не считать излишне сложную стандартную библиотеку (забыл как она там правильно называется))

А вообще, основное мое занятие - написание очень низкоуровнего кода, где у С альтернатив нет (а я искал, пробовал. Много языков есть, но хуже С лучше нет). И С++ там тоже неплох, но только если выбросить 2/3 языка.

В общем, посмотрим что будет дальше. Мне кажется, у Go есть будущее, надеюсь на это. Жаль только С им не заменить.

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

А про революцию и нет речи. Это эволюция.

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

В С++ это всё нужно прикручивать, прибивать, приклеивать и т.д. Он и так монструозен, а с этим всем прикрученым богатством в десять раз монструозней.

Да все там просто делается. Вон та же scala(на которой я иногда таки пишу) гораздо сложнее.

Сложность С++ как правило скрывается в потрохах библиотек(своих собственных или же общедоступных, вроде boost - да там адовая жесть), на поверхность выставляются простые интерфейсы, использовать которые не сложнее, чем плюшки go.

D - да, неплохой язык, но как-то вяло. И постепенно он тоже заплывает жиром.

Ага. Потому и говорю, что тоже разочаровал он меня.

Проблема в том, что С++ позиционирует себя как язык для всего на свете - от программирования микроконтроллеров до ентерпрайза (даже до веба!). А программисты вдутся на это, и суют его куда ни попадя.

Это проблема программистов. Я даже к демонам скриптовые движки прикручиваю(js(v8) или python) для тех подсистем, что требуют гибкости и не требуют скорости...

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

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

свойство С++ - программист должен знать какие фичи с какими вредно сочетать

т.е язык (+ STL + ...) настолько разнообразен что всегда есть где подкрутить для выжимания ещё 0.(0)1% - поэтому работай прогером С++ - работа есть всегда

qulinxao ★★☆
()

Стоит ли?

Стоит:)) Но не не язык программирования;/

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

Так что вполне себе неявное.

Тогда мне известен только один язык со строгой типизацией - OCaml, остальные умеют хотябы int => double неявно преобразовывать.

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

И даже в кривом С++.

Да, всё это можно даже в чистом си. Но суть не в этом.
Го — язык, где все эти фичи наконец-то реализованны _чисто._ Полиморфизм обеспечивается не монструозными шаблонами и структурным ООП, а интерфейсами, аналогичными классам типов хаскеля (кстати, не там много _императивных_ ЯП с подобной системой типов. Кто там был первым, Newsqueak?), вывод типов избавляет от необходимости пиать нечто вроде foo::Foo *myFoo = new foo::Foo(foo::FOO_INIT), сборку мусора не надо прикручивать откуда-то сбоку.
Да, где угодно можно возвращать несколько значений с помощью кортежей, но суть в том, что в го это можно сделать _без_ кортежей.

синтаксис

Да, он _специфичен,_ но при он вполне последователен. На самом деле, он испытал влияние Pascal/Modula/Oberon, которые вызывают у многих необдуманное раздражение.
Немного телепатии: тебе, наверняка, не нравится ЯП ruby. Дело в том, что язык ruby позаимствовал синтаксис у elffel, который испытал влияние языка ada, который, в свою очередь, наследует синтаксис Pascal.

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

Да, всё это можно даже в чистом си.

Нет, большая часть того, что там написано, в С фактически не реализуемо. А вот в кривом С++ вполне.

Полиморфизм обеспечивается не монструозными шаблонами и структурным ООП, а интерфейсами, аналогичными классам типов хаскеля

Я не вижу много хорошего в том, что все виды полиморфизма делаются одним средством. Кстати, в том же Haskell ad-hoc и параметрический полиморфизмы реализованы разными средствами. А в контексте «системного» языка со статической типизацией, полезно разделять ещё и ad-hoc времени компиляции и ad-hoc времени выполнения.

вывод типов избавляет от необходимости пиать нечто вроде foo::Foo *myFoo = new foo::Foo(foo::FOO_INIT)

Вывод типов есть даже в кривом С++.

Да, где угодно можно возвращать несколько значений с помощью кортежей, но суть в том, что в го это можно сделать _без_ кортежей.

А вы чувствуете разницу, скажем, с питоном(где это делается через кортежи)?

сборку мусора не надо прикручивать откуда-то сбоку.

И это не очень хорошо. Нужна хотя бы возможность отключать ее(и при этом спокойно жить, за счет других языковых механизмов, вроде деструкторов в кривом С++), как в D, например.

тебе, наверняка, не нравится ЯП ruby

Нравится :)

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

Вывод типов есть даже в кривом С++.

Ты про C++11? Тогда да.

А вы чувствуете разницу, скажем, с питоном

Я больше знаком с руби и хаскелем, чем с питоном, там достаточно редко используются подобные приёмы.

в контексте «системного» языка

Го скорее прикладной язык, нежели системный.

Нужна хотя бы возможность отключать ее

Разработчики языка явно не хотели мешать высокоуровневое с низкоуровневым. Есть cgo, который позволяет использовать код на си, http://golang.org/doc/articles/c_go_cgo.html
---
Преимущество го в том, что в отличие от языков-свалок вроде C++, D и других подобных, он был разработан как целостный ЯП. Без стратегии вроде «мы берём си и как-то прикручиваем к нему несколько фич, затем кое-как прикручиваем к нему ещё несколько фич, а зачем криво прибиваем ещё более 9000 фич» или «мы сделаем си++-подобный язык, который будет поддерживать практически всё, что угодно». Аналогично раньше разрабатывали практически только скриптовые и функциональные языки.
Кратко: го — простой и последовательный язык, простой не только в использовании, но и в устройстве. Прогресс тут не столько в добавлении новых фич, сколько в отрезании избыточного и монструозного, и создании из оставшегося цельного языка.

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

Вы можете проиллюстрировать целостность и простоту впротивовес «свалке» каким-нибудь интересным примером?

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

У языка всего 25 ключевых слов, исходный код реализации с библиотеками занимает 20 МБ, а полное описание языка умещается в 48 страниц (описание языка С++11 занимает около 400 страниц, полная спецификация — страниц 1300). Хотел привести пример проекта, но они слишком мелкие. Зато нашёл https://github.com/webrocket/webrocket

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

В ужасном С++ ключевых слов примерно в два раза больше. Возможностей, на мой взгляд, то же. Относительно 400 страниц. Не путайте справку со стандартом. Цели разные. Да и вообще это само по себе ни о чем не говорит. По ссылке посмотрел на код, ничего выдающегося не заметил, кроме того, что читается код все-таки плохо.

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

Я использовал не справку, а вот это:
http://golang.org/ref/spec

Да и вообще это само по себе ни о чем не говорит

Это даёт некоторое представление о размере самого языка.
---
Слишком мало крупных проектов на го. Отдельные куски кода и отзывы о языке совершенно не наглядны (это всё-таки не хаскель).

quantum-troll ★★★★★
()

Язык отличный. Но тебе учить не советую. Не нужен ты нам.

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