LINUX.ORG.RU

Подводные камни clang

 , ,


0

6

О себе

1. Я пользователь Linux

2. Лицензофобиями не страдаю (GPL vs BSD vs ...). Предпочитаю окрытые и свободные лицензии проприетарным. Могу еще перебирать лицензиями когда речь идет о библиотеке

3. Хочу писать свои Hello Worldы на С++ 11. У меня LTS версия Ubuntu с древневонючим GCC. Не хочу его менять, пусть будет как есть. Там еще ключ c++0x до сих пор, не знаю во что это мне выльется.

Для поддержки С++11 поставил Clang. Очень нравятся сообщения о ошибках и возможность настроить сильный completion.

Есть какие-то минусы у сабжа? Буду использовать для разработки всяких игрушечных серваков и СУБД чтобы качать мышцу мозга.

★★★★★

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

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

Про Go написали уже, к нему это в несколько меньшей степени относится.

Особенно если учитывать что Rust - практически плюсы с форсингом shared_ptr, unique_ptr или &

Не, аналоги shader_ptr в Ржавчине не форсятся ни кем, скорее наоборот. Вот аналог unique_ptr и проверяемые ссылки - они форсятся, да.

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

Плохой пример, это же дикие тормоза, их только на хорошем железе можно использовать, MVS лучше же в разы. А для Linux есть CB (написан на C++) и vim для остальных ЯП.

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

NetBeans, IDEA и Eclipse как-то ведь осилили написать на Java, а на C/C++ какие-то недо-IDE всё ещё.

Xcode, QtCreator

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

MVS это Microsoft Visual Studio, если ты конечно, слышал про неё.

Те, кто ей реально пользуются, называют ее MSVS (а Microsoft Visula C++ - MSVC).

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

MVS это Microsoft Visual Studio, если ты конечно, слышал про неё.

Те, кто ей реально пользуются, называют ее MSVS (а Microsoft Visula C++ - MSVC).

А она не только для плюсов

Голоса в твоей голове сказали, что она только для плюсов?

я в ней и на шарпе пишу.

Рад, что ты умеешь писать. Учись читать.

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

MSVC — это название компилятора же, разве нет?

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

Ко-ко-ко бигдата, ко-ко-ко терабайты - у меня хомяк 20тб - мой локалхост тоже бигдата?

Запомни раз и навсегда считается не кол-во хранимого, а скорость доступа к этому хранимому и скорость обращения.

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

Конретней, какие такие аргументы?

Конечно, там просто сидят дядьки тупее тебя, в Google, Yahoo, Twitter, etc ))

Естественно.

ко-ко-ко ссылка на недовысер жабиста

18к инсертов на 4ноды(будем считать по твоему) - это 4.5к rps на ноду - длинна инсерта 1кб - т.е. еле-еле 4.5метра/с. Всего-то часа 2писали. И не лень же было.

Просветляйся. Разница в архитектуре переплевывает оверхед. Две базы на жабе сделали базу на С++.

еле-еле чуть больше 4-х метров на запись на ноду. Я даже не представлял, что всё настолько плохо. Всего-то надо дня 3, чтобы записать ТБ.

Бигдата, такая бигдата. Я аж обоссался.

Просветляйся. Разница в архитектуре переплевывает оверхед. Две базы на жабе сделали базу на С++.

А с каких пор «бигдата» и 4.5метров в секунду стало мерилом ЯП? Такое может и пхп.

На таких детсадовских цифрах оверхед не раскрывается, именно по этой причине жаба и в «бигдате».

Да и с каких пор плюсы стали «норм ЯП»?

Одна из них вообще работает поверх файловой системы на жабе.

А зачем БД файловая система? Она там не нужна.

Когда напишишешь полностью рабочую кассандру или Hbase на С++, тогда скажем тебе спасибо

Зачем мне писать это говно?

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

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

Какраз и ответишь за балабольство.

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

Зачем ты балаболишь не шаря в теме? На реальных задачах, которые не упираются в 100метров дискового ИО жаба сливает в сотни и тысячи раз, и по затратам ресурсов и по «быстроте».

Жаба это не ЯП - это пародия на яп - это такая распределённая пускалка для говна. Даже пистоны на пистонах пытаются писать, а вот жабисты до сих по не осилили переписать вменяемую vm и рантайм на жабу. Выпилить гц и запилить какое-нибудь апи для ручного хипа проще паренной репы и это не проблема.

И да, нормальных ЯП отсилы парочка в мире и твоё представление об ЯП никак не отражает действительности. Да и суть не в ЯП - суть к подходу к запилу.

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

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

Да ладно. Ну лет 7 ему ещё от силы. Наплыв всяких жаб его снесет, я так думаю.

Мне просто нечем заняться, поэтому я написал этот текст :D
Глупость же, ну. Если говорить конкретно о джаве, то она слишком убога для конкуренции с ЦПП ибо медленная(1), не имеет некоторых важных фич(2), имеет принудительную модель памяти(3) и кучу других проблем.

1.Да, медленная. Почти в 2 раза медленнее «ненужного» C++. Да, это синтетические тесты, а не реальные задачи. Но стоит отметить, что во всякой синтетике скорость работы джавы ближе всего к скорости работы С++ т.к. такие тесты зачастую используют её встроенные (а потому и быстрые) типы данных, заместо классов. При использовании классов скорость значительно падает и причиной того являются безопасные преобразования, без которых можно обойтись (просчитав допустимость преобразования при компиляции), но которые, на сколько мне известно, нельзя отключить в джаве. А значит в коде будут тонны dynamic_cast'ов и прочей RTTI-ухиты, которая в С++ считается дурным тоном и является очень большим накладным расходом (от одной микросекунды на преобразование (не претендует на абсолютную истиность)). Ещё одна мерзкая вещь - GC. Если памяти мало, безжалостно жрёт процессор, если много - запускается редко, но вешает программу, когда это происходит (Поэтому никакого рилтайма на джаве), а так же, при использовании свопа, может насиловать жёсткий диск и отправлять сервера в оффлайн на несколько минут (или приводить к крашу, если не повезёт). Не обойдём стороной и врапперы, которые добавляют ещё один (пару? несколько?) слоёв в вызовы библиотечных функций. Так же не стоит забывать, что весь этот лагодром ещё и крутится на виртуальной машине. Спасёт JIT? Не спасёт. JIT, хоть и оптимизирует код, но не является панацеей (Ею являются прямые руки, которые, даже при наличии, нельзя применить в джаве из-за её «Invalid by design» архитектуры), а с макросами, шаблонами, asm-вставками(в случае низкоуровневых программ, требующих задействовать определённые функции процессора, вроде SSE) и LLVM (Или ещё чем, динамически оптимизирующим код под платформу) и без того быстрый C++ достигнет трансцендентной скорости, оставив хромую жабу позади.

2.Да, их нет. Например в джаве нет шаблонов. Не нужны? Я так не думаю. Мало того, что они позволяют плодить функции (Именно. По функции на каждый набор аргуменотв. Минус этого подхода - увеличение объёма кода, но он ничтожен по сравнению с минусом дженериков, которые не плодят функции, но при этом проверяют допустимость того или иного аргумента, затрачивая драгоценное время исполнения), так ещё и позволяют обходить RTTI(который как раз и используется в дженериках). В добавок они экономят тонны времени. В джаве нет перегрузки операторов (Вот уж не знаю, что им помешало запилить такую простую (это же просто обособленная функция...) в реализации фичу. А ведь перегрузка очень важна и позволяет сделать код проще и понятнее, дать возможность выбора. Так же, из-за принудительного ООП, в джаве отсутствуют такие замечательные вещи, пространства имён (namespace)(Заменяются костыльным синглтоном или статичным классом), переименовывание типов (typedef), POD-структуры (Можно, конечно и классом обойтись, но класс в джаве при себе ещё имеет метаинформацию, которая в данном случае нафиг не нужна. Во всяком случае я не вижу нужды в интроспекции, например, для такой структуры) и т.д.

3. Все объекты пользовательского типа выделяются в куче, объект в стеке выделить нельзя. Избыточность кода в таком случае - мелочь, по сравнению с накладными расходами, ведь для выделения памяти в куче применяется, не дайте соврать, линейный поиск, в то время как в стеке память выделяется моментально. При создании пары объектов разница ничтожна, но при создании нескольких тысяч(или миллионов) объектов или при многократном вызове функции, которая создаёт временный объект, она колосальна (разница составляет от 100 до нескольких тысяч раз). Стоит сказать, что некоторые объекты всё таки выделяются в стеке, но будут ли они выделены в стеке или в куче определяет JIT, а не программист. Ещё один минус к производительности. Более ненужные объекты нельзя удалить, этим занимается GC. К чему это приводит, я уже написал.

Нынешние компьютеры позволяют джаве работать достаточно быстро, но это ни разу не значит, что она заменит С++. Производительность растёт не для того что бы дать возможность ненужному байткоду работать быстрее нативного, а для того что бы сделать допустимыми большие объёмы вычислений в короткие сроки. «Матрица» на джаве. Тот момент, когда запускается GC. Што блджад? :'D. В итоге, Java - «Invalid by design» язык программирования и не заменит C++, а подохнет раньше, чем он. А C++, скорее всего, будет модернизирован или заменён другим мультипарадигменным высокопроизводительным языком программирования, дающим большие возможности и высокую производительность программистам с прямыми руками и головой на плечах.

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

Да тебе, ты уличаешь жабу, при этом слишком слаб, чтобы внятно описать свою позицию и только создаёшь удручающую картину об антижабистах.

Надо лучше спорить, вон бери пример с пацана выше. Хотя его аргументация тоже строится на каких-то нищих цитатках и недобенчмарках, но он резкий и чёткий. С таким тот питушок зассыт спорить, на тобой он издевается, а ты мямлишь - будь мужиком.

anonymous
()

Проблем за 4 месяца не было замечено, все фичи C++11, которые применял, работаю должным образом. Так то им даже генту скомпилировать можно (исключая всего несколько пакетов и ядро, использующее какие-то специфичные фичи GCC)(Лично не проверял). ИМХО, шлангом можно спокойно пользоваться, а если уж и наступишь на грабли, то всегда можно откомпилировать GCC проверки ради.

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

А зачем мне с ним столь яро спорить? А может я и хочу создать отрицательную картину об антижабистах? А ты тут вмешиваешься. Пользователям жаба не нужна, а для программистов иногда вполне удобна (особенно, когда лень что-то учить или надо один и тот же код на куче платформ заставить работать, а немножко подумать, как написать его кроссплатформенно ума не хватает. Разумеется, что-то сложное и большое на яве сложно сделать, особенно если много расчётов). Если строго говорить, то ненужных ЯП нет. Если ЯП использует хоть один человек, то он уже нужен.

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

Тогда все ЯП нужны, т.к. хотя бы автор ЯП его использует.

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

Тоесть ему по идее нужно передавать для этого парсинга те же флаги компилятора и пути.

Щас споюпойду собирать kdevelop с транка со шлангом. Раньше там эта проблема решалась путем выковыривания флагов компиляции с собственного парсера cmake. Т.е. автоматически.

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

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

Никуда переключения контеста в ring 0 не денутся.

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

Мне просто нечем заняться, поэтому я написал этот текст :D

Глупость же, ну. Если говорить конкретно о джаве, то она слишком убога для конкуренции с ЦПП ибо медленная(1), не имеет некоторых важных фич(2), имеет принудительную модель памяти(3) и кучу других проблем. Тоже самое можно сказать о ЦПП. Такое же медленное, чтобы что-то вменяемое написать - надо писать на сишке, но зачем писать на сишке в ЦПП, если можно писать не в цпп?

ЦПП одна большая и бесполезная фича. ЦПП тоже имеет одну модель памяти, вернее породию на неё. Да можно через жопу написать, но о5 же на сишке, при этом мы теряем 90% фичей ЦПП.

1.Да, медленная. Почти в 2 раза медленнее «ненужного» C++.

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

Да, это синтетические тесты, а не реальные задачи.

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

Но стоит отметить, что во всякой синтетике скорость работы джавы ближе всего к скорости работы С++

Нет, даже близко. Скорость работы, что и жабы, что цпп - это скорость работы сишного рантайма.

т.к. такие тесты зачастую используют её встроенные (а потому и быстрые) типы данных, заместо классов.

Нет, юзается как и в плюсах сварачивание обосанных недоклассов в обычную «процедурщину», для стандартных типов евристику сварачивания построить просто.

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

Не в этом дело - проблемы и в жабе и в плюсах одниковые - свёртка ООП-говна.

Разбирать твои бредни про тысячи тактов на каст и прочее мне лень.

а с макросами, шаблонами, asm-вставками(в случае низкоуровневых программ, требующих задействовать определённые функции процессора, вроде SSE)

Макросы - сишка, шаблоны не имеют смысла, ибо максимум, что при помощи них ты получишь - кусок говна. А ну да, asm-встаки? Это такой 80-й год. man норм конпелятор. sse через асм-вставку - это такие маздайские девяностые-нулевые года.

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

и LLVM (Или ещё чем, динамически оптимизирующим код под платформу) и без того быстрый C++ достигнет трансцендентной скорости, оставив хромую жабу позади.

А ну да, llvm, который не имеет ни одного вменяемого кодогена ни под одну платформу. Кусок фекалии. Не достигнет твой С++ никакой скорости - это твои детские мечты.

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

2.Да, их нет. Например в джаве нет шаблонов. Не нужны? Я так не думаю. Мало того, что они позволяют плодить функции (Именно. По функции на каждый набор аргуменотв. Минус этого подхода - увеличение объёма кода

Шаблоны не нужны, это абсалютно бесполезная байда. Они устарели ещё до их появления - конпелятор умеет дохрена чего - он умеет создавать новые функции сам(constprop), инлайнить части функций вместо функций - выкидывать все ветвления/различия вызванные какимито аргументами, которые конпелятор выявил как константные.

Единственное чего нет - это тип типов - т.е. тип, который хранит тип. type_t type = int; type i; Т.е. свичи по типам - есть «гинерик», но он односторонний и кусок неудобной фекалии.

Единственные шаблоны, которые не бесполезны - это специализация, но нахрен мне эти шаблоны, если приходится писать 100500 функций руками? Толька как удобная прокся, но она пишется и на сишке.

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

3. Все объекты пользовательского типа выделяются в куче, объект в стеке выделить нельзя. Избыточность кода в таком случае - мелочь, по сравнению с накладными расходами, ведь для выделения памяти в куче применяется, не дайте соврать, линейный поиск, в то время как в стеке память выделяется моментально.

Твои плюсы дёргают кучу не меньше жаба. Нахрен ты приплёл сюда линейный поиск, нахрен ты вообще кукарекаешь о линейном поиске? Нахрен ты приплёл кучу? Очередной балабол, который не отличает реализацию от кучи? Ты настолько нулёвый и не понимаешь, что куча и стек ничем не отличается - стек основа любой кучи. И твоё понимании кучи - это не куча, а индекс твоего хипа. И линейный поиск юзается по индексу, который к памяти отношения не имеет.

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

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

Это какой жопой ты вычислил?

Стоит сказать, что некоторые объекты всё таки выделяются в стеке, но будут ли они выделены в стеке или в куче определяет JIT, а не программист. Ещё один минус к производительности. Более ненужные объекты нельзя удалить, этим занимается GC. К чему это приводит, я уже написал.

ГЦ тормазит потомучто он говно, как и твой манагер кучи из цпп-рантайма. Такая же жопа происходит и в твоём хипе.

Мне вот интересно, какой жопой всякие нули как-то разедляют стек и хип. Ты реально настолько нулёвый, что не понимаешь того факта, что может быть мильён хипов, они могут быть разных типов, в том числе и типа «стек».

Нынешние компьютеры позволяют джаве работать достаточно быстро, но это ни разу не значит, что она заменит С++.

Какой жопой он работает быстро, а так же какой жопой твой цпп работает быстро? Жаба работает иллюзорно приемлемо. И то жаба тормазит, не зря же основа жабы - это распределяйка. Не тормазила бы кукарекали о чем-то кроме кол-ва нод.

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

Производительность растёт в основном на скорости памяти. Ни цпп, ни жаба не раскрывает основной рост - это рост в ширь, векторность. Твои симды о которых ты кукарекал.

В итоге, Java - «Invalid by design» язык программирования и не заменит C++, а подохнет раньше, чем он.

ЦПП такой же инвалид. Смешно смотреть как адепт одного инвали уличается адепта другого инвалида. Наследие сишки - это то, что отделяет плюсы от участи жабы. Это не заслуга плюсов. Остальные плюсы плюсов - это его нативность - всё.

Сознание определяет код - сознание плюсовика и жабиста инвалид by design. Ты кукарекаешь о том, чего в глаза не видел и не юзал. Твои познания в модели памяти на уровне жабиста, чего стоят твои перлы про стек и кучу.

Ты защищаешь цпп тем, чего ты не юзаешь, чего ты не знаешь.

А C++, скорее всего, будет модернизирован или заменён другим мультипарадигменным высокопроизводительным языком программирования, дающим большие возможности и высокую производительность программистам с прямыми руками и головой на плечах.

У тебя нет головы. Основное требование людей с головой к ЯП - это предказуемость и возможности, которые даёт язык. Предсказуемости ни жаба, ни цпп не даёт. Возможностей у цпп меньше, чем у сишки, приэтом все возможности которые есть - это наследие от сишки.

Но бомжи типа тебя под возможностями ЯП понимаю сахарные фичи. Это бесполезное говно. Производительности у ЦПП нет.

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

Пиздец, да это опять ебанутого царя из дурки выпустили. Когда ж ты подохнешь-то наконец, убожество больное?

anonymous
()
Ответ на: комментарий от anonymous
find . -name "*.[cC]" | xargs cat | wc -l
22082

find . -name "*.[jJ]ava" | xargs cat | wc -l
369914 из которых 50% комментариев.

Т.е. жабакода еле-еле в 5раз больше сишного. Если убрать всякие объявляетели классов, импорты и хедеры - будет еле-еле в 2-3раза.

И да, с чего эта какая-то обоссанная вм которая даже рядом не валялась с нормальной жабавм вдруг стала полноценной вм? Это кусок фекалии, который никто не юзает и юзать не будет.

Основная вм написанан а сишке, которая является пускалкой жабавм, причем в этой основной вм реализована далеко не стандартная жаба. Это где-то в районе asmjs, либо даже глубже.

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

оО, боярин, ничтожество - это ты? Ты там уже научился signed и unsigned отличать?

До сих пор являешься нонейм говном, ваящие за еду говно на верипаскале и в мечтах спасающие жизни?

Прости, я забыл спросить мнение ничтожества по поводу себя. Что ты вообще тут делаешь? Иди к друзъяшкам студентам и на форумы паскалятинки.

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

Хм... Ты несколько неадекватен, но всё равно спасибо, что указал мне на ошибки. Этот спор продолжать смысла не вижу, всё равно знаний и опыта у тебя в этой области больше, чем у меня.
Так же вынужден тебя огорчить: я не адепт ЦПП и не оспариваю заслуги сишки. Более того, с сишки на ЦПП (Внезапно, да?) я перешёл только из-за громоздкости синтаксиса C. Возможно ты со мной не согласишься, но некоторые задачи проще решать с ООП, чем без него - как раз в этих слуаях ЦПП и становится нужным, вместе с его «ненужными» фичами т.к. макросы, пришедшие из С и знать не знают о том, что такое класс, например, (в отличии от «ненужных» шаблонов), ровно как и класс о них. ООП тоже фекалия и не нужно? Пусть так, но мне нарм и я не вижу особых причин от него отказываться.

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

Да подохни ты уже наконец, невменяемая, некомпетентная сучка. Ты на этот Си смотрела, блядина рваная? Ну посмотри. Там только тесты и тупой загрузчик.

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

Ты бы, в принципе, мог меня уничтожить, но ты всего лишь ничтожество за маской анонимуса, которое пытается что-то доказывать в интернете :D

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

Болезнь царя прогрессирует, у этого упорыша уже раздвоение.

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

Пойду я лучше отсюда, пока ещё какой хрени не написал.

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

А похож?

Да. Говоришь, в отличие от царя, не на гоп-сленге, а на нормальном русском, но двигаешь такие же фейспалмовые мифы с такой же категоричностью.

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

Всё плохо. Надеюсь, что со временем мне кто-нибудь вправит мозги.

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

Так же вынужден тебя огорчить: я не адепт ЦПП и не оспариваю заслуги сишки.

Адепт.

Так же вынужден тебя огорчить: я не адепт ЦПП и не оспариваю заслуги сишки. Более того, с сишки на ЦПП (Внезапно, да?) я перешёл только из-за громоздкости синтаксиса C.

Рили, какое совпадение - я перешел с ЦПП на сишку(Внезапно, да?) только из-за грамоздкости синтаксиса ЦПП.

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

Возможно ты со мной не согласишься, но некоторые задачи проще решать с ООП, чем без него

А давай мы с тобою придумаем такую задачу, опишем её - опишем норм ТЗ и запилем - ты на ЦПП, а я на сишке?

Я со столькими адептами ЦПП спорил, но никто так и не осилил привести мне норм примеры. Будь первым.

ЦПП и становится нужным, вместе с его «ненужными» фичами т.к. макросы, пришедшие из С и знать не знают о том, что такое класс, например, (в отличии от «ненужных» шаблонов), ровно как и класс о них.

Макросы в сишке кусок фекалии. Максимум что ими делают - это хаки.

Просто обычные сишники - это нулёвым бомжи, которые сишку знают на уровне 1-го курса недовуза.

#include <stdio.h>
#include <stdint.h>

typedef enum {s, lu, f} typeid_t;

typedef union {
  char * string;
  uint64_t uint64;
  float flt;
} type_t;

#define typeid(T) _Generic(\
(T),\
char *: s,\
uint64_t: lu,\
float: f,\
default: -1\
)

uint64_t print(typeid_t tid, type_t type) {
  switch(tid) {
    case s: return fprintf(stderr, "%s\n", type.string);
    case lu: return fprintf(stderr, "%lu\n", type.uint64);
    case f: return fprintf(stderr, "%f\n", type.flt);
    default: return -1;
  }
}
#define print(type) print(typeid(type), (type_t)type)

int main(void) {
  print(123ul);//ЦПП жопа.
  print("bla-bla");
  print(123.f);//да, да - и с этим тоже
//   print(123.);
//   print('s');
}

Вот я тебе накатал портянку - тут проверяются типы, если ты об этом. Да поидее юнион должен знать свой тип - метаинфа крайне полезна, только оно должна быть для пользы, а не форфан. В сешке много недочётов, но она крайне илитна. И почти все эти недочёты мало того, что не реализованы в ЦПП, дак если даже реализованы, то только через жопу.

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

А рантайм Go, Rust и C# на чём перепишут?

Рантайм Rust написан в основном на Rust (включает в себя сторонние библиотеки, написанные на Си, и немного ассемблера).

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

Ок, в таком случае вопрос повторяется для компилятора

В чем проблема написать бэкенд компилятора Rust на Rust? Фронтенд уже написан.

Компилятор C# уже написан на C#.

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

Шо, не под люнекс пишешь? Эх, бывает же

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