The OpenNET Project / Index page

[ новости /+++ | форум | теги | ]



Вариант для распечатки  
Пред. тема | След. тема 
Форум Разговоры, обсуждение новостей
Режим отображения отдельной подветви беседы [ Отслеживать ]

Оглавление

Вышел компилятор языка D 2.076, opennews (??), 02-Сен-17, (0) [смотреть все]

Сообщения [Сортировка по времени | RSS]


1. "Вышел компилятор языка D 2.076"  –1 +/
Сообщение от Аноним (-), 02-Сен-17, 20:09 
> Главным нововведением является режим "-betterC"...:
> Отсутствие препроцессора

Интересно, они какую траву употребляют?!

Ответить | Правка | Наверх | Cообщить модератору

8. "Вышел компилятор языка D 2.076"  +8 +/
Сообщение от Аноним (-), 02-Сен-17, 20:45 
>> Главным нововведением является режим "-betterC"...:
>> Отсутствие препроцессора
> Интересно, они какую траву употребляют?!

А что не так? В "улучшенной Сишечке" этот костыль по-любому лишний.

Ответить | Правка | Наверх | Cообщить модератору

25. "Вышел компилятор языка D 2.076"  +/
Сообщение от Аноним (-), 03-Сен-17, 02:22 
Правда?
Ответить | Правка | Наверх | Cообщить модератору

27. "Вышел компилятор языка D 2.076"  –1 +/
Сообщение от Аноним (-), 03-Сен-17, 02:28 
>>> Главным нововведением является режим "-betterC"...:
>>> Отсутствие препроцессора
>> Интересно, они какую траву употребляют?!
> А что не так? В "улучшенной Сишечке" этот костыль по-любому лишний.

Ну не нравится - не используй - никто же не заставляет! Но зачем же выкидывать столь гибкий инструмент! Всё это так называемое улучшательство пока выглядит так, будто корова в посудной лавке побывала.

Ответить | Правка | К родителю #8 | Наверх | Cообщить модератору

31. "Вышел компилятор языка D 2.076"  +9 +/
Сообщение от Аноним (-), 03-Сен-17, 04:11 
>> А что не так? В "улучшенной Сишечке" этот костыль по-любому лишний.
> Ну не нравится - не используй - никто же не заставляет!

Инклудами тоже предлагаете не пользоваться?

> Но зачем же выкидывать столь гибкий инструмент! Всё это так называемое улучшательство
> пока выглядит так, будто корова в посудной лавке побывала.

Все это так называемое защищательство Священной Коровы выглядит как "слаще морковки ничего не едали".

Чего только стоит "include", по сути вставляющий кусок текста целиком (привет инклудгвардам, привет выводам об ошибках в стопицотой строке, привет отсутствующему пространству имен и частичного импорта). Также привет "грязным" макросам с их кучей нюансов.
Все это наследие инструмента, который по задумке отрабатывает еще до компилятора.
Кстати, костыль этот прикрутили к си отдельно и чуть позже, о чем можно почитать
http://sites.harvard.edu/~lib113/reference/c/c_history.html (Dennis M. Ritchie)
И если для того времени решение было еще приемлимым компромиссом, то в современных реалиях оно смотрится блекло. Кстати, никто не предлагал выкинуть, просто сделать нормально.

Ответить | Правка | Наверх | Cообщить модератору

32. "Вышел компилятор языка D 2.076"  –8 +/
Сообщение от Аноним (-), 03-Сен-17, 07:56 
Для тебя #include и #define одно и тоже?
Ответить | Правка | Наверх | Cообщить модератору

38. "Вышел компилятор языка D 2.076"  +3 +/
Сообщение от Аноним (-), 03-Сен-17, 15:06 
> Для тебя #include и #define одно и тоже?

С чего это вдруг я так считаю?
Может, просто ты не в курсе, что именно делает препроцессор?

Возьми хелломир классический, прогони cpp и удивись


cat test.c
#include <stdio.h>
int main(void)
{
    /* a comment */
    puts("Hallo Welt");
    return 0;
}
cpp test.c|more
# 1 "test.c"
# 1 "<built-in>"
# 1 "<command-line>"
# 1 "test.c"
# 1 "/usr/include/stdio.h" 1 3 4
... // 100500 строк спустя

static __inline int __sputc(int _c, FILE *_p) {
if (--_p->_w >= 0 || (_p->_w >= _p->_lbfsize && (char)_c != '\n'))
  return (*_p->_p++ = _c);
else
  return (__swbuf(_c, _p));
}
# 504 "/usr/include/stdio.h" 3 4
extern int __isthreaded;
# 548 "/usr/include/stdio.h" 3 4


# 2 "test.c" 2

# 2 "test.c"
int main(void)
{
    puts("Hallo Welt");
    return 0;
}


Ответить | Правка | Наверх | Cообщить модератору

60. "Вышел компилятор языка D 2.076"  +/
Сообщение от dq0s4y71 (ok), 04-Сен-17, 18:28 
Это, конечно, всё правильно, но есть ли в этом вашем Д адекватные средства метапрограммирования, способные заменить макросы? Например, в Си можно создать мета-структуру данных, типа:

VAR_START()
    DEF_VAR(date, DATE, "дата", 0)
    DEF_VAR(time, TIME, "время", 0)
    DEF_VAR_RNG(loco_type, USHORT, "Тип локо.", 0, 0, 9999)
    DEF_VAR_RNG(loco_num, USHORT, "№ локо.", 0, 0, 9999)
    DEF_VAR_RNG(loco_driver, ULONG, "таб. номер", 0, 0, 99999999)
    DEF_VAR(last_error_str, CSTR, "Посл.сбой", 0)
    DEF_VAR(input_bits, BYTE, "дв.входы", 0)
    DEF_VAR_RNG(dgu_num_cogs, USHORT, "зубья маховика ДГУ", 0, 1, 999)
    DEF_VAR(dgu_freq, ULONG, "частота ДГУ", 0)
    DEF_VAR(speed, SPEED, "Скорость", 0)
    DEF_VAR(volume, VOLUME, "Объём", 0)
    DEF_VAR(mass, MASS, "Масса", 0)
    DEF_VAR(temper, TEMPER, "Темпер.", 0)
    DEF_VAR(density, DENSITY, "Плотн.", 0)
//...
VAR_END()

и потом, переопределяя макросы VAR_START, DEF_VAR, ... и делая #include, создавать из неё новые типы/структуры/функции/что угодно. Казалось бы, для этого существуют С++ и шаблоны, но шаблоны ВНЕЗАПНО иногда не умеют простейших вещей, которые умеют макросы. Я, например, могу сделать:

#define VAR_START()    enum MY_VAR
#define    DEF_VAR(name, type, strid, init) var_##name
//...

и легко получить из этой мета-структуры:

enum MY_VAR {
    var_date,
    var_time,
    var_loco_type,
    var_loco_num,
//...
};

Как бы я такое сделал на шаблонах? Так что, макросы все ругают, но от них даже в С++ так и не избавились. Такшта...

Ответить | Правка | К родителю #31 | Наверх | Cообщить модератору

67. "Вышел компилятор языка D 2.076"  +1 +/
Сообщение от Аноним (-), 04-Сен-17, 21:42 
> Это, конечно, всё правильно, но есть ли в этом вашем Д адекватные
> средства метапрограммирования, способные заменить макросы? Например, в Си можно создать
> мета-структуру данных, типа

Эм, причем тут замена или выкидывание макросов? Речь (в контексте ветки) в первую очередь о недостатках "макросов на препроцессоре" (то же отсутсвие гигиеничности/областей видимости, да и классические "грабли" https://gcc.gnu.org/onlinedocs/cpp/Macro-Pitfalls.html).
А так, есть сравнение:
https://dlang.org/pretod.html

> Как бы я такое сделал на шаблонах?

А зачем прикостыливать пространства имен префиксами в плюсах? )
Ну и да, нормальные AST-макросы умеют и не в такое (там можно еще и типы выражений различать и самим AST манипулировать).


Ответить | Правка | Наверх | Cообщить модератору

68. "Вышел компилятор языка D 2.076"  +/
Сообщение от Аноним (-), 05-Сен-17, 00:32 
> Это, конечно, всё правильно, но есть ли в этом вашем Д адекватные
> средства метапрограммирования, способные заменить макросы?

https://dlang.org/mixin.html
Первый пример:


For example, here we can create a template that generates a struct with the named members:

template GenStruct(string Name, string M1)
{
    const char[] GenStruct = "struct " ~ Name ~ "{ int " ~ M1 ~ "; }";
}

mixin(GenStruct!("Foo", "bar"));
which generates:

struct Foo { int bar; }


Ответить | Правка | К родителю #60 | Наверх | Cообщить модератору

34. "Вышел компилятор языка D 2.076"  +3 +/
Сообщение от Crazy Alex (ok), 03-Сен-17, 12:25 
Потому что в D есть инструменты получше - модули и макросы - которые дают все возмлжности препроцессора без его проблем
Ответить | Правка | К родителю #27 | Наверх | Cообщить модератору

Архив | Удалить

Рекомендовать для помещения в FAQ | Индекс форумов | Темы | Пред. тема | След. тема




Партнёры:
PostgresPro
Inferno Solutions
Hosting by Hoster.ru
Хостинг:

Закладки на сайте
Проследить за страницей
Created 1996-2024 by Maxim Chirkov
Добавить, Поддержать, Вебмастеру