В GoLang, таки, добавили generic'и
От: Reset  
Дата: 16.03.22 11:45
Оценка: 12 (1) :)
Go 1.18 теперь тоже умеет обобщенные типы (generic, C++ templates) как для функций, так и для типов.

https://www.opennet.ru/opennews/art.shtml?num=56864

В новой версии добавлена поддержка обобщённых функций и типов (дженериков), при помощи которых разработчик может определить и использовать функции, предназначенные для работы сразу с несколькими типами. Также предоставлена возможность использования интерфейсов для создания комбинированных типов, охватывающих несколько типов данных. Поддержка дженериков реализована без нарушения обратной совместимости с существующим кодом.



// Суммирование значений набора, работающее для типов int64 и float64
func SumIntsOrFloats[K comparable, V int64 | float64](m map[K]V) V { 
    var s V
    for _, v := range m {
        s += v
    }
    return s
}

// Другой вариант с обобщённым определением типа:

type Number interface {
   int64 | float64
}
func SumNumbers[K comparable, V Number](m map[K]V) V {
    var s V
    for _, v := range m {
        s += v
    }
    return s
}


Так они скоро и Rust догонят.
Отредактировано 16.03.2022 12:56 Reset . Предыдущая версия .
Re: В GoLang, таки, добавили generic'и
От: vsb Казахстан  
Дата: 16.03.22 13:07
Оценка:
А ещё они там Fuzzing добавили. Крутой релиз.
Re[2]: В GoLang, таки, добавили generic'и
От: kaa.python Ниоткуда РСДН профессионально мёртв и завален ватой.
Дата: 16.03.22 13:26
Оценка:
Здравствуйте, vsb, Вы писали:

vsb>А ещё они там Fuzzing добавили. Крутой релиз.


По мне так наличие фаззинга из коробки — это даже более круто чем дженерики
Re: В GoLang, таки, добавили generic'и
От: SkyDance Земля  
Дата: 16.03.22 14:38
Оценка: +1 -1
R>Go 1.18 теперь тоже умеет обобщенные типы (generic, C++ templates) как для функций, так и для типов.

Еще 5-7 лет, и Go можно будет отправлять вслед за С++
И так будет с любым языком, который поддерживается не strong leader, а монстро-компанией.
Re[2]: В GoLang, таки, добавили generic'и
От: Reset  
Дата: 16.03.22 15:16
Оценка: :))
vsb>А ещё они там Fuzzing добавили. Крутой релиз.

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

Можешь объяснить, зачем этот Fuzzing нужен. По мне так это безумный вариант модульного тестирования (Unit testing), который уж точно будет реализован со всеми граничными случаями, до того, как дело дойдет до Фаззинга. Т.е. выглядит как очень нишевая технология, там где нужно особо фанатичное круглосуточное тестирование всеми немыслимыми входными данными.

Но с другой сторны, если это сделали, значит это кому-то нужно (и вряд ли все эти люди совсем неразумны).
Re[3]: В GoLang, таки, добавили generic'и
От: vsb Казахстан  
Дата: 16.03.22 15:20
Оценка:
Здравствуйте, Reset, Вы писали:

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


R>Можешь объяснить, зачем этот Fuzzing нужен. По мне так это безумный вариант модульного тестирования (Unit testing), который уж точно будет реализован со всеми граничными случаями, до того, как дело дойдет до Фаззинга. Т.е. выглядит как очень нишевая технология, там где нужно особо фанатичное круглосуточное тестирование всеми немыслимыми входными данными.


R>Но с другой сторны, если это сделали, значит это кому-то нужно (и вряд ли все эти люди совсем неразумны).


Не очень понял, почему дело дойдёт до фаззинга только после всех граничных случаев. Суть в том, что не будешь ты тестировать все граничные случаи, тебе лень или у тебя жизнь слишком коротка. А фаззинг будет. И, может быть, найдёт баг. Его же не сложно писать, а польза есть, хотя бы гипотетическая.

В моём понимании он полезен:

1. Там, где критична безопасность. Например парсинг файлов, приходящих извне.

2. Там, где сложная state-машина, которую юнит-тестами покрыть невозможно, слишком много сочетаний.
Отредактировано 16.03.2022 15:20 vsb . Предыдущая версия .
Re[3]: В GoLang, таки, добавили generic'и
От: flаt  
Дата: 16.03.22 15:48
Оценка:
Здравствуйте, Reset, Вы писали:

vsb>>А ещё они там Fuzzing добавили. Крутой релиз.


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


R>Можешь объяснить, зачем этот Fuzzing нужен. По мне так это безумный вариант модульного тестирования (Unit testing), который уж точно будет реализован со всеми граничными случаями, до того, как дело дойдет до Фаззинга. Т.е. выглядит как очень нишевая технология, там где нужно особо фанатичное круглосуточное тестирование всеми немыслимыми входными данными.


R>Но с другой сторны, если это сделали, значит это кому-то нужно (и вряд ли все эти люди совсем неразумны).


Даже в Rust проектах нашли кучу багов: https://github.com/rust-fuzz/trophy-case

Про fuzzing в целом: https://en.wikipedia.org/wiki/Fuzzing

https://www.code-intelligence.com/blog/what-bugs-can-you-find-with-fuzzing

Как уже упомянули, чаще всего им генерируют входные данные для парсеров всяких и тп — такое руками не протестируешь и тестами не покроешь.
Re: В GoLang, таки, добавили generic'и
От: Worminator X Россия #StandWithPalestine 🖤🤍💚
Дата: 12.08.22 11:14
Оценка:
Здравствуйте, Reset, Вы писали:

Пошли по пути C++, сейчас начнет обрастать костылями.
— Нет в мире справедливости, — простонал Билл, когда цепкие пальцы Смертвича впились в его плечо.
— Конечно, нет, — согласился Смертвич. — А ты как думал?
Re[2]: В GoLang, таки, добавили generic'и
От: alzt  
Дата: 13.09.22 19:17
Оценка:
Здравствуйте, SkyDance, Вы писали:

R>>Go 1.18 теперь тоже умеет обобщенные типы (generic, C++ templates) как для функций, так и для типов.


SD>Еще 5-7 лет, и Go можно будет отправлять вслед за С++

SD>И так будет с любым языком, который поддерживается не strong leader, а монстро-компанией.

Дженерики довольно толково добавлены. В С++ шаблоны они не вырастут и при этом более полезны, чем java-недодженерики.
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.