LINUX.ORG.RU

Опубликован почти окончательный драфт генериков в Go

 


0

10

За подробностями в Go-блог (blog.golang.org/why-generics), там есть ссылка на собственно драфт.

Генерики семантически будут наподобие шаблонов C++, т.е. не boxed (как в Java), а value: компилятор будет генерировать копии с конкретными типами.

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

В релизе появится всё это не скоро, в Go 2, срок выхода которого неизвестен. Go 1.13 появится на днях, 1.14 — в ноябре, к десятилетию первого публичного бета-релиза.

★★★★
Ответ на: комментарий от hbee

Например, в интерфейсах можно определять полноценные функции (с реализацией). В интерфейсах, Карл!

Состояние есть у такого интерфейса? Думаю нет, тогда это норм, в джава есть похожее и это очень удобно.

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

В Белоруссии перестали изучать русский язык?

Нет. Это моя личная неспособность писать грамотно. Хоть на русском, хоть на белорусском, хоть на английском.

И правда, история фиксирует тупость сказанного регистрантами.

Именно. У каждого регистранта есть репутация, в соответствии с которой я могу пускать в игнор то, что Iron_Bug или RazrFalcon говорит о C++. Или, напротив, прислушиваться к тому, что RazrFalcon говорит про Rust.

А вот, вы, анонимы, подобного удобства не предоставляете. Поэтому приходится вас идентифицировать самостоятельно.

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

это очень удобно

Вот-вот. Так они и рассуждают (разработчики C++, Java etc). Это удобно, то удобно, давайте добавим.

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

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

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

В кресты и шарпы и правда тащат что попало, но в джаву только то, что показало реальную пользу. Если релизнули фичу и она не прижилась в течении примерно двух лет, то на LTS релизе её просто выпилят из ЯП. Вот это я считаю очень грамотно придумали.

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

Поэтому приходится вас идентифицировать самостоятельно.

Комментарий типичного интернет воена.
Вокруг одни коварные анонимы, которые опять неправы в интернете!
Вытри пот со лба натруженною, клавиатурною рукою, и продолжай идентифицировать до тех пор пока не переидентифицируешь их всех.
Не останавливайся, не щади себя, выделяй пот, кровь и слезы — только так ты победишь!

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

Бла-бла-бла.

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

Ну т.е. заявить про «умеренное использование» — это вы можете, а хоть как-то объяснить, чем отличается «умеренное» от «неумеренного» не можете. Ожидаемо.

Так это Страуструп заявляет. У него и спросите, что это означает.

И авторитетами не нужно прикрываться

Причём тут «прикрываться»? Вам процитировали слова создателя языка, который признаёт чем чревато злоупотребление шаблонами в C++. Вам просто процитировали, никто и никем не прикрывается. Мне понятно о чём говорит Страуструп. И я с ним согласен. Если это называется «прикрываться», то пусть будет так.

И да, кстати, не нужно говорить другим людям, что им делать, а что им не делать. Хотят прикрываться, будут прикрываться, у Вас разрешения спрашивать не будут :-)

Так что то, что для меня будет умеренным, для вас может оказаться непомерно сложным и непонятны. Или наоборот. Чистый субъектив.

Никто не против. Ваши проблемы мне мало интересны, как и Вам мои. (По крайней мере, я на это надеюсь.)

Да-да. В коде nginx-а это особенно хорошо видно. Дублирование и спаггети на goto.

И что? Код работает в продакшене на миллионах хостах. Дублирование и спагетти на goto этому никак не мешает. Если это Вас так беспокоит, то Вы можете переписать NGINX на C++ и показать всему миру как надо. Мастер-класс, так сказать :-) Посмотрим, на скольких хостах Ваше произведение заменит NGINX с его спагетти. Хахаха.

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

Ага. Можно порадоваться за людей, которые создали открытое программное обеспечение (написанное на чистом C), которое потом продали за полмиллиарда долларов. Вам такой успех даже и не снился :-)

А я и не утверждал, что C++-а (в любой его версии) достаточно для всего. А вот вы такие утверждения делали.

Ну и? Делал и делаю. C достаточно для всего. Даже для богатого существования (см. историю NGINX).

Если бы C было достаточно, большинство писало бы на C. Но как раз C недостаточно.

Большинство кода и так написано на C. Будете это отрицать?

Как минимум, есть бывший Yahoo, а ныне Apache TrafficServer.

Что это за экзотика мало кому известная?

А так же есть написанные на плюсах сервисы в Google, Facebook и Yandex.

Мимо. Я говорил о промышленных HTTP серверах, а не о сервисах частных компаний.

Не писали. Это видно.

Бугага.

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

Вы просто перепутали, но даже в этом не хотите сознаться.

Я перепутал, но штука в том, что ничего не поменялось. Вы не можете определить что «умерено», а что «нет». В точности так же и с «уместно» или «неуместно».

Так это Страуструп заявляет.

Ну правда? Вот это здесь на LOR-е Страуструп сам лично по-русски написал?

Впрочем, умеренное использование шаблонов тоже может быть на пользу, но только умеренное.

А раз это вы залупнулись на счет «умеренности», то просветите публику, как вы определяете «умеренно» ли используются шаблоны или нет?

Может бежите к Страуструпу спрашивать?

И что?

И то, что не все хотят тратить свое время и свои деньги на разработку проектов на чистом Си.

Ну и вы к nginx не примазывайтесь. Вы ведь тоже ничего сравнимого и близко не сделали. Так что «сперва добейся» можете засунуть куда подальше.

Большинство кода и так написано на C. Будете это отрицать?

Сперва попрошу доказательств.

Что это за экзотика мало кому известная?

В Гугле забанили?

Мимо. Я говорил о промышленных HTTP серверах, а не о сервисах частных компаний.

А в Google кустарная и наколеночная разработка, надо полагать. И в Yandex-а.

Жжоте нипадецки.

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

на счет «умеренности», то просветите публику, как вы определяете «умеренно» ли используются шаблоны или нет?

Уже просветил же. Вот этим сообщением. Насчёт того, как определить, обратитесь к Страуструпу.

Может бежите к Страуструпу спрашивать?

Может быть и бежите. Ваше право.

И то, что не все хотят тратить свое время и свои деньги на разработку проектов на чистом Си.

Ну так и не все хотят тратить 10 лет только лишь на изучение C++. Хотя, 10 лет, наверное, уже может и не хватить...

Ну и вы к nginx не примазывайтесь. Вы ведь тоже ничего сравнимого и близко не сделали. Так что «сперва добейся» можете засунуть куда подальше.

Ничего. Всё ещё впереди! Вдруг у Вас получится сделать что-то подобное NGINX! :-)

А в Google кустарная и наколеночная разработка, надо полагать. И в Yandex-а.

Нет, просто Вы опять перепутали как тогда «умеренно» и «уместно». Но на этот раз Вы перепутали WEB-сервис частной компании и общедоступный HTTP-сервер.

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

Уже просветил же. Вот этим сообщением.

Нет, там нет критериев. Только аппеляция к авторитетам.

Поэтому еще раз: ваши «умеренное» — это субъективно. А раз так, то каждый может утверждать, что в его коде шаблоны используются умеренно.

Ну так и не все хотят тратить 10 лет только лишь на изучение C++.

И для них есть куча других языков, включая Go.

Но вы смело утверждаете, что достаточно C и C++98. Что в очередной раз показывает, откуда в «смайлодаун» появилась часть «даун». Хотя, боюсь, употребление этого слова в таком контексте будет оскорблением больных синдромом Дауна.

Но на этот раз Вы перепутали WEB-сервис частной компании и общедоступный HTTP-сервер.

Если вы забыли, то вы речь вели «о промышленных HTTP серверах». А не о общедоступности. Итак, в Google и Yandex-е сделали не промышленные, а наколеночные сервера, правильно?

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

Большинство кода и так написано на C. Будете это отрицать?

Интересно бы найти реальную статистику. Си конечно будет в топе, но не уверен что на первых местах.

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

Что такое генерик в Go?

Что такое драфт? Что-то вроде такого, да?

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

А я знаю, что скажут противники C - «Это 8 миллионов неадекватов».

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

Унылые анонимы даже поиском пользоваться не могут.

stars:>100 language:JavaScript - 32,023
stars:>100 language:C++        -  7,418
stars:>100 language:C          -  6,433
stars:>100 language:Go         -  6,715
stars:>100 language:Rust       -  1,501
RazrFalcon ★★★★★
()
Ответ на: комментарий от anonymous

https://github.com/search?q=C Showing 7,963,187 available repository results

https://github.com/search?q=C 509,409 repository results

У тебя неправильный метод поиска. Используя расширенный поиск по языку:

C Showing 675,195 available repository results
C++ Showing 837,747 available repository results

Тем не менее это очень хорошие результаты для языка, который по мнению хипстеров «умирает» или на котором «никто не пишет».

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

Добавочка.

https://github.com/search?q=C          7,963,187   repository results 
https://github.com/search?q=Java       1,153,948   repository results
https://github.com/search?q=go           643,899   repository results
https://github.com/search?q=javascript   567,461   repository results
https://github.com/search?q=C++          509,409   repository results
https://github.com/search?q=rust          64,734   repository results
https://github.com/search?q=haskell       47,268   repository results
https://github.com/search?q=lisp          17,647   repository results
https://github.com/search?q=delphi         8,518   repository results
anonymous
()
Ответ на: комментарий от RazrFalcon

stars:>100 language:Go - 6,715

stars:>100 language:Rust - 1,501

У проектов на Go в 4.473684210526316 раза больше звезд, чем у проектов на Растишке. Спасибо за информацию!

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

Ну вот опять троллить начали ... /зарегистрироваться что-ли?/

Я, конкретно я, больше не буду, обещаю. А насчет регистрации — я не против, я являюсь, так сказать, фанатом Вашего творчества.

Вла... /тьфу ты! типун мне на язык!/

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

Нет, там нет критериев. Только аппеляция к авторитетам.

Так их и не будет. И Страуструп промолчит.

Поэтому еще раз: ваши «умеренное» — это субъективно.

Потому что нормальным людям и так понятно, где умеренно, а где нет.

И для них есть куча других языков, включая Go.

Так и есть.

Но вы смело утверждаете, что достаточно C и C++98.

Я смело утверждаю, что C и C++98 достаточно для написания софта любого уровня сложности. Привёл 3 примера: Linux, NGINX, PostgreSQL. Это исчерпыющие примеры.

Что в очередной раз показывает, откуда в «смайлодаун» появилась часть «даун». Хотя, боюсь, употребление этого слова в таком контексте будет оскорблением больных синдромом Дауна.

Ну как можно комментировать ахинею? Ну не нести же ахинею в ответ. Уровень Вашего общения Вы хорошо демонстрируете подобными срывами.

Если вы забыли, то вы речь вели «о промышленных HTTP серверах».

Нет, конечно. Вот они - Apache, NGINX. Все их знают, их можно скачать, запустить.

Итак, в Google и Yandex-е сделали не промышленные, а наколеночные сервера, правильно?

А вот здесь, к сожалению, у меня информации нет, какие там у них сервера. Наколенечные или промышленные. Но, думаю, что NGINX там точно используется так или иначе.

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

Не звёзд, а проектов.

В общем, всего больше, всего. Жаль, придется ждать нового язычка от Мозиллы со товарищи.
Эх, тяжела и неказиста жизнь хипстопрограммиста.

Не Владимир

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

Это вы зря!
Умный здесь тот, кто на форумы время не тратит и - «пишит postgresql, nginx, ...», ...
А мы здесь все - «БРАТЬЯ ПО НЕСЧАСТЬЮ».

Владимир

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

И чем тебе не нравится объявление дефолтной реализации?

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

Так их и не будет.

О том и речь, что рамки «умеренности» с умным видом будут проводить анонимные LOR-овские надмозги. А другие будут с умным видом говорить, что шаблоны в C++ применяют только для того, чтобы свое ЧСВ почесать.

Я смело утверждаю, что C и C++98 достаточно для написания софта любого уровня сложности. Привёл 3 примера: Linux, NGINX, PostgreSQL. Это исчерпыющие примеры.

Смело. Очень смело. Особенно с учетом того, что C++, даже 98-й там вообще не причем.

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

Наколенечные или промышленные.

Если у вас с критериями «умеренности» не срослось, то может вы хотя бы сможете дать критерии «промышленности»? Вот как определить, сервер «промышленный» или нет?

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

Умный здесь тот, кто на форумы время не тратит и - «пишит postgresql, nginx, …», …

Оптимизирую вот свою программу printf("Message\n");, советуют использовать puts: puts("Message");, но RustFalcon говорит, что небезопасно и недостаточно модно, поэтому пытаюсь вот в облаке через Docker транспилировать C в Rust с помощью фреймворка для машинного обучения на PureCoffeeTypeScript. Повышаю свою квалификацию, так сказать.

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

Оптимизирую вот свою программу printf(«Message\n»);, советуют использовать puts: puts(«Message»);

GCC это сам делает.

небезопасно

Ну как бы да:

printf("%s\n", null_str); // UB
RazrFalcon ★★★★★
()
Ответ на: комментарий от Deleted

Что такое генерик в Go?

Гм, я же сослался на блог. Там есть определение:

generic programming enables the representation of functions and data structures in a generic form, with types factored out

hbee ★★★★
() автор топика
Ответ на: комментарий от anonymous
https://github.com/search?q=C          7,963,187   repository results 
https://github.com/search?q=Java       1,153,948   repository results
https://github.com/search?q=Python     1,101,017   repository results
https://github.com/search?q=go           643,899   repository results
https://github.com/search?q=javascript   567,461   repository results
https://github.com/search?q=C++          509,409   repository results
https://github.com/search?q=rust          64,734   repository results
https://github.com/search?q=haskell       47,268   repository results
https://github.com/search?q=lisp          17,647   repository results
https://github.com/search?q=delphi         8,518   repository results

Владимир

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

Речь шла о puts, вчитайся:

советуют использовать puts: puts(«Message»);, но RustFalcon говорит, что небезопасно и недостаточно модно

Чем тебе небезопасен puts? То, что он считается тобой недостаточно модным, так как был придуман больше 3 лет назад, я уже понял.

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

printf("%s\n", null_str); // UB

#include <stdio.h>
#include <stdarg.h>

static __attribute__((nonnull, format(printf, 1, 2))) int myPrintf(const char *format, ...)
{
	va_list args;

	va_start(args, format);
	const int ret = vprintf(format, args);
	va_end(args);

	return ret;
}

int main(void)
{
	myPrintf("%s\n", NULL);
	return 0;
}
$ clang -std=c11 -Wall -Wextra test.c
test.c:17:23: warning: null passed to a callee that requires a non-null argument [-Wnonnull]
        myPrintf("%s\n", NULL);

Проверка аргументов printf также доступна благодаря атрибуту format. Иногда полезно вылезать из уютного Растомирка.

goto-vlad
()
Ответ на: комментарий от RazrFalcon

char *text = NULL; myPrintf("%s\n", text);

и тишина…

Я ждал этого комментария:

clang -std=c11 -Wall -Wextra -fsanitize=undefined test.c
test.c:18:19: runtime error: null pointer passed as argument 2, which is declared to never be null
test.c:4:23: note: nonnull attribute specified here

Ещё вопросы, или может нужно сначала изучить основы языка, и его инструментарий?

goto-vlad
()
Ответ на: комментарий от RazrFalcon
source>: In function 'int main()':

<source>:18:9: warning: argument 2 null where non-null expected [-Wnonnull]

   18 | myPrintf("%s\n", text);

      | ~~~~~~~~^~~~~~~~~~~~~~

<source>:4:59: note: in a call to function 'int myPrintf.constprop(const char*, ...)' declared here

    4 | static __attribute__((nonnull, format(printf, 1, 2))) int myPrintf(const char *format, ...)

      |                                                           ^~~~~~~~

<source>:18:9: warning: '%s' directive argument is null [-Wformat-overflow=]

   18 | myPrintf("%s\n", text);

      | ~~~~~~~~^~~~~~~~~~~~~~

Я даже больше скажу - оно работает и в случае:

void f(char * str) {
    myPrintf("%s\n", str);
}


    char *text = NULL;
    f(text);

Было бы зачем.

Ты там уже забыл как сел в лужу с попыткой показать силу в подобном кейсе? Ой, а С/С++-компилятор смог. Или это не ты был, но хотя был ты.

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

Посыпаю пеплом голову ...
Вы правы.

https://tproger.ru/news/github-languages-rating-2018/ GitHub опубликовала собственный рейтинг языков программирования за 2018 год

C/C++ всегда использую для разработки libraries ... /впрочем это касается лишь круга решаемых мною задач/.

Вообще то «языковые войны» мне не понятны.
«Серебрянного языка» - НЕТ!

Владимир

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

Вот бы ещё по GH пзвёздам проекты считать. Vaporware V превзойдёт Ocaml и ReasonML вместе взятые. А JavaScript окажется в тысячи раз лучше Verilog и пофигу, что это инструменты для разных вещей и с кардинально разной публикой.

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

Вот бы ещё по GH пзвёздам проекты считать.

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

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

Шутка.

Однажды C++, Python да Java
Везти с поклажей воз взялись,
И вместе трое все в него впряглись;
Из кожи лезут вон, а возу всё нет ходу!
Поклажа бы для них казалась и легка:
Да C++ рвется в облака,
Python пятится назад, а Java тянет в воду.
Кто виноват из них, кто прав,— судить не нам;
Да только воз и ныне там.

Владимир

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

Гонерическое? Гонор повышает. Понятно.

Deleted
()
Ответ на: комментарий от goto-vlad

А я ждал этот шаблонный (no pun intended) ответ.

Гугл тестирует Хром фаззерами и санитайзерами 24/7, а баги всё лезут и лезут. То же самое с другими крупными C++ проектами, типа винды. Как же так получается, что все баги не были найдены сразу? Возможно для того, чтобы санитайзер ругнулся, нужно сделать какие-то доп. телодвижения? Возможно стат. анализаторы не так хороши, как хотелось бы? Не, не может быть. Они просто не знаю С++ и им нужно «изучить основы языка, и его инструментарий». Точно.

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