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

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Изменить синтаксис паскаля(делфи) 
:(
    Опции темы
skyboy
Дата 4.6.2008, 12:03 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


неОпытный
****


Профиль
Группа: Модератор
Сообщений: 9820
Регистрация: 18.5.2006
Где: Днепропетровск

Репутация: 1
Всего: 260



Цитата(Любитель @  4.6.2008,  11:01 Найти цитируемый пост)
Это уже мегакостыль.

UML-костыль, если уж начистоту.  smile 
Цитата(Любитель @  4.6.2008,  11:01 Найти цитируемый пост)
Плохо обстоят - не спорим

мне с моей низкой колокольни кажется, что шаблоны вполне подменяют метаклассы smile
PM MAIL   Вверх
MAKCim
Дата 4.6.2008, 12:31 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Воін дZэна
****


Профиль
Группа: Экс. модератор
Сообщений: 5644
Регистрация: 10.12.2005
Где: Менск, РБ

Репутация: 8
Всего: 207



Цитата(Lazin @  4.6.2008,  12:03 Найти цитируемый пост)
зато как дисциплинирует, плюс платишь только за то, что тебе нужно... 

в любом случае это не то

 smile 
почему бы не сделать в С++ полноценный RTTI с возможностью динамической загрузки и использования классов?
это же не трудно  smile 
в итоге получили бы Spring для C++

Добавлено через 2 минуты и 49 секунд
Цитата(skyboy @  4.6.2008,  12:03 Найти цитируемый пост)
мне с моей низкой колокольни кажется, что шаблоны вполне подменяют метаклассы

это два ортогональных понятия

Это сообщение отредактировал(а) MAKCim - 4.6.2008, 12:32


--------------------
Ах, у елі, ах, у ёлкі, ах, у елі злыя волкі ©

PM MAIL   Вверх
skyboy
Дата 4.6.2008, 12:51 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


неОпытный
****


Профиль
Группа: Модератор
Сообщений: 9820
Регистрация: 18.5.2006
Где: Днепропетровск

Репутация: 1
Всего: 260



Цитата(MAKCim @  4.6.2008,  11:31 Найти цитируемый пост)
это два ортогональных понятия

как минимум - это два подхода к метапрограммированию. разве нет?
PM MAIL   Вверх
Любитель
Дата 4.6.2008, 13:23 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Программист-романтик
****


Профиль
Группа: Комодератор
Сообщений: 3645
Регистрация: 21.5.2005
Где: Воронеж

Репутация: 5
Всего: 92



Цитата(MAKCim @  4.6.2008,  12:31 Найти цитируемый пост)
почему бы не сделать в С++ полноценный RTTI с возможностью динамической загрузки и использования классов?

+1

Цитата(skyboy @  4.6.2008,  12:51 Найти цитируемый пост)
как минимум - это два подхода к метапрограммированию. разве нет? 

Нет. Метаклассы дельфи к метапрограммированию не имеют отношения. Метапрограммирование - программирование на стадии компиляции, грубо говоря.


--------------------
PM MAIL ICQ Skype   Вверх
skyboy
Дата 4.6.2008, 13:51 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


неОпытный
****


Профиль
Группа: Модератор
Сообщений: 9820
Регистрация: 18.5.2006
Где: Днепропетровск

Репутация: 1
Всего: 260



Цитата(Любитель @  4.6.2008,  12:23 Найти цитируемый пост)
Метапрограммирование

раз уж на то пошло, это создание программы, которая создает другие программы  smile 
PM MAIL   Вверх
MAKCim
Дата 4.6.2008, 14:21 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Воін дZэна
****


Профиль
Группа: Экс. модератор
Сообщений: 5644
Регистрация: 10.12.2005
Где: Менск, РБ

Репутация: 8
Всего: 207



Цитата(skyboy @  4.6.2008,  13:51 Найти цитируемый пост)
раз уж на то пошло, это создание программы, которая создает другие программы

грубо говоря да
ты создаешь код, который генерирует другой код по определенным правилам

Цитата(Любитель @  4.6.2008,  13:23 Найти цитируемый пост)
+1

чем представим класс? идентификатором, методами и данными
остается эту информацию упорядочить и структурировать в бинарном формате скомпилированных классов
единственная сложность - это статические поля
в текущих версиях компиляторов С++ статические поля представлены глобальными переменными


--------------------
Ах, у елі, ах, у ёлкі, ах, у елі злыя волкі ©

PM MAIL   Вверх
Любитель
Дата 4.6.2008, 14:32 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Программист-романтик
****


Профиль
Группа: Комодератор
Сообщений: 3645
Регистрация: 21.5.2005
Где: Воронеж

Репутация: 5
Всего: 92



Цитата(skyboy @  4.6.2008,  13:51 Найти цитируемый пост)
раз уж на то пошло, это создание программы, которая создает другие программы

Согласен. Метаклассы к этому не имеют отношение - это к RTTI.

Цитата(MAKCim @  4.6.2008,  14:21 Найти цитируемый пост)
чем представим класс? идентификатором, методами и данными
остается эту информацию упорядочить и структурировать в бинарном формате скомпилированных классов
единственная сложность - это статические поля
в текущих версиях компиляторов С++ статические поля представлены глобальными переменными 

По-моему, просто добавить информацию в type_info - это раз. И создать глобальный маппинг: "имя класса" -> type_info. Насчёт статических полей - не понял, в чём проблема? smile Просто FieldInfo будет хранить для статических полей - адрес, для нестатических - оффсет. Но вообще для нормальной реализации всего этого, по-моему, необходимо взаимодействие с компилером smile Нет, можно конечно генерить некую инфу о классе иными способами (moc? smile) - но это всё-таки не то smile 


--------------------
PM MAIL ICQ Skype   Вверх
MAKCim
Дата 4.6.2008, 14:47 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Воін дZэна
****


Профиль
Группа: Экс. модератор
Сообщений: 5644
Регистрация: 10.12.2005
Где: Менск, РБ

Репутация: 8
Всего: 207



Любитель, 

Цитата(Любитель @  4.6.2008,  14:32 Найти цитируемый пост)
Насчёт статических полей - не понял, в чём проблема? 

смотри как я это вижу
есть класс
Код

// Class.hpp

class Class {
...
public:
    static int variable;
...
};

он компилируется в бинарное представление (описывает идентификатор, методы и данные)
для поддержки фабрики классов реализуется класс rtti со статическим методом load_class(), получающий имя класса в качестве параметра
load_class() находит скомпилированный класс, распаковывает его (парсит), создает объект type_info, его представляющий и помещает его в список объектов (например, хэшированный по имени класса)
реализация type_info дополняется методом создания экземпляра класса (возвращает void *)
т. е выходной код будет примерно таким
Код

rtti * factory = rtti :: get_instance()
type_info * info = rtti -> get_class("Class");
Class * object = info -> create()

так вот, что касается статических полей
как получить доступ к variable из object?
если каждый объект Class будет хранить адрес variable, то общий размер таких объектов увеличится на sizeof(void*)
а это семантически неправильно
поэтому я бы расширил С++ концепцией атрибутов (или анотация), т. е метаинформацией о классе
что-то наподобие этого
Код

attribute(dynamic)
class Class {
...
};

при этом, в случае, если  Class реализует атрибут dynamic, то каждый объект этого класса будет содержать адреса всех статических переменных класса (если такие есть)


--------------------
Ах, у елі, ах, у ёлкі, ах, у елі злыя волкі ©

PM MAIL   Вверх
Любитель
Дата 4.6.2008, 15:26 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Программист-романтик
****


Профиль
Группа: Комодератор
Сообщений: 3645
Регистрация: 21.5.2005
Где: Воронеж

Репутация: 5
Всего: 92



Цитата(MAKCim @  4.6.2008,  14:47 Найти цитируемый пост)
создает объект type_info

Это уже требует поддержки со стороный копилеры (речь про стандартный type_info?).

Цитата(MAKCim @  4.6.2008,  14:47 Найти цитируемый пост)
поэтому я бы расширил С++ концепцией атрибутов (или анотация), т. е метаинформацией о классе

По мне бы, полноценную метаинфу о всё, что только можно - не отказался бы smile Скажем, атрибуты для полей, методов. Для многих вещей это полезно (насмотрелся на шарп smile ).

Цитата(MAKCim @  4.6.2008,  14:47 Найти цитируемый пост)
при этом, в случае, если  Class реализует атрибут dynamic, то каждый объект этого класса будет содержать адреса всех статических переменных класса (если такие есть) 

А вот это не понял. Зачем объёкут содержать инфу? Компилер генерит метаинформацию о классе как таковом - и туда засовывает либо адреса, либо оффсета (статик/нонстатик).


--------------------
PM MAIL ICQ Skype   Вверх
skyboy
Дата 4.6.2008, 15:39 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


неОпытный
****


Профиль
Группа: Модератор
Сообщений: 9820
Регистрация: 18.5.2006
Где: Днепропетровск

Репутация: 1
Всего: 260



Цитата(MAKCim @  4.6.2008,  13:47 Найти цитируемый пост)
так вот, что касается статических полейкак получить доступ к variable из object?если каждый объект Class будет хранить адрес variable, то общий размер таких объектов увеличится на sizeof(void*)

в Делфи каждый класс представляет собой объект, потому статические объекты, по идее, относятся к объекту-классу и поедания памяти не происходит.
В С++, как я понимаю, с РТТИ будет сложно, т.к. класс как структура не хранится в памяти(я прав?), а в процессе компиляции конструкторы преобразуется аллокаторы, методы - в вызовы с передачей параметров.
PM MAIL   Вверх
Любитель
Дата 4.6.2008, 15:59 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Программист-романтик
****


Профиль
Группа: Комодератор
Сообщений: 3645
Регистрация: 21.5.2005
Где: Воронеж

Репутация: 5
Всего: 92



Цитата(skyboy @  4.6.2008,  15:39 Найти цитируемый пост)
т.к. класс как структура не хранится в памяти(я прав?)

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


--------------------
PM MAIL ICQ Skype   Вверх
Beltar
Дата 4.6.2008, 15:59 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 627
Регистрация: 11.1.2006

Репутация: 2
Всего: 7



Цитата

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


Хотите печатать быстро поступите на курсы машинисток. smile  smile  smile А для программирования это самый последний требующийся скилл. smile 

Кстати, реального кскорения даже при наборе вы не получите хотя бы из-за того, что надо нажимать еще и Shift.
Я лично уже давно не пишу end руками. Их за меня вставляет Delphi 2006. ;)
И вообще, все эти вроде бы мусорные слова типа then при просмотре кода очень сильно помогают.
Если менять синтаксис, то я бы сделал в конструкции case закрытие не через end, а через endcase, лишний end если case стоит в середине процедуры иногда создает путаницу.

Что касается надежности и быстроты набора Си, то все время сэкономленное при наборе 
сишного кода съедается компиляцией.

Почему-то господа сишники стыдливо молчат, что проект в несколько тысяч строк в том же Билдере на самом современном процессоре будет собираться полминуты.
Так же стыдливо молчат про проваливающиеся case, про отсутствие родного контроля выхода за границы массива. И еще я громко заявляю, что в Си++ нет цикла for. То что есть, это while с переставленными в другие места начальным значением и приращением счетчика.
Не кажется ли, что приращение на 1, нужное в 99,9% случаев компилятор мог бы и сам ставить.


--------------------
Опытный программист на C++ легко решает любые не существующие в Паскале проблемы. smile(с) я, хотя может и нет
Пищущий на C++ мужик. Даже если это мужик сидит в написанном на Delphi и жрущем паскалевскую библиотеку билдере.
PM MAIL   Вверх
Alexeis
Дата 4.6.2008, 16:13 (ссылка) |   (голосов:1) Загрузка ... Загрузка ... Быстрая цитата Цитата


Амеба
Group Icon


Профиль
Группа: Админ
Сообщений: 11743
Регистрация: 12.10.2005
Где: Зеленоград

Репутация: 14
Всего: 459



Цитата(Beltar @  4.6.2008,  14:59 Найти цитируемый пост)
Почему-то господа сишники стыдливо молчат, что проект в несколько тысяч строк в том же Билдере на самом современном процессоре будет собираться полминуты.

  Не нужно путать полный ребилд и билд. Если нет лишних инклудов, то при рабочем билде компилятся 1-2 cpp шника +линковка. Это происходит не дольше чем в делфи. Ребилд ол делается очень редко, например при изменении настроек компиляции. В этом нет большой нужны.
  
Цитата(Beltar @  4.6.2008,  14:59 Найти цитируемый пост)
И еще я громко заявляю, что в Си++ нет цикла for. То что есть, это while с переставленными в другие места начальным значением и приращением счетчика.
Не кажется ли, что приращение на 1, нужное в 99,9% случаев компилятор мог бы и сам ставить. 

  В С++ ахренительный цикл for, такой обалденный, что делфи нервно курит в сторонке. Невероятно удобный, логичный и функциональный. С таким фором ничего другого не нужно. 


--------------------
Vit вечная память.

Обсуждение действий администрации форума производятся только в этом форуме

гениальность идеи состоит в том, что ее невозможно придумать
PM ICQ Skype   Вверх
Lazin
Дата 4.6.2008, 16:32 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Завсегдатай
Сообщений: 3820
Регистрация: 11.12.2006
Где: paranoid oil empi re

Репутация: 4
Всего: 154



Цитата(Beltar @  4.6.2008,  15:59 Найти цитируемый пост)
Кстати, реального кскорения даже при наборе вы не получите хотя бы из-за того, что надо нажимать еще и Shift.
Я лично уже давно не пишу end руками. Их за меня вставляет Delphi 2006. ;)

какой ужас, Shift нужно нажимать, слепой метод набора рулед smile 

Цитата(Beltar @  4.6.2008,  15:59 Найти цитируемый пост)
про отсутствие родного контроля выхода за границы массива

в С++ и Delphi под массивом понимают несколько разные вещи, ты-бы еще Си-шный массив сравнил с массивами в Руби smile 
только вся фишка в том, что в С++ есть аналог массива Delphi - vector(там проверяется выход за  границу массива, и ее даже можно отключить), а вот в Delphi нет аналога Сишного массива smile 
PM MAIL Skype GTalk   Вверх
MAKCim
Дата 4.6.2008, 17:14 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Воін дZэна
****


Профиль
Группа: Экс. модератор
Сообщений: 5644
Регистрация: 10.12.2005
Где: Менск, РБ

Репутация: 8
Всего: 207



Цитата(Любитель @  4.6.2008,  15:26 Найти цитируемый пост)
Это уже требует поддержки со стороный копилеры (речь про стандартный type_info?).

компилятор тут не причем
это libstdc++.so

Цитата(Любитель @  4.6.2008,  15:26 Найти цитируемый пост)
А вот это не понял. Зачем объёкут содержать инфу? Компилер генерит метаинформацию о классе как таковом - и туда засовывает либо адреса, либо оффсета (статик/нонстатик). 

ну смотри

Код

class Class {
public:
    static int variable;
};
...
Class * object = static_cast<Class*>(info -> create());
object -> variable = 50;

что компилятор будет генерировать в месте присваивания variable?
на сегодняшний день статические переменные реализуются через обычные глобальные переменные
но variable на момент компиляции не будет определена (класс загружается динамически)



--------------------
Ах, у елі, ах, у ёлкі, ах, у елі злыя волкі ©

PM MAIL   Вверх
Ответ в темуСоздание новой темы Создание опроса
Правила ведения Религиозных войн
Smartov
1. Уважайте собеседника
2. Собеседник != враг
3. Старайтесь воздерживаться от тем вида "Windows Rulez" или "Linux Rulez"

С уважением, Smartov.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Религиозные войны | Следующая тема »


 




[ Время генерации скрипта: 0.0674 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.