Объекты в FreeBASIC
Участников: 2
Объекты в FreeBASIC
Многие наверно, как и я ждали от нового релиза поддержку ооп, чего к сожалению не случилось, хотя вроде бы до него остался последний шаг, но что то видать у них несростается. Многие наверно уже колупали сырцы компилятора, пытавшись исправить это, но мало кто чего в них похоже понимает (или не имеет времени для изучения). Поэтому предлагаю сделать небольшую обертку для существующего компилятора, добавив в него того, чего так нехватает, как когдато это сделал (паржон если ошибаюсь) Страуструп сделав из Сей плюсы. Это будет в разы проще. Следовательно новому человеку будет проще присоединиться к разработке, если что то пойдет не так. Если все удачно сложится, то данную реализацию можно будет предложить тем разработчикам, которые на "ты" общаются с самим компилятором, и чтобы они рассмотрели включение данных расширений.
Предлагаю такую схему:
Создается код на языке fb с добавлением инструкций из расширений, после чего по всему коду проходится нечто подобное препроцессора, преобразуя расширенные инструкции, в инструкции fb, после чего уже все и компилится оригинальным компилятором.
К примеру вот как можно реализовать наследование...
Имеем на входе:
Ну вот вроде все, что хотел сказать, хотелось бы учлышать мнения...
ЗЫ: пошел писать парсер
Предлагаю такую схему:
Создается код на языке 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)
Ну вот вроде все, что хотел сказать, хотелось бы учлышать мнения...
ЗЫ: пошел писать парсер
Re: Объекты в FreeBASIC
Интересно. Что-то вроде Meta Object Compiler для Qt. Несколько вопросов:
1. Как может выглядеть реализация виртуальных функций?
2. В курсе?
http://freebasic.net/forum/viewtopic.php?t=15038
3. Если уж на то пошло, возможна ли реализация с помошью готовых инструментов - например, макросов, или, что намного лучше, m4?
1. Как может выглядеть реализация виртуальных функций?
2. В курсе?
http://freebasic.net/forum/viewtopic.php?t=15038
3. Если уж на то пошло, возможна ли реализация с помошью готовых инструментов - например, макросов, или, что намного лучше, m4?
DiG. GeRR- Сообщения : 101
Дата регистрации : 2009-01-30
Возраст : 32
Откуда : Рудный, Казахстан
Re: Объекты в FreeBASIC
блин, как тока придумаю себе занятие, так сразу работы подваливают
1. Ну аналогично, просто проверять, есть ли в родительских классах методы с таким же именем, если есть, то использовать перегруженный новый
2. Ну да, нечто типа того, но както на сях писать компилятор для басика, нехорошо ет, хотелось бы, чтобы посетители этого форума могли без особых проблем поколупаться в сырцах...
3. Я, если честно, m4 плохо знаю, к примеру я немогу пока сообразить, как ассоциировать классы и его методы (те разобрать че к чему находится), только если списком попробовать записывать их, а потом перебором сравнивать... Вобщем, если у вас получится реализовать на нем хотябы то преобразование, которое я привел для примера, киньте пример. Да и опять же, человеку, мало знакомому с миром никсов, с синтаксисом будет проблематично разобраться. Хм, пока писал, вспомнил еще про такую весч как awk, на нем я уже примерно представляю как все должно выглядеть (синтаксис наскока его помню, достаточно вменяемый), время выкраду, попробую...
1. Ну аналогично, просто проверять, есть ли в родительских классах методы с таким же именем, если есть, то использовать перегруженный новый
2. Ну да, нечто типа того, но както на сях писать компилятор для басика, нехорошо ет, хотелось бы, чтобы посетители этого форума могли без особых проблем поколупаться в сырцах...
3. Я, если честно, m4 плохо знаю, к примеру я немогу пока сообразить, как ассоциировать классы и его методы (те разобрать че к чему находится), только если списком попробовать записывать их, а потом перебором сравнивать... Вобщем, если у вас получится реализовать на нем хотябы то преобразование, которое я привел для примера, киньте пример. Да и опять же, человеку, мало знакомому с миром никсов, с синтаксисом будет проблематично разобраться. Хм, пока писал, вспомнил еще про такую весч как awk, на нем я уже примерно представляю как все должно выглядеть (синтаксис наскока его помню, достаточно вменяемый), время выкраду, попробую...
Права доступа к этому форуму:
Вы не можете отвечать на сообщения