Mai 2024 | Lun | Mar | Mer | Jeu | Ven | Sam | Dim |
---|
| | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | 21 | 22 | 23 | 24 | 25 | 26 | 27 | 28 | 29 | 30 | 31 | | | Calendrier |
|
| | Compilateur : version de travail disponible | |
|
+7Francis-mr pan59 jean_debord papydall Jicehel mindstorm Jack 11 participants | |
Auteur | Message |
---|
Jack Admin
Nombre de messages : 2386 Date d'inscription : 28/05/2007
| Sujet: Compilateur : version de travail disponible Lun 25 Nov 2013 - 22:17 | |
| Une version de travail du compilateur est disponible sur mon Webdav. C'est une version en cours de développement (alpha) qui donne une idée de ce que sera le compilateur. _________________ username : panoramic@jack-panoramic password : panoramic123 | |
| | | mindstorm
Nombre de messages : 685 Age : 55 Localisation : charente Date d'inscription : 13/02/2013
| Sujet: Re: Compilateur : version de travail disponible Lun 25 Nov 2013 - 22:26 | |
| merci pour tes developpement Jack | |
| | | Jicehel
Nombre de messages : 5947 Age : 51 Localisation : 77500 Date d'inscription : 18/04/2011
| Sujet: Re: Compilateur : version de travail disponible Lun 25 Nov 2013 - 23:05 | |
| Merci Jack, je ne testerais pas beaucoup mais je prends la version et si je teste des codes postés sur le forum, je signalerais les problèmes bien entendu | |
| | | papydall
Nombre de messages : 7009 Age : 73 Localisation : Moknine (Tunisie) Entre la chaise et le clavier Date d'inscription : 03/03/2012
| Sujet: Re: Compilateur : version de travail disponible Lun 25 Nov 2013 - 23:25 | |
| !!! C’EST LE DEBUT D'UNE VRAIE (R)EVOLUTION DE PANORAMIC !!! BRAVO JACK J’ai fais quelques tests avec le compilateur pour des codes très gourmands en calculs : j’apprécie la vitesse d’exécution qui est incomparable avec l’interpréteur. Pour ceux qui veulent comparer l’interpréteur et le compilateur, je vous mets ce code : testez et comparez. - Spoiler:
ça ne rivalise pas avec PANOMAND de Jean Debord, mais c'est juste pour apprécier la différence de vitesse d'exécution (interpréteur / compilateur) - Code:
-
' **************************************************** ' * * ' * Ensemble de Julia par Papydall * ' * * ' ****************************************************
dim x0,y0,nx,ny,x,y,n,xn,yn,modul,dx,dy dim L,H, S : L=640 : H=480 : S=90 dim titre$ : titre$ = "l'ensemble de JULIA" width 0,L : height 0,H : caption 0,"Papydall vous présente " + titre$ dim xd,yd, xa,ya : xd= S: yd=S : xa = L-S : ya=H-S 2d_pen_color 255,0,0 : 2d_fill_color 255,255,0 : 2d_rectangle xd,yd,xa,ya print " VEUILLEZ PATIENTER ... <ESC> pour arrêter " x0=.3 : y0=-.5
FOR Nx = xd+S TO xa-S FOR Ny = yd TO ya x = (Nx - L/2)/S : y = (H/2 - Ny)/S FOR n = 1 TO 25 2D_pen_color 150 + (450 - Nx) / 3, Ny/2, n*10 xn = x * x - y * y + x0 : yn = 2 * x * y + y0 dx = xn - x: dy = yn - y : Modul = xn * xn + yn * yn : x = xn: y = yn IF Modul > 4 THEN n = 25 NEXT n if modul < 4 : 2d_point nx,ny : end_if if scancode = 27 then print "programme arrête!" : end NEXT Ny next nx print " TERMINE "
Et ce code - Spoiler:
- Code:
-
' 3D_Mendelbrot.bas
dim x,y,z,u,v,w,a,b,l,sa,sb,xmax,xmin,ymax,ymin,fin,seuil caption 0, " <CLICK> pour arrêter" width 0,700 : height 0,500 xmax = 1.8 : xmin = -2.5 : ymax = 1.8 : ymin = -1.8 : fin = 65 : seuil = 4 2d_fill_color 0,0,255 : 2d_rectangle 0,0,1000,700 for v = 180 to 380 for u = 380-v to 820-v y =(ymax-ymin)*(380-v)/200+ymin x =(xmax-xmin)*(u+v-380)/440+xmin z = 0 : a = 0 : b = 0 : l = 0 while (l <= seuil)and(z <= fin) z = z + 1 : sa = a : sb = b : a = sa*sa-sb*sb+x : b = 2*sa*sb+y : l = a*a+b*b end_while w = z*3 2d_pen_color 255,0,0 : 2d_line u,v,u,v-w 2d_pen_color 0,0,0 : 2d_line u-2,v,u-2,v-w 2d_pen_color 255,255,255 : 2d_line u-2,v-w,u,v-w if scancode <> 0 then terminate next u next v caption 0 ,"Terminé"
| |
| | | jean_debord
Nombre de messages : 1250 Age : 69 Localisation : Limoges Date d'inscription : 21/09/2008
| Sujet: Re: Compilateur : version de travail disponible Mar 26 Nov 2013 - 9:47 | |
| Merci Jack pour ce compilateur qui était très attendu ! Je viens de tester les 2 exemples de Papydall ; ça marche très bien Au cours de la compilation, une installation temporaire de FreeBasic est créée puis effacée ! Ne serait-il pas possible d'utiliser une installation préexistante ? D'autre part, comment accéder au code FreeBasic généré ? | |
| | | jean_debord
Nombre de messages : 1250 Age : 69 Localisation : Limoges Date d'inscription : 21/09/2008
| Sujet: Re: Compilateur : version de travail disponible Mar 26 Nov 2013 - 11:26 | |
| J'ai pu récupérer le code FreeBasic généré par le programme Julia de Papydall : - Code:
-
#include"MemoryModule.bi" #include"incfile.bi" IncFile(DLLdata,"panoramic.dll") #lang "fblite" option gosub #include once"windows.bi" dim shared _handl as HWND dim shared _library as HMEMORYMODULE _library = MemoryLoadLibrary(DLLdata) dim shared pc_init as sub stdcall _ (byval operand1 as handle) pc_init=MemoryGetProcAddress(_library,"pc_init") dim shared pc_close as sub pc_close=MemoryGetProcAddress(_library,"pc_close") DIM SHARED V_X0 AS DOUBLE DIM SHARED V_Y0 AS DOUBLE DIM SHARED V_NX AS DOUBLE DIM SHARED V_NY AS DOUBLE DIM SHARED V_X AS DOUBLE DIM SHARED V_Y AS DOUBLE DIM SHARED V_N AS DOUBLE DIM SHARED V_XN AS DOUBLE DIM SHARED V_YN AS DOUBLE DIM SHARED V_MODUL AS DOUBLE DIM SHARED V_DX AS DOUBLE DIM SHARED V_DY AS DOUBLE DIM SHARED V_L AS DOUBLE DIM SHARED V_H AS DOUBLE DIM SHARED V_S AS DOUBLE DIM SHARED V_TITRE AS STRING DIM SHARED V_XD AS DOUBLE DIM SHARED V_YD AS DOUBLE DIM SHARED V_XA AS DOUBLE DIM SHARED V_YA AS DOUBLE dim shared pf_scancode as function stdcall as integer pf_scancode=MemoryGetProcAddress(_library,"pf_scancode") dim shared pc_2d_fill_color as sub stdcall _ (byval P1 as integer,_ byval P2 as integer,_ byval P3 as integer) pc_2d_fill_color=MemoryGetProcAddress(_library,"pc_2d_fill_color") dim shared pc_2d_pen_color as sub stdcall _ (byval P1 as integer,_ byval P2 as integer,_ byval P3 as integer) pc_2d_pen_color=MemoryGetProcAddress(_library,"pc_2d_pen_color") dim shared pc_2d_point as sub stdcall _ (byval P1 as integer,_ byval P2 as integer) pc_2d_point=MemoryGetProcAddress(_library,"pc_2d_point") dim shared pc_2d_rectangle as sub stdcall _ (byval P1 as integer,_ byval P2 as integer,_ byval P3 as integer,_ byval P4 as integer) pc_2d_rectangle=MemoryGetProcAddress(_library,"pc_2d_rectangle") dim shared pc_caption as sub stdcall _ (byval P1 as integer,_ byval P2 as string) pc_caption=MemoryGetProcAddress(_library,"pc_caption") dim shared pc_height as sub stdcall _ (byval P1 as integer,_ byval P2 as integer) pc_height=MemoryGetProcAddress(_library,"pc_height") dim shared pc_print_string as sub stdcall _ (byval P1 as string) pc_print_string=MemoryGetProcAddress(_library,"pc_print_string") dim shared pc_width as sub stdcall _ (byval P1 as integer,_ byval P2 as integer) pc_width=MemoryGetProcAddress(_library,"pc_width") declare function WinMain _ (byval _hInstance as HINSTANCE,_ byval _hPrevInstance as HINSTANCE,_ byval _szCmdLine as string,_ byval _iCmdShow as integer)as integer end WinMain(GetModuleHandle(null),null,Command(),SW_NORMAL) function WndProc _ (byval _hWnd as HWND,_ byval _wMsg as UINT,_ byval _wParam as WPARAM,_ byval _lParam as LPARAM)as LRESULT function=0 select case(_wMsg) case WM_CREATE exit function case WM_DESTROY pc_close() sleep 200 MemoryFreeLibrary(_library) PostQuitMessage(0) exit function end select function=DefWindowProc(_hWnd,_wMsg,_wParam,_lParam) end function function WinMain (byval _hInstance as HINSTANCE,_ byval _hPrevInstance as HINSTANCE,_ byval _szCmdLine as string,_ byval _iCmdShow as integer)as integer dim _wMsg as MSG dim _wcls as WNDCLASS dim _hWnd as HWND function=0 with _wcls .style=CS_HREDRAW or CS_VREDRAW .lpfnWndProc=@WndProc .cbClsExtra=0 .cbWndExtra=0 .hInstance=_hInstance .hIcon=LoadIcon(NULL,IDI_APPLICATION) .hCursor=LoadCursor(NULL,IDC_ARROW) .hbrBackground=GetStockObject(WHITE_BRUSH) .lpszMenuName=NULL .lpszClassName=@"HelloWin" end with if(RegisterClass(@_wcls)=FALSE)then MessageBox(null,"Failed to register _wcls","Error",MB_ICONERROR) exit function end if _hWnd = CreateWindowEx(0,_ @"HelloWin",_ "PANORAMIC",_ WS_OVERLAPPEDWINDOW,_ 10,_ 10,_ 200,_ 100,_ NULL,_ NULL,_ _hInstance,_ NULL) _handl=_hWnd UpdateWindow(_hWnd) pc_init(_hWnd) sleep 100 '------------------------------------------------------------------------------- ' SOURCE '------------------------------------------------------------------------------- V_L=640 V_H=480 V_S=90 V_TITRE="l'ensemble de JULIA" pc_width(0,V_L) pc_height(0,V_H) pc_caption(0,"Papydall vous présente "+V_TITRE) V_XD=V_S V_YD=V_S V_XA=V_L-V_S V_YA=V_H-V_S pc_2d_pen_color(255,0,0) pc_2d_fill_color(255,255,0) pc_2d_rectangle(V_XD,V_YD,V_XA,V_YA) pc_print_string(" VEUILLEZ PATIENTER ... <ESC> pour arrêter ") V_X0=.3 V_Y0=-.5 FOR V_NX=V_XD+V_S TO V_XA-V_S FOR V_NY=V_YD TO V_YA V_X=(V_NX-V_L/2)/V_S V_Y=(V_H/2-V_NY)/V_S FOR V_N=1 TO 25 pc_2d_pen_color(150+(450-V_NX)/3,V_NY/2,V_N*10) V_XN=V_X*V_X-V_Y*V_Y+V_X0 V_YN=2*V_X*V_Y+V_Y0 V_DX=V_XN-V_X V_DY=V_YN-V_Y V_MODUL=V_XN*V_XN+V_YN*V_YN V_X=V_XN V_Y=V_YN IF V_MODUL>4 THEN V_N=25 END IF NEXT V_N IF V_MODUL<4 THEN pc_2d_point(V_NX,V_NY) END IF IF PF_SCANCODE()=27 THEN pc_print_string("programme arrête!") goto _end END IF NEXT V_NY NEXT V_NX pc_print_string(" TERMINE ") _end: while(GetMessage(@_wMsg,NULL,0,0)<>FALSE) TranslateMessage(@_wMsg) DispatchMessage(@_wMsg) wend function=_wMsg.wParam end function
Au cours de la compilation, le programme original est renommé en .pan et le fichier .bas devient le code FreeBasic ! Sacré boulot, de la part de Jack ! | |
| | | pan59
Nombre de messages : 367 Age : 66 Localisation : Wattignies Date d'inscription : 16/10/2011
| Sujet: Compilateur Mar 26 Nov 2013 - 13:30 | |
| Bonjour.
Chez moi, ça ne fonctionne pas du tout.
J'obtiens le message suivant, dans une fenêtre DOS:
fbc.exe monlogo.rc -s gui "mandelbrot.bas" 1>error.txt
Puis un message:
Compilation is OK Source file: mandelbrot.bas
Je clique sur OK, et rien ne se passe. Aucune fenêtre ne s'affiche !
Merci de votre aide.
Ah, autant pour moi.
Je viens de m'apercevoir qu'un fichier '.exe' était créé, du même nom que le fichier '.bas', et qu'il fallait ensuite lancer cet exécutable.
Donc, tout est OK, et bien plus rapide.
Test avec mandelbrot.bas:
Version interprétée: 211 sec Version compilée: 2 sec !!
L'exécution est donc 105 fois plus rapide ! | |
| | | Francis-mr
Nombre de messages : 186 Date d'inscription : 26/11/2012
| Sujet: Re: Compilateur : version de travail disponible Mar 26 Nov 2013 - 14:41 | |
| Bravo et merci Jack pour ce compilateur (promesse tenue), même si je dois reprendre mes programmes car j'ai souvent utilisé des Labels. La vitesse d'exécution va changer la donne. | |
| | | Jicehel
Nombre de messages : 5947 Age : 51 Localisation : 77500 Date d'inscription : 18/04/2011
| Sujet: Re: Compilateur : version de travail disponible Mar 26 Nov 2013 - 14:43 | |
| Belle performance J'imagine déjà l'application sur le calcul des fractales ... Après au niveau de la jouabilité des jeux, c'est pareil, ça devrait vraiment être appréciable. Il faudra peut-être même ralentir certains jeux pour qu'ils restent jouables selon la façon dont ils sont codés... | |
| | | pan59
Nombre de messages : 367 Age : 66 Localisation : Wattignies Date d'inscription : 16/10/2011
| Sujet: Compilateur. Mar 26 Nov 2013 - 14:59 | |
| Bonjour. Je viens de tester les labels et subs avec le nouveau compilateur. Contrairement à la doc, tout fonctionne à merveille. Pouvez-vous me confirmer ? - Code:
-
' 3D_Mendelbrot.bas ' Interpréteur: 3m31sec = 211 sec ' Compilateur: 2 sec
dim x,y,z,u,v,w,a,b,l,sa,sb,xmax,xmin,ymax,ymin,fin,seuil dim c$,d$
label test
button 1 caption 1,"OK" on_click 1,test
c$=time$
caption 0, " <CLICK> pour arrêter" width 0,700 : height 0,500 xmax = 1.8 : xmin = -2.5 : ymax = 1.8 : ymin = -1.8 : fin = 65 : seuil = 4 2d_fill_color 0,0,255 : 2d_rectangle 0,0,1000,700 for v = 180 to 380 for u = 380-v to 820-v y =(ymax-ymin)*(380-v)/200+ymin x =(xmax-xmin)*(u+v-380)/440+xmin z = 0 : a = 0 : b = 0 : l = 0 while (l <= seuil)and(z <= fin) z = z + 1 : sa = a : sb = b : a = sa*sa-sb*sb+x : b = 2*sa*sb+y : l = a*a+b*b end_while w = z*3 2d_pen_color 255,0,0 : 2d_line u,v,u,v-w 2d_pen_color 0,0,0 : 2d_line u-2,v,u-2,v-w 2d_pen_color 255,255,255 : 2d_line u-2,v-w,u,v-w ' if scancode <> 0 then terminate next u next v d$=time$ caption 0,"Début: "+c$+",Fin: "+d$
afficher()
end
test: message "OK" return
sub afficher() message "OK" end_sub | |
| | | Invité Invité
| Sujet: Re: Compilateur : version de travail disponible Mar 26 Nov 2013 - 15:43 | |
| Bonjour, Je viens de tester, et cela marche. Maintenant peut-être y -a-t'il des choses qui ne marche pas. Faut voir avec les variables locales.
Par contre: version Papydall sur mon ordi: 30 secondes. Ta version: 10 secondes. Je ne sais pas si les codes sont repris. Je ne fais pas d'analyse maintenant. |
| | | pan59
Nombre de messages : 367 Age : 66 Localisation : Wattignies Date d'inscription : 16/10/2011
| Sujet: Compilateur. Mar 26 Nov 2013 - 16:08 | |
| Bonjour. L'un d'entre vous pourrait-il me dire pourquoi le code suivant ne se compile pas !! Merci. - Code:
-
dim boite_dialogue_visible%, false%, form7_creee%, hauteur_boite%, hauteur_ecran%, hnd%, kk%, largeur_boite%, largeur_ecran%, res%, true%, zz99% false%=0 true%=1 dim sens_traduction$(15)
sens_traduction$(1)="français -> espagnol" sens_traduction$(2)="espagnol -> français" sens_traduction$(3)="français -> allemand" sens_traduction$(4)="allemand -> français" sens_traduction$(5)="français -> polonais" sens_traduction$(6)="polonais -> français" sens_traduction$(7)="français -> anglais" sens_traduction$(8)="anglais -> français" sens_traduction$(9)="français -> italien" sens_traduction$(10)="italien -> français" sens_traduction$(11)="français -> néerlandais" sens_traduction$(12)="néerlandais -> français" sens_traduction$(13)="français -> portugais" sens_traduction$(14)="portugais -> français"
label valider_dialogue7, valider_sens_traduction
dll_on "kgf.dll"
' Préchargement des drapeaux. for kk%=1 to 7 res%=kk%+470 picture res% left res%,-300 width res%,100 height res%,70 stretch_on res%
' file_load res%,"images\"+trim$(mid$("espagne allemagne pologne grande_bretagne italie pays_bas portugal ",kk%*16-15,15))+"2.bmp" next kk%
creer_dialogue7()
dll_off
end
sub creer_dialogue7()
if form7_creee%=true% show 7 else form 7 end_if
largeur_ecran%=screen_x hauteur_ecran%=screen_y
largeur_boite%=590 hauteur_boite%=750
boite_dialogue_visible%=true%
' Cacher les boutons de réduction, agrandissement et fermeture. hnd% = handle(7) res% = DLL_call2("SetMinimizeMaximize",hnd%,0) res% = DLL_call2("SetCloseBox",hnd%,0)
left 7,(largeur_ecran%-largeur_boite%)/2 top 7,(hauteur_ecran%-hauteur_boite%)/2 width 7,largeur_boite% height 7,hauteur_boite%
caption 7,"Choix du sens de traduction."
for kk%=1 to 14 res%=kk%+450
if form7_creee%=false% then option res% parent res%,7 mark_off res% caption res%,sens_traduction$(kk%) font_size res%,12 font_bold res%
if mod(kk%,2)=1 zz99%=0 font_color res%,255,0,200 left res%,20 else zz99%=-45 font_color res%,45,0,255 left res%,360 end_if
top res%,kk%*45+zz99% width res%,200 height res%,20
on_click res%,valider_sens_traduction next kk%
if form7_creee%=false% for kk%=1 to 7 res%=kk%+470 parent res%,7 left res%,largeur_boite%/2-50 top res%,kk%*90-70 width res%,100 height res%,70 next kk%
creer_bouton(478,7,"OK",largeur_boite%/2-50,hauteur_boite%-80,100,30) font_size 478,12 font_bold 478 end_if
on_click 478,valider_dialogue7
form7_creee%=true%
end_sub
valider_sens_traduction: ' N° du dernier objet cliqué. sens_traduction_texte$=caption$(number_click) return
valider_dialogue7: boite_dialogue_visible%=false% hide 7 return
sub creer_bouton(param1%, param2%, param3$, param4%, param5%, param6%, param7%) button param1% if param2%>0 then parent param1%,param2% caption param1%,param3$ left param1%,param4% top param1%,param5% width param1%,param6% height param1%,param7% end_sub | |
| | | Invité Invité
| Sujet: Re: Compilateur : version de travail disponible Mar 26 Nov 2013 - 17:44 | |
| Je vois la ligne: - Citation :
- sub creer_bouton(param1%, param2%, param3$, param4%, param5%, param6%, param7%)
Je ne pense pas que les variables locales soient codées D'ailleurs il est dit que: - Jack a écrit:
- SUB / DIM_LOCAL / END_SUB
ne sont pas codées. |
| | | papydall
Nombre de messages : 7009 Age : 73 Localisation : Moknine (Tunisie) Entre la chaise et le clavier Date d'inscription : 03/03/2012
| Sujet: Re: Compilateur : version de travail disponible Mar 26 Nov 2013 - 18:34 | |
| Salut Un autre code à essayer (interpréteur d’abord puis compilateur) pour apprécier la vitesse ! - Spoiler:
- Code:
-
' Poisson.bas Par Papydall dim x,y,a,t,k,p,pi,r,tex$ pi = 4*atn(1) : a = 5 : k = 2*sqr(2) : p = pi/360 tex$ = " Courbe du poisson <CLICK> pour arrêter" caption 0,tex$ color 0,0,0,0 :width 0, 1000 : height 0, 600 for r = .1 to 15.6 step .1 for t = 0 to 4*pi step p x = a * (cos(t) + k * cos(t/2)) : y = a * sin(t) 2d_pen_color 255-10*r,55+10*r,t*r 2d_point 200 + r * x , 300 + r * y : 2d_point 800 - r * x , 300 + r * y ' 2d_point 500 + r * x , 300 + r * y : ' un seul poisson next t if scancode <> 0 then terminate next r caption 0, tex$ +" Fin"
Et un de plus - Spoiler:
- Code:
-
' ************************************************************* ' ' Calcul des 250 premières décimales de e ' ' Par Papydall ' ' ************************************************************* dim x(52) dim b,n,i,q,u,r,s$,rep$ caption 0, "Les 250 premières décimales de e" memo 1 : width 1,590 : height 1,450 print_target_is 1
b = 100000 : x(0) = 1 for n = 144 to 1 step -1 for i = 0 to 51 q = int(x(i)/n) : r = x(i)-q*n x(i) = q: x(i+1) = x(i+1)+b*r next i x(0) = x(0) + 1 next n
x(50) = x(50)+int(x(51)/b+0.5) for i = 50 to 1 step -1 u = int(x(i)/b) : x(i) = x(i)-b*u : x(i-1) = x(i-1)+u next i rep$ = "e = 2." for i = 1 to 50 s$ = str$(x(i)) while len(s$) < 5 : s$ = "0"+s$ : end_while rep$ = rep$ + s$+" " next i print rep$ end ' ****************************************************************
| |
| | | mindstorm
Nombre de messages : 685 Age : 55 Localisation : charente Date d'inscription : 13/02/2013
| Sujet: Re: Compilateur : version de travail disponible Mar 26 Nov 2013 - 20:56 | |
| je viens de tester c'est super vivement que la 3D passe merci Jack | |
| | | papydall
Nombre de messages : 7009 Age : 73 Localisation : Moknine (Tunisie) Entre la chaise et le clavier Date d'inscription : 03/03/2012
| Sujet: Re: Compilateur : version de travail disponible Mar 26 Nov 2013 - 23:36 | |
| - Code:
-
dim titre$ ' titre$ = "CECI EST UN TEST" + string$(80," ")+ "Veuillez patienter" titre$ = "CECI EST UN TEST" + " Veuillez patienter" print titre$
La ligne 2 provoque l’erreur suivante lors de la compilation (le code est sauvegardé sous le nom test3.bas) : test3.bas(86) error 67: Array not dimensioned, before '(' V_TITRE="CECI EST UN TEST"+*pf_STRINGd(80," ")+"Veuillez patienter" ^ Par contre la ligne 3 est accepté, donc STRING$() n’est pas (encore) reconnue. | |
| | | papydall
Nombre de messages : 7009 Age : 73 Localisation : Moknine (Tunisie) Entre la chaise et le clavier Date d'inscription : 03/03/2012
| Sujet: Re: Compilateur : version de travail disponible Mer 27 Nov 2013 - 1:12 | |
| Salut Jack. Salut tout le monde. Les premiers tests du compilateur dans l’état où il est, sont concluants. Avec l’avènement du compilateur, on doit prendre une autre habitude pour la conception d’un programme : j’ai nommé la phase de la compilation. En effet, il n’est plus suffisant de coder son programme et lancer son exécution via l’interpréteur, quitte à ce qu’il s’arrête s’il rencontre une erreur en cours d’exécution. Le compilateur a pour rôle de vérifier les déclarations et la syntaxe de l’intégralité du code pendant la phase de la compilation et ne fournit un code exe que si le code est correct du point de vue syntaxe. Si le compilateur détecte des erreurs, il les mentionne et il ne crée pas le fichier exe. Le concepteur du programme doit apporter les corrections nécessaires et relancer le compilateur autant de fois que nécessaire jusqu‘à ce qu’il n’y ait plus d’erreur. Toutefois le compilateur est incapable de détecter tous les types d’erreurs (de logique principalement). Ces erreurs se manifesteront en cours de l’exécution : on peut, par exemple obtenir des résultats non conformes à ce que l’on s’attend ou pire encore on peut assister à un plantage ! (c’est la responsabilité du concepteur) La phase de compilation pourrait être assez longue, notamment si le programme est complexe. Je constate que (dans l’état actuel du compilateur) si le code comporte des erreurs, le compilateur nous avertit par message que la compilation n’a pas aboutit et qu’il faille consulter le fichier error.txt qu’il a crée dans le répertoire de travail pour prendre connaissance de ces erreurs. Sur ce point, je pense qu’il soit plus avantageux que ce fichier error.txt s’ouvre automatiquement dans une fenêtre pour être consulté par le concepteur du programme, plutôt que d’être enregistré sur disque. Ca fait gagner du temps. Autre chose, on ne souhaite pas toujours créer un exécutable sur disque mais une simple exécution en mémoire (surtout en phase d’essai d’un bout de code ou d’un test quelconque). Alors, si on dispose d’un choix (options ou icones) COMPILE ou COMPILE & RUN ou MAKE ou BUILD ou que sais-je encore ? Jack, rien ne presse, prends ton temps et nous savons tous que tu n’en dispose pas d’assez de temps. On peut toujours faire nos programmes avec l’interpréteur (qui est devenu un adulte !) et nous familiariser avec le bébé compilateur ! | |
| | | jean_debord
Nombre de messages : 1250 Age : 69 Localisation : Limoges Date d'inscription : 21/09/2008
| Sujet: Re: Compilateur : version de travail disponible Mer 27 Nov 2013 - 9:47 | |
| - papydall a écrit:
test3.bas(86) error 67: Array not dimensioned, before '(' V_TITRE="CECI EST UN TEST"+*pf_STRINGd(80," ")+"Veuillez patienter"
J'ai récupéré le code FreeBasic test3.bas et remplacé *pf_STRINGd(80," ") par la fonction FreeBasic string$(80, " "). Ensuite j'ai passé (par glisser-déposer) ce fichier test3.bas au programme COMPILER.exe qui se trouve dans le répertoire du compilateur. La compilation se lance automatiquement et on obtient bien test3.exe | |
| | | jean_debord
Nombre de messages : 1250 Age : 69 Localisation : Limoges Date d'inscription : 21/09/2008
| Sujet: Re: Compilateur : version de travail disponible Mer 27 Nov 2013 - 10:56 | |
| Voici le programme test3.bas modifié qu'il faut passer à COMPILER.exe - Code:
-
#include"MemoryModule.bi" #include"incfile.bi" IncFile(DLLdata,"panoramic.dll") #lang "fblite" option gosub #include once"windows.bi" dim shared _handl as HWND dim shared _library as HMEMORYMODULE _library = MemoryLoadLibrary(DLLdata) dim shared pc_init as sub stdcall _ (byval operand1 as handle) pc_init=MemoryGetProcAddress(_library,"pc_init") dim shared pc_close as sub pc_close=MemoryGetProcAddress(_library,"pc_close") DIM SHARED V_TITRE AS STRING dim shared pc_print_string as sub stdcall _ (byval P1 as string) pc_print_string=MemoryGetProcAddress(_library,"pc_print_string") declare function WinMain _ (byval _hInstance as HINSTANCE,_ byval _hPrevInstance as HINSTANCE,_ byval _szCmdLine as string,_ byval _iCmdShow as integer)as integer end WinMain(GetModuleHandle(null),null,Command(),SW_NORMAL) function WndProc _ (byval _hWnd as HWND,_ byval _wMsg as UINT,_ byval _wParam as WPARAM,_ byval _lParam as LPARAM)as LRESULT function=0 select case(_wMsg) case WM_CREATE exit function case WM_DESTROY pc_close() sleep 200 MemoryFreeLibrary(_library) PostQuitMessage(0) exit function end select function=DefWindowProc(_hWnd,_wMsg,_wParam,_lParam) end function function WinMain (byval _hInstance as HINSTANCE,_ byval _hPrevInstance as HINSTANCE,_ byval _szCmdLine as string,_ byval _iCmdShow as integer)as integer dim _wMsg as MSG dim _wcls as WNDCLASS dim _hWnd as HWND function=0 with _wcls .style=CS_HREDRAW or CS_VREDRAW .lpfnWndProc=@WndProc .cbClsExtra=0 .cbWndExtra=0 .hInstance=_hInstance .hIcon=LoadIcon(NULL,IDI_APPLICATION) .hCursor=LoadCursor(NULL,IDC_ARROW) .hbrBackground=GetStockObject(WHITE_BRUSH) .lpszMenuName=NULL .lpszClassName=@"HelloWin" end with if(RegisterClass(@_wcls)=FALSE)then MessageBox(null,"Failed to register _wcls","Error",MB_ICONERROR) exit function end if _hWnd = CreateWindowEx(0,_ @"HelloWin",_ "PANORAMIC",_ WS_OVERLAPPEDWINDOW,_ 10,_ 10,_ 200,_ 100,_ NULL,_ NULL,_ _hInstance,_ NULL) _handl=_hWnd UpdateWindow(_hWnd) pc_init(_hWnd) sleep 100 '------------------------------------------------------------------------------- ' SOURCE '------------------------------------------------------------------------------- V_TITRE="CECI EST UN TEST"+string$(80," ")+"Veuillez patienter" V_TITRE="CECI EST UN TEST"+" Veuillez patienter" pc_print_string(V_TITRE) _end: while(GetMessage(@_wMsg,NULL,0,0)<>FALSE) TranslateMessage(@_wMsg) DispatchMessage(@_wMsg) wend function=_wMsg.wParam end function
Il faut faire une copie de sauvegarde de ce fichier car il sera détruit après action de COMPILER.exe Attention : le fichier COMPILER.exe disparaît quand on ferme le "COMPILER_EDITOR". Il faut donc lancer ce dernier, compiler un programme quelconque pour forcer la création de COMPILER.exe, puis laisser le COMPILER_EDITOR ouvert. | |
| | | Jack Admin
Nombre de messages : 2386 Date d'inscription : 28/05/2007
| Sujet: Re: Compilateur : version de travail disponible Mer 27 Nov 2013 - 14:09 | |
| Je vois que ce compilateur vous intéresse. Merci à tous pour vos premières remarques. - Francis_mr a écrit:
- même si je dois reprendre mes programmes car j'ai souvent utilisé des Labels.
Il n'y a aucun problème sur les labels, tu peux les utiliser avec le compilateur. - mindstorm a écrit:
- vivement que la 3D passe
Tu peux compiler des sources utilisant la 3D. Le seul problème que j'ai trouvé est lors de la réinstallation d'une texture. @papydall et jean-debord: Il y a effectivement un bug pour la fonction STRING$ qui n'est pas reconnue. Ce bug sera corrigé pour la prochaine version. L'idée d'une option donnant le choix entre "compilation" et "compilation avec exécution" me plait bien. - pan59 a écrit:
- L'un d'entre vous pourrait-il me dire pourquoi le code suivant ne se compile pas !!
à la ligne 121 de ton source, il y a une variable non définie par un DIM: sens_traduction_texte$La compilation n'est donc pas possible, car une compilation ne passe que si il n'y a aucune erreur dans le source (même dans des lignes qui ne seront pas exécutées). Par contre, le compilateur devrait s'arrêter or sa fenêtre reste visible... _________________ username : panoramic@jack-panoramic password : panoramic123 | |
| | | Yannick
Nombre de messages : 8611 Age : 53 Localisation : Bretagne Date d'inscription : 15/02/2010
| Sujet: re Mer 27 Nov 2013 - 14:43 | |
| | |
| | | papydall
Nombre de messages : 7009 Age : 73 Localisation : Moknine (Tunisie) Entre la chaise et le clavier Date d'inscription : 03/03/2012
| Sujet: Re: Compilateur : version de travail disponible Mer 27 Nov 2013 - 16:21 | |
| Un bug( ?) selon moi (on en a beaucoup discuté sur le Forum) a été corrigé dans le compilateur mais pas dans l’interpréteur. Toujours selon moi, le code suivant ne doit pas afficher le mot hello, or l’exécution du code en interprété affiche bien le texte, tandis qu’en compilé, il n’y a pas d’affichage, ce qui très juste. - Code:
-
dim i,n n = 1 for i = 5 to n print "hello" next i message "terminé"
Freebasic teste la condition de sortie de la boucle FOR …NEXT AVANT l’entrée dans la boucle, tandis que Panoramic, exécute une première fois la boucle PUIS il teste la condition de sortie. J’ai toujours pensé que la boucle FOR …NEXT est une boucle du type WHILE (qui peut ne pas être exécutée du tout) et non du type REPEAT (qui est exécutée au moins une fois). C’est peut-être un détail mais un détail qui a son importance : le savoir ne sera que bénéfique ! | |
| | | jean_debord
Nombre de messages : 1250 Age : 69 Localisation : Limoges Date d'inscription : 21/09/2008
| Sujet: Re: Compilateur : version de travail disponible Mer 27 Nov 2013 - 17:16 | |
| Voici une version légèrement modifiée du programme de Papydall, dans laquelle j'ai ajouté quelques lignes de FreeBasic (signalées par des commentaires) : - Code:
-
#include"MemoryModule.bi" #include"incfile.bi" IncFile(DLLdata,"panoramic.dll") #lang "fblite" option gosub #include once"windows.bi" dim shared _handl as HWND dim shared _library as HMEMORYMODULE _library = MemoryLoadLibrary(DLLdata) dim shared pc_init as sub stdcall _ (byval operand1 as handle) pc_init=MemoryGetProcAddress(_library,"pc_init") dim shared pc_close as sub pc_close=MemoryGetProcAddress(_library,"pc_close") DIM SHARED V_TITRE AS STRING dim shared pc_print_string as sub stdcall _ (byval P1 as string) pc_print_string=MemoryGetProcAddress(_library,"pc_print_string")
' ----------- FreeBasic ----------
function Titre(byval i as integer) as string dim as string s s = str(i) : if i < 10 then s = " " + s s = s + " : CECI EST UN TEST " + string(i, "*") s = s + " Veuillez patienter" Titre = s end function
' --------------------------------
declare function WinMain _ (byval _hInstance as HINSTANCE,_ byval _hPrevInstance as HINSTANCE,_ byval _szCmdLine as string,_ byval _iCmdShow as integer)as integer end WinMain(GetModuleHandle(null),null,Command(),SW_NORMAL) function WndProc _ (byval _hWnd as HWND,_ byval _wMsg as UINT,_ byval _wParam as WPARAM,_ byval _lParam as LPARAM)as LRESULT function=0 select case(_wMsg) case WM_CREATE exit function case WM_DESTROY pc_close() sleep 200 MemoryFreeLibrary(_library) PostQuitMessage(0) exit function end select function=DefWindowProc(_hWnd,_wMsg,_wParam,_lParam) end function function WinMain (byval _hInstance as HINSTANCE,_ byval _hPrevInstance as HINSTANCE,_ byval _szCmdLine as string,_ byval _iCmdShow as integer)as integer dim _wMsg as MSG dim _wcls as WNDCLASS dim _hWnd as HWND function=0 with _wcls .style=CS_HREDRAW or CS_VREDRAW .lpfnWndProc=@WndProc .cbClsExtra=0 .cbWndExtra=0 .hInstance=_hInstance .hIcon=LoadIcon(NULL,IDI_APPLICATION) .hCursor=LoadCursor(NULL,IDC_ARROW) .hbrBackground=GetStockObject(WHITE_BRUSH) .lpszMenuName=NULL .lpszClassName=@"HelloWin" end with if(RegisterClass(@_wcls)=FALSE)then MessageBox(null,"Failed to register _wcls","Error",MB_ICONERROR) exit function end if _hWnd = CreateWindowEx(0,_ @"HelloWin",_ "PANORAMIC",_ WS_OVERLAPPEDWINDOW,_ 10,_ 10,_ 200,_ 100,_ NULL,_ NULL,_ _hInstance,_ NULL) _handl=_hWnd UpdateWindow(_hWnd) pc_init(_hWnd) sleep 100 '------------------------------------------------------------------------------- ' SOURCE '-------------------------------------------------------------------------------
' ------------ FreeBasic ------------
for i as integer = 1 to 32 V_TITRE = Titre(i) pc_print_string(V_TITRE) next i
' -----------------------------------
_end: while(GetMessage(@_wMsg,NULL,0,0)<>FALSE) TranslateMessage(@_wMsg) DispatchMessage(@_wMsg) wend function=_wMsg.wParam end function
A compiler avec COMPILER.exe (n'oubliez pas de faire une copie de sauvegarde !) | |
| | | papydall
Nombre de messages : 7009 Age : 73 Localisation : Moknine (Tunisie) Entre la chaise et le clavier Date d'inscription : 03/03/2012
| Sujet: Re: Compilateur : version de travail disponible Mer 27 Nov 2013 - 17:35 | |
| Salut jean_debord Comment dois-je m’y prendre pour compiler avec COMPILER.exe ? Je lance COMPILER.exe, une FORM s’affiche à l’écran et puis que dois-je faire ? J’ai collé le code dans ce FORM mais rien ne s’est passé. Voulant essayer de compiler avec COMPILER EDITOR, j’obtiens le message : Cannot open file WINDOWS.BI | |
| | | jean_debord
Nombre de messages : 1250 Age : 69 Localisation : Limoges Date d'inscription : 21/09/2008
| Sujet: Re: Compilateur : version de travail disponible Mer 27 Nov 2013 - 17:42 | |
| Pour moi, je déplace directement l'icône du fichier BAS sur celle de COMPILER.exe, avec la souris.
| |
| | | Contenu sponsorisé
| Sujet: Re: Compilateur : version de travail disponible | |
| |
| | | | Compilateur : version de travail disponible | |
|
Sujets similaires | |
|
| Permission de ce forum: | Vous ne pouvez pas répondre aux sujets dans ce forum
| |
| |
| |