Build сборка 0.25
Участников: 4
FreeBasic :: Программирование :: Общее
Страница 1 из 1
Build сборка 0.25
По ссылке:
Скачать
Можно скачать версию 0.25, в которой как я понял один из разработчиков dkl , определил для тестирования нововведения в возможностях компилятора. А именно абстрактные классы, виртуальные методы. Примеры можно посмотреть ЗДЕСЬ. Язык по мощностям синтаксиса все больше приближается к С++. Для кого это нужная вещь, для кого излишняя... Мне например наследование , которое ввели в 0.24 было не лишним. Да где-то из-за этого возможно пострадал размер конечного файла, но удобство важнее. Есть вещи в синтаксисе FreeBasic, которые на мой взгляд надо подправить и об этом я писал на оф. сайте, но у них другие мнение. Например:
тип перечислений работает следующим образом (на мой взгляд логики в этом нет):
То есть в С++ подобный код компилятор забракует по простой причине: число которое присваивается b не равно тем которые по условию входят в перечисление (0 и 1) .
Как бы ни было, я уважаю их мнение, поскольку они с малого до великого вели продукт и продолжают его развивать.
Скачать
Можно скачать версию 0.25, в которой как я понял один из разработчиков dkl , определил для тестирования нововведения в возможностях компилятора. А именно абстрактные классы, виртуальные методы. Примеры можно посмотреть ЗДЕСЬ. Язык по мощностям синтаксиса все больше приближается к С++. Для кого это нужная вещь, для кого излишняя... Мне например наследование , которое ввели в 0.24 было не лишним. Да где-то из-за этого возможно пострадал размер конечного файла, но удобство важнее. Есть вещи в синтаксисе FreeBasic, которые на мой взгляд надо подправить и об этом я писал на оф. сайте, но у них другие мнение. Например:
тип перечислений работает следующим образом (на мой взгляд логики в этом нет):
- Код:
Enum A
a
b
End Enum
Dim b As A
b = 8
Sleep
То есть в С++ подобный код компилятор забракует по простой причине: число которое присваивается b не равно тем которые по условию входят в перечисление (0 и 1) .
Как бы ни было, я уважаю их мнение, поскольку они с малого до великого вели продукт и продолжают его развивать.
trew- Сообщения : 331
Дата регистрации : 2010-10-14
Re: Build сборка 0.25
опа! я даже проморгал новую версию. совсем со своими http про все забыл. спасибо. надо eric'u сказать. а то он вообще наши ряды покинул - ушел на c++ и c#.
любит он ооп, да и для c#, столько инструментария...
любит он ооп, да и для c#, столько инструментария...
electrik- Сообщения : 391
Дата регистрации : 2008-09-02
Возраст : 43
Откуда : галактика Млечный путь, система Солнечная, планета Земля, страна россия, город Санкт Петербург
Re: Build сборка 0.25
Ничего не страдает размер файла. Вот пример:
ФБ-программа:
============
'интерфейс, который наследуем потом
Type Itf
As UInteger itf_Pole
End Type
'Наш класс
Type MyClass Extends Itf
As UInteger myclass_Pole
End Type
'//////////////////////////////////////////////////////
'экземпляр класса
Dim mc As MyClass Ptr=New MyClass
'Заполняем поля
mc->itf_Pole=1
mc->myclass_Pole=2
'Печатаем все поля
Print "mc->itf_Pole=";mc->itf_Pole
Print "mc->myclass_Pole=";mc->myclass_Pole
Sleep
End 1
'//////////////////////////////////////////////////////
А вот что компилится (покажу только классы и обращения к ним, получаем Си-файл так: fbc -s console -gen gcc -r):
Наши интерфейс и класс:
typedef struct _ITF {
uinteger ITF_POLE;
} ITF;
typedef struct _MYCLASS {
ITF $FB_BASE;
uinteger MYCLASS_POLE;
} MYCLASS;
Как видно, в объявлении MYCLASS просто объявляется поле типа интерфеса, а обращение к нему идет так:
MYCLASS* MC$;
MYCLASS* TMP$0$;
MC$ = (TMP$0$);
#define vr$1 ((uinteger*)(MC$))
*(uinteger*)((ubyte *)vr$1) = ((uinteger)1u); 'mc->itf_Pole=1
#define vr$2 ((uinteger*)(MC$))
*(uinteger*)((ubyte *)vr$2 + 4) = ((uinteger)2u); 'mc->myclass_Pole=2
Адресная арифметика во всей красе
ФБ-программа:
============
'интерфейс, который наследуем потом
Type Itf
As UInteger itf_Pole
End Type
'Наш класс
Type MyClass Extends Itf
As UInteger myclass_Pole
End Type
'//////////////////////////////////////////////////////
'экземпляр класса
Dim mc As MyClass Ptr=New MyClass
'Заполняем поля
mc->itf_Pole=1
mc->myclass_Pole=2
'Печатаем все поля
Print "mc->itf_Pole=";mc->itf_Pole
Print "mc->myclass_Pole=";mc->myclass_Pole
Sleep
End 1
'//////////////////////////////////////////////////////
А вот что компилится (покажу только классы и обращения к ним, получаем Си-файл так: fbc -s console -gen gcc -r):
Наши интерфейс и класс:
typedef struct _ITF {
uinteger ITF_POLE;
} ITF;
typedef struct _MYCLASS {
ITF $FB_BASE;
uinteger MYCLASS_POLE;
} MYCLASS;
Как видно, в объявлении MYCLASS просто объявляется поле типа интерфеса, а обращение к нему идет так:
MYCLASS* MC$;
MYCLASS* TMP$0$;
MC$ = (TMP$0$);
#define vr$1 ((uinteger*)(MC$))
*(uinteger*)((ubyte *)vr$1) = ((uinteger)1u); 'mc->itf_Pole=1
#define vr$2 ((uinteger*)(MC$))
*(uinteger*)((ubyte *)vr$2 + 4) = ((uinteger)2u); 'mc->myclass_Pole=2
Адресная арифметика во всей красе
VerhoLom- Сообщения : 67
Дата регистрации : 2010-07-06
Возраст : 42
FreeBasic :: Программирование :: Общее
Страница 1 из 1
Права доступа к этому форуму:
Вы не можете отвечать на сообщения
|
|