директивы условной компиляции

Проектирование и разработка идеального средства программирования.

Модератор: Модераторы

Сообщение Bohdan » 07.02.2008 00:34:33

Есть предложение подумать (благо флеймить любят все – этож не программу писать) и придумать, что же должно быть и чему не быть в идеальном (по нашему мнению) языке программирования.


Помоему обсуждение к сожалению ушло в сторону от первоначальной темы... Хотелось бы вернуться к обсуждению "ИДЕАЛЬНОГО ЯЗЫКА"

Вот кто подскажет, что делать с директивами условной компиляции?
Согласитесь что она значительно ухудшает читабельность программы, но без нее сейчас не обходиться ни один кросс-платформенный проект.
Bohdan
новенький
 
Сообщения: 87
Зарегистрирован: 11.05.2005 11:31:46
Откуда: Ukraine, Kyiv

Сообщение alexs » 07.02.2008 09:51:40

Bohdan писал(а):Вот кто подскажет, что делать с директивами условной компиляции?

По момему пока с ними миряимся, как с необходимым злом - но желательно использовать их как можно меньше.
Аватара пользователя
alexs
долгожитель
 
Сообщения: 4053
Зарегистрирован: 15.05.2005 23:17:07
Откуда: г.Ставрополь

Re: директивы условной компиляции

Сообщение Logo » 25.09.2008 15:59:53

Подскажите, пожалуйста, директивы условной компиляции (если оини существуют) для QT и GTK/GTK2.
Что-то у меня ничего не получается.

Добавлено спустя 1 час 45 минут 13 секунд:
Разобрался...
LCLgtk, LCLgtk2, LCLqt, LCLfpgui, LCLwin32, LCLwinse, LCLcarbon.
Logo
постоялец
 
Сообщения: 464
Зарегистрирован: 20.08.2008 01:00:47

Re: директивы условной компиляции

Сообщение AbakAngelSoft » 11.12.2009 12:12:26

Прошу прощения, что поднимаю старую тему, но не смог сдержатся.
Мне кажется что директивы условной компиляции необходимо вообще убрать из "идеального языка".
То для чего они используются необходимо писать на самом языке:
Код: Выделить всё
const Platform: String = 'Win64';
...
if (Platform = 'Win32') then begin
...
end else begin
  ...
end;

А вырезать неосуществимые ветви должен компилятор
Или располагать платформозависимые модули в отдельных папках как сейчас лежат откомпилированные. win32-i386, FreeBSD-x86_64 и т.д.
Аватара пользователя
AbakAngelSoft
постоялец
 
Сообщения: 273
Зарегистрирован: 06.08.2008 19:28:26
Откуда: Краснодар

Re: директивы условной компиляции

Сообщение Mr.Smart » 11.12.2009 12:16:01

Каждый должен заниматься своим делом!
Препроцессор обрабатывать директивы, а компилятор соответственно компилировать... :wink:
Mr.Smart
долгожитель
 
Сообщения: 1796
Зарегистрирован: 29.03.2008 01:01:11
Откуда: из леса!

Re: директивы условной компиляции

Сообщение AbakAngelSoft » 11.12.2009 12:22:32

Препроцесоры это вообще наносное. Компилировать должен компилятор. IMHO.
Аватара пользователя
AbakAngelSoft
постоялец
 
Сообщения: 273
Зарегистрирован: 06.08.2008 19:28:26
Откуда: Краснодар

Re: директивы условной компиляции

Сообщение v-t-l » 11.12.2009 17:44:43

AbakAngelSoft писал(а):То для чего они используются необходимо писать на самом языке:

Код: Выделить всё
const Platform: String = 'Win64';
...
if (Platform = 'Win32') then begin
...
end else begin
...
end;

А как быть с условными объявлениями (переменных, типов, функций, констант)?
v-t-l
энтузиаст
 
Сообщения: 728
Зарегистрирован: 13.05.2007 16:27:22
Откуда: Belarus

Re: директивы условной компиляции

Сообщение AbakAngelSoft » 11.12.2009 17:55:40

Код: Выделить всё
unit ...;
...
const Platform: String = 'Win64';
...
type
if (Platform = 'Win32') then begin
  TMyType = class(TWin32Class)
  ...
  end;
end else begin
  TMyType = class(TWin64Class)
  ...
  end;
end;
Аватара пользователя
AbakAngelSoft
постоялец
 
Сообщения: 273
Зарегистрирован: 06.08.2008 19:28:26
Откуда: Краснодар

Re: директивы условной компиляции

Сообщение Max Rusov » 11.12.2009 18:06:59

И сколько чудесных багов принесет такое "усовершенствование" синтаксиса...
Max Rusov
постоялец
 
Сообщения: 191
Зарегистрирован: 25.04.2009 15:46:03

Re: директивы условной компиляции

Сообщение AbakAngelSoft » 11.12.2009 18:15:42

Какие баги это может принести?
наоборот компилятор сможет бить по рукам в случаях неправильного использования директив!
А то сейчас необходимо пробовать компилировать при всех возможных сочетаниях что бы быть уверенным что директивы использованы правильно!
Код: Выделить всё
{#IFDEF MyDEF}
type t = class(TObject);
{#ENDIF}
...
var c: t;

Если директива определена компилируется нормально и даже без предупреждений, а код-то неправильный!
Аватара пользователя
AbakAngelSoft
постоялец
 
Сообщения: 273
Зарегистрирован: 06.08.2008 19:28:26
Откуда: Краснодар

Re: директивы условной компиляции

Сообщение Max Rusov » 11.12.2009 18:50:36

Да утопия это. В том и преимущество препроцессора, что он вообще не парсит, ветки, которые не попадают под условие. Они может и не должны компилироваться, скажем программа под разные платформы, меня интересует только одна, а под остальные у меня нет библиотек.
Max Rusov
постоялец
 
Сообщения: 191
Зарегистрирован: 25.04.2009 15:46:03

Re: директивы условной компиляции

Сообщение AbakAngelSoft » 11.12.2009 19:11:57

Не утопия!
Причем тут библиотеки?
Компилируется только код под текущую платформу, а анализируется весь, чтобы вовремя по рукам дать.
Мы же говорим о "идеальном языке" :)
Аватара пользователя
AbakAngelSoft
постоялец
 
Сообщения: 273
Зарегистрирован: 06.08.2008 19:28:26
Откуда: Краснодар

Re: директивы условной компиляции

Сообщение Max Rusov » 11.12.2009 19:35:07

Ну так, в вышеприведенном примере с неопределенным типом "t" она должна "по рукам дать", или нет?
Max Rusov
постоялец
 
Сообщения: 191
Зарегистрирован: 25.04.2009 15:46:03

Re: директивы условной компиляции

Сообщение AbakAngelSoft » 11.12.2009 19:59:52

обязательно. Если код при некоторых условиях может вызывать ошибки компилятор должен об этом открыто говорить
Аватара пользователя
AbakAngelSoft
постоялец
 
Сообщения: 273
Зарегистрирован: 06.08.2008 19:28:26
Откуда: Краснодар

Re: директивы условной компиляции

Сообщение Max Rusov » 11.12.2009 20:07:13

Ok. А в таком варианте:

Код: Выделить всё
const Platform: String = 'XXX';

uses
  if Platform = 'XXX' then
    XXXTypes;
  else
    YYYTypes;
  end;

if Patform = 'XXX' then
  type
     TSomeType = integer;
end;

var
  A :TSomeType;


YYYTypes у меня нет, я работаю на платформе XXX. Как разрулить?
Max Rusov
постоялец
 
Сообщения: 191
Зарегистрирован: 25.04.2009 15:46:03

След.

Вернуться в Компилятор / язык программирования

Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 6

Рейтинг@Mail.ru