34 / 0 / 1
Регистрация: 19.08.2013
Сообщений: 246
|
|
1 | |
Какие есть компиляторы c++ без изменения синтаксиса27.07.2014, 12:19. Показов 2642. Ответов 37
Метки нет (Все метки)
0
|
27.07.2014, 12:19 | |
Ответы с готовыми решениями:
37
Есть ли какие нибудь компиляторы, которые форматируют код под асемблер? Какие компиляторы С лучше? Какие компиляторы вам известны? Какие компиляторы (или среды) поддерживают с++ 11? |
0x10
|
28.07.2014, 20:15
Какие есть компиляторы c++ без изменения синтаксиса
#21
|
0
|
28.07.2014, 21:10 | 22 |
Понятие "расширение" подразумевает введение дополнений, а не изменение существующих конструкций
Об чём и идёт речь с самого начала. Вопрос только в том, что такое non-standard. Для эксперта этот вопрос затруднений не вызывает. А новичку далеко не сразу и не везде понятно, что есть стандарт, а что нет. Потому ТС и спросил, как сие возможно проконтролировать в автоматическом режиме, а не в режиме постоянного чтения стандартов Это не так. Этим расширением пользуется множество разработчиков, выпускающих программные продукты, которые поставляют дополнительные хидеры. Т.е. разработчики библиотек. А так же разработчики ядра линукса (потому что ядро поставляет множество инклюдов в user-space). А может кто-то ещё. В любом случае новичок, увидевший где-то использование typeof и попробовавший его на gcc, далеко на сразу поймёт, что сие есть расширение языка C, а не стандартный C
0
|
1181 / 894 / 94
Регистрация: 03.08.2011
Сообщений: 2,461
|
|
28.07.2014, 21:15 | 23 |
Видать, опять неправильно поняли. Я имел ввиду, что typeof - расширение для сторонних разработчиков, а __typeof__ - для внутренней реализации. Хоть они и выполняют одно и то же. Возможно, даже один является макросом другого.
0
|
28.07.2014, 22:51 | 24 |
Нет. Точно так же __typeof__'ом пользуются все. К тому же glibc (которая является системной библиотекой) НЕ является частью компилятора. Как минимум это говорит о том, что __typeof__ - это не внутреннее расширение, а для широкого использования
Добавлено через 1 час 27 минут К слову говоря, такого он вовсе не говорил. Это уже ты за него придумал
0
|
29.07.2014, 06:42 | 25 |
По поводу гнусных расширений и не только - я бы использовал только в каких-то библиотечных файлах для оптимизации (для чего-то эти расширения же придумали). Но я бы их обернул во что-то, что хотя бы потенциально может быть перенесено на другие платформы. Про glibc и linux kernel - поскольку конечный юзер напрямую их почти не использует (а если использует, явно понимает, что к чему), пусть пишут там что душе угодно. Но по мне так это порочная практика. Как же принцип мира Unix: жертвуй производительностью ради переносимости? gcc со своими расширениями, конечно, переносимый, но это какая-то узкая трактовка понятия "переносимость". Ну и может я ламер, но я ещё не встретил в жизни ситуации, когда мне позарез нужны были расширения компилятора.
Может, кто-то поделится примерами из практики?
0
|
3257 / 2059 / 351
Регистрация: 24.11.2012
Сообщений: 4,909
|
|
29.07.2014, 07:55 | 26 |
В большей части прикладного кода они и не встетятся.
Пример из стандартной библиотеки - реализация type_traits. http://en.cppreference.com/w/cpp/types https://gcc.gnu.org/onlinedocs... ype-Traits
0
|
29.07.2014, 19:19 | 28 |
Ээээээ. Ну кагбэ Александреску всё это сделал 100500 лет назад в своей Loki. На том же cpprefernece Possible implementation почти копирует его код (ну кроме всяких remove_reference). Так что мимо.
Добавлено через 6 минут Примерно 40. Фортрану поболе будет. Да и Лиспу. Думаю, постарше вас. Нинасколько. Всё так же Си, всё те же яйца. Только теперь куча придурков решило: раз венда - это 90% рынка, а она только под Intel, то и нафиг все эти ваши Linux и ARM. Дружно все пишем на шарпе. Или уэб-интерфейсы. А хто самый умный, тому невероятно переносимая Java. =-O Вы меня, конечно, извините, но вы вроде эксперт Си++, а морозите какую-то чушь.
0
|
3257 / 2059 / 351
Регистрация: 24.11.2012
Сообщений: 4,909
|
|
29.07.2014, 19:26 | 29 |
Я и не сказал, что трейтсы должны быть на 100% реализованы на расширениях компилятора. Часть их используют (has_trivial_[constructor|destructor|etc...])
0
|
29.07.2014, 19:34 | 30 |
Вообще, про то и речь: все traits давно реализованы на чистых шаблонах уже лет 10-15 как. Здесь та же ситуация, что с Boost: творения всяких маньяков типа Александреску попадают в стандарт. (Даже странно, что в Си++11/14 не добавили сериализацию, в бусте давно есть).
Так что мало того что всё это не требует никаких расширений компилятора вообще, так и возникает вопрос: а зачем вам столько информации о типах на этапе компиляции?
0
|
327 / 230 / 55
Регистрация: 30.05.2014
Сообщений: 682
|
|
29.07.2014, 19:39 | 31 |
0
|
3257 / 2059 / 351
Регистрация: 24.11.2012
Сообщений: 4,909
|
|
29.07.2014, 19:42 | 32 |
Я говорю об обратном - некоторые трейтсы требуют поддержки компилятора.
Повторю то, что уже говорил выше: это может быть неочевидно для прикладного программиста. Я не писал библиотечный код, а потому не могу привести конкретные примеры применимости.
0
|
3257 / 2059 / 351
Регистрация: 24.11.2012
Сообщений: 4,909
|
|
29.07.2014, 19:57 | 34 |
http://www.boost.org/doc/libs/... uctor.html
Прикладному программисту может быть неочевидно "зачем столько информации о типах на этапе компиляции". Сходу мне придумывается оптимизация функции типа push_back: при перевыделении памяти переместить объекты из старой памяти в новую безопасно можно только если их move-конструкторы не бросают исключений. Кажется нормальным вариантом для оптимизации.
0
|
29.07.2014, 20:27 | 35 | |||||
Если разработака ведется именно под Linux, то бывает эти расширения во всю используются.
Живой пример (из OpenJDK)
0
|
29.07.2014, 22:40 | 37 |
Только вот процессора сильно поменялись в своём внутреннем устройстве. Если раньше достаточно было повысить частоту в два раза, после чего программа начинала работать в два раза быстрее, то сейчас это уже не так. Процессоры стали сложнее, а потому стало сложнее писать под них оптимальный код. Далеко не всегда получается это сделать на чистом языке без использования расширений. Я уж не говорю о том, что приличная доля вычислений перетекла с CPU на GPU, где чистый язык вообще мало канает
Опять-таки мало понятно, откуда ты такую ересь высасываешь. Есть конкретное приложение, работающее под вполне себе конкретной системой, к которой ставится вполне себе нехилое требование - миллион транзакций в секунду. Все доводы из разряда "жертвуй производительностью ради переносимости" идут лесом как минимум потому, что переносимость нафиг никому не нужна при такой постановке задачи. Понятно, что всегда нужно по возможности стараться писать максимально переносимый код, но когда из принципа начинает уродоваться программа из соображений "пусть в 10 раз медленнее, зато строго по стандарту", то это такой же маразм диванных теоретиков, как "программирование без goto". В каком конкретно месте чушь и в чём она выражается? И что, они писались на чистом (стандартном) языке программирования без расширений? А ведь именно в контексте использования расширений и начался спор
0
|
327 / 230 / 55
Регистрация: 30.05.2014
Сообщений: 682
|
|
30.07.2014, 06:07 | 38 |
О задачах реального времени имеет смысл говорить только применительно к ОС реального времени, а это ниша довольно специфическая. RT11 помнится была написана на ассемблере. А в целом вполне очевидно, что есть задачи, для которых производительность важнее переносимости, иначе вот этого: https://software.intel.com/sit... sicsGuide/ бы не было.
0
|
30.07.2014, 06:07 | |
30.07.2014, 06:07 | |
Помогаю со студенческими работами здесь
38
Какие есть сборки для установки без компиляции? Какие вы знаете компиляторы, которые жестко контролируют, чтобы не было вставок из C++ Есть ли какие-нибудь редакторы HTML, которые позваляют без всяких заморочек привязывать БД к страницам? Есть ли онлайн компиляторы APK? Искать еще темы с ответами Или воспользуйтесь поиском по форуму: |