ufm: (Default)
[personal profile] ufm

Вобще язык поражает своей… Не знаю как это назвать. Неконсистенстностью?

Можно определить в модуле неэкспортируемый тип? Можно. И пользоваться этим типом снаружи не получится.

Но зато из этого модуля можно вернуть значение этого типа. Его можно присвоить переменной. И даже пользоватся этой переменной (методы там вызывать).

Но передать эту пременную в свою функцию — нельзя. Потому что нельзя описать параметр (тип-то не экспортируемый). А если параметр описать как interface{} — то передать можно, но толком пользоваться — нельзя. У interface{} нет методов, например. Хотя, я подозреваю, через reflect можно дотянуться и до методов, но это уде совсем через жопу.

Можно в функцию передать переменное число параметров? Можно.
Можно из функции вернуть несколько значений? Можно.
Можно сделать вложенный вызов, так, что-бы возвращенные значения ушли напрямую в функцию с переменным числом параметров? Можно, но только если не будет дополнительных параметров.
Зачем было делать возможность возвращать несколько значений? А вот что-б не как Цэ, что-б функция могла вернуть значение и флаг успешности.
О! Наверное можно написать err, a, b, c, d: := fmt.Scanf(«%d %d %d %d») ? Неее. Нельзя. У функции может быть несколько возвращаемых значений, но не может быть переменное число возвращаемых значений.

Классы есть? Ну… Есть структуры с методами. Но конструкторов и деструкторов — нет. Так что если что, то ручками вызывай, не обломишься.

Лёгкие сопроцессы есть? Есть. Но методов контроля за ними — никаких.

А, вот еще прикол:


loop:
for {
break loop
}

Называется — догадайся куда мы выйдем после break.

Originally published at U.F.M's Homepage. You can comment here or there.

(no subject)

Date: 2014-04-22 05:24 (UTC)
From: [identity profile] nms.livejournal.com
Пародия на C++? ;-)

(no subject)

Date: 2014-04-22 05:49 (UTC)
From: [identity profile] ufm.livejournal.com
Ну как по мне - так современное C++ сам на себя пародия. Я не представляю как люди на этом пишут. :)

(no subject)

Date: 2014-04-22 07:28 (UTC)
From: [identity profile] iley (from livejournal.com)
> Но конструкторов и деструкторов — нет. Так что если что, то ручками вызывай, не обломишься.

А какой смысл в деструкторах, если неизвестно, когда они будут вызваны? Практически во всех языках с GC так, посмотрите на Java, к примеру.
А для детерменированного освобождения ресурсов в Go есть defer.
Edited Date: 2014-04-22 07:29 (UTC)

(no subject)

Date: 2014-04-22 08:15 (UTC)
From: [identity profile] ufm.livejournal.com
Смысл в том, что они будут вызваны хоть когда нибудь.
Очень медитативное занаятие - расставлять везде defer m.Close(), когда вдруг выяснилось, что раньше для этого класса этой структуры с методами деструктор вроде был не нужен, а теперь вдруг стало понятно что нужен.

(no subject)

Date: 2014-04-22 13:28 (UTC)
From: [identity profile] iley (from livejournal.com)
В деструкторах которые будут вызваны "когда нибудь" по-моему очень мало толку. Если вы в деструкторе хотите освободить какой-то ресурс (а чаще всего именно для этого деструктор и нужен), то вы, как правило, хотите знать, когда это произойдёт. Иначе ресурс невозможно будет повторно использовать. А значит в языке с GC в любом случае освобождение ресурсов приходится делать через какой-то отдельный механизм. В Java это делают через try..finally, в Python -- через context managers, в Common Lisp через unwind-protect, а в Go вот через defer.

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

(no subject)

Date: 2014-04-22 19:50 (UTC)
From: [identity profile] ufm.livejournal.com
На дворе - 14 год. Две тысячи. Космические коробли бороздят. Марсоходы и луноходы ездят. У меня в лаптопе - 6 гигов памяти и 4 ядра.

Можно это будет проблемй компилятора а не моей? Ну пожалуйста! :)

(no subject)

Date: 2014-04-23 13:23 (UTC)
From: [identity profile] sharpc.livejournal.com
Можно. Вы хотите C++ с RAII.

(no subject)

Date: 2014-04-22 08:30 (UTC)
From: [identity profile] thedeemon.livejournal.com
А структуры в го всегда в куче живут?
Вон в D есть живущие на стеке структуры с декструкторами и живущие в GC-куче объекты классов без деструкторов (но с опциональными финализаторами, как в джаве).

(no subject)

Date: 2014-04-22 13:44 (UTC)
From: [identity profile] iley (from livejournal.com)
Насколько я понимаю, если структура создаётся через new, то она будет в куче. Если она создаётся просто как локальное значение, то компилятор может поместить её в стеке, но это только оптимизация и она не влияет на семантику. Вот тут есть примеры: http://stackoverflow.com/a/10866871

(no subject)

Date: 2014-04-22 08:20 (UTC)
From: [identity profile] theiced.livejournal.com
http://theiced.livejournal.com/274714.html

вот я тут давеча писал на туже тему.

(no subject)

Date: 2014-04-22 10:26 (UTC)
From: [identity profile] schrdinger's cat (from livejournal.com)
Самое "классное" в Go, это то что там нет кортежей. Многие думают что они там есть, но их там нет. Там есть возможность возвращать несколько значений из функции, но это другое. А если вам, например, нужно передавать пары интов в канал - создавайте структуру. Explicit is better than implicit. В общем, тебе какбы говорят - хватит выебываться, ебашь код, сученька. Но наверное это даже хорошо.

(no subject)

Date: 2014-04-22 11:05 (UTC)
From: [identity profile] ufm.livejournal.com
Ну отсутствие кортежей это не страшно. Можно и слайс вернуть.
Больше напрягает что вернуть несколько значений можно, но вот пользоваться ими несколько напряжно.
Сделали бы вместо этого возможность "разбирать" слайс/массив поэлементно множественным присваиванием - было-бы значительно логичнее.

(no subject)

Date: 2014-04-22 11:07 (UTC)
From: [identity profile] theiced.livejournal.com
сейчас ты ещё паттерн матчинг захочешь. и эта - зачем капча, она фу.

(no subject)

Date: 2014-04-22 11:32 (UTC)
From: [identity profile] ufm.livejournal.com
Самое смешное - не, не захочу. Для того, что бы паттерн-матчинг был удобен - там надо многое в синтаксисе докручивать. А вот разбирать слайс поэлементно - оно, по моему, даже синтаксис не поломает существующий, а радость нанести может. Надо будет попробовать разработчиков попытать - наверняка ведь им эту идею уже предлагали.

(no subject)

Date: 2014-04-22 12:00 (UTC)
From: [identity profile] theiced.livejournal.com
могу сконтачить напрямую с Evan Shaw (ойронио). у меня есть чёткое ощущение что все разработчики го - сраные хипсторы и индусня.