Я вообще не представляю, неужели бывают такие люди, которые попали на сайт и тут-же благодаря какому-то особенному дизайну «прилипли» и сразу же стали покупать, покупать, покупать…
Надо чтобы было хорошо и при наличии правильно настроенного редактора, и при его отсутствии.
В жизни ведь всякое бывает, иногда и в «полевых условиях» приходится код править. Редакторы — их много, они разные (кому-то удобен один, кому-то другой), иногда проприетарные (т.е. любой так просто не скачаешь), иногда под разные ОС (и под нужную в данный момент может не оказаться), иногда они перестают поддерживаться и т.д. И код может переходить из рук в руки, из компании в компанию и т.д., а везде редакторы разные.
Вот поэтому я и не люблю языки программирования, в которых синтаксис активно зависит от непечатаемых символов ( python и т.п. ).
Я на подобное нарвался с какой-то древней утилитой (возможно make или что-то совсем экзотическое) еще учась в ВУЗе, на какой-то лабораторной работе. Что-то работало совершенно не так только от того, что где-то стояла табуляция вместо пробела.
Итого, единственный правильный способ обработки непечатаемых символов (пробелов, табуляций, переносов строк и возвратов каретки) в программах — пропускать их идущие подряд в любом порядке и в любом количестве и считать это одним «виртуальным разделителем».
Это не было бы магией, хотя не было бы и полным решением проблемы («счетчики времени компиляции» — лишь крошечная часть того, что можно сделать, получив доступ к императивному метапрограммингу).
Я вот в предыдущем посте по С++ высказался насчет того, как я вижу идеальный вариант метапрограммирования — так заминусовали. А эта дикая смесь constexpr, шаблонов и friend объявлений уже есть, и ей будут пользоваться, получая в очередной раз километровые сообщения об ошибках компиляции. И трогать придется, потому что реальные задачи требуют хоть каких-то решений, и за неимением других придется пользоваться этим.
Боже мой, похоже что Филипп Розеен это еще один Александреску :)
Самое страшное, что оно сейчас расползется, все начнут это использовать, потом в Бусте что нибудь появится, и потом это станет нормой.
Напомнило одну байку. Студенты, чтобы не сидеть на лекции, оставляли вместо себя включенные диктофоны и уходили куда-то по своим делам. Со временем студентов в аудитории становилось все меньше, а диктофонов — все больше. И вот однажды, видя такое дело, преподаватель пришел с магнитофоном, включил его на воспроизведение лекции и сам тоже ушел по делам:)
Какова вероятность соударения в космосе двух достаточно маленьких по космическим меркам объектов, учитывая что и собственное гравитационное поле обоих объектов слишком слабое чтобы притянуть к себе что-то?
Добавлю: к программам и метапрограммам предъявляются совершенно разные требования. В отличие от программы, метапрограмма может не быть супер-быстрой, но она обязана быть максимально безопасной. Вы же не хотите, чтобы скачанные с гитхаба исходники при компиляции (всего лишь при компиляции!) отформатировали ваш жесткий диск или отправили ваши пароли куда-нибудь в интернет? Метапрограмма должна быть заточена для работы в специальном окружении — внутри компилятора (т.к. по сути это плагин к компилятору). Там должны быть удобные средства работы со специальными типами данных (такими как узлы AST, идентификаторы и т.д.). Скриптовые языки на самом деле предназначены именно для этого — для работы в специальных изолированных окружениях (будь то движок игры, CAD-система, браузер или в нашем случае компилятор). А синтаксическое дерево имеет некоторое сходство с иерархической структурой HTML DOM, так что в случае с js есть на что ориентироваться. Хотя конечно можно взять и другой язык — Lua, Python и т.д.
С указателями и прочими «небезопасными» вещами? Ну-ну:) Если падает программа, ее можно хотя-бы в отладчике загрузить и посмотреть что и где падает. А если упадет компилятор, как искать ошибку будете? А он упадет, не сомневайтесь; компиляторы и на существующих шаблонах иногда падают.
Метапрограммирование совершенно не должно быть на том же языке, что и нормальное программирование, т.к. у этих видов программирования совершенно разные задачи и совершенно разное окружение: у программ — системные вызовы ОС и внешние библиотеки, а нередко и доступ к оборудованию; у метапрограмм — API компилятора и AST компилируемой программы. Хотя конечно это возможно и на одном языке, но с очень серьезными ограничениями.
Ну да, именно это я и имею в виду. Синтаксические (а не лексические как в плюсах) макросы, доступ к AST. В качестве языка метапрограммирования можно использовать любой достаточно распространенный скриптовый язык, например javascript.
Не прошло и 35 лет:)
Но лучше поздно чем никогда. Наконец-то этот ад под названием include станет постепенно исчезать.
Конечно еще придется подождать пока основные библиотеки (boost, qt и т.п.) перейдут на модули. Но думаю как только msvc, gcc и clang поддержат — так сразу и перейдут.
Еще бы рефлексию нормальную и метапрограммирование человеческое, а не на шаблонах.
В жизни ведь всякое бывает, иногда и в «полевых условиях» приходится код править. Редакторы — их много, они разные (кому-то удобен один, кому-то другой), иногда проприетарные (т.е. любой так просто не скачаешь), иногда под разные ОС (и под нужную в данный момент может не оказаться), иногда они перестают поддерживаться и т.д. И код может переходить из рук в руки, из компании в компанию и т.д., а везде редакторы разные.
Я на подобное нарвался с какой-то древней утилитой (возможно make или что-то совсем экзотическое) еще учась в ВУЗе, на какой-то лабораторной работе. Что-то работало совершенно не так только от того, что где-то стояла табуляция вместо пробела.
Итого, единственный правильный способ обработки непечатаемых символов (пробелов, табуляций, переносов строк и возвратов каретки) в программах — пропускать их идущие подряд в любом порядке и в любом количестве и считать это одним «виртуальным разделителем».
Я вот в предыдущем посте по С++ высказался насчет того, как я вижу идеальный вариант метапрограммирования — так заминусовали. А эта дикая смесь constexpr, шаблонов и friend объявлений уже есть, и ей будут пользоваться, получая в очередной раз километровые сообщения об ошибках компиляции. И трогать придется, потому что реальные задачи требуют хоть каких-то решений, и за неимением других придется пользоваться этим.
Самое страшное, что оно сейчас расползется, все начнут это использовать, потом в Бусте что нибудь появится, и потом это станет нормой.
Метапрограммирование совершенно не должно быть на том же языке, что и нормальное программирование, т.к. у этих видов программирования совершенно разные задачи и совершенно разное окружение: у программ — системные вызовы ОС и внешние библиотеки, а нередко и доступ к оборудованию; у метапрограмм — API компилятора и AST компилируемой программы. Хотя конечно это возможно и на одном языке, но с очень серьезными ограничениями.
Но лучше поздно чем никогда. Наконец-то этот ад под названием include станет постепенно исчезать.
Конечно еще придется подождать пока основные библиотеки (boost, qt и т.п.) перейдут на модули. Но думаю как только msvc, gcc и clang поддержат — так сразу и перейдут.
Еще бы рефлексию нормальную и метапрограммирование человеческое, а не на шаблонах.