LINUX.ORG.RU
ФорумTalks

Go2 draft: generics, error handling & error values

 


0

5

Драфты generics и расширения системы обработки ошибок тут. Сейчас ещё можно повлиять на то, как это будет в итоге сделано.

Generics

contract Addable(t T) {
	t + t
}

func Sum(type T Addable)(x []T) T {
	var total T
	for _, v := range x {
		total += v
	}
	return total
}

Error handling

func CopyFile(src, dst string) error {
	handle err {
		return fmt.Errorf("copy %s %s: %v", src, dst, err)
	}

	r := check os.Open(src)
	defer r.Close()

	w := check os.Create(dst)
	handle err {
		w.Close()
		os.Remove(dst) // (only if a check fails)
	}

	check io.Copy(w, r)
	check w.Close()
	return nil
}

★★★★

Последнее исправление: Davidov (всего исправлений: 1)

делаем ставки, на что теперь особенные с джавой головного мозга будут ныть. Я ставлю на нормальные Enum-ы

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

Ну это пока только драфты и уже не первые. А на что поныть всегда найдут.

feofan ★★★★★
()

Error handling

Инновации уровня го.

entefeed ☆☆☆
()

Прикол. Не заметил слово «Go» и поначалу подумал, что офигеть уже что понапихали в C++.

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

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

По идее вот так тоже можно:

func Stringify(type T stringer)(s []T) []string

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

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

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

Могу предложить способ, как облегчить чтение дженериков - сделать их синтаксис схожим с уже известным. А гоферы снова решили показать «лица необщее выражение». Или гошные дженерики похожи на что-то не из набора «Ada, C++, ML»?

tailgunner ★★★★★
()

Да как-то без разницы уже. В джаве GC с низкими таймингами запилили, даже две, компилирование в нативный код готово, новый простой интероп с сями готово, шебанг готово, коурутины и value type на подходе. Так что Go как бы не нужен уже. Спасибо ему за некоторые идеи и пинок джаве к развитию, но после можно и на покой.

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

Да ладно - это же только предложение. Может, и останется... ээ... каким был.

Но забавно, что люди, которые говорили «мы не понимаем, как нормально добавить дженерики в Go», в конце концов разродились таким дизайном.

tailgunner ★★★★★
()
Последнее исправление: tailgunner (всего исправлений: 1)

А вообще, забавно, в 21 веке изначально делать ущербный ЯП отвергая опыт индустрии за последние 20 лет, а потом героически его исправлять...

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

Гошные дженерики из Ada

Правда?

generic
  type Element_T is private;  -- Generic formal type parameter
procedure Swap (X, Y : in out Element_T);

Никаких трех пар скобок (даже и двух пар нет). Go вообще мало похож на Аду, и гошные дженерики похожи на Аду не больше, чем всё остальное.

tailgunner ★★★★★
()
Последнее исправление: tailgunner (всего исправлений: 1)
Ответ на: комментарий от Guest_1488

Хаскелю можно, он создан странными для странных.

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

type лишний, но, может, гошникам так будет понятнее.

tailgunner ★★★★★
()

Как же я ору с этих инноваций.

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

Предложенный в гоу вариант выглядит как partial application из функционального программирования.

keys := Keys(int, string)(map[int]string{1:"one", 2: "two"})
Вообще это логично учитывая что первые скобки выбирают функцию для вызова, а вторые скобки уже являются аргументами к выбранной функции.

Можно было сделать первые скобки другими, но нет большого в этом смысла.

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

А прт чём тут джава?

Джависты как-то громче всех кричали

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

Предложенный в гоу вариант выглядит как partial application из функционального программирования.

И почему это хорошо?

Можно было сделать первые скобки другими, но нет большого в этом смысла.

Ну да. Подумаешь, выглядит привычнее и читать проще, кого это волнует. Главное - выглядит как partial application.

tailgunner ★★★★★
()
Последнее исправление: tailgunner (всего исправлений: 1)
Ответ на: комментарий от tailgunner

Грамматика, говорят, сильно сложная получается.

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

И почему это хорошо?

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

Ну да. Подумаешь, выглядит привычнее и читать проще, кого это волнует.

С подсветкой синтаксиса разницы не будет, а вот с аргументом выше что смена скобок на <> и убирание везде кейворда «type» я согласен, было бы легче читать.

Но меня больше пугает что они пошли по пути контрактов, а не как раст просто ввели дефолтные интерфейсы для операций разных. (благо я ушел на раст и он оказался проще чем гоу и удобнее ИМХО)

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

В джаве

охх, проблема джавы в очень большом легаси и все что они принесли лежит там же где все что уже давно не нужно.

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

Так что Go как бы не нужен уже. Спасибо ему за некоторые идеи и пинок джаве к развитию

к сожалению джаве нужно еще много пинков и как бы зачем орать «нинужна» если не понимаешь зачем оно сделано ? Я вот прямо сейчас перехожу в контору где пишут на Го потому что это оказался наиболее быстрый и по скорости работы и по скорости разработки ЯП, при этом задачи покрывает. Кстати хваленый легаси в джаве не очень-то хорош, например при переходе между версиями можно отхватить багов, например, у сервлетов (работали себе на 7й, а на 8й не захотели)

Я кстати лично не знаком ни с одним Java-разработчиком которому нравилось писать на джаве и он выбрал ее не из-за простоты поиска работы, а потому что приятно было код писать, хотя может все впереди.

Dred ★★★★★
()
Последнее исправление: Dred (всего исправлений: 1)
Ответ на: комментарий от Dred

Единственная причина выбора Java, как основного ЯП, которую я слышал - это деньги.

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

И почему это хорошо?

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

То есть это будет привычнее людям, которые не будут писать на Go, а будут писать на Rust, в котором дженерики совершенно не похожи на partial application. Логично.

Ну да. Подумаешь, выглядит привычнее и читать проще, кого это волнует.

С подсветкой синтаксиса разницы не будет

Подсветка синтаксиса умеет заменять круглые скобки на угловые?

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

То есть это будет привычнее людям, которые не будут писать на Go, а будут писать на Rust, в котором дженерики совершенно не похожи на partial application. Логично.

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

Подсветка синтаксиса умеет заменять круглые скобки на угловые?

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

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

То есть это будет привычнее людям, которые не будут писать на Go, а будут писать на Rust, в котором дженерики совершенно не похожи на partial application. Логично.

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

То есть Rust с partial application тут вообще не причем.

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

Фон. okay.jpg

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

То есть Rust с partial application тут вообще не причем.

Верно, не знаю зачем я раст сюда приплел.

Фон. okay.jpg

Довольно удобно и ИМХО более заметно чем форма скобок. Хотя полагаться на подсветку синтаксиса при разработке языка наверно не следует.

MLP_Fan ★★
()
Последнее исправление: MLP_Fan (всего исправлений: 1)

Драфты новых generics

Постойте, а что были старые?

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

ИМХО более заметно чем форма скобок.

Ну, если для тебя фон символа более заметен, чем сам символ, тогда я даже не знаю.

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

Ну, если для тебя фон символа более заметен, чем сам символ, тогда я даже не знаю.

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

Но я за идею сменить их на «<>» ради еще большего отличия от аргументов функции.

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

Но я за идею сменить их на «<>» ради еще большего отличия от аргументов функции.

Ну об этом и речь. Важно, чтобы оно читатлось легче, а не было похоже на partial application.

tailgunner ★★★★★
()
Последнее исправление: tailgunner (всего исправлений: 1)
Ответ на: комментарий от tailgunner

Важно, чтобы оно читатлось легче, а не было похоже на partial application.

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

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

Через GraalVM есть два способа это сделать: http://www.graalvm.org/sdk/javadoc/overview-summary.html

Первый через org.graalvm.nativeimage.c, но поддерживается только при компиляции сырцов в нативный код.

Второй, через org.graalvm.polyglot https://www.reddit.com/r/java/comments/8s7sr8/interacting_with_c_using_graalvm/

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

Выглядит интересно, спасибо.

GraalVM скоро попадёт куда-нибудь в релиз, чтобы можно было пощупать просто установив пакетик в любом дистре?

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

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

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

GraalVM скоро попадёт куда-нибудь в релиз, чтобы можно было пощупать просто установив пакетик в любом дистре?

В википедии написано о релиз кандидате RC5, скорее всего в 12 джаве будет из коробки, в марте.

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

а потому что приятно было код писать

На сегодня придумали такой ЯП, на котором приятно писать код? На сколько я в курсе не придумали, у каждого плюсы/минусы. А заниматься самообманом, да пожалуйста. Не мне же потом поддерживать код на «быстрый ... по скорости разработки ЯП».

Почему не Node.js, там еще быстрее, если у вас именно такие критерии выбора платформы?

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

На сегодня придумали такой ЯП, на котором приятно писать код?

Python например, очень много примеров тех кому просто синтаксис понравился.

если у вас

у нас, там где я сейчас именно джава и поддерживать ее код - тот еще ад.

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

На сегодня придумали такой ЯП, на котором приятно писать код?

Python например, очень много примеров тех кому просто синтаксис понравился.

Писать код на Python, конечно, приятно, но отлаживать - уже не настолько, а рефакторить - еще хуже (даже с хорошим покрытием тестами).

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

у нас, там где я сейчас именно джава и поддерживать ее код - тот еще ад.

Так это везде так и на любом ЯП, когда прежде поработали индусы и прочие быдлокодеры. Просто джава в этом плане более популярна (во всех смыслах), чем другие ЯП, поэтому и такая аура.

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