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

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

Вернуться   Форум программистов > IT форум > Общие вопросы по программированию, компьютерный форум
Регистрация

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 11.11.2010, 21:55   #1
Пепел Феникса
Старожил
 
Аватар для Пепел Феникса
 
Регистрация: 28.01.2009
Сообщений: 21,000
По умолчанию Свой компилятор(С++'о подобный)

в общем задался идеей такой(да собственно это уже не только идея)
основная затея была в составлении идеального ЯП(по своим меркам).

основное что я стараюсь делать, это совместимость с С++, то есть на моем компиле можно будет все так же писать С++ программы.

то есть по сути это выходит расширенный С++.

из планов это:
1)отсутствие Generic типов.
все типы(int и тд) будут обьявленны в специальном заголовочном файле, который гарантированно подключается до всего.
все что есть изначально в распоряжении это директива задания размера данным(типа db в асме)
2)директивы модификаторы, например к слову class.
что по необходимости включать например(причем и для всех его потомков тоже), метод GetClassName, и тп.
3)немного расширенный препроцессор
к примеру директива #file, позволяющая инициализировать переменными данными извне
4)за счет внешнего инклюдника с Generic, можно выбирать нужную версию в зависимости от проца(к примеру насчет SSE)
или же даже сделать виртуальную систему что сама будет адаптироватся к типу проца.
5)внешние инлайн функции(уже скомпиленные, естествествено функция в рамках моего формата обьектников)
то есть инлайн функции без раскрытия сорцов.
6)св-ва классам(мне их немного не хватает)
7)поддержка интерфейсов(как к примеру в Java)
то есть класс можно обьеденить с интерфейсом.
8)ну там мелочи насчет сборки мусора и тд(это опять же через модификаторы)

что думаете?
Хорошо поставленный вопрос это уже половина ответа. | Каков вопрос, таков ответ.
Программа делает то что написал программист, а не то что он хотел.
Функции/утилиты ждут в параметрах то что им надо, а не то что вы хотите.
Пепел Феникса вне форума Ответить с цитированием
Старый 11.11.2010, 23:04   #2
ROD
Linux C++ Qt ARM
Старожил
 
Аватар для ROD
 
Регистрация: 30.11.2008
Сообщений: 3,030
По умолчанию

Цитата:
7)поддержка интерфейсов(как к примеру в Java)
то есть класс можно обьеденить с интерфейсом.
А разве с С++ нет их? Там интерфейсы не выделяют, но они как бы есть - абсолютно абстрактный класс.
Дилетант широкого профиля.

"Слова ничего не стоят - покажите мне код!" © Линус Торвальдс
ROD вне форума Ответить с цитированием
Старый 11.11.2010, 23:16   #3
Пепел Феникса
Старожил
 
Аватар для Пепел Феникса
 
Регистрация: 28.01.2009
Сообщений: 21,000
По умолчанию

есть, не отрицаю, но я же уточнил про Java
в Java класс наследуется от одного, и может реализовывать несколько интерфейсов в себе.
Хорошо поставленный вопрос это уже половина ответа. | Каков вопрос, таков ответ.
Программа делает то что написал программист, а не то что он хотел.
Функции/утилиты ждут в параметрах то что им надо, а не то что вы хотите.
Пепел Феникса вне форума Ответить с цитированием
Старый 11.11.2010, 23:21   #4
pu4koff
Старожил
 
Аватар для pu4koff
 
Регистрация: 22.05.2007
Сообщений: 9,520
По умолчанию

Цитата:
Сообщение от Пепел Феникса Посмотреть сообщение
основное что я стараюсь делать, это совместимость с С++, то есть на моем компиле можно будет все так же писать С++ программы.

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

Цитата:
Сообщение от Пепел Феникса Посмотреть сообщение
1)отсутствие Generic типов.
все типы(int и тд) будут обьявленны в специальном заголовочном файле, который гарантированно подключается до всего.
все что есть изначально в распоряжении это директива задания размера данным(типа db в асме)
1. В плюсах нет generic. Есть template, но всё равно я мысль не понял.
Цитата:
Сообщение от Пепел Феникса Посмотреть сообщение
2)директивы модификаторы, например к слову class.
что по необходимости включать например(причем и для всех его потомков тоже), метод GetClassName, и тп.
Это уже есть в rtti. Не очень красиво и удобно, но есть. Ну а раз планируется мовместимость со старым кодом, значит будет путаница.
Цитата:
Сообщение от Пепел Феникса Посмотреть сообщение
3)немного расширенный препроцессор
к примеру директива #file, позволяющая инициализировать переменными данными извне
Сомнительная фича. Препроцессор и так опасная штуковина
Цитата:
Сообщение от Пепел Феникса Посмотреть сообщение
4)за счет внешнего инклюдника с Generic, можно выбирать нужную версию в зависимости от проца(к примеру насчет SSE)
или же даже сделать виртуальную систему что сама будет адаптироватся к типу проца.
Проблематично в реализации. Был бы это C# или Java, то без проблем, а в случае с компилируемым кодом... Куча лишнего будет в exe-файле.
Цитата:
Сообщение от Пепел Феникса Посмотреть сообщение
5)внешние инлайн функции(уже скомпиленные, естествествено функция в рамках моего формата обьектников)
то есть инлайн функции без раскрытия сорцов.
Чем это принципиально отличается от статических библиотек (*.lib)?
Цитата:
Сообщение от Пепел Феникса Посмотреть сообщение
6)св-ва классам(мне их немного не хватает)
Это да. неплохая штука. Особенно, если это будет в стиле C# с автогенерируемыми свойствами, дабы меньше тупого кода набивать.
Цитата:
Сообщение от Пепел Феникса Посмотреть сообщение
7)поддержка интерфейсов(как к примеру в Java)
то есть класс можно обьеденить с интерфейсом.
Так же сомневаюсь в простоте реализации. Учитывая, что люди научились выкручиваться посредством абстрактных классов и множественного наследования... хотя всё это конечно не то. Абстрактным классом интерфейс не заменить, так что вообще штука нужная.
Цитата:
Сообщение от Пепел Феникса Посмотреть сообщение
8)ну там мелочи насчет сборки мусора и тд(это опять же через модификаторы)
Не назвал бы это мелочью... да и к С++ сборщики прикручивают...
Цитата:
Сообщение от Пепел Феникса Посмотреть сообщение
что думаете?
В целом ситуация как обычно: хочется сделать что-то полезное, но уверенности в том, что это будет и как реализовывать - нет.
Что за язык? Для каких задач? Чем не устраивают существующие аналоги? Чем он будет лучше и почему люди должны будут его использовать?
Я не думаю, что можно на базе С++ что-то лучшее создать. Это и так сборник граблей. Смысл над существующими граблями надстраивать новые?
Сомневаюсь я в целесообразности данной разработки. Разве что для опыта...
pu4koff вне форума Ответить с цитированием
Старый 11.11.2010, 23:33   #5
Пепел Феникса
Старожил
 
Аватар для Пепел Феникса
 
Регистрация: 28.01.2009
Сообщений: 21,000
По умолчанию

1)я имел в виду стандартные типы(чето глюкануло спросоня)
то есть код для работы со стандартными типами не включен в компиль
2)я больше думаю обеспечить совместимость С++ с моим компилем, а не наоборот.
3)а мне нравится играть с огнем
4)да куча лишнего, но зато большая переносимость с учетом максимальных возможностей системы.
5)если не ошибаюсь, то inline обязан быть в том же файле что и обьявление этой функции или внешний файл(инклюдник короче)
ну в общем, открыт исходник его должен быть, в lib его не вынести.
или я не прав?
6)к сожалению с шарпом почти не знаком, можете пояснить?
7)идеи есть, надеюсь справлюсь
8)я просто привел пример, знаю что не мелочь, просто не хотел больше пунктов писать

ЗЫ, кстати помоему это транслятор в асм выходит...
Цитата:
Что за язык? Для каких задач? Чем не устраивают существующие аналоги? Чем он будет лучше и почему люди должны будут его использовать?
в первую очередь для себя это пишется, но в принципе проект не локальный так сказать.
по большей части буду использовать его в разработке своих программ.
ну а С++ выбран за основу потому что нравится мне этот язык
Цитата:
Разве что для опыта...
и в первую очередь для опыта
Хорошо поставленный вопрос это уже половина ответа. | Каков вопрос, таков ответ.
Программа делает то что написал программист, а не то что он хотел.
Функции/утилиты ждут в параметрах то что им надо, а не то что вы хотите.
Пепел Феникса вне форума Ответить с цитированием
Старый 12.11.2010, 06:59   #6
Utkin
Старожил
 
Аватар для Utkin
 
Регистрация: 04.02.2009
Сообщений: 18,136
По умолчанию

Цитата:
8)ну там мелочи насчет сборки мусора и тд(это опять же через модификаторы)
Не фига себе мелочи! С этого в общем-то и нужно начинать... И сразу встроенным. ИМХО, если не встраивать сразу, потом будут болячки...
Цитата:
метод GetClassName
Правильное слово таким методам рефлексия. Чем она больше, тем проще создавать в Вашем языке всякие RTTI и пр.

Будет ли у Вас множественное наследование?
Маньяк-самоучка
Utkin появился в результате деления на нуль.
Осторожно! Альтернативная логика

Последний раз редактировалось Utkin; 12.11.2010 в 07:02.
Utkin вне форума Ответить с цитированием
Старый 12.11.2010, 07:43   #7
ROD
Linux C++ Qt ARM
Старожил
 
Аватар для ROD
 
Регистрация: 30.11.2008
Сообщений: 3,030
По умолчанию

К стати, на счет сборки мусора, надеюсь вы не сделаете как в C#, когда программист не вправе сам освободить память. А сборщик освобождает память, на которую ничто не ссылается, тогда, когда ему вздумается. (сам был свидетелем, что с таким сборщиком прога с формой, двумя текстбоксами, кнопочкой, и парой надписей при многократном прогоне (порядка 200 раз. прога просто что-то считала и выводила результат на форму) со стартовых 8 метров в памяти, разрослась аж до 14, т.е. почти в 2 раза.)
Дилетант широкого профиля.

"Слова ничего не стоят - покажите мне код!" © Линус Торвальдс
ROD вне форума Ответить с цитированием
Старый 12.11.2010, 09:50   #8
pu4koff
Старожил
 
Аватар для pu4koff
 
Регистрация: 22.05.2007
Сообщений: 9,520
По умолчанию

Цитата:
Сообщение от Пепел Феникса Посмотреть сообщение
1)я имел в виду стандартные типы(чето глюкануло спросоня)
то есть код для работы со стандартными типами не включен в компиль
т.е. компилятор совершенно ничего не знает о типах? Даже элементарный int будет реализован каким-то образом на этом самом языке?
Цитата:
Сообщение от Пепел Феникса Посмотреть сообщение
2)я больше думаю обеспечить совместимость С++ с моим компилем, а не наоборот.
Любая совместимость загоняет в определенные рамки. Я бы на это не ориентировался.
Цитата:
Сообщение от Пепел Феникса Посмотреть сообщение
4)да куча лишнего, но зато большая переносимость с учетом максимальных возможностей системы.
Для этого лучше подходят принципы Java и C#. Я бы вообще виртуальную машину делал частью ОС, т.к. это по идее её прямые обязанности, но это уже совсем другая история
Цитата:
Сообщение от Пепел Феникса Посмотреть сообщение
5)если не ошибаюсь, то inline обязан быть в том же файле что и обьявление этой функции или внешний файл(инклюдник короче)
ну в общем, открыт исходник его должен быть, в lib его не вынести.
или я не прав?
inline в С++ вообще штука интересная... Компилятор всё делает по своему и ему плевать на слово inline. Да и смысла во встраиваемых функциях я не вижу, если пихать в программу и код по адаптации под все возможные процессоры. Экономия на мелочах какая-то будет.
Цитата:
Сообщение от Пепел Феникса Посмотреть сообщение
6)к сожалению с шарпом почти не знаком, можете пояснить?
Зачастую get и set методы сводятся к банальным:
Код:
int get_value() const
{
  return m_value;
}

void set_value(int new_value)
{
  m_value = new_value;
}
В шарпе тупо не пишем реализацию для свойства (private член m_value тоже никакой не создаём) и оно всё само делается:
Код:
public int Value
{ get; set;}
Всё. У нас есть свойство Value доступное и для чтения и для записи. Никаких лишних телодвижений.
Так же подсмотрите по поводу такой возможности:
Код:
public int Value
{get; protected set;}
И вообще свойства в шарпе достаточно неплохо реализованы (по крайней мере в разы лучше, чем в делфях).
Цитата:
Сообщение от Пепел Феникса Посмотреть сообщение
ЗЫ, кстати помоему это транслятор в асм выходит...
Компилятор переводит программу в машинный код, а транслятор - "на лету" выполняет. Выполнение кода C# и Java - тоже своего рода трансляция по сути.
Цитата:
Сообщение от ROD Посмотреть сообщение
К стати, на счет сборки мусора, надеюсь вы не сделаете как в C#, когда программист не вправе сам освободить память. А сборщик освобождает память, на которую ничто не ссылается, тогда, когда ему вздумается. (сам был свидетелем, что с таким сборщиком прога с формой, двумя текстбоксами, кнопочкой, и парой надписей при многократном прогоне (порядка 200 раз. прога просто что-то считала и выводила результат на форму) со стартовых 8 метров в памяти, разрослась аж до 14, т.е. почти в 2 раза.)
1. В шарпе есть команды для принудительного освобождения памяти. Не факт правда, что эта память отдастся ОС назад, а не останется висеть на всякий случай.
2. Если программа разрослась до того, что комп стал тормозить и с другими программами было невозможно работать, то это косяк. А если просто занято было 14 метров свободной оперативки, то что тут такого? Ну занято 14 и занято, всё равно её никто не использует.
pu4koff вне форума Ответить с цитированием
Старый 12.11.2010, 12:59   #9
Пепел Феникса
Старожил
 
Аватар для Пепел Феникса
 
Регистрация: 28.01.2009
Сообщений: 21,000
По умолчанию

Цитата:
Будет ли у Вас множественное наследование?
я думал лично как в Делфи(и вроде в Java так же, правда там я не уверен) сделать.
то есть можно указать базовый класс, и реализовать несколько интерфейсов.
но наследоватся от многих классов нельзя.
или думаете что надо?
Цитата:
Кстати, на счет сборки мусора, надеюсь вы не сделаете как в C#, когда программист не вправе сам освободить память.
ручное никто не отменит, да и сборщик отключать можно будет.
Цитата:
т.е. компилятор совершенно ничего не знает о типах? Даже элементарный int будет реализован каким-то образом на этом самом языке?
ну в общем то, так.
Цитата:
Зачастую get и set методы сводятся к банальным
вот это хорошая вещь, надо взять за заметку
Цитата:
Кстати, на счет сборки мусора, надеюсь вы не сделаете как в C#
пишите так будто собираетесь использовать
Хорошо поставленный вопрос это уже половина ответа. | Каков вопрос, таков ответ.
Программа делает то что написал программист, а не то что он хотел.
Функции/утилиты ждут в параметрах то что им надо, а не то что вы хотите.
Пепел Феникса вне форума Ответить с цитированием
Старый 12.11.2010, 16:07   #10
Utkin
Старожил
 
Аватар для Utkin
 
Регистрация: 04.02.2009
Сообщений: 18,136
По умолчанию

Цитата:
Сообщение от Пепел Феникса Посмотреть сообщение
я думал лично как в Делфи(и вроде в Java так же, правда там я не уверен) сделать.
то есть можно указать базовый класс, и реализовать несколько интерфейсов.
но наследоватся от многих классов нельзя.
или думаете что надо?
Наоборот, меня тоже устраивает модель Дельфи.
Маньяк-самоучка
Utkin появился в результате деления на нуль.
Осторожно! Альтернативная логика
Utkin вне форума Ответить с цитированием
Ответ


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

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
можно ли подобный текст перевести на человеческий язык? alexxx777 Помощь студентам 0 24.05.2010 19:56
Как создать вид подобный SolidWorks. KemanSR Общие вопросы C/C++ 6 04.05.2010 21:30
Добавить модуль в phpnuke-подобный движок Able2Know Фриланс 3 23.04.2010 16:29
В Access есть тип данных "Счетчик".Есть ли подобный тип данных в MS Sql Server 2000? An_ton SQL, базы данных 5 16.01.2009 17:55