|
30 / 8 / 2
Регистрация: 20.08.2011
Сообщений: 615
|
|
Язык программирования компилятора в C++29.08.2016, 16:35. Показов 1565. Ответов 18
Метки нет (Все метки)
Добрый день!
Разглядывая новые возможности С++11 (С++14) и читая статьи, посвященные шаблонам, мне пришла в голову мысль - по сути шаблоны - это такой эдакий язык программирования компилятора. Посему возникает вопрос: а почему просто не взять и не сделать нормальное подмножество языка С++ с нормальным синтаксисом и языковыми конструкциями для этого (static_for, static_if, static_vars, static_switch...)? Спецификация структур/функций/классов - своего рода ветвление на этапе компиляции (if-else). Рекурсия - цикл foreach (или for). Тогда type_traits.h, например, можно будет забыть навсегда, т.к. он по своей сути является эдаким "мета-костылем". Назвать его костылем в прямом смысле слова нельзя, но те же conditional, enable_if и прочее это обход, замена static_if. Как-то так... Как считаете вы?
0
|
|
| 29.08.2016, 16:35 | |
|
Ответы с готовыми решениями:
18
Как называется движение программирования или теория программы считывающая др. язык программирования
Русский язык в строке ошибок компилятора |
| 29.08.2016, 16:37 | ||
![]() А делать то же самое, но красивее... хм, попробуйте. Я не пробовал, так что не в курсе.
0
|
||
| 29.08.2016, 17:24 | |||
|
0
|
|||
|
3225 / 1752 / 436
Регистрация: 03.05.2010
Сообщений: 3,867
|
|||
| 29.08.2016, 19:16 | |||
|
Добавлено через 1 минуту
0
|
|||
|
510 / 272 / 60
Регистрация: 14.12.2010
Сообщений: 548
|
||||||||
| 29.08.2016, 20:09 | ||||||||
как вариант:Шаблоны пошли по декларативному-функциональному стилю программирования, а С++ без шаблонов - императивный язык. Для метапрограммирования в императивном стиле надо вводить новую подсистему метапрограммировани и новый программируемый парсер, которые могли бы работать с помощью квазицитирования выражений и нового императивного скопа метапрограммирования
Без программируемого парсера будут проблемы с расширением языка. Тогда бы декларативные шаблоны можно было бы делать в стандартной библиотеке языка, не меняя компилятор. Правда мы тут сталкиваемся с проблемой, что теперь надо отлаживать не только программу, но и метапрограмму (хоть и теми же средствами, но уже на этапе компиляции), т.е. умножаем количество затрат на отладку для целевой программы. Где-то читал, что Страуструп идеологически не хочет(не хотел) допускать императивный стиль в метапрограммировании на C++. Отсюда такие выкрутасы с шаблонами.
1
|
||||||||
|
|
||
| 29.08.2016, 21:39 | ||
static_for? "Развёрнутый" цикл?static_if - что он должен делать? Условная компиляция не подходит?static_vars - это что такое? Константы? Так они есть.static_switch - реализовано в виде шаблонов.Шаблоны дают больше. Зачем всё это? Чем по-вашему текущее состояние языка является ненормальным? Приведите выдуманный пример с мифическим ключевым словом, который будет нормальным.
0
|
||
| 29.08.2016, 21:57 | |
|
0
|
|
|
8973 / 4319 / 960
Регистрация: 15.11.2014
Сообщений: 9,760
|
||||
| 29.08.2016, 23:15 | ||||
|
класс A параметризуется параметром Б, который в свою очередь обязан быть классом. если в этом классе есть метод @name определенной сигнатуры, тогда класс A должен быть относледован от класса Ц, а иначе, он должен быть отнаследован от шаблона Д, параметризованного параметром Б. вообще, дизайн современных шаблонов - это цена за их мощность и гибкость. попытка изобрести что-то сопоставимое по мощности и гибкости, которое при этом гармонично впишется в центральную тему с++ - ООП, приведет к тому, что у вас получится такой же максимум что тут можно сделать - это упростить синтаксис, но не сам подход к дизайну. Добавлено через 7 минут есть такая байка, я не знаю, правда ли это: его долгое время лобировали в комитете. и больше всех сопротивлялся Страуструп. но вроде бы он сдал позиции, и статик_иф таки встал на очередь вступления в будущие версии стандарта. борьба с синтаксической сложностью.
0
|
||||
|
|
|||||
| 29.08.2016, 23:21 | |||||
|
Добавлено через 4 минуты
0
|
|||||
| 29.08.2016, 23:32 | ||
|
Так он бесполезен для ветвлениях на типах и constexpr выражениях, т.к. ничего ни о том, ни о другом не знает.
0
|
||
|
30 / 8 / 2
Регистрация: 20.08.2011
Сообщений: 615
|
|
| 30.08.2016, 10:54 [ТС] | |
|
Так вот EVP в принципе неплохой пример привел.
А что касается static_if - это уже сказали правильно - ветвление на этапе компиляции. Тогда, например, для вычисления compile-time факториала не будет требоваться хвостовая функция (это просто пример, а жизненных примеров, где этот самый static if/constexpr if можно применить, я думаю, каждый найдет)). static_for - статический цикл - цикл на этапе компиляции. Замена рекурсии, например (или наоборот - ее дополнение). static_vars - compile-time переменные, которые в саму программу не попадут. Например использовать как вспомогательные переменные для вычислений каких-нибудь constexpr выражений. Ну, у кого опыта побольше - тот наверняка сталкивался с местами в коде, где такая возможность пригодилось бы. И, я считаю, синтаксис может упростится. А возможно и само написание кода. Или вот, например, есть constexpr функции. Но ведь не каждую функцию можно объявить constexpr. Должны быть выполнены определенные условия, например, если не ошибаюсь, такая функция должна иметь только один return. А так, пожалуйста, используя это гипотетическое подмножество, функция будет из коробки compile-time с несколькими return, if-else... Ведь все от желания зависит - захотят, будет нечто подобное. И проблемы, которые возникнут при этом, тоже будут решены, и синтаксис будет придуман и прочее. Вон, язык D, не оттого что ветер в голове гуляет, стали придумывать.
0
|
|
| 30.08.2016, 11:03 | |||||||||
0
|
|||||||||
|
42 / 42 / 17
Регистрация: 25.04.2014
Сообщений: 499
|
|
| 30.08.2016, 23:26 | |
|
0
|
|
|
8973 / 4319 / 960
Регистрация: 15.11.2014
Сообщений: 9,760
|
||
| 30.08.2016, 23:29 | ||
|
в привычном простом синтексисе, но так, что он будет исполняться времени компиляции. в некотором смысле, движки в эту сторону именно то, что хочет ТС. однако, технология достаточно сложная. развиваться она будет медленно. и она не в состоянии упразднить классические шаблоны.
0
|
||
|
2083 / 1574 / 169
Регистрация: 14.12.2014
Сообщений: 13,614
|
||
| 30.08.2016, 23:50 | ||
|
Добавлено через 9 минут При этом не так уж и сложно сделать генератор программного кода на самом C++ для некоторых случаев где бывает необходимо куча подобного кода в котором точность подставляемых данных важнее интеллектуальности. С необходимостью создания таких генераторов сталкивался 2 раза - таблицы для подгрузки функций OpenGL и набор операторов для операций над 2D и 3D векторами и матрицами во всех вариантах урезания (т.е. матрица поворота, расширенная матрица, униформ матрица во всех сочитаниях). Добавлено через 10 минут А вот к примеру введение в стандарт свойств и полной RTTI (т.е. фактически доступ к словарю компиляции в рантайме) была бы на порядок удобнее и позволяла бы решать просто огромное количество сложных (в плане создания таблиц адресов геттеров и сеттеров и т.п. вручную) для сегодняшнего С++ задач (к примеру полиморфной сериализации/десериализации данных). Так же как и введение нативных делегатов многие бы задачи упростило бы и сделало бы инициализацию делегатов гораздо более читабельной и писАбельной чем пользуемые для этих средств костыли, при этом нативные делегаты работают всегда быстрее чем шаблонные или иные костыли на эту тему.
0
|
||
|
103 / 69 / 19
Регистрация: 07.07.2014
Сообщений: 240
|
|
| 31.08.2016, 00:10 | |
|
0
|
|
| 31.08.2016, 00:10 | |
|
Помогаю со студенческими работами здесь
19
Язык программирования Язык программирования С++ скачать язык программирования С Основы программирования язык С
Искать еще темы с ответами Или воспользуйтесь поиском по форуму: |
|
| Опции темы | |
|
|
Новые блоги и статьи
|
||||
|
Новый ноутбук
volvo 07.12.2025
Всем привет.
По скидке в "черную пятницу" взял себе новый ноутбук Lenovo ThinkBook 16 G7 на Амазоне:
Ryzen 5 7533HS
64 Gb DDR5
1Tb NVMe
16" Full HD Display
Win11 Pro
|
Музыка, написанная Искусственным Интеллектом
volvo 04.12.2025
Всем привет. Некоторое время назад меня заинтересовало, что уже умеет ИИ в плане написания музыки для песен, и, собственно, исполнения этих самых песен. Стихов у нас много, уже вышли 4 книги, еще 3. . .
|
От async/await к виртуальным потокам в Python
IndentationError 23.11.2025
Армин Ронахер поставил под сомнение async/ await. Создатель Flask заявляет: цветные функции - провал, виртуальные потоки - решение. Не threading-динозавры, а новое поколение лёгких потоков. Откат?. . .
|
Поиск "дружественных имён" СОМ портов
Argus19 22.11.2025
Поиск "дружественных имён" СОМ портов
На странице:
https:/ / norseev. ru/ 2018/ 01/ 04/ comportlist_windows/
нашёл схожую тему. Там приведён код на С++, который показывает только имена СОМ портов, типа,. . .
|
Сколько Государство потратило денег на меня, обеспечивая инсулином.
Programma_Boinc 20.11.2025
Сколько Государство потратило денег на меня, обеспечивая инсулином.
Вот решила сделать интересный приблизительный подсчет, сколько государство потратило на меня денег на покупку инсулинов.
. . .
|
|
Ломающие изменения в C#.NStar Alpha
Etyuhibosecyu 20.11.2025
Уже можно не только тестировать, но и пользоваться C#. NStar - писать оконные приложения, содержащие надписи, кнопки, текстовые поля и даже изображения, например, моя игра "Три в ряд" написана на этом. . .
|
Мысли в слух
kumehtar 18.11.2025
Кстати, совсем недавно имел разговор на тему медитаций с людьми. И обнаружил, что они вообще не понимают что такое медитация и зачем она нужна. Самые базовые вещи. Для них это - когда просто люди. . .
|
Создание Single Page Application на фреймах
krapotkin 16.11.2025
Статья исключительно для начинающих. Подходы оригинальностью не блещут.
В век Веб все очень привыкли к дизайну Single-Page-Application .
Быстренько разберем подход "на фреймах".
Мы делаем одну. . .
|
Фото: Daniel Greenwood
kumehtar 13.11.2025
|
Расскажи мне о Мире, бродяга
kumehtar 12.11.2025
— Расскажи мне о Мире, бродяга,
Ты же видел моря и метели.
Как сменялись короны и стяги,
Как эпохи стрелою летели.
- Этот мир — это крылья и горы,
Снег и пламя, любовь и тревоги,
И бескрайние. . .
|