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

Предложение

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

Перейти вниз

Предложение Empty Предложение

Сообщение  VerhoLom Чт Дек 22, 2011 8:25 pm

Предлагаю составить список того, чего хотелось бы видеть в языке и потом отправить это все авторам - пусть знают мнение сообщества. Вот мои предложения:


  • Ввести наконец наследование
  • Ввести директивы передачи опций компилятору (типа #pragma comment(linker... в VС++) lol!
  • (В продолжение) Ввести возможность задавать содержимое секции .drectve study
  • Добавить встроенную возможность указать линкер и опции для него lol!
  • Ввести возможность явно указывать секции, в которых будет размещен весь последующий код (типа #pragma section в VC++) study


bounce
VerhoLom
VerhoLom

Сообщения : 67
Дата регистрации : 2010-07-06
Возраст : 42

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

Предложение Empty Re: Предложение

Сообщение  trew Пт Дек 23, 2011 9:39 am

Мне бы хотелось, чтобы разработчики внесли:
1) типы: BOOL,WORD,DWORD.
2) встроенные связанные списки с сортировкой и пр.
3) простейшие реализации сортировки массивов (примеров на оф. сайте немало, выбрать толковый и добавить)
4) чтобы зарезервированное слово Class наконец заработало Very Happy .




trew

Сообщения : 331
Дата регистрации : 2010-10-14

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

Предложение Empty Re: Предложение

Сообщение  DiG. GeRR Пт Дек 23, 2011 12:32 pm

За bool обеими руками. Но мне кажется, что разрабы и без нас отлично знают, что хочет комьюнити. Они ведь feature requests на sourceforge тоже читают, а там много чего есть - проблема видимо не в том, что разрабы не знают, что нужно добавить, а в сложности, незаинтересованности, etc.

DiG. GeRR

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

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

Предложение Empty Re: Предложение

Сообщение  VerhoLom Пн Дек 26, 2011 4:36 pm

trew пишет:Мне бы хотелось, чтобы разработчики внесли:
1) типы: BOOL,WORD,DWORD.
2) встроенные связанные списки с сортировкой и пр.
3) простейшие реализации сортировки массивов (примеров на оф. сайте немало, выбрать толковый и добавить)
4) чтобы зарезервированное слово Class наконец заработало Very Happy .




1. Деннис Ричи (царство ему небесное study ) когда-то выступал против добавления в язык Си таких украшательств, как, например, тип BOOL. Есть стандартные типы, которые по числу битов совпадают с тем же BOOL. Зачем тогда вводить еще один тип? Да, из соображений удобства - это хорошо, а из соображений минимализма - плохо. В конце концов, кто мешает один раз сделать включаемый файл с определениями нужных типов (ч/з Define/Type) и включать его в свой код. Не надо забывать, что ФБ - это все-таки ассемблер, которому глубоко пофиг на названия, но не пофиг на число битов. scratch

2. Хотелось бы, но это повлечет за собой лишнюю рантайму (неважно, .DLL или .LIB(*.o) ) elephant

3. Целиком согласен. У авторов - лень... lol!

4. см. пункт 2 confused
VerhoLom
VerhoLom

Сообщения : 67
Дата регистрации : 2010-07-06
Возраст : 42

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

Предложение Empty Re: Предложение

Сообщение  DiG. GeRR Пт Дек 30, 2011 4:08 pm

Note:
- Ритчи, при всем уважении к нему (я начинал именно с его книг), ошибался. bool в виде встроенного типа был необходим в как в С, так и во FreeBasic. Вот вы можете реализовать bool с помощью define/type?
- basic и минимализм - довольно малосовместимые вещи.

DiG. GeRR

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

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

Предложение Empty Re: Предложение

Сообщение  VerhoLom Пт Дек 30, 2011 4:58 pm

Вариантов много. К примеру так:

Код:

#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
Извращение еще то... pig

Но, как говорил Коровьев, есть еще одно большое "НО", а именНО:

А чем не булево сравнение от этот код:
Код:
#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

Кстати, код мало чем отличается о тпервого варианта (ну, разве что объявлением переменной). sunny


Зачем огород городить, когда можно обойтись и без этого scratch . Жизненной необходимости в типе BOOL нету study study study . Ну, или в крайнем случае, можно поизвращаться с перечислениями bounce

Вот приведите пример, когда без этого типа не обойтись? Ну совсем никак...
VerhoLom
VerhoLom

Сообщения : 67
Дата регистрации : 2010-07-06
Возраст : 42

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

Предложение Empty Re: Предложение

Сообщение  DiG. GeRR Пт Дек 30, 2011 6:20 pm

Код:

#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, я вам не покажу. Ибо их нет. Жили же люди без него. Просто это довольно удобная вещь, которую сравнительно несложно реализовать, и сделать жизнь чуть-чуть прекраснее... Smile

DiG. GeRR

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

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

Предложение Empty З новым ГИДОМ! (Жители Украины поймут)

Сообщение  VerhoLom Ср Янв 04, 2012 1:17 pm

Ну, к примеру, можно сделать так scratch :

Код:
#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, то он будет где-то таким. Если есть классы, почему бы не воспользоваться этим? study
VerhoLom
VerhoLom

Сообщения : 67
Дата регистрации : 2010-07-06
Возраст : 42

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

Предложение Empty Re: Предложение

Сообщение  electrik Пт Янв 06, 2012 1:02 pm

привет всем. в версии 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

electrik

Сообщения : 391
Дата регистрации : 2008-09-02
Возраст : 43
Откуда : галактика Млечный путь, система Солнечная, планета Земля, страна россия, город Санкт Петербург

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

Предложение Empty Re: Предложение

Сообщение  trew Пт Янв 06, 2012 3:36 pm

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

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

Предложение Empty Re: Предложение

Сообщение  DiG. GeRR Пт Янв 06, 2012 4:43 pm

Это же классно, что FB развивается!
Если позволите, я еще немножечко про 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. Пример того, к чему это может привести, вы и сами придумаете Wink

- Благодаря перегруженному оператору cast значения неявно преобразуются в integer, со всеми вытекающими отсюда проблемами. Какой смысл имеют для bool операторы +, -, *, etc?

Вот видите, с какого раза у нас получилось сделать более-менее приемлемый тип. А большинство не будут писать всю эту лабудень, а просто будут довольствоваться чем-то вроде #define bool 1/#define false 0, пока баги не полезут в самых неожиданных местах.

DiG. GeRR

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

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

Предложение Empty Re: Предложение

Сообщение  VerhoLom Вс Янв 08, 2012 1:53 pm

Это не занудство, а самая что ни на есть продуктивная дискуссия между понимающими людьми. Так должно быть. flower

по поводу 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
VerhoLom

Сообщения : 67
Дата регистрации : 2010-07-06
Возраст : 42

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

Предложение Empty Re: Предложение

Сообщение  VerhoLom Вс Янв 08, 2012 2:19 pm

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


Кстати, а наследование (ну, некое его подобие tongue ) можно реализовать, перегрузив оператор "->". Например так:

Код:
#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()

Извращение да и только. rabbit
VerhoLom
VerhoLom

Сообщения : 67
Дата регистрации : 2010-07-06
Возраст : 42

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

Предложение Empty Re: Предложение

Сообщение  electrik Пн Сен 10, 2012 5:33 pm

привет. вот что бы мне хотелось. оптимизированных циклов как в c.
вот не оптимизированный код:
Код:

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
Откуда : галактика Млечный путь, система Солнечная, планета Земля, страна россия, город Санкт Петербург

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

Предложение Empty Re: Предложение

Сообщение  electrik Чт Сен 13, 2012 1:12 pm

да, вот что значит не программирую на си, только проги из него портирую под FreeBasic.
поповоду предыдущего сообщения. не правильно я представлял устройство циклов на си.
заметил это, после того как переписал програмку.
короче, перечитал я доки по циклам в си, и вот что оно.
Код:

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 нужной.

заметил во 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
Откуда : галактика Млечный путь, система Солнечная, планета Земля, страна россия, город Санкт Петербург

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

Предложение Empty Re: Предложение

Сообщение  trew Чт Сен 13, 2012 1:58 pm

Меня больше интересует вопрос: Сергей вот ты оптимизировал код работы цикла. Как его теперь скомпилить? Как узнать(перехватить) те параметры, которые передаются GNU ASM для компиляции и линковки?

trew

Сообщения : 331
Дата регистрации : 2010-10-14

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

Предложение Empty Re: Предложение

Сообщение  electrik Пт Сен 14, 2012 1:36 am

да, мне бы самому интересно было. я же просто показал пример как оно должно работать- вручную подправил asm файл.
единственный вариант, править вручную в 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
Откуда : галактика Млечный путь, система Солнечная, планета Земля, страна россия, город Санкт Петербург

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

Предложение Empty Re: Предложение

Сообщение  trew Пт Сен 14, 2012 8:13 am

Со статической либой не сложно:

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

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

Предложение Empty Re: Предложение

Сообщение  electrik Пт Сен 14, 2012 12:47 pm

У меня всё работает. ща по шагам расскажу.
создаем файл 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
получается exe'шник.
компилится с нужными rtl библиотеками. а вот как делать меньше код без rtl, я писал:
https://freebasic.forum2x2.ru/t404-topic#3210
но ведь каждый раз влом править асм файл, поэтому, надо компилер ковырять.

electrik

Сообщения : 391
Дата регистрации : 2008-09-02
Возраст : 43
Откуда : галактика Млечный путь, система Солнечная, планета Земля, страна россия, город Санкт Петербург

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

Предложение Empty Re: Предложение

Сообщение  trew Пт Сен 14, 2012 1:30 pm

electrik пишет:У меня всё работает. ща по шагам расскажу.
создаем файл 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
получается exe'шник.
компилится с нужными 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

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

Предложение Empty Re: Предложение

Сообщение  electrik Пт Сен 14, 2012 1:35 pm

естил кодЖ
Код:

dim a as integer = 100000000
dim b as double = timer
while a > 0
a-=1
wend
print timer-b
на компьютере с частотой процессора 550 мегагерц, память 133 мегагерца, операционка windows xp sp3, такой цикл работает примерно 1.7, 1.8 секунд.
оптимизированный цикл как правило 1.6 секунд.
пару раз, оптимизированный цикл показал 1.9, фиг знает почему, и 1.2
выигрыш в среднем одна десятая секунды.
надо как-нибудь под dos'ом потестить, она же операционка реального времени.

electrik

Сообщения : 391
Дата регистрации : 2008-09-02
Возраст : 43
Откуда : галактика Млечный путь, система Солнечная, планета Земля, страна россия, город Санкт Петербург

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

Предложение Empty Re: Предложение

Сообщение  trew Пт Сен 14, 2012 1:38 pm

Вау, извиняюсь, нашел в чем бага у меня Very Happy Когда копирую , с консоли текст, орн размещен на нескольких строках, видно пока его переводил в одну строку, один пробел сократил в этом месте:

-luser32-lfb

надо так:

-luser32 -lfb

Спасибо за помощь!


trew

Сообщения : 331
Дата регистрации : 2010-10-14

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

Предложение Empty Re: Предложение

Сообщение  electrik Пт Сен 14, 2012 2:00 pm

я пользуюсь fbide а чаще всего akelpad. поскольку со зрением у меня трендец, я не юзаю новомодные ide, ибо в них все элементы управления кодорые добавляешь в проект, находятся в графической сетке, которая говорилками не читается, да и с клавиатуры не управляемо это.
поэтому, все ресурсы приходится вручную набирать.
вот ссылка на файлы.
http://svalka-spb.narod.ru/progs/test.rar
там есть asm файл, уже оптимизированный.
подправишь пути в батнике, и все должно быть ок.
у меня FreeBasic v0.24
видел твой пост поповоду нового редактора, поглядел, вроде классная штука, но с русскими сурсами не работает.
я через меню открыть выбираю файл, а он как бы не грузится. пустое поле редактирования.
если будешь ему писать, пусть на f6 или по control tab, сделает переключение между полем куда пишем код и информационным куда выдаются ошибки компиляции.
а то мне приходится в говорилке врубать режим мышки, искать это поле, кликать туда, а потом читать.
вообще, пусть обязательно делает так, чтоб везде можно было попасть с клавиатуры. пока проект в зачатке, это реализовать проще, чем если бы это ему предложили спустя 3 года.

electrik

Сообщения : 391
Дата регистрации : 2008-09-02
Возраст : 43
Откуда : галактика Млечный путь, система Солнечная, планета Земля, страна россия, город Санкт Петербург

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

Предложение Empty Re: Предложение

Сообщение  trew Пт Сен 14, 2012 2:11 pm

Спасибо Серега, но я уже выше написал, что нашел ошибку, которая была в моей невнимательности. Теперь я буду знать как это делается и при случае воспользуюсь. Тем более, что есть один проект, который надо посмотреть внимательно, используя ASM листинг. По поводу редактора, скажу так: пока не будет нормальной поддержки русских путей, автора с просьбами беспокоить не буду. В принципе пока для меня лучше FbEdit нет редактора, но когда надо работать с кодировкой OEM866 , то тут уже AkelPad выручает.

trew

Сообщения : 331
Дата регистрации : 2010-10-14

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

Предложение Empty Re: Предложение

Сообщение  electrik Сб Сен 15, 2012 12:15 am

кстати, fb edit вроде с открытыми исходниками. может там поковыряться, да сапклассить все окна чтоб с клавы всё рулилось. у меня есть старые сурсы, надо слазить поглядеть новые.

electrik

Сообщения : 391
Дата регистрации : 2008-09-02
Возраст : 43
Откуда : галактика Млечный путь, система Солнечная, планета Земля, страна россия, город Санкт Петербург

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

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

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

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