Предложение
Участников: 4
Предложение
Предлагаю составить список того, чего хотелось бы видеть в языке и потом отправить это все авторам - пусть знают мнение сообщества. Вот мои предложения:
- Ввести наконец наследование
- Ввести директивы передачи опций компилятору (типа #pragma comment(linker... в VС++)
- (В продолжение) Ввести возможность задавать содержимое секции .drectve
- Добавить встроенную возможность указать линкер и опции для него
- Ввести возможность явно указывать секции, в которых будет размещен весь последующий код (типа #pragma section в VC++)
VerhoLom- Сообщения : 67
Дата регистрации : 2010-07-06
Возраст : 42
Re: Предложение
Мне бы хотелось, чтобы разработчики внесли:
1) типы: BOOL,WORD,DWORD.
2) встроенные связанные списки с сортировкой и пр.
3) простейшие реализации сортировки массивов (примеров на оф. сайте немало, выбрать толковый и добавить)
4) чтобы зарезервированное слово Class наконец заработало .
1) типы: BOOL,WORD,DWORD.
2) встроенные связанные списки с сортировкой и пр.
3) простейшие реализации сортировки массивов (примеров на оф. сайте немало, выбрать толковый и добавить)
4) чтобы зарезервированное слово Class наконец заработало .
trew- Сообщения : 331
Дата регистрации : 2010-10-14
Re: Предложение
За bool обеими руками. Но мне кажется, что разрабы и без нас отлично знают, что хочет комьюнити. Они ведь feature requests на sourceforge тоже читают, а там много чего есть - проблема видимо не в том, что разрабы не знают, что нужно добавить, а в сложности, незаинтересованности, etc.
DiG. GeRR- Сообщения : 101
Дата регистрации : 2009-01-30
Возраст : 32
Откуда : Рудный, Казахстан
Re: Предложение
trew пишет:Мне бы хотелось, чтобы разработчики внесли:
1) типы: BOOL,WORD,DWORD.
2) встроенные связанные списки с сортировкой и пр.
3) простейшие реализации сортировки массивов (примеров на оф. сайте немало, выбрать толковый и добавить)
4) чтобы зарезервированное слово Class наконец заработало .
1. Деннис Ричи (царство ему небесное ) когда-то выступал против добавления в язык Си таких украшательств, как, например, тип BOOL. Есть стандартные типы, которые по числу битов совпадают с тем же BOOL. Зачем тогда вводить еще один тип? Да, из соображений удобства - это хорошо, а из соображений минимализма - плохо. В конце концов, кто мешает один раз сделать включаемый файл с определениями нужных типов (ч/з Define/Type) и включать его в свой код. Не надо забывать, что ФБ - это все-таки ассемблер, которому глубоко пофиг на названия, но не пофиг на число битов.
2. Хотелось бы, но это повлечет за собой лишнюю рантайму (неважно, .DLL или .LIB(*.o) )
3. Целиком согласен. У авторов - лень...
4. см. пункт 2
VerhoLom- Сообщения : 67
Дата регистрации : 2010-07-06
Возраст : 42
Re: Предложение
Note:
- Ритчи, при всем уважении к нему (я начинал именно с его книг), ошибался. bool в виде встроенного типа был необходим в как в С, так и во FreeBasic. Вот вы можете реализовать bool с помощью define/type?
- basic и минимализм - довольно малосовместимые вещи.
- Ритчи, при всем уважении к нему (я начинал именно с его книг), ошибался. bool в виде встроенного типа был необходим в как в С, так и во FreeBasic. Вот вы можете реализовать bool с помощью define/type?
- basic и минимализм - довольно малосовместимые вещи.
DiG. GeRR- Сообщения : 101
Дата регистрации : 2009-01-30
Возраст : 32
Откуда : Рудный, Казахстан
Re: Предложение
Вариантов много. К примеру так:
Но, как говорил Коровьев, есть еще одно большое "НО", а именНО:
А чем не булево сравнение от этот код:
Кстати, код мало чем отличается о тпервого варианта (ну, разве что объявлением переменной).
Зачем огород городить, когда можно обойтись и без этого . Жизненной необходимости в типе BOOL нету . Ну, или в крайнем случае, можно поизвращаться с перечислениями
Вот приведите пример, когда без этого типа не обойтись? Ну совсем никак...
- Код:
#Include "windows.bi"
'это чтоб не ругался на повторную декларацию (на всякий случай)
#Ifdef BOOL
#Undef BOOL
#EndIf
#Ifdef TRUE
#Undef TRUE
#EndIf
#Ifdef FALSE
#Undef FALSE
#EndIf
Enum _BOOL
FALSE=0
TRUE=1
End Enum
Type BOOL As _BOOL
Dim b As BOOL
b=FALSE
If b Then
MessageBox(0,"TRUE",0,MB_APPLMODAL)
Else
MessageBox(0,"FALSE",0,MB_APPLMODAL)
EndIf
End
Но, как говорил Коровьев, есть еще одно большое "НО", а именНО:
А чем не булево сравнение от этот код:
- Код:
#Include "windows.bi"
Dim b As UInteger
b=1
If b Then
MessageBox(0,"TRUE",0,MB_APPLMODAL)
Else
MessageBox(0,"FALSE",0,MB_APPLMODAL)
EndIf
End
Кстати, код мало чем отличается о тпервого варианта (ну, разве что объявлением переменной).
Зачем огород городить, когда можно обойтись и без этого . Жизненной необходимости в типе BOOL нету . Ну, или в крайнем случае, можно поизвращаться с перечислениями
Вот приведите пример, когда без этого типа не обойтись? Ну совсем никак...
VerhoLom- Сообщения : 67
Дата регистрации : 2010-07-06
Возраст : 42
Re: Предложение
- Код:
#Ifdef BOOL
#Undef BOOL
#EndIf
#Ifdef TRUE
#Undef TRUE
#EndIf
#Ifdef FALSE
#Undef FALSE
#EndIf
Позанудствую: получается, вы удаляете определение, если оно существует? А если эти идентификаторы уже используются для каких-нибудь других целей? Использование вместо них ваших BOOL/TRUE/FALSE явно ни к чему хорошему не приведет, и еще хорошо, если этот код не скомпилируется. Имхо лучше юзать директиву #error если какой-то из идентификаторов уже занят.
- Код:
Enum _BOOL
FALSE=0
TRUE=1
End Enum
Type BOOL As _BOOL
Тип bool - это не тип, переменная которого может содержать значения true и false, а тип, переменная которого может содержать только true и false. И в этом кардинальная разница. То, что вы написали - не bool. Если я напишу b = 78, то ваш код прекрасно скомпилируется, и даже продолжит прекрасно работать, но если кому-то вздумается написать после этого нечто вроде такого:
- Код:
'' Казалось бы, это то же самое...
if b = TRUE then
или даже такое (какой ужас!)
- Код:
dim a as BOOL
a = TRUE
if a = b then
или же избалованному настоящим C++ bool придет в голову сея безумная конструкция:
- Код:
dim i as integer
i = 5897
b = i '' вроде нормально, даже компилятор не ругается)
то все это скомпилируется, но выдаст совсем не тот результат, который ожидался.
Собственно, это относится и ко второму варианту (ведь по сути enum это тот же самый integer).
Примеров, где совсем никак не обойтись без bool, я вам не покажу. Ибо их нет. Жили же люди без него. Просто это довольно удобная вещь, которую сравнительно несложно реализовать, и сделать жизнь чуть-чуть прекраснее...
DiG. GeRR- Сообщения : 101
Дата регистрации : 2009-01-30
Возраст : 32
Откуда : Рудный, Казахстан
З новым ГИДОМ! (Жители Украины поймут)
Ну, к примеру, можно сделать так :
Тогда все будет по правилам. Если авторы и введут встроенный тип BOOL, то он будет где-то таким. Если есть классы, почему бы не воспользоваться этим?
- Код:
#Include "windows.bi"
#Ifndef _MY_BOOL_TYPE
#Define _MY_BOOL_TYPE
#Undef BOOL
#Undef TRUE
#Undef FALSE
#Define TRUE 1UL
#Define FALSE 0UL
Type BOOL
Private:
v As UInteger
Public:
Declare Constructor()
Declare Constructor(ByVal rhs As UInteger)
Declare Operator Let(ByVal rhs As UInteger)
Declare Operator Cast()As UInteger
End Type
Constructor BOOL()
This.v=0
End Constructor
Constructor BOOL(ByVal rhs As UInteger)
If rhs>0 Then this.v=1 Else this.v=0
End Constructor
Operator BOOL.Let(ByVal rhs As UInteger)
Select Case rhs
Case TRUE,FALSE
This.v=rhs
Case Else
If rhs>0 Then this.v=1 Else this.v=0
End Select
End Operator
Operator BOOL.Cast()As UInteger
Return this.v
End Operator
#EndIf
'****************************************
Dim b As BOOL
b=FALSE
If b Then
MessageBox(0,"TRUE",0,MB_APPLMODAL)
Else
MessageBox(0,"FALSE",0,MB_APPLMODAL)
EndIf
End
Тогда все будет по правилам. Если авторы и введут встроенный тип BOOL, то он будет где-то таким. Если есть классы, почему бы не воспользоваться этим?
VerhoLom- Сообщения : 67
Дата регистрации : 2010-07-06
Возраст : 42
Re: Предложение
привет всем. в версии 0.24 будет следующее:
- Single inheritance for classes: TYPE Child EXTENDS Parent.
- BASE keyword for explicit base class access inside methods: BASE.member (as opposed to THIS.member)
- Runtime type information (RTTI) for classes extending other classes or the new builtin OBJECT class: IF variable IS SomeClass THEN ...
подробно об изменениях смотрим:
http://fbc.git.sourceforge.net/git/gitweb.cgi?p=fbc/fbc;a=blob;f=changelog.txt
- Single inheritance for classes: TYPE Child EXTENDS Parent.
- BASE keyword for explicit base class access inside methods: BASE.member (as opposed to THIS.member)
- Runtime type information (RTTI) for classes extending other classes or the new builtin OBJECT class: IF variable IS SomeClass THEN ...
подробно об изменениях смотрим:
http://fbc.git.sourceforge.net/git/gitweb.cgi?p=fbc/fbc;a=blob;f=changelog.txt
electrik- Сообщения : 391
Дата регистрации : 2008-09-02
Возраст : 43
Откуда : галактика Млечный путь, система Солнечная, планета Земля, страна россия, город Санкт Петербург
Re: Предложение
electrik пишет:привет всем. в версии 0.24 будет следующее:
- Single inheritance for classes: TYPE Child EXTENDS Parent.
- BASE keyword for explicit base class access inside methods: BASE.member (as opposed to THIS.member)
- Runtime type information (RTTI) for classes extending other classes or the new builtin OBJECT class: IF variable IS SomeClass THEN ...
подробно об изменениях смотрим:
http://fbc.git.sourceforge.net/git/gitweb.cgi?p=fbc/fbc;a=blob;f=changelog.txt
Вот ЗДЕСЬ есть скомпилированная демка, можно потестировать при желании новые возможности.
trew- Сообщения : 331
Дата регистрации : 2010-10-14
Re: Предложение
Это же классно, что FB развивается!
Если позволите, я еще немножечко про bool, хотя это и оффтоп. Может быть, меня будут считать занудой, но...
- Невозможно использовать переменную этого типа в некоторых конструкциях, например
- Придется перегрузить еще несколько операторов, например operator not
- Псевдо-литералы TRUE и FALSE на самом деле имеют тип UInteger. Пример того, к чему это может привести, вы и сами придумаете
- Благодаря перегруженному оператору cast значения неявно преобразуются в integer, со всеми вытекающими отсюда проблемами. Какой смысл имеют для bool операторы +, -, *, etc?
Вот видите, с какого раза у нас получилось сделать более-менее приемлемый тип. А большинство не будут писать всю эту лабудень, а просто будут довольствоваться чем-то вроде #define bool 1/#define false 0, пока баги не полезут в самых неожиданных местах.
Если позволите, я еще немножечко про bool, хотя это и оффтоп. Может быть, меня будут считать занудой, но...
- Невозможно использовать переменную этого типа в некоторых конструкциях, например
- Код:
print b
- Придется перегрузить еще несколько операторов, например operator not
- Код:
' во избежание такого
dim a as BOOL
dim b as BOOL
a = TRUE
b = FALSE
dim i as Integer
i = not b
print i '' нужно 1, получаем -1
dim d as BOOL
d = not a
print cint(d) '' нужно false (0), получаем true (1)
- Псевдо-литералы TRUE и FALSE на самом деле имеют тип UInteger. Пример того, к чему это может привести, вы и сами придумаете
- Благодаря перегруженному оператору cast значения неявно преобразуются в integer, со всеми вытекающими отсюда проблемами. Какой смысл имеют для bool операторы +, -, *, etc?
Вот видите, с какого раза у нас получилось сделать более-менее приемлемый тип. А большинство не будут писать всю эту лабудень, а просто будут довольствоваться чем-то вроде #define bool 1/#define false 0, пока баги не полезут в самых неожиданных местах.
DiG. GeRR- Сообщения : 101
Дата регистрации : 2009-01-30
Возраст : 32
Откуда : Рудный, Казахстан
Re: Предложение
Это не занудство, а самая что ни на есть продуктивная дискуссия между понимающими людьми. Так должно быть.
по поводу Print: перегрузите CAST для типа String, к примеру так:
по поводу Print: перегрузите CAST для типа String, к примеру так:
- Код:
...
Operator BOOL.Cast()As String
If this.v=0 Then Return "False" Else Return "True"
End Operator
Dim b As BOOL
b=TRUE
Print b
Sleep
b=FALSE
Print b
Sleep
End
Последний раз редактировалось: VerhoLom (Вс Янв 08, 2012 4:55 pm), всего редактировалось 1 раз(а)
VerhoLom- Сообщения : 67
Дата регистрации : 2010-07-06
Возраст : 42
Re: Предложение
electrik пишет:привет всем. в версии 0.24 будет следующее:
- Single inheritance for classes: TYPE Child EXTENDS Parent.
- BASE keyword for explicit base class access inside methods: BASE.member (as opposed to THIS.member)
- Runtime type information (RTTI) for classes extending other classes or the new builtin OBJECT class: IF variable IS SomeClass THEN ...
подробно об изменениях смотрим:
http://fbc.git.sourceforge.net/git/gitweb.cgi?p=fbc/fbc;a=blob;f=changelog.txt
Кстати, а наследование (ну, некое его подобие ) можно реализовать, перегрузив оператор "->". Например так:
- Код:
#Include "windows.bi"
Type IMsg
Private:
'нельзя, чтобы тип данных был пустой. Ошибка!
_m As UInteger
Public:
Declare Sub Message()
End Type
Sub IMsg.Message()
MessageBox(0,"IMsg.Message",0,0)
End Sub
'******************************
Type Mesag
Public:
_IMsg As IMsg
Declare Sub Message()
End Type
Sub Mesag.Message()
MessageBox(0,"Mesag.Message",0,0)
End Sub
Operator ->(ByRef lhs As Mesag)As IMsg
Return lhs._IMsg
End Operator
'Пробуем *********************************
Dim m As Mesag
m->Message()
m.Message()
End
А если объявить m как указатель на Mesag, то прийдется писать так:
- Код:
Dim m As Mesag Ptr=New Mesag
m[0]->Message()
m->Message()
Извращение да и только.
VerhoLom- Сообщения : 67
Дата регистрации : 2010-07-06
Возраст : 42
Re: Предложение
привет. вот что бы мне хотелось. оптимизированных циклов как в c.
вот не оптимизированный код:
оптимизированный код:
как это делает обычный цикл
dec a
cmp a,0
jne do1
тоесть есть комманда cmp, которая тоже такты отнимает. и представьте большой цикл, который копирует память, например.
при помощи таких циклов можно считать до нуля. как нуль, так выходим из него.
естественно, при выводе цифр на экран, последняя будет 1.
да и конструкция типа: loop while a+=1, хорошая.
если написать: loop while a+=2, тут придется работать с коммандой cmp, оптимизации нет.
только с единицами, причем только с константами.
мы же не можем знать, что там в переменной болтается.
кстати, немного другая конструкция прокатывает: loop while a=a+1, но лажа получается, и асм код странный, цикл проходит одну итерацию.
далее. нормальный цикл for.
вот код на c:
теперь, чтобы точно такой же код написать на FreeBasic, нужно так:
вроде не плохо, но как-то не хорошо.
от переменной перед стартом цикла отнимается единица.
для одиночного цикла- это пару тактов, а если вложенный...
а вот как такое реализовать синтаксически- трудно сказать. можно так:
for a as integer = 0 to < b
бред наверное, ну еще как? конечно можно так:
for a as integer = 0 to a < b
когда пишешь программу на FreeBasic с нуля, таких проблем нет. но я сейчас переписываю библиотечку под FreeBasic, а цель такая, чтоб без асм вставок. и получится не так, как бы хотелось.
хорошо, что там код внутри циклов, почти не зависит от итераторов, можно циклы гонять так:
for a as integer = 1 to b
тоесть не от нуля а от одного.
кто с инглишем на ты, слейте инфу. думаю поймут, что я от них хочу.
вот не оптимизированный код:
- Код:
dim a as integer = 10
do
print a
a-=1
loop while a <> 0
a=-10
do
print a
a+=1
loop while a <> 0
оптимизированный код:
- Код:
dim a as integer = 10
asm do: ' do
print a
a-=1
asm jne do ' loop while a-=1
a=-10
asm do1: ' do
print a
a+=1
asm jne do1 ' loop while a+=1
sleep
как это делает обычный цикл
dec a
cmp a,0
jne do1
тоесть есть комманда cmp, которая тоже такты отнимает. и представьте большой цикл, который копирует память, например.
при помощи таких циклов можно считать до нуля. как нуль, так выходим из него.
естественно, при выводе цифр на экран, последняя будет 1.
да и конструкция типа: loop while a+=1, хорошая.
если написать: loop while a+=2, тут придется работать с коммандой cmp, оптимизации нет.
только с единицами, причем только с константами.
мы же не можем знать, что там в переменной болтается.
кстати, немного другая конструкция прокатывает: loop while a=a+1, но лажа получается, и асм код странный, цикл проходит одну итерацию.
далее. нормальный цикл for.
вот код на c:
- Код:
int main(int argc,char *argv)
{
int a = 0;
int b = 20;
for (a=0;a<b;a++){
printf ("%d",a);
}
return 0;
}
теперь, чтобы точно такой же код написать на FreeBasic, нужно так:
- Код:
dim a as integer = 0
dim b as integer = 20
for a as integer = 0 to b-1
print a
next
вроде не плохо, но как-то не хорошо.
от переменной перед стартом цикла отнимается единица.
для одиночного цикла- это пару тактов, а если вложенный...
а вот как такое реализовать синтаксически- трудно сказать. можно так:
for a as integer = 0 to < b
бред наверное, ну еще как? конечно можно так:
for a as integer = 0 to a < b
когда пишешь программу на FreeBasic с нуля, таких проблем нет. но я сейчас переписываю библиотечку под FreeBasic, а цель такая, чтоб без асм вставок. и получится не так, как бы хотелось.
хорошо, что там код внутри циклов, почти не зависит от итераторов, можно циклы гонять так:
for a as integer = 1 to b
тоесть не от нуля а от одного.
кто с инглишем на ты, слейте инфу. думаю поймут, что я от них хочу.
electrik- Сообщения : 391
Дата регистрации : 2008-09-02
Возраст : 43
Откуда : галактика Млечный путь, система Солнечная, планета Земля, страна россия, город Санкт Петербург
Re: Предложение
да, вот что значит не программирую на си, только проги из него портирую под FreeBasic.
поповоду предыдущего сообщения. не правильно я представлял устройство циклов на си.
заметил это, после того как переписал програмку.
короче, перечитал я доки по циклам в си, и вот что оно.
заметил во FreeBasic, плохо оптимизированный цикл, do until, do while, когда условие проверяется перед выполняемыми коммандами в теле цикла.
асм листинг:
правильней будет так:
в первом случае идёт проверка условия, и сразу же выполняются комманды в теле цикла.
потом идёт переход коммандой jmp к началу цикла.
идёт проверка условия...
во втором случае, перед циклом идёт скачок коммандой jmp на место где проверяется условие.
если условие истинно, идём в начало цикла.
первый проход.
проверка условия.
если истинно идём в начало цикла.
в первом случае, лишняя комманда jmp, причём в теле цикла. представьте, как такой цикл работает медленнее.
тут я не ошибаюсь, сами можете проверить. вот только жаль, что мне не разобраться с их исходниками, сам бы за оптимайзил.
поповоду предыдущего сообщения. не правильно я представлял устройство циклов на си.
заметил это, после того как переписал програмку.
короче, перечитал я доки по циклам в си, и вот что оно.
- Код:
dim a as integer = 10
do
print a
loop while a-=1
- Код:
mov dword ptr [ebp-8], 10
.Lt_0004:
push 1
push dword ptr [ebp-8]
push 0
call _fb_PrintInt@12
.Lt_0006:
cmp DWORD PTR [ebp-8], 0
setne al
dec DWORD PTR [esp+28]
test al, al
jne Lt_0004
заметил во FreeBasic, плохо оптимизированный цикл, do until, do while, когда условие проверяется перед выполняемыми коммандами в теле цикла.
- Код:
dim a as integer = 10
while (a>0)
print a
a-=1
wend
sleep
асм листинг:
- Код:
.Lt_0002:
mov dword ptr [ebp-8], 10
.Lt_0004:
cmp dword ptr [ebp-8], 0
jle .Lt_0005
push 1
push dword ptr [ebp-8]
push 0
call _fb_PrintInt@12
dec dword ptr [ebp-8]
jmp .Lt_0004
.Lt_0005:
push -1
call _fb_Sleep@4
правильней будет так:
- Код:
.Lt_0002:
mov dword ptr [ebp-8], 10
jmp .Lt_0005
.Lt_0004:
push 1
push dword ptr [ebp-8]
push 0
call _fb_PrintInt@12
dec dword ptr [ebp-8]
.Lt_0005:
cmp dword ptr [ebp-8], 0
jg .Lt_0004
.lt_006:
push -1
call _fb_Sleep@4
в первом случае идёт проверка условия, и сразу же выполняются комманды в теле цикла.
потом идёт переход коммандой jmp к началу цикла.
идёт проверка условия...
во втором случае, перед циклом идёт скачок коммандой jmp на место где проверяется условие.
если условие истинно, идём в начало цикла.
первый проход.
проверка условия.
если истинно идём в начало цикла.
в первом случае, лишняя комманда jmp, причём в теле цикла. представьте, как такой цикл работает медленнее.
тут я не ошибаюсь, сами можете проверить. вот только жаль, что мне не разобраться с их исходниками, сам бы за оптимайзил.
electrik- Сообщения : 391
Дата регистрации : 2008-09-02
Возраст : 43
Откуда : галактика Млечный путь, система Солнечная, планета Земля, страна россия, город Санкт Петербург
Re: Предложение
Меня больше интересует вопрос: Сергей вот ты оптимизировал код работы цикла. Как его теперь скомпилить? Как узнать(перехватить) те параметры, которые передаются GNU ASM для компиляции и линковки?
trew- Сообщения : 331
Дата регистрации : 2010-10-14
Re: Предложение
да, мне бы самому интересно было. я же просто показал пример как оно должно работать- вручную подправил asm файл.
единственный вариант, править вручную в asm файле.
посмотреть процесс компиляции: fbc -v test.bas
только, там показываются вызовы утилит и их параметры, а вот как сам компилятор пашет нет.
надо с сурсами разбираться. непонятно с чего начинать.
знаю, что файлы ast- это типа какое-то обстрактное дерево (abstract tree.
изменение пяти строчек в исходниках не поможет.
видимо, надо и в дереве ковыряться, в парсере, emit, lex.
короче пол компилятора перерыть.
надо почитать, что такое abstract tree, да и вообще, я раз двадцать брался за понимание исходников, пока не пойму ни черта.
что-то мне говорит моя голова, если понять структуру исходников, то добавлять изменять и т.д, будет не сложно.
как вообще идёт процесс компиляции в fb. надо понять, что идёт первым. либо парсинг, либо сначала всё собирается в кучу, а потом парсится, если они написали компилятор, по каким-то общепринятым методам, значит надо читать литературу о том, как создаются компиляторы.
у меня валяется исходник 8086 ассемблера, написанного на QBasic- где-то стянул давно.
там всё было по дедски типа:
if a = "mov" then
что-то там делается
end if
но так языки не кто не пишет.
попробую в двадцать первый раз покумекать.
единственный вариант, править вручную в asm файле.
посмотреть процесс компиляции: fbc -v test.bas
только, там показываются вызовы утилит и их параметры, а вот как сам компилятор пашет нет.
надо с сурсами разбираться. непонятно с чего начинать.
знаю, что файлы ast- это типа какое-то обстрактное дерево (abstract tree.
изменение пяти строчек в исходниках не поможет.
видимо, надо и в дереве ковыряться, в парсере, emit, lex.
короче пол компилятора перерыть.
надо почитать, что такое abstract tree, да и вообще, я раз двадцать брался за понимание исходников, пока не пойму ни черта.
что-то мне говорит моя голова, если понять структуру исходников, то добавлять изменять и т.д, будет не сложно.
как вообще идёт процесс компиляции в fb. надо понять, что идёт первым. либо парсинг, либо сначала всё собирается в кучу, а потом парсится, если они написали компилятор, по каким-то общепринятым методам, значит надо читать литературу о том, как создаются компиляторы.
у меня валяется исходник 8086 ассемблера, написанного на QBasic- где-то стянул давно.
там всё было по дедски типа:
if a = "mov" then
что-то там делается
end if
но так языки не кто не пишет.
попробую в двадцать первый раз покумекать.
electrik- Сообщения : 391
Дата регистрации : 2008-09-02
Возраст : 43
Откуда : галактика Млечный путь, система Солнечная, планета Земля, страна россия, город Санкт Петербург
Re: Предложение
Со статической либой не сложно:
1) Создаем ASM файл:
2) Создаем объектный файл:
3) Создаем файл либы:
Но вот с EXE вылезает варнинг:
Что за хрень и при чем тут msys?
Нет, у меня конечно пути в переменных средах прописаны для компиля MinGW, но с какого х.ра они цепляются сюда? Да и убирал пути из переменных сред , результат тот же.
1) Создаем ASM файл:
fbc -r 1.bas
2) Создаем объектный файл:
as.exe --32 --strip-local-absolute "1.asm" -o "1.o"
3) Создаем файл либы:
fbc.exe -w pedantic -lib -x libs.a 1.o
Но вот с EXE вылезает варнинг:
D:\Freebasic\fbedit\Compilier\lib\win32/libmingw32.a(main.o): In function `main'
:
C:\MinGW\msys\1.0\src\mingwrt/../mingw/main.c:73: undefined reference to `WinMai
n@16'
Что за хрень и при чем тут msys?
Нет, у меня конечно пути в переменных средах прописаны для компиля MinGW, но с какого х.ра они цепляются сюда? Да и убирал пути из переменных сред , результат тот же.
trew- Сообщения : 331
Дата регистрации : 2010-10-14
Re: Предложение
У меня всё работает. ща по шагам расскажу.
создаем файл test.bas/.
пишем туда что-то.
компилим: fbc -R test.bas -v
ключ -v- для того, чтоб поглядеть какие параметры передаются утилитам.
вручную правим asm файл.
потом создаем cmd файл следующего содержания.
компилится с нужными rtl библиотеками. а вот как делать меньше код без rtl, я писал:
https://freebasic.forum2x2.ru/t404-topic#3210
но ведь каждый раз влом править асм файл, поэтому, надо компилер ковырять.
создаем файл test.bas/.
пишем туда что-то.
компилим: fbc -R test.bas -v
ключ -v- для того, чтоб поглядеть какие параметры передаются утилитам.
вручную правим asm файл.
потом создаем cmd файл следующего содержания.
- Код:
D:\FreeBASIC\bin\win32\as.exe --32 --strip-local-absolute "test.asm" -o "test.o"
D:\FreeBASIC\bin\win32\ld.exe -o "test.exe" -subsystem console "D:\FreeBASIC\lib\win32\fbextra.x" --stack 1048576,1048576 -s -L "D:\FreeBASIC\lib\win32" -L "." "D:\FreeBASIC\lib\win32\crt2.o" "D:\FreeBASIC\lib\win32\crtbegin.o" "D:\FreeBASIC\lib\win32\fbrt0.o" "test.o" "-(" -luser32 -lfb -lgcc -lmsvcrt -lkernel32 -lmingw32 -lmingwex -lmoldname -lsupc++ "-)" "D:\FreeBASIC\lib\win32\crtend.o"
pause
компилится с нужными rtl библиотеками. а вот как делать меньше код без rtl, я писал:
https://freebasic.forum2x2.ru/t404-topic#3210
но ведь каждый раз влом править асм файл, поэтому, надо компилер ковырять.
electrik- Сообщения : 391
Дата регистрации : 2008-09-02
Возраст : 43
Откуда : галактика Млечный путь, система Солнечная, планета Земля, страна россия, город Санкт Петербург
Re: Предложение
electrik пишет:У меня всё работает. ща по шагам расскажу.
создаем файл test.bas/.
пишем туда что-то.
компилим: fbc -R test.bas -v
ключ -v- для того, чтоб поглядеть какие параметры передаются утилитам.
вручную правим asm файл.
потом создаем cmd файл следующего содержания.получается exe'шник.
- Код:
D:\FreeBASIC\bin\win32\as.exe --32 --strip-local-absolute "test.asm" -o "test.o"
D:\FreeBASIC\bin\win32\ld.exe -o "test.exe" -subsystem console "D:\FreeBASIC\lib\win32\fbextra.x" --stack 1048576,1048576 -s -L "D:\FreeBASIC\lib\win32" -L "." "D:\FreeBASIC\lib\win32\crt2.o" "D:\FreeBASIC\lib\win32\crtbegin.o" "D:\FreeBASIC\lib\win32\fbrt0.o" "test.o" "-(" -luser32 -lfb -lgcc -lmsvcrt -lkernel32 -lmingw32 -lmingwex -lmoldname -lsupc++ "-)" "D:\FreeBASIC\lib\win32\crtend.o"
pause
компилится с нужными rtl библиотеками. а вот как делать меньше код без rtl, я писал:
https://freebasic.forum2x2.ru/t404-topic#3210
но ведь каждый раз влом править асм файл, поэтому, надо компилер ковырять.
Серега, это я пробовал после того как ты раннем посте рассказал о ключе -v
У меня выдает ошибку при линковке:
D:\Freebasic\fbedit\Compilier\bin\win32\ld.exe: cannot find -luser32-lfb
Ты какой версией компиля собирал? Можно весь твой проект скинуть куда-нибудь?
trew- Сообщения : 331
Дата регистрации : 2010-10-14
Re: Предложение
естил кодЖ
оптимизированный цикл как правило 1.6 секунд.
пару раз, оптимизированный цикл показал 1.9, фиг знает почему, и 1.2
выигрыш в среднем одна десятая секунды.
надо как-нибудь под dos'ом потестить, она же операционка реального времени.
- Код:
dim a as integer = 100000000
dim b as double = timer
while a > 0
a-=1
wend
print timer-b
оптимизированный цикл как правило 1.6 секунд.
пару раз, оптимизированный цикл показал 1.9, фиг знает почему, и 1.2
выигрыш в среднем одна десятая секунды.
надо как-нибудь под dos'ом потестить, она же операционка реального времени.
electrik- Сообщения : 391
Дата регистрации : 2008-09-02
Возраст : 43
Откуда : галактика Млечный путь, система Солнечная, планета Земля, страна россия, город Санкт Петербург
Re: Предложение
Вау, извиняюсь, нашел в чем бага у меня Когда копирую , с консоли текст, орн размещен на нескольких строках, видно пока его переводил в одну строку, один пробел сократил в этом месте:
надо так:
Спасибо за помощь!
-luser32-lfb
надо так:
-luser32 -lfb
Спасибо за помощь!
trew- Сообщения : 331
Дата регистрации : 2010-10-14
Re: Предложение
я пользуюсь fbide а чаще всего akelpad. поскольку со зрением у меня трендец, я не юзаю новомодные ide, ибо в них все элементы управления кодорые добавляешь в проект, находятся в графической сетке, которая говорилками не читается, да и с клавиатуры не управляемо это.
поэтому, все ресурсы приходится вручную набирать.
вот ссылка на файлы.
http://svalka-spb.narod.ru/progs/test.rar
там есть asm файл, уже оптимизированный.
подправишь пути в батнике, и все должно быть ок.
у меня FreeBasic v0.24
видел твой пост поповоду нового редактора, поглядел, вроде классная штука, но с русскими сурсами не работает.
я через меню открыть выбираю файл, а он как бы не грузится. пустое поле редактирования.
если будешь ему писать, пусть на f6 или по control tab, сделает переключение между полем куда пишем код и информационным куда выдаются ошибки компиляции.
а то мне приходится в говорилке врубать режим мышки, искать это поле, кликать туда, а потом читать.
вообще, пусть обязательно делает так, чтоб везде можно было попасть с клавиатуры. пока проект в зачатке, это реализовать проще, чем если бы это ему предложили спустя 3 года.
поэтому, все ресурсы приходится вручную набирать.
вот ссылка на файлы.
http://svalka-spb.narod.ru/progs/test.rar
там есть asm файл, уже оптимизированный.
подправишь пути в батнике, и все должно быть ок.
у меня FreeBasic v0.24
видел твой пост поповоду нового редактора, поглядел, вроде классная штука, но с русскими сурсами не работает.
я через меню открыть выбираю файл, а он как бы не грузится. пустое поле редактирования.
если будешь ему писать, пусть на f6 или по control tab, сделает переключение между полем куда пишем код и информационным куда выдаются ошибки компиляции.
а то мне приходится в говорилке врубать режим мышки, искать это поле, кликать туда, а потом читать.
вообще, пусть обязательно делает так, чтоб везде можно было попасть с клавиатуры. пока проект в зачатке, это реализовать проще, чем если бы это ему предложили спустя 3 года.
electrik- Сообщения : 391
Дата регистрации : 2008-09-02
Возраст : 43
Откуда : галактика Млечный путь, система Солнечная, планета Земля, страна россия, город Санкт Петербург
Re: Предложение
Спасибо Серега, но я уже выше написал, что нашел ошибку, которая была в моей невнимательности. Теперь я буду знать как это делается и при случае воспользуюсь. Тем более, что есть один проект, который надо посмотреть внимательно, используя ASM листинг. По поводу редактора, скажу так: пока не будет нормальной поддержки русских путей, автора с просьбами беспокоить не буду. В принципе пока для меня лучше FbEdit нет редактора, но когда надо работать с кодировкой OEM866 , то тут уже AkelPad выручает.
trew- Сообщения : 331
Дата регистрации : 2010-10-14
Re: Предложение
кстати, fb edit вроде с открытыми исходниками. может там поковыряться, да сапклассить все окна чтоб с клавы всё рулилось. у меня есть старые сурсы, надо слазить поглядеть новые.
electrik- Сообщения : 391
Дата регистрации : 2008-09-02
Возраст : 43
Откуда : галактика Млечный путь, система Солнечная, планета Земля, страна россия, город Санкт Петербург
Права доступа к этому форуму:
Вы не можете отвечать на сообщения