FreeBasic
Вы хотите отреагировать на этот пост ? Создайте аккаунт всего в несколько кликов или войдите на форум.

Объекты в FreeBASIC

Участников: 2

Перейти вниз

Объекты в FreeBASIC Empty Объекты в FreeBASIC

Сообщение  tux Вс Июл 25, 2010 10:21 am

Многие наверно, как и я ждали от нового релиза поддержку ооп, чего к сожалению не случилось, хотя вроде бы до него остался последний шаг, но что то видать у них несростается. Многие наверно уже колупали сырцы компилятора, пытавшись исправить это, но мало кто чего в них похоже понимает (или не имеет времени для изучения). Поэтому предлагаю сделать небольшую обертку для существующего компилятора, добавив в него того, чего так нехватает, как когдато это сделал (паржон если ошибаюсь) Страуструп сделав из Сей плюсы. Это будет в разы проще. Следовательно новому человеку будет проще присоединиться к разработке, если что то пойдет не так. Если все удачно сложится, то данную реализацию можно будет предложить тем разработчикам, которые на "ты" общаются с самим компилятором, и чтобы они рассмотрели включение данных расширений.
Предлагаю такую схему:
Создается код на языке fb с добавлением инструкций из расширений, после чего по всему коду проходится нечто подобное препроцессора, преобразуя расширенные инструкции, в инструкции fb, после чего уже все и компилится оригинальным компилятором.
К примеру вот как можно реализовать наследование...
Имеем на входе:
Код:
'in.fbpc

class A
   declare sub fSubA(byval num as integer)
end class

sub A.fSubA(byval num as integer)
   print "a" & num
end sub

class B extend A
   declare sub fSubB(byval num as integer)
end class

sub B.fSubB(byval num as integer)
   print "b" & num
end sub

' not modif

dim as A aa
dim as B bb

aa.fSubA(1)
bb.fSubB(2)
bb.fSubA(3)
на выходе получаем:
Код:
'out.bas

type A
   declare constructor()
   fSubA as sub(byval num as integer)
end type

namespace fbpc_class_A
sub fSubA(byval num as integer)
   print "a" & num
end sub
end namespace

type B
   declare constructor()
   fSubB as sub(byval num as integer)
   'ext
   fSubA as sub(byval num as integer)
end type

namespace fbpc_class_B
sub fSubB(byval num as integer)
   print "b" & num
end sub
end namespace

constructor A()
   this.fSubA=@fbpc_class_A.fSubA
end constructor

constructor B()
   this.fSubB=@fbpc_class_B.fSubB
   'ext
   this.fSubA=@fbpc_class_A.fSubA
end constructor

' not modif

dim as A aa
dim as B bb

aa.fSubA(1)
bb.fSubB(2)
bb.fSubA(3)
что прекрасно уже компилится и работает. Те файл out.bas является временным, и его содержимое, по хорошему, не должно волновать разработчика. Те получается работа аналогичная работе самого компилятора по переводу кода бейсика в код ассемблера...
Ну вот вроде все, что хотел сказать, хотелось бы учлышать мнения...
ЗЫ: пошел писать парсер Smile
tux
tux

Сообщения : 365
Дата регистрации : 2008-04-06
Возраст : 36
Откуда : Сибирь

http://tux.nsk.ru/

Вернуться к началу Перейти вниз

Объекты в FreeBASIC Empty Re: Объекты в FreeBASIC

Сообщение  DiG. GeRR Пн Июл 26, 2010 3:14 pm

Интересно. Что-то вроде Meta Object Compiler для Qt. Несколько вопросов:

1. Как может выглядеть реализация виртуальных функций?
2. В курсе?
http://freebasic.net/forum/viewtopic.php?t=15038
3. Если уж на то пошло, возможна ли реализация с помошью готовых инструментов - например, макросов, или, что намного лучше, m4?

DiG. GeRR

Сообщения : 101
Дата регистрации : 2009-01-30
Возраст : 32
Откуда : Рудный, Казахстан

Вернуться к началу Перейти вниз

Объекты в FreeBASIC Empty Re: Объекты в FreeBASIC

Сообщение  tux Сб Июл 31, 2010 5:08 am

блин, как тока придумаю себе занятие, так сразу работы подваливают Sad
1. Ну аналогично, просто проверять, есть ли в родительских классах методы с таким же именем, если есть, то использовать перегруженный новый
2. Ну да, нечто типа того, но както на сях писать компилятор для басика, нехорошо ет, хотелось бы, чтобы посетители этого форума могли без особых проблем поколупаться в сырцах...
3. Я, если честно, m4 плохо знаю, к примеру я немогу пока сообразить, как ассоциировать классы и его методы (те разобрать че к чему находится), только если списком попробовать записывать их, а потом перебором сравнивать... Вобщем, если у вас получится реализовать на нем хотябы то преобразование, которое я привел для примера, киньте пример. Да и опять же, человеку, мало знакомому с миром никсов, с синтаксисом будет проблематично разобраться. Хм, пока писал, вспомнил еще про такую весч как awk, на нем я уже примерно представляю как все должно выглядеть (синтаксис наскока его помню, достаточно вменяемый), время выкраду, попробую...
tux
tux

Сообщения : 365
Дата регистрации : 2008-04-06
Возраст : 36
Откуда : Сибирь

http://tux.nsk.ru/

Вернуться к началу Перейти вниз

Вернуться к началу

- Похожие темы

 
Права доступа к этому форуму:
Вы не можете отвечать на сообщения