Хабр Курсы для всех
РЕКЛАМА
Практикум, Хекслет, SkyPro, авторские курсы — собрали всех и попросили скидки. Осталось выбрать!
Немного не понял про трюки на clojurescript.
все же ее наиболее популярный продукт — vagrant, написан на руби, и это не мешает ему «осуществлять революции в серверах»
Если вас разочаровывает невозможность использования трюков ClojureScript, то Go это не то, что вы ищете.В статье по ссылке аргументированная критика языка с реальными примерами, а все что автор этой статьи из этого понял, что «нельзя делать как в ClojureScript»?
Сложилось впечатление, что язык хорош для крупных компаний, которые могут нанять больше человек и получить более-менее стабильный прирост производительности команды.
Я ещё понимаю, если бы статья была в стиле «хейтерс гона хейт, критики до свидания»
Вы опоздали на вечеринку. Некоторые могут жаловаться и плакать из-за этого
Вы опоздали на вечеринку. Некоторые могут жаловаться и плакать из-за этого
Основа команды авторов языка работает в одной корпорации и если ровно одному менеджеру достаточно высокого уровня придет в голову мысль «Надо бы кое-что значительно переделать в golang» команда авторов языка просто и незатейливо возьмет под козырек.
Ну а на данный момент Go по популярности конкурирует с такими замечательными языками как EXEC, Forth и Icon
Менеджер прийдет к Робу Пайку и скажет «нужно значительно переделать» и в Go поломают обратную совместимость? Хорошая у вас фантазия :)
но если у вас не возникает когнитивного диссонанса во время сравнения распространения Go, Forth и (что это вообще за языки?) Exec и Icon, то, видимо, вам просто не интересен реальный расклад, и вы о чём-то своём сейчас.
Да, добро пожаловать в мир корпоративной разработки. У Пайка, конечно, может быть вариант не согласиться с этим и уволиться. энтузиасты могут сделать 15 форков, но go будет развиваться так как захочет корпорация добра.
Ну, извините, что убиваю ваших идолов.
Хотите еще больше жестокости?
Теперь я попрошу вас, для «consistency», привести запрос к jobsearch.monster.com, который покажет популярность D.
Go победил в битве за свою жизнь.
type is x, что может привести к ошибкам другого рода. Хотя код, конечно, пахнет.)Любая конструкция в 50% случаев превращает код в месиво.
lair, чуть выше я спрашивал, считаете ли вы, что код не бывает более или менее читаемым. Вот эта фраза равозначна ответу «да».
вы считаете, что авторы Go неправы в том, что убрали различные конструкции из языка, потому что в долгосрочной перспективе они никак не влияют на читабельность кода.
До Go, последние лет 5, для меня «читать код стороннего проекта» практически 100% означало «столкнуться с говнокодом/»персональным" стилем/сложночитабельными конструкциями". В Go это стало приятным ежедневным развлечением, только и всего.
map[bool]int{true: a, false: b}[a > b]
func sum(a []int, c chan int) {
sum := 0
for _, v := range a {
sum += v
}
c <- sum
}
c := (map[bool]int{true:a,false:a-1})[a>b]
Не знаю как Вы, но я не вижу тут «загадочную читаемость» про которую Вы говорите
go sum(a[len(a)/2:], c), которая, также взята из официального источника. А приводил я эти сниппеты не потому что считаю их говнокодом, а лишь потому что для меня странно видеть людей которые ненавидят тернарный оператор, но очень легко принимают совершено «необычные конструкции», и при этом считают что язык программирования стимулируют писать говнокод.Замысел ваших сниппетов не слишком очевиден, но последний комментарий проясняет.Да, мне тоже показалось что стоит объяснить почему я этого сделал.
Вы почему-то автоматически мне приписали, что я на любой Go-код вешаю ярлык «читабельный код»Но разве это не Вы сказали что код Go в 90% случаев читабельный, понятный и доступный? Я не знаю откуда Вы взяли эти цифры, но допустим что это так. Однако, именно данная фраза послужила одной из причин приписывать, как Вы сказали, «ярлык читабельный код».
и приводите в пример не самый красивый в этом плане сниппетЯ взял 2 сниппеты из официального урока, чтобы показать что, даже без тернарного оператора в Go есть другие конструкции из-за которых код также становится не очень читаемым. И если в официальном уроке используются такие сниппеты, что же происходит в «закрытых» продуктах? Неужели там код пишут лучше? Не верю!
ещё и обвинили в «ненависти к ternary operator-у»Может я не использовал подходящее слово, но, сначала Вы пишите что в 50% случаев (опять используете какие-то загадочные цифры) тернарный оператор «это плохо» и говорите, что нужно его выпилить если хотим получить качественный код. Далее интереснее — Вы приводите пример кода чтобы доказать что тернарный оператор «это очень плохо» и что язык программирования стимулирует так писать. И наконец, t0pep0 говорит что «Go — хороший язык, в нем нет подобных конструкций». Я могу ошибаться, но раз Вы не видите другие странные конструкции кроме тернарного оператора, я подумал, что вы точно не любите его.
речь не идёт о бинарном делении на «читабельный» и «не читабельный», речь о статистической вероятности.Если вспомнить историю, то статистика подсказывает почему сейчас на Go написан так мало говнокода. А всё очень просто — сейчас, по сравнению с другими языками, Go используют только немногие и как я заметил, большинство из них действительно профессионалы. Но что будет, когда неопытные программисты (или индусы) будут переходить к Go? Вы думаете, отсутствие тернарного оператора будет сдерживать их написать говнокод? Или, может быть они больше не будут использовать по 1000 строк if/else вместо простой функции или цикла?
Я понял ваше несогласие с тем, что «та или иная фича способствует её неправильному использованию», но тут я даже не знаю что вам возразить. Мое убеждение в том, что авторы Go не с потолка взяли эти утверждения слишком сильно кореллирует с моим личным опытом.Что бы не говорили авторы языка Go, я никогда не поверю что в Go отсутствует говнокод поскольку он не поддерживает тернарный оператор (также как в других ЯП много говнокода из-за того что он поддерживается). Можно посмотреть на том же govnokod.ru, вряд-ли там так много примеров с использованием тернарного оператора. А вот чтобы подискутировать насчёт «потолка» — нужно открыть новую ветку комментариев, ибо, как мне кажется, тернарный оператор не используется в Go совсем по другой причине :)
Мне хотелось бы, чтобы такие важные в разработке вещи, как «читабельность кода» можно было легко измерять и формализировать, но пока что это увы не так.Полностью согласен с Вами. И я очень рад за это.
Но разве это не Вы сказали что код Go в 90% случаев читабельный, понятный и доступный? Я не знаю откуда Вы взяли эти цифры, но допустим что это так.
Я могу ошибаться, но раз Вы не видите другие странные конструкции кроме тернарного оператора, я подумал, что вы точно не любите его.
foo := bar ? 1 : 0foo := 0
if bar {
foo = 1
}Но что будет, когда неопытные программисты (или индусы) будут переходить к Go?
if !MatchesContentType("application/json", "application/json") {
t.Fail()
}
if !MatchesContentType("application/json; charset=utf-8", "application/json") {
t.Fail()
}
if MatchesContentType("dockerapplication/json", "application/json") {
t.Fail()
}
case "setup":
setup()
case "install":
pkg := "./cmd/..."
var tags []string
if noupgrade {
tags = []string{"noupgrade"}
}
install(pkg, tags)
case "build":
pkg := "./cmd/syncthing"
var tags []string
if noupgrade {
tags = []string{"noupgrade"}
}
build(pkg, tags)
case "test":
test("./...")
case "bench":
bench("./...")
case "assets":
assets()
case "xdr":
xdr()
case "translate":
translate()
case "transifex":
transifex()
case "deps":
deps()
case "tar":
buildTar()
case "zip":
buildZip()
case "deb":
buildDeb()
case "clean":
clean()
case "vet":
vet("./cmd/syncthing")
vet("./internal/...")
case "lint":
lint("./cmd/syncthing")
lint("./internal/...")
const exitstr = "exitcode="
cmd := `export TMPDIR="` + deviceGotmp + `"` +
`; export GOROOT="` + deviceGoroot + `"` +
`; export GOPATH="` + deviceGopath + `"` +
`; cd "` + deviceCwd + `"` +
"; '" + deviceBin + "' " + strings.Join(os.Args[2:], " ") +
"; echo -n " + exitstr + "$?"
output := run("shell", cmd)
case "":
priv, err = rsa.GenerateKey(rand.Reader, ctx.Int("rsa-bits"))
case "P224":
priv, err = ecdsa.GenerateKey(elliptic.P224(), rand.Reader)
case "P256":
priv, err = ecdsa.GenerateKey(elliptic.P256(), rand.Reader)
case "P384":
priv, err = ecdsa.GenerateKey(elliptic.P384(), rand.Reader)
case "P521":
priv, err = ecdsa.GenerateKey(elliptic.P521(), rand.Reader)
И потом, посмотрите следующею функцию (я взял её из официального источника где учат новичков что «такое Go»):
Также, как не вижу её в следующем фрагменте кода:
c := a - 1
if a > b {
c = a
}
c := (map[bool]int{true: a, false: a - 1})[a > b]
// причем именно так оно выглядит после go fmt, а то что вы привели - неизвестно откуда.
Однажды я пытался создать list<map> и мои синтаксические ошибки подняли мёртвых из могил
http://habrahabr.ru/post/203276/
Naked return statements should be used only in short functions, as with the example shown here. They can harm readabilit y in longer functions.
ни смотря ни на что
Почему Go обречён на успех (обновлено)