Re[5]: Можно ли жить без #if?
От: _FRED_ Черногория
Дата: 18.06.10 04:49
Оценка:
Здравствуйте, VladD2, Вы писали:

_FR>>Было бы. Если не страшит то, что у некоторых программистов может случиться "ломка" из-за отсутствия #if Но это я шучу: конечно, если в самом языке нет ничего такого, для чего был бы необходим #if то от него надо избавляться.


VD>Вот мне и интересно насколько народу дорги текстуальные макросы.


Тем, кому дороги, можно посоветовать использовать их на полную (сишную) катушку: но перед компиляцией ncc прогонять их через cl
Help will always be given at Hogwarts to those who ask for it.
Re[2]: Можно ли жить без #if?
От: ZevS Россия  
Дата: 18.06.10 07:52
Оценка:
Как-то тоже сразу подумалось...
Re[5]: Можно ли жить без #if?
От: _FRED_ Черногория
Дата: 18.06.10 07:54
Оценка:
Здравствуйте, VladD2, Вы писали:

VD>Вот мне и интересно насколько народу дорги текстуальные макросы.


На счёт до`роги\не до`роги сказать не могу, но сильверлайтчики взяли за моду (эх, найти бы, кто это первый "придумал" ):

Например здесь: http://www.jeff.wilcox.name/2009/03/gravatar-control

или ответ здесь:

You Can reuse many functionality in silverlight and WPF.
So create them in same fime and where ever differences are there use preprocessor directives.

и так далее
Help will always be given at Hogwarts to those who ask for it.
Re[6]: Можно ли жить без #if?
От: VladD2 Российская Империя www.nemerle.org
Дата: 18.06.10 10:42
Оценка:
Здравствуйте, _FRED_, Вы писали:

_FR>Например здесь: http://www.jeff.wilcox.name/2009/03/gravatar-control


Конкретно в этом случае можно обойтись и синтаксическими макрами с метаатрибутами. Синтаксис они ведь не рвут. Меня больше интресует более хардкорное применение более близкое к стилю С++.
Есть логика намерений и логика обстоятельств, последняя всегда сильнее.
Re[3]: Можно ли жить без #if?
От: MasterZiv СССР  
Дата: 18.06.10 10:48
Оценка:
VladD2 wrote:

> N>В Java нет препроцессора, так что, видимо, можно


Да в Java вообще ничего нет. Можно конечно так жить, но зачем ?
лучше уж не использовать Java.

> К сожалению я Яву практически (для реальной работы) не использовал.

> Интересно не вызывает ли это негативных эмоций у программистов?

Вызывает конечно. Из-за недостатка языка нужно компенсировать эти
недостатки на уровне архитектуры приложения, усложняя её.

ПО сабжу:

КОнечно же препроцессор никому не нужен, если есть макросы a-la лисповых.
В C/C++ просто нет другого, поэтому выбростить текущий не реально.
Posted via RSDN NNTP Server 2.1 beta
Re[7]: Можно ли жить без #if?
От: FR  
Дата: 18.06.10 11:39
Оценка:
Здравствуйте, VladD2, Вы писали:

VD>Конкретно в этом случае можно обойтись и синтаксическими макрами с метаатрибутами. Синтаксис они ведь не рвут. Меня больше интресует более хардкорное применение более близкое к стилю С++.


В том же D отсутствие препроцессора ничем ни мешает, так как есть адекватные замены практически на все варианты использования.
Re: Можно ли жить без #if?
От: gandjustas Россия http://blog.gandjustas.ru/
Дата: 18.06.10 11:42
Оценка:
Здравствуйте, VladD2, Вы писали:

VD>Откровенно говоря мне всегда не нравился препроцессор. Вот думаю реально ли отказаться от него полностью?

Да, главное чтобы интеграция со студией работала, там t4 есть.
Re[5]: Можно ли жить без #if?
От: Ikemefula Беларусь http://blogs.rsdn.org/ikemefula
Дата: 18.06.10 20:32
Оценка:
Здравствуйте, VladD2, Вы писали:

VD>Согласен. Потому тему и создал. Просто я уже сто раз сталкивался с решениями которые мне нравятся и кажутся очевидными, но не принимаются большинством сообщества. А языки ведь они не для себя лично проектируются (точнее не только для себя).


Очень похоже, что ты только для себя + таких же гиков и проектируешь.
Re: Можно ли жить без #if?
От: z00n  
Дата: 19.06.10 09:34
Оценка: 6 (1)
Здравствуйте, VladD2, Вы писали:

VD>Можно ли жить без препроцессор директив условной компиляции (вроде #if)?


Как известно, сами авторы языка С сделали себе диалект без #if

...
Another restriction is that the C compilers accept only a subset of the preprocessor directives required by ANSI. The main omission is #if, since we believe it is never necessary and often abused. Also, its effect is better achieved by other means. For instance, an #if used to toggle a feature at compile time can be written as a regular if statement, relying on compile-time constant folding and dead code elimination to discard object code.
...
Plan 9 from Bell Labs


Вот еще: Avoid conditional compilation
Re[4]: Можно ли жить без #if?
От: vdimas Россия  
Дата: 19.06.10 09:50
Оценка: +2
Здравствуйте, nikov, Вы писали:


N>Мое личное мнение: препроцессор — это зло, даже в такой ограниченной форме, как в C#. Он способствует тому, чтобы смешивались разные уровни абстракции.


Разве? Препроцессор нужен не для смешения абстракций, а для их упрощения или уменьшения их кол-ва. Например, в отсутствии препроцессора, в том месте, где нужно всего лишь подставить пару разных строк для серверной и клиентской версии некоего софта, потребуется городить дополнительный интерфейс. А это решение очень спорно ввиду того, что в готовой программе интерфейс фактически используется не по назначению, ведь он не служит для развязки/абстрагирования, коль речь идет о взаимоисключающих подстановках уровня compile-time, но вовсе не run-time. Т.е. раз в готовой программе будет гарантированно единственная реализация некоего интерфейса, то его применение как способа решения проблемы является инженерным ляпом при наличии других ср-в, и оправданно лишь в случае отсутствия тех самых других ср-в, например как в Джава.

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


Дык, препроцессор и так должен поверх языка вызываться. То, что препроцессор может быть встроен в компилятор, вовсе не означает, что он должен быть встроен в язык (вернее, в его грамматику). Не надо смешивать уровни абстракций.
Re[5]: Можно ли жить без #if?
От: FR  
Дата: 19.06.10 10:07
Оценка:
Здравствуйте, vdimas, Вы писали:

V>Разве? Препроцессор нужен не для смешения абстракций, а для их упрощения или уменьшения их кол-ва. Например, в отсутствии препроцессора, в том месте, где нужно всего лишь подставить пару разных строк для серверной и клиентской версии некоего софта, потребуется городить дополнительный интерфейс. А это решение очень спорно ввиду того, что в готовой программе интерфейс фактически используется не по назначению, ведь он не служит для развязки/абстрагирования, коль речь идет о взаимоисключающих подстановках уровня compile-time, но вовсе не run-time. Т.е. раз в готовой программе будет гарантированно единственная реализация некоего интерфейса, то его применение как способа решения проблемы является инженерным ляпом при наличии других ср-в, и оправданно лишь в случае отсутствия тех самых других ср-в, например как в Джава.


Для этого препроцессор точно не нужен. Достаточно чтобы в языке можно было явно выделять compile time, более менее нормально это сделано в D.
Например для того что ты выше описал хватает static if из D.
Re[6]: Можно ли жить без #if?
От: vdimas Россия  
Дата: 20.06.10 00:44
Оценка:
Здравствуйте, FR, Вы писали:

FR>Для этого препроцессор точно не нужен. Достаточно чтобы в языке можно было явно выделять compile time, более менее нормально это сделано в D.

FR>Например для того что ты выше описал хватает static if из D.

В boost тоже подобного полно. Но я не понял, как натравить в D компилятор на один и тот же исходник без его изменения, и только за счет ключей при его вызове получить разницу в static if?
Re[7]: Можно ли жить без #if?
От: vdimas Россия  
Дата: 20.06.10 00:54
Оценка: 3 (1) +1
Здравствуйте, VladD2, Вы писали:

VD>Конкретно в этом случае можно обойтись и синтаксическими макрами с метаатрибутами. Синтаксис они ведь не рвут. Меня больше интресует более хардкорное применение более близкое к стилю С++.


Да ладно, макросы — не самоцель, а ср-во настроивать генерацию кода без изменения исходников. Нужно просто такое ср-во, которое позволит задавать некие условия как ключи компиляции, и этими ключами управлять кодогенерацией с прикладной точки зрения. А какие эти ср-ва будут, текстуальные или синтаксические — это вообще к делу слабо относится. Из важного в этом вопросе лишь вменяемый синтаксис использования всей этой кухни, потому как здесь: http://www.rsdn.ru/forum/philosophy/3847820.1.aspx
Автор: VladD2
Дата: 18.06.10
— совершенно невменяемый.
Re[7]: Можно ли жить без #if?
От: FR  
Дата: 20.06.10 02:20
Оценка:
Здравствуйте, vdimas, Вы писали:

V>В boost тоже подобного полно. Но я не понял, как натравить в D компилятор на один и тот же исходник без его изменения, и только за счет ключей при его вызове получить разницу в static if?


В бусте нет ничего хотя бы близкого по возможностям static if.
Чтобы компилировать исходник без изменений в D есть version http://www.digitalmars.com/d/2.0/version.html
практически аналог #ifdef.
Re[8]: Можно ли жить без #if?
От: FR  
Дата: 20.06.10 02:21
Оценка:
Здравствуйте, vdimas, Вы писали:

V>Да ладно, макросы — не самоцель, а ср-во настроивать генерацию кода без изменения исходников. Нужно просто такое ср-во, которое позволит задавать некие условия как ключи компиляции, и этими ключами управлять кодогенерацией с прикладной точки зрения. А какие эти ср-ва будут, текстуальные или синтаксические — это вообще к делу слабо относится. Из важного в этом вопросе лишь вменяемый синтаксис использования всей этой кухни, потому как здесь: http://www.rsdn.ru/forum/philosophy/3847820.1.aspx
Автор: VladD2
Дата: 18.06.10
— совершенно невменяемый.


В D вполне вменяемый синтаксис http://www.rsdn.ru/forum/philosophy/3847885.1.aspx
Автор: FR
Дата: 18.06.10
Re[8]: Можно ли жить без #if?
От: vdimas Россия  
Дата: 20.06.10 03:51
Оценка:
Здравствуйте, FR, Вы писали:

FR>Чтобы компилировать исходник без изменений в D есть version http://www.digitalmars.com/d/2.0/version.html

FR>практически аналог #ifdef.

Угу, аналог и есть, с точностью до синтаксиса.
Re: Можно ли жить без #if?
От: Klapaucius  
Дата: 21.06.10 06:04
Оценка:
Здравствуйте, VladD2, Вы писали:

VD>Откровенно говоря мне всегда не нравился препроцессор. Вот думаю реально ли отказаться от него полностью?


А не может это понадобиться тому, кто захочет писать код, который можно будет компилировать разными компиляторами, или разными версиями одного компилятора с отличающейся поддержкой фич? Тут ведь может возникнуть необходимость и в "разрывании синтаксиса" да и ориентироваться на возможности самой ограниченной версии.
#if N2
//используем фичу новой версии языка.
#elif
//делаем по-старому.
#endif

Но, конечно, поддержка деректив препроцессора именно в компиляторе не нужна — можно же всегда отдельным препроцессором воспользоваться.
... << RSDN@Home 1.2.0 alpha 4 rev. 1446>>
'You may call it "nonsense" if you like, but I'VE heard nonsense, compared with which that would be as sensible as a dictionary!' (c) Lewis Carroll
Re[2]: Можно ли жить без #if?
От: ZevS Россия  
Дата: 21.06.10 07:07
Оценка:
Здравствуйте, Klapaucius, Вы писали:

K>...захочет писать код, который можно будет компилировать разными компиляторами...


Или уж сразу на двух языках писать.
Re[9]: Можно ли жить без #if?
От: vdimas Россия  
Дата: 21.06.10 08:47
Оценка: +1
Здравствуйте, FR, Вы писали:

V>>Да ладно, макросы — не самоцель, а ср-во настроивать генерацию кода без изменения исходников. Нужно просто такое ср-во, которое позволит задавать некие условия как ключи компиляции, и этими ключами управлять кодогенерацией с прикладной точки зрения. А какие эти ср-ва будут, текстуальные или синтаксические — это вообще к делу слабо относится. Из важного в этом вопросе лишь вменяемый синтаксис использования всей этой кухни, потому как здесь: http://www.rsdn.ru/forum/philosophy/3847820.1.aspx
Автор: VladD2
Дата: 18.06.10
— совершенно невменяемый.


FR>В D вполне вменяемый синтаксис http://www.rsdn.ru/forum/philosophy/3847885.1.aspx
Автор: FR
Дата: 18.06.10


Согласен, и чтобы быть более точным, не о макросах речь, конечно, а об условной компиляции. С макроопределениями как таковыми в N все нормально.
Re[3]: Можно ли жить без #if?
От: olegkr  
Дата: 22.06.10 17:42
Оценка:
Здравствуйте, VladD2, Вы писали:

VD>Ты хочешь сказать, что их не приходилось использовать?

Не приходилось использовать.
... << RSDN@Home 1.2.0 alpha 4 rev. 1472>>
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.