- 1
- 2
Почему весь С++ засран явными неймспейсами std:: ?
Если из-за коллизий, то почему с этим нету проблем в C#, Java?
Нашли или выдавили из себя код, который нельзя назвать нормальным, на который без улыбки не взглянешь? Не торопитесь его удалять или рефакторить, — запостите его на говнокод.ру, посмеёмся вместе!
0
Почему весь С++ засран явными неймспейсами std:: ?
Если из-за коллизий, то почему с этим нету проблем в C#, Java?
HoBorogHuu_nemyx 10.01.2019 17:42 # +2
А в "C#" всё засрано System. и Microsoft.
HoBorogHuu_nemyx 10.01.2019 17:56 # +2
1. В старых версиях "C++" не было поддержки неймспейсов.
2. "STL" не сразу стала стандартом. Раньше были другие «стандартные» библиотеки, у каждого компилятора своя.
Вот это всё стало стандартом только во второй половине 1990-х, а учитывая, что тогда в порядке вещей было использовать старые версии кокококонпеляторов и библиотек, процесс внедрения "STL" растянулся на долгие годы.
Чтобы подчеркнуть принадлежность именно к "STL", явно пишут префикс std:: (а то вдруг проект использует аналогичные имена из других библиотек).
"Java" и "C#" разрабатывались сразу с поддержкой неймспейсов и сразу со стандартными библиотеками, поэтому в них всё по-другому (хотя нужно заметить, что для "Java" существуют и «нестандартные» библиотеки).
guest8 10.01.2019 18:08 # −999
Lorip1971 10.01.2019 18:18 # 0
да, именно это я имел ввиду.
все понял. спасибо.
gost 10.01.2019 18:57 # +4
gost 10.01.2019 19:02 # +2
guest8 10.01.2019 20:38 # −999
gost 10.01.2019 22:08 # +2
http://aras-p.info/blog/2018/01/12/Minimizing-windows.h/
guest8 10.01.2019 22:15 # −999
bormand 10.01.2019 22:25 # +1
gost 10.01.2019 22:28 # +1
defecate-plusplus 11.01.2019 11:27 # +3
но так-то есть возможность вынести специализацию 100 этажного шаблона в .cpp файл из 2 строчек, чтобы компилятор там поднапрягся, инстанциировал всё что надо, сохранил в .o, и при трансляции всего остального уже не сходил с ума, а просто при линковке туда уже обратился - я так делал когда-то, когда кокомпилятор студии просто валился с внутренней ошибкой из-за превышения потребления оперативной памяти
bormand 11.01.2019 12:23 # 0
Бустовая метушня?
defecate-plusplus 11.01.2019 12:31 # +3
тем более, что грамматика там очень близко к исходному заданию визуально описывалась, было красиво
с тех пор больше не доводилось сталкиваться, что компилятору не хватает 12ГБ рам, но и на крестах я уже давно не писец правда
CHayT 11.01.2019 14:08 # +4
Я никогда конечно не осуждаю то, что происходит между двумя consenting adults, но такое...
HoBorogHuu_nemyx 11.01.2019 14:24 # 0
guest8 10.01.2019 22:43 # −999
bormand 11.01.2019 12:24 # 0
guest8 11.01.2019 15:07 # −999
bormand 11.01.2019 15:18 # 0
guest8 11.01.2019 15:33 # −999
Steve_Brown 11.01.2019 15:30 # +3
SimpleFix версии 2.0 не требует установки .NET Framework. Инструкция по установке Python 3.0.5 находится на сайте python.org. (обратите внимание, на 64-битных системах при прописывании переменной PATH нужно заменить Program Files на Program Files x86) Внимание! Перед установкой Python3 нужно удалить предыдущую версию Python2.
guest8 11.01.2019 15:33 # −999
defecate-plusplus 11.01.2019 15:35 # +2
HoBorogHuu_nemyx 11.01.2019 15:49 # 0
gpyrou_nemyx 11.01.2019 16:18 # 0
guest8 11.01.2019 18:54 # −999
Steve_Brown 11.01.2019 19:09 # 0
По крайней мере, в MSVС так, но и в GCC, наверное, дожна быть статически линкуемая версия crt...
guest8 11.01.2019 19:28 # −999
bormand 11.01.2019 19:32 # +2
Тем не менее, почти вся проприетарщина идёт со статической линковкой. Ибо иначе заебёшься собирать под 100500 вариаций линупсов. Ну или просто тащит с собой мешок либ.
guest8 11.01.2019 19:36 # −999
gost 11.01.2019 19:41 # +2
guest8 11.01.2019 19:44 # −999
gost 11.01.2019 19:48 # 0
This. Для обоснования было бы неплохо почитать чейнжлоги VS CRT, узнать, сколько там улучшений и исправлений обычно…
guest8 11.01.2019 19:50 # −999
gost 11.01.2019 20:04 # +1
guest8 11.01.2019 20:08 # −999
gost 11.01.2019 20:09 # 0
16.
guest8 11.01.2019 20:25 # −999
bormand 11.01.2019 20:30 # 0
Ага, с ASLR dll'ки очень хорошо шарятся.
guest8 11.01.2019 20:33 # −999
bormand 11.01.2019 20:34 # 0
В венде то? Особенно на 32 битах, где нет ip-relative адресации и вообще регистров мало?
guest8 11.01.2019 20:37 # −999
gost 11.01.2019 20:32 # +1
guest8 11.01.2019 20:36 # −999
gost 11.01.2019 20:54 # 0
guest8 11.01.2019 20:58 # −999
gost 11.01.2019 21:06 # 0
Угу.
https://github.com/jgaa/restc-cpp/wiki/Building-under-Windows
Краткое содержание: ебитесь как хотите!
1024-- 11.01.2019 20:03 # +1
guest8 11.01.2019 20:40 # −999
guest8 11.01.2019 20:42 # −999
bormand 11.01.2019 20:32 # +1
guest8 11.01.2019 20:41 # −999
bormand 11.01.2019 19:36 # 0
Блядь, не напоминай... Я недавно конпелятор для циклоняшки так запинывал (правда там редхат а не центось в требованиях). В итоге сдался и засунул его в виртуалку.
guest8 11.01.2019 19:39 # −999
bormand 11.01.2019 19:45 # 0
Там гуйня есть, поэтому влом было с докером ебаться. С виртуалкой проще, думать не надо.
guest8 11.01.2019 19:49 # −999
bormand 11.01.2019 20:02 # 0
Да хуй знает что у них там с совместимостью между версиями... Ещё какие-нибудь артефакты полезут или вообще крашнется. Зачем мне потенциальный пердолинг?
З.Ы. Эта хуйня столько жрёт и весит, что оверхедом виртуалки можно тупо пренебречь.
guest8 11.01.2019 20:04 # −999
bormand 11.01.2019 20:14 # 0
Кто всё это переписывать будет? Там что-то на Qt, что-то на эклипсе, что-то на свинге, что-то вообще на tcl/tk... Ёбаный зоопарк, короче.
guest8 11.01.2019 20:17 # −999
HoBorogHuu_nemyx 11.01.2019 15:44 # 0
Уже представил себе, как командир в окопе под обстрелом пытается починить рантайм Вижул-Барсика.
https://i.pinimg.com/originals/fc/df/9d/fcdf9d9489314ec2162fb0eae2cea75a.jpg
К слову, нужную функцию (перевод прямоугольных декартовых координат в полярные и обратно) инженерные микрокалькуляторы выполняют одной кнопкой. И ещё несколько подобных команд.
guest8 11.01.2019 20:44 # −999
Steve_Brown 11.01.2019 13:04 # 0
Еще когда-то использовал что-то типа:
bormand 11.01.2019 13:30 # 0
gost 11.01.2019 13:32 # 0
HoBorogHuu_nemyx 11.01.2019 14:06 # +1
А вдруг следующая версия «Windows» снова будет поддерживать сегментную модель памяти, тогда слово «far» снова пригодится?
guest8 11.01.2019 23:24 # −999
HoBorogHuu_nemyx 11.01.2019 14:10 # 0
>> Well, Microsoft's rpcndr.h (whatever that is) has "#define small char".
А потом люди не верят, когда им говорят, что макросня –— зло.
bormand 11.01.2019 14:22 # +1
HoBorogHuu_nemyx 11.01.2019 14:42 # 0
HoBorogHuu_nemyx 11.01.2019 17:53 # 0
HoBorogHuu_nemyx 11.01.2019 18:02 # +1
Т. е. типа вы можете у массивов указать обе границы индекса, как в «Паскале», но наш кококонпелятор не сможет такое скококонпелировать, поэтому лучше укажите нижнюю границу, равную нулю, или просто кококоличество элементов, как в «Си».
Давайте включать в документацию всё, что мы не собираемся поддерживать. Например, объявим ключевое слово для грабежа корованов, но напишем, что наш кококонпелятор грабить корованы не сможет. Вот здорово будет!
Steve_Brown 11.01.2019 18:15 # 0
guest8 11.01.2019 18:37 # −999
gpyrou_nemyx 11.01.2019 18:52 # 0
guest8 11.01.2019 19:15 # −999
gpyrou_nemyx 11.01.2019 20:00 # 0
guest8 11.01.2019 20:03 # −999
bormand 11.01.2019 19:22 # +1
Ну может быть IDL - общий язык, а эта конретная реализация просто не умеет не с нуля.
guest8 11.01.2019 19:35 # −999
bormand 11.01.2019 19:39 # 0
guest8 11.01.2019 19:42 # −999
HoBorogHuu_nemyx 12.01.2019 01:01 # 0
http://gopher.floodgap.com/gopher/
guest8 15.01.2019 00:04 # −999
HoBorogHuu_nemyx 15.01.2019 01:31 # 0
http://govnokod.ru/24557#comment424007
guest8 15.01.2019 01:47 # −999
gpyrou_nemyx 11.01.2019 18:30 # 0
Оно вроде во всех паскалях есть –— разделы interface и implementation в модулях.
cmepmop 11.01.2019 18:32 # 0
guest8 11.01.2019 18:54 # −999
gpyrou_nemyx 11.01.2019 18:55 # 0
HoBorogHuu_nemyx 11.01.2019 21:52 # 0
1. В разделе модуля.
2. В ООП как хитрая разновидность класса с обсрактными методами, да ещё и с поддержкой COM.
guest8 11.01.2019 21:58 # −999
cmepmop 11.01.2019 22:43 # 0
cmepmop 11.01.2019 22:51 # 0
* строковые операции крайне медленные
* много несовместимых между собой типов, привязанных к кодировке (в RAD Studio ввели универсальный тип UnicodeString, не базирующийся на BStr, памятью управляет само приложение, но среда при этом - ужасное говно)
Вывод: строк, этого уродливого наследия Visual Basic, не должно быть в принципе; ручками выделил память - ручками освободил, как в C. В пасцальных языках в качестве "строк" нужно явно использовать Array of char. Меньше ёбли с подсчётом ссылок, меньше ёбли с реаллоками памяти==прирост скорости.
guest8 11.01.2019 22:56 # −999
cmepmop 11.01.2019 22:59 # 0
Речь сейчас не о скорости запуска, а о скорости исполнения бинаря.
HoBorogHuu_nemyx 12.01.2019 00:07 # 0
Никто не заставляет использовать "VCL".
guest8 11.01.2019 22:59 # −999
cmepmop 11.01.2019 23:06 # −1
Например, склейка, присваивание и любые другие, где строка модифицируется.
Строки иммутабельны, т.е. при изменении данных всегда происходит изменение значения счётчика ссылок, а также неявное выделение/освобождение памяти (причём - по каждому чиху). Как бы ни старался опытный программист оптимизировать свой код (минимум кода, асмовставки, не более 3 параметров у методов) строки всё равно окажутся самым дорогим удовольствием.
fuckyou 11.01.2019 23:12 # −100
cmepmop 11.01.2019 23:14 # 0
6A9lHuCT 11.01.2019 23:15 # −102
cmepmop 11.01.2019 23:17 # 0
guest8 11.01.2019 23:17 # −999
cmepmop 11.01.2019 23:43 # −1
gpyrou_nemyx 12.01.2019 00:01 # 0
cmepmop 12.01.2019 00:08 # 0
guest8 14.01.2019 18:57 # −999
cmepmop 12.01.2019 00:11 # 0
В делфи то же самое, но лишь до той поры, пока ты не попытаешься изменить строку. В этом случае компилятор ловко подсунет тебе новую копию.
HoBorogHuu_nemyx 12.01.2019 00:21 # −1
В BP строки были мутабельными, но там этого добились путём ограничения размера строки. Если ты помнишь, string[N] сразу выделял память под N символов (если размер не указан, подразумевалось 255) и превысить этот размер было нельзя.
Скопированный из Си тип PChar допускал изменение на месте, но опять же только в том случае, если ты не пытаешься изменить размер.
cmepmop 12.01.2019 00:26 # 0
cmepmop 12.01.2019 20:29 # 0
Я хз есть ли функция StrRealloc, но если вызвать просто ReallocMem, то предыдущее содержимое буфера не затирается. Я хз, баг это или фича.
Оказалось, что поведение ReallocMem напрямую зависит от менеджера памяти. Как правило, предыдущее содержимое буфера сохраняется.
bormand 12.01.2019 21:35 # 0
1024-- 13.01.2019 15:38 # 0
На практиме может пригодиться если, например, была у нас структура данных, которую можно оптимизировать (например, куча и сборка мусора). Если попало в тот же блок - ладно, получаем бесплатно. Если в другой - всё равно копировать и хэндлы менять - сделаем малую сборку мусора.
HoBorogHuu_nemyx 14.01.2019 18:50 # +1
В «Windows» есть функции «LocalReAlloc» и «HeapReAlloc», которые можно попросить ничего не выделять и ничего не копировать (т. е. вернуть ошибку), если выделенный блок нельзя оставить на старом месте. Их также можно попросить не обнулять новый кусок памяти при расширении.
1024-- 14.01.2019 19:22 # 0
P.S. Пора уже Вам регистрировать учётку cnpaBo4HbIu_nemyx, 6u6JIuonemyx или nemyx-3HATOK.
guest8 14.01.2019 19:30 # −999
HoBorogHuu_nemyx 14.01.2019 19:46 # 0
Пишут, что в «glib» реаллокацию сделали как-то по-хитрому через «mremap», но я ничего не понял.
guest8 14.01.2019 19:58 # −999
HoBorogHuu_nemyx 12.01.2019 01:33 # 0
http://govnokod.ru/22504
Но это всё несерьёзно, потому что у них в библиотеке воссоздаётся некое подобие VM.
P.S. Язык «Vala» кто-нибудь изучал?
j123123 12.01.2019 01:38 # 0
https://www.youtube.com/watch?v=G9Oj3e1XCRg
HoBorogHuu_nemyx 12.01.2019 00:08 # 0
Именно поэтому я за "ShortString" (это тот string, который был в "BP 7.0"), потому что у него нет никаких ссылок.
cmepmop 12.01.2019 00:17 # 0
HoBorogHuu_nemyx 12.01.2019 00:28 # 0
guest8 10.01.2019 17:56 # −999
HoBorogHuu_nemyx 10.01.2019 17:59 # +1
guest8 10.01.2019 18:09 # −999
gpyrou_nemyx 10.01.2019 18:41 # +2
roman-kashitsyn 10.01.2019 18:12 # +6
Дурным тоном считается не «using namespace std», а любой «using namespace» в принципе, т. к. он засирает текущий скоп непредсказуемым числом символов и делает программу менее читабельной.
Когда ты видишь в незнакомом коде std::ios_base, ты сразу понимаешь, что ios_base — это не специфичный для проекта класс для iOS, а что-то из стандартной библиотеки, что можно найти на cppreference.
Более того, поскольку число импортируемых символов не предсказуемо, код может перестать компилироваться, если в импортируемый целиком неймспейс в будущем добавят символов, т.к. это может создать неоднозначность.
В жабе во многих гайдлайнах импорты со звёздочкой тоже считаются дурным тоном.
roman-kashitsyn 10.01.2019 18:18 # +3
using std::string;
в .cc файле (НЕ В ХЕДЕРЕ!). Это не мешает читабельности и не создаёт потенциальных проблем.
Для сторонних библиотек я всё же предпочитаю выписывать неймспейс явно. Если неймспейс длиннее 5 букв, я обычно создаю алиасы (ТОЖЕ НЕ В ХЕДЕРЕ), например
namespace fs = boost::filesystem;
guest8 10.01.2019 18:25 # −999
roman-kashitsyn 10.01.2019 19:23 # 0
да.
guest8 10.01.2019 20:37 # −999
j123123 13.01.2019 03:11 # +1
А что если надо импортировать две разные версии библиотеки, где все эти неймспейсы тупо совпадают (Нахрена это может быть нужно? Например для сравнения работы разных версий, если это какие-то числодробные библиотеки.)?
Вообще, эта блядская пидоросня с неймспейсами - ее еще хрен реализуешь по стандарту, и куча всяких багов с этим говном есть:
https://gcc.gnu.org/bugzilla/show_bug.cgi?id=51577 например этот баг живет аж с 2011 года, чего-то там в неймспейсе находит, но не должно находить.
https://gcc.gnu.org/bugzilla/show_bug.cgi?id=87208 и вот это еще, этот относительно недавний, но тоже косяк с этим перегрузочным бредом и неймспейсами
придумали еще кучу каких-то припизданутых правил чтоб какое-то там перегруженное говно в говнонеймспейсе искать https://en.cppreference.com/w/cpp/language/adl
В общем лучше бы это обдристанное неймспейсное дерьмище с припизданутыми правилами поиска перегруженного говна в говне вообще не существовало. Чтобы не было сложностей с корректной реализацией всего этого, чтобы не был стандарт на дохреннилиарт страниц, описывающий всякие ебанутые моменты что вот что-то ищется там, а потом вот там и вот там... блядь, да пошли вы нахер, мне не вызубривать ваши ебанутые фантазии надо, а код писать
roman-kashitsyn 13.01.2019 10:06 # 0
Если совпадают ещё и символы в неймспейсах, то нельзя. Из-за нарушения ODR, линкер только одну функцию с заданным именем возьмёт. Это не сильно зависит от языка, так нельзя делать ни в сишке, ни в хаскеле.
Собери себе два бинарника с разными версиями либ, так все делают.
j123123 13.01.2019 10:32 # +1
Вообще-то это решаемая проблема. Ну т.е. это можно было бы решить на уровне языка (приделать говнорасширения какие-нибудь), но ни в Си, ни в крестах это на уровне языка не решается.
Т.е. допустим у нас есть некий гипотетическй язык, типа особая улучшенная сишка, и файлы main.c и library_v1_0.c library_v1_1.c library_v_1_0.h library_v_1_1.h
Пусть library_v1_0.c и library_v1_1.c предоставляет нам некую функцию do_shit(). Предположим, что мы хотим из main.c и оттуда и оттуда эту хрень вызывать.
Ну что ж, это можно решить, если процедуру линковки описывать каким-то хитрым образом в самом исходнике, и делать декорирование имен.
Ах да, еще можно тупо менять символы в объектниках, например через
и
https://sourceware.org/binutils/docs/binutils/objcopy.html
--redefine-sym old=new
Change the name of a symbol old, to new. This can be useful when one is trying link two things together for which you have no source, and there are name collisions.
--redefine-syms=filename
Apply --redefine-sym to each symbol pair "old new" listed in the file filename. filename is simply a flat file, with one symbol pair per line. Line comments may be introduced by the hash character. This option may be given more than once.
j123123 13.01.2019 10:44 # 0
j123123 13.01.2019 10:57 # 0
bormand 19.01.2019 08:00 # 0
В принципе, взаимодействие крестов с COM на такой хуйне и замутили.
bormand 19.01.2019 08:18 # +1
Всё остальное сводится либо к чисто сишному интерфейсу либо к ёбле с манглингом, который даже с разными версиями одного конпелятора не всегда стыкуется.
j123123 19.01.2019 08:37 # 0
Но это ж говно.
?
Почему эту херню нельзя как-нибудь автоматизировать, без всей этой хуйни? Ну пусть даже каким-нибудь блядогенератором, который нагенерит эту парашу с dlsym-ами и экстернами, если крестометушня такое делать не позволяет.
bormand 19.01.2019 08:47 # +1
Верхнюю херню в макрос завернёшь. Она, как правило, нужна всего один раз на модуль чтобы получить его корневой интерфейс. Остальную требуху ты уже у него попросишь.
А нижняя херня заворачивается в няшную RAII'шную обёртку.
Т.е. будет как-то так:
guest8 15.01.2019 00:06 # −999
j123123 19.01.2019 06:00 # 0
которые надо уметь вызывать, то ты это говно будешь вилкой чистить руками заворачивать с extern "C" в некое говно вида
да ?
Или для этого уже написали какие-то гомоиконы кодогенерации?
bormand 19.01.2019 08:03 # 0
j123123 19.01.2019 08:30 # 0
bormand 19.01.2019 08:07 # +1
j123123 19.01.2019 08:31 # 0
bormand 19.01.2019 08:31 # +3
З.Ы. В биндингах к Qt можешь посмотреть как выглядит настоящий хардкор - использование неадаптированных крестолиб из другого языка. Но у Qt ABI стабильное в отличие от всякой стдушни, могло быть и хуже.
gpyrou_nemyx 10.01.2019 20:18 # +2
bormand 11.01.2019 22:41 # 0
gpyrou_nemyx 11.01.2019 22:57 # 0
Goh 10.01.2019 20:21 # −2
blackray 10.01.2019 20:22 # 0
guest8 10.01.2019 20:23 # −999
gpyrou_nemyx 10.01.2019 20:36 # 0
guest8 10.01.2019 22:45 # −999
Goh 11.01.2019 00:14 # 0
Goh 11.01.2019 00:15 # 0
Куд-куд-куд-куда-а-а-а!
gpyrou_nemyx 11.01.2019 22:59 # 0
guest8 10.01.2019 22:45 # −999
Goh 11.01.2019 00:14 # 0
Повсюду только стертор и мерещицца. давайте флудить и троллить
(=_=)
guest8 11.01.2019 00:16 # −999
guest8 11.01.2019 20:09 # −999
HoBorogHuu_nemyx 11.01.2019 22:31 # 0
guest8 11.01.2019 22:34 # −999
bormand 11.01.2019 22:40 # 0
HoBorogHuu_nemyx 11.01.2019 22:47 # 0
–— А мы после 35 на переподготовку не берём.
—– Мне 35 только три дня назад исполнилось.
–— Ну вот три дня назад и приходили бы.
—– Не мог я три дня назад прийти. Я в тюрьме сидел. В Бутырской.
guest8 11.01.2019 23:03 # −999
HoBorogHuu_nemyx 12.01.2019 00:11 # 0
guest8 14.01.2019 19:43 # −999
HoBorogHuu_nemyx 14.01.2019 19:50 # 0
—– Давайте! У Вас есть глисты?
–— Нет.
—– Но ведь это же прекрасно!
j123123 12.01.2019 14:31 # +2
А чем его надо засирать? Говном? Ну это можно:
Перегрузка неймспейса через препроцессор
bormand 12.01.2019 14:33 # +3
j123123 12.01.2019 14:45 # +2
gost 12.01.2019 14:49 # 0
HoBorogHuu_nemyx 12.01.2019 15:04 # 0
bormand 12.01.2019 15:05 # +1
gost 12.01.2019 14:43 # +1
https://ideone.com/0SKmJB
j123123 12.01.2019 14:47 # 0
gost 12.01.2019 14:48 # 0
j123123 12.01.2019 14:49 # +3
bormand 12.01.2019 14:50 # +2
HoBorogHuu_nemyx 12.01.2019 14:59 # 0
gost 12.01.2019 15:00 # 0
gost 12.01.2019 15:01 # +2
HoBorogHuu_nemyx 12.01.2019 15:07 # +3
gost 12.01.2019 15:13 # 0
HoBorogHuu_nemyx 12.01.2019 15:48 # 0
https://ideone.com/qWOGgZ
Нафига им отдельные кнопки «save» и «submit»?
gpyrou_nemyx 12.01.2019 16:34 # 0
1024-- 12.01.2019 19:36 # +2
https://ideone.com/tAv50R
guest8 15.01.2019 00:45 # −999
HoBorogHuu_nemyx 15.01.2019 01:18 # 0
ASD_77 14.01.2019 19:21 # +1
roman-kashitsyn 14.01.2019 19:31 # 0
ЛОЛОЛОЛЛО
guest8 14.01.2019 19:34 # −999
guest6 27.08.2024 14:42 # 0
guest8 14.01.2019 19:33 # −999
ASD_77 14.01.2019 23:10 # 0
2) легко. вызывай .clone() :)
3) а структуры которые не в свойствах класа думаешь где хранятся? или думаешь они по поинтеру передаются :)
4) есть немного но думаю скоро и тут придумают как обойти
guest8 14.01.2019 23:16 # −999
gost 14.01.2019 23:23 # +2
guest8 14.01.2019 23:39 # −999
guest8 14.01.2019 23:51 # −999
guest8 14.01.2019 23:59 # −999
gost 14.01.2019 19:47 # +4
bormand 14.01.2019 19:49 # +1
guest6 27.08.2024 15:16 # 0
1024-- 14.01.2019 20:01 # +1
guest8 14.01.2019 20:04 # −999
ASD_77 14.01.2019 23:11 # 0
gost 14.01.2019 23:17 # +3
guest8 14.01.2019 23:24 # −999
Lorip1971 15.01.2019 18:25 # 0
это в жабе дженерик на обжект заменяется и потому нельзя перегрузку делать.
в сишарпе же дженерик в рантайме имет конкретный тип, который, коль надо, через рефлексию можно узнать (привет dependency injection). и перегрузки тоже работают с дженериками.
я бы сказал не 80%, а в 98% случаев нахуй никому не уперлось факториалы через темплейты считать. кроме как const int pituh = 60*60*24*365 и конкатенации строк вообще не понимаю, коим хуем тебе еще что-то надо считать в компайл тайме? кому нахуй вообще уперлость факториалы считать, ты когд их-то блять считал последний раз? так что не пизди.
guest8 15.01.2019 19:21 # −999
Lorip1971 15.01.2019 19:58 # 0
на счет перегрузок, ты мне ща задвигаешь какую-то дичь. какием хуем твой кусок код соотносится с этой фразой?
>> С генериком у тебя не будет работать перегрузка по типу потому что класс-то один.
вот жабе, из-за недоженериков, как раз такое не канает:
т.к. после конпеляции все будет List, т.е.:
но в шарпе все пучком. а то что ты нарисовал, здесь вообще никоим боком.
guest8 15.01.2019 21:08 # −999
guest8 15.01.2019 21:18 # −999
guest8 15.01.2019 21:29 # −999
Lorip1971 16.01.2019 13:43 # 0
roman-kashitsyn 16.01.2019 14:47 # 0
Любой адекватный программист на C++ знает, что по-другому и не сделаешь. Именно поэтому я за «C++».
Lorip1971 16.01.2019 19:35 # 0
gueest8 16.01.2019 20:12 # 0
Указатель всегда одинаковый, и так как знание о типе есть в рантайме у .NET то можно сделать указатель типа object, и просто явно его проверять и кастить под капотом.
Зачем плодить кучу классов?
С валуе обжектами ситуация другая: можно конечно их боксить как в джаве, но это будет супер неоптимально потому что потребует еще места в куче и указатель.
Потому .NET пошли на хитрость.
Джава так не умеет, и традицийно отсосала хуй, и потому List<Integer> сильно больше и тяжелее чем int[], а в .NET они примерно сравнимы.
В С++ _всегда_ инстанциируются новые классы. Иногда это реально не нужно: например зачем тебе 20 классов с указателем? И тогда люди идут на хитрость через partial template specialization (Частичная специализация)
Ну то-есть как всегда: в С++ можно сделать как хочешь, C# за тебя автоматом делает хорошо, а Java за тебя автоматом делает так себе)
guest6 06.02.2024 04:53 # 0
1024-- 15.01.2019 00:18 # 0
guest8 15.01.2019 00:26 # −999
1024-- 15.01.2019 01:41 # 0
В C++ работает, не сарказм.
Даже есть примеры, когда автор программы упарывается настолько, что это пригождается:
https://www.boost.org/doc/libs/1_51_0/libs/spirit/classic/example/fundamental/full_calc.cpp
guest8 15.01.2019 15:17 # −999
Lorip1971 15.01.2019 18:29 # 0
IComparable например, имеено так и работает. и им обмазы все стандартные типы чтобы мамкины кодеры могли делать естественную сортировку, не указывая функцию-компаратор, а-ля Array.Sort(pituhi).
Lorip1971 15.01.2019 18:31 # 0
https://github.com/louthy/language-ext
u3yMpygHblu_nemyx 24.01.2019 12:31 # 0
roman-kashitsyn 14.01.2019 23:38 # 0
gost 15.01.2019 11:40 # 0
bormand 15.01.2019 11:52 # 0
rJlynblu_nemyx 15.01.2019 12:03 # +1
HoBorogHuu_nemyx 15.01.2019 15:03 # 0
Есть те, кто пишет на „Паскале“. И те, кто считает, что пишущие на „Паскале“ не нужны.
Есть те, кто пишет на 『Ruby』. И те, кто считает, что пишущие на 『Ruby』 не нужны.
Есть те, кто пишет на “Lua”. И те, кто считает, что пишущие на “Lua” не нужны.
guest8 15.01.2019 21:53 # −999
defecate-plusplus 15.01.2019 12:33 # +3
Есть те, кто пишет на крестах. И те, кто считает, что <их собственная жизнь тлен, и> они не нужны.
Непересекающиеся биомассы.
guest8 15.01.2019 15:19 # −999
bootcamp_dropout 04.09.2022 17:03 # 0
j123123 15.01.2019 13:55 # +3
Не, ну я вот например могу что-то на крестах написать вполне, на шаблонах могу рекурсивного говна понаписывать.
Или под "писать на крестах" подразумевается что-то большее, типа профессионально на крестах что-то пилить за зарплату? Ну а с чего б нелюбителю крестов этим заниматься? Логично, что подобные люди будут избегать подобной работы.
Забавно другое - чем больше я узнаю кресты, тем меньше мне кресты нравятся. В самом начале я эти кресты воспринимал как просто такое улучшение, типа "круто, тут еще какой-то свой препроцессор, который назвали шаблонами", "круто, тут еще по ссылке передавать можно", "круто, какие-то классы-хуяссы", а когда вникаешь поглубже во все это дерьмище, то хочется побыстрее съебать обратно в сишку. Особенно если почитать какого-нибудь кода с этими классами, шаблонами и перегрузками
guest8 16.01.2019 11:46 # −999
guest8 16.01.2019 20:08 # −999
ASD_77 21.01.2019 14:01 # 0
guest8 21.01.2019 17:00 # −999
ASD_77 21.01.2019 18:13 # 0
guest8 21.01.2019 18:20 # −999
KaBauHblu_nemyx 21.01.2019 18:45 # +1
guest8 21.01.2019 18:52 # −999
KaBauHblu_nemyx 21.01.2019 19:08 # 0
http://govnokod.ru/25289#comment449750?
gueest8 21.01.2019 23:51 # 0
Вот если ты на плюсах писать начнешь то Линус тебя лично нахуй пошлет
HoBorogHuu_nemyx 22.01.2019 12:52 # 0
bormand 22.01.2019 13:22 # 0
gueest8 22.01.2019 14:56 # 0
3oJIoTou_xyu 22.01.2019 15:23 # 0
Rooster 22.01.2019 15:29 # 0
JloJle4Ka 10.09.2021 05:21 # 0
guest6 10.09.2021 13:02 # +1
1024-- 16.01.2019 15:18 # +3
Я бы сказал, пересечение множеств тех, кто реально пишет на языке и тех, кто считает, что он не нужен или крут, пропорционально выразительности языка и обратно пропорционально пердольности и порогу вхождения (с округлением до целых)
guest6 04.09.2022 17:13 # 0
Если некто обсирает кресты (и при этом не является j123), то вероятнее всего он про кресты ничего не знает, но преподаватель по джаваскрипту сказал ему, что кресты устарели
bormand 04.09.2022 17:28 # 0
Мы вынуждены принимать кучу утверждений на веру т.к. проверять всё снуля долго и дорого. И это абузят все кому не лень.
guest6 04.09.2022 17:31 # 0
Вот например ты наверное думаешь, что земля имеет форму шара, чуть сплюснутого у полюсов, да?
А почему ты так думаешь? Разве ты когда-нибудь видел землю из космоса?
bootcamp_dropout 04.09.2022 18:02 # 0
CEHT9I6PbCKuu_nemyx 10.09.2021 04:37 # 0
guest8 27.01.2019 21:04 # −999