Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Операционные системы > Софт
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 23.11.2008, 18:37   #11
Sicorski
Пользователь
 
Регистрация: 22.11.2008
Сообщений: 10
По умолчанию

Цитата:
Сообщение от BOBAH13 Посмотреть сообщение
Если бы было возможно в дельфи 7 делать переопределение операторов и еще бы хотелось принцип как в си/си++ #define...
Да, для меня тоже странно, что в Дельфи нет переопределения операторов. Хотя, я бы сделал такое переопределение в рамках класса. То бишь операторы, относящаеся к классу. Например:

Код:
TVector = class()
  ...
  TVector operator '*' (Value: Integer): TVector;
end;

implementation

TVector operator '*' (Value: Integer): TVector;
begin
  ...
end;
Определяет бинарный оператор умножения вектора на число, с результатом типа TVector.
Ну не здорово ли?
Sicorski вне форума Ответить с цитированием
Старый 23.11.2008, 21:25   #12
Sicorski
Пользователь
 
Регистрация: 22.11.2008
Сообщений: 10
По умолчанию

По поводу #define.

При определении

Код:
#define Value 0
Это равносильно

Код:
const
  Value = 0;
А вот когда макросы определяются.. Хм.. Я не однократно видел код на Си, в котором использование макросов доводилось до абсурда. Разобраться в этом можно было, но проще написать свой код и не маяться. Из чего пришёл к выводу, что такое использование макросов не допустимо. Причём сделать это необходимо на уровне языка. Для этого отлично подходят inline функции (в терминах C++). Компилятор проверяет корректность кода, а линковщик встраивает саму функцию в месте её вызова вместо прописывания вызовы функции как подпрограммы.
Sicorski вне форума Ответить с цитированием
Старый 23.11.2008, 23:08   #13
BOBAH13
Android Developer
Старожил Подтвердите свой е-майл
 
Аватар для BOBAH13
 
Регистрация: 19.02.2007
Сообщений: 3,708
По умолчанию

Это не равносильно тому что вы сказали... define объявляет имя которое в следствии при встрече в коде будет заменено на его значение... в си присутствует const... и если заменять на его значение значит не потребуется после трансляции в асм резервировать место в сегменте данных

А вы сами язык разрабатываите ? А описание синтаксиса есть, ну на что он будет похож?
BOBAH13 вне форума Ответить с цитированием
Старый 23.11.2008, 23:43   #14
Arigato
Высокая репутация
СуперМодератор
 
Аватар для Arigato
 
Регистрация: 27.07.2008
Сообщений: 15,554
По умолчанию

Если константа не является типизированной, то под неё не выделяется памяти в области данных, замены происходят на этапе компилирования.
Arigato вне форума Ответить с цитированием
Старый 24.11.2008, 23:45   #15
Sicorski
Пользователь
 
Регистрация: 22.11.2008
Сообщений: 10
По умолчанию

Строго говоря, дирректива #defune относится к препроцессору. Препроцессор вызывается до компилятора. Именно препроцессор заменяет все встреченные #define на их значения. Если модель совсем упростить, вызывается функция StrReplace(CodeLine, DefineName, DefineValue);.
Кстати, все встреченные #incude заменяются на содержимое файла (аналогично диррективе {$I Filename.inc} в Delphi). А уже потом то что получится, то есть такая длинная длинная простыня листинга, отправляется компилятору. У компилятора GCC есть замечательная опция, позволяет сохранить результат работы препроцессора в файл. После этого программка hello world весит 300к текста . Ну а что в какой сегмент кидать, это уж на усмотрение оптимизатора. Хотя, можно спец диррективами поправить.. Ладно, что то я заболтался..

Про на что будет похож язык я немногим выше писал.. Видимо, я не очень конкретно выражаюсь.. Попробую по другому объяснить..
На самом деле, все языки класса Delphi, С, Modula, C++ (забыл что то как они одним слово зовутся), во многом похожи, и друг друга взаимозаменяют. Но при этом, на мой взгляд, у них есть существенный недостаток, они универсальные. Подразумевается что на них можно и утилитки писать и огромные проекты типа распределённых баз данных или систем проектирования. Я же хочу создать язык ориентированный на небольшие, но быстрые утилиты, демки, игры и т.д. Да, он будет похож и на Дельфи, и на Си в чём то, но в тоже время будет много интересных решений. Фишка в том, что я не сковываю себя необходимостью совместимости с другими языками. Я разрабатываю его с нуля, но с учётом опыта других языков.
Спецификации нет. Есть несколько модулей для Bison, на которых я отрабатывал кое какие идеи..
Sicorski вне форума Ответить с цитированием
Старый 25.11.2008, 00:26   #16
Arigato
Высокая репутация
СуперМодератор
 
Аватар для Arigato
 
Регистрация: 27.07.2008
Сообщений: 15,554
По умолчанию

Цитата:
Delphi, С, Modula, C++ (забыл что то как они одним слово зовутся)
Языки высокого уровня (ЯВУ).
Arigato вне форума Ответить с цитированием
Старый 25.11.2008, 00:57   #17
Sicorski
Пользователь
 
Регистрация: 22.11.2008
Сообщений: 10
По умолчанию

Цитата:
Сообщение от Arigato Посмотреть сообщение
Языки высокого уровня (ЯВУ).
Хм.. Я имел в виду императивные языки. Языки высокого уровня это более общее понятие, в него, помимо обозначенных мной языков, так же входят скриптовые языки, языки управления БД и так далее..

Про императивные языки подробнее http://masters.donntu.edu.ua/2002/fv...tml#Imperative
Sicorski вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Кто каких животных любит... Altera Свободное общение 46 02.10.2008 04:09
Чего вам не хватает в вашем языке? crazy horse Свободное общение 3 02.09.2008 17:25
Не хватает практики на C++ Rembo Свободное общение 11 04.08.2008 18:36