PureBasic - форум

Информация о пользователе

Привет, Гость! Войдите или зарегистрируйтесь.


Вы здесь » PureBasic - форум » OffTop » PureBasic 6.00


PureBasic 6.00

Сообщений 1 страница 30 из 69

1

https://www.purebasic.fr/english/viewto … mp;t=77272
Теперь PB может транслировать код не только в асссемблер, но и в Си.
Весь список изменений.

Код:
- Added: Apple M1 support !
- Added: Raspberry support (32-bit and 64-bit) !
- Added: a new C backend compiler for all PureBasic versions
- Added: #PB_Compiler_Backend, #PB_Backend_C and #PB_Backend_Asm compiler constants
- Added: #PB_Compiler_64Bit and #PB_Compiler_32Bit compiler constants
- Added: #PB_Compiler_Optimizer which is set to #True if the optimizer is enabled
- Added: support for Windows 11, OS X 11 and 12 for OSVersion()
- Added: /OPTIMIZER, -z, --optimizer flag to the commandline, and a 'Use code optimizer' checkbox in IDE 'Compiler Options' to turn on C optimizations
- Added: auto DPI support for Menu and ToolBar library (Windows)
- Added: WebGadget() support for GTK3 on linux
- Added: CreateShader(), CreateShaderMaterial(), MaterialShaderAutoParameter(), MaterialShaderParameter(), MaterialShaderTexture()
- Added: optional parameter to MeshFace() to create a quad
- Added: optional force vector to WorldGravity()
- Added: optional position mode to ApplyEntityForce()
- Added: GetEntityMesh(), CreateCubicTexture(), CreateAnimatedMaterial()
- Added: new mode to CreateDataMesh(): #PB_Mesh_DiagonalShortestLength, #PB_Mesh_DiagonalClosestNormal, #PB_Mesh_DiagonalAlternate, #PB_Mesh_DiagonalRegular1, #PB_Mesh_DiagonalRegular2
- Added: new structures: Vector3, Vector4
- Added: predefined shaders: #PB_Material_ColorShader, #PB_Material_PerpixelShader, #PB_Material_BumpShader, #PB_Material_SkyShader, #PB_Material_WaterShader, #PB_Material_WaterShaderRTT, #PB_Material_OceanShader, #PB_Material_PointSpriteSphereShader
- Added: new modes for SetMaterialAttribute(): #PB_Material_PointSprite, #PB_Material_DepthBias
- Added: new optional 'Color' parameter to CreateMaterial()
- Added: new optional 'SpecularColor' parameter to MaterialShininess()
- Added: new optional 'v' and 'w' parameter to MeshVertexTextureCoordinate()
- Added: new optional 'Lod' parameter to CreateCamera()
- Added: new modes for AddMaterialLayer(): #PB_Material_ModulateX2, #PB_Material_ModulateX4, #PB_Material_AddSigned, #PB_Material_Substract, #PB_Material_BlendDiffuseAlpha, #PB_Material_BlendCurrentAlpha
- Added: New contextual constant display for AutoComplete in IDE (Fr34k)
- Added: 3 new triggers for custom tools in IDE: 'OpenFile - Non-PB binary file', 'OpenFile - Non-PB text file', 'OpenFile - with specific extension' (HeX0R101)
- Added: New 'Replace' shortcut (CTRL+H) which opens the find dialog with replace enabled in IDE (ChrisRfr)

- Updated: SetMaterialColor() can now use several colortypes at once using '|'
- Updated: fasm, polink, polib and porc to lastest versions (Windows)
- Updated: Movie library on OS X to support modern OS X version
- Updated: Mouse library on Windows to use RawInput instead of DirectX to support HighDPI mouse
- Updated: SQLite to 3.38.2
- Updated: zlib to 1.12.12
- Updated: libpq (PostgreSQL) to 14.2

- Changed: renamed structures PB_MeshFace -> MeshFace and PB_MeshVertex -> MeshVertex
- Changed: the name of the /EXE commandline flag to /OUTPUT to be more coherent (still work for backcompatibilty but not documented anymore)
- Changed: the short version of /CONSTANT from '-o' to '-co' as '-o' is now used for /OUTPUT
- Changed: the way the map elements are created when using passive syntax, to be more consistent
- Changed: the default subsystem for screen/sprite is now OpenGL on Windows for more consistency. DirectX9 is still available as a subsystem.
- Changed: enabled backface culling for sprite OpenGL subsystem to be faster and be in line with DirectX9/11
- Changed: InitNetwork() is no more needed to use network functions (deprecated)

- Removed: x86 version of PureBasic for OS X as it's no more supported since OS X Catalina (Minimum supported OS X is now 10.10 - released in 2014).
- Removed: the 'Help' library on Linux
- Removed: Nvidia CG support for OGRE as it's no more supported by Nvidia since a while
- Removed: ToolBarStandardButton() as it doesn't support high DPI 

0

2

Немного потестировал эту версию. :)
Транслятор в Си дает хороший прирост скорости выполнения программы. :)  Для теста взял код вычисления числа PI.
Вычисление 20 тысяч знаков после запятой выполняется примерно в 2 раза быстрее чем при трансляции в асм. http://pure-basic.narod.ru/forum_files/PI_C.zip
А вот скорость компиляции не небольшая, точнее ее сильно тормозит антивирус. Такое впечатление что он усилено сканирует создаваемый исполняемый файл и ищет угрозы. При трансляции в асм такого обычно не было.

0

3

Имхо, версия 6 идёт в сторону Си, хотя идеология Pb изначально была в виде чистого и компактного кода, удобной надстройкой над fasm'ом с удобным ide, а Си уже не догнать - слишком далеко ушёл.
Скорость обеспечивается алгоритмами, а не оптимизацией кода. Число пи в maple до миллионного знака вычисляется за доли секунды, есть экспорт в библиотеки для подключения на Си. Версия 6 не компилирует модальные окна из ресурсов, что-то сломали..

Отредактировано bizdon (01.08.2021 20:25:21)

0

4

bizdon написал(а):

Число пи в maple до миллионного знака вычисляется за доли секунды, есть экспорт в библиотеки для подключения на Си

spigot побыстрее считает.

0

5

bizdon написал(а):

Имхо, версия 6 идёт в сторону Си, хотя идёология Pb изначально была в виде чистого и компактного кода, удобной надстройкой над fasm'ом

Проблема асма в том что он платформозависим. Даже в пределах одного процессора Intel, есть большая разница между асмом x86 и x64.
Про ARM и другие процессоры и говорить нечего. Трансляция в Си позволяет уйти от различий процессора переложив это с транслятора PB на компилятор Си. Фред об этом писал https://www.purebasic.fr/blog/?p=480

bizdon написал(а):

Скорость обеспечивается алгоритмами, а не оптимизацией кода.

Если скомпилировать один и тот же PB код, транслятором в асм и транслятором в Си, последний вариант работает быстрее. Пример я выкладывал PureBasic 6.00

bizdon написал(а):

Версия 6 не компилирует модальные окна из ресурсов, что-то сломали

Она пока на стадии альфы. Посмотрим на релиз.

0

6

bizdon написал(а):

Имхо, версия 6 идёт в сторону Си

Я бы сказал, что идёт в сторону FreeBasic, который как раз кросс-компилятор для gcc.

0

7

если ориентируется на Си, то хорошо бы сделано, о чем просили - возможность объявления массивов, как в Си.

0

8

egons написал(а):

если ориентируется на Си, то хорошо бы сделано, о чем просили - возможность объявления массивов, как в Си.

А что, по вашему, не так с массивами сейчас?

Надеюсь код заставит улыбнуться

Код:
; массив целых 10 на 10 на 10
Structure LLL
  ll.i[10]
EndStructure
Structure MMM
  mm.LLL[10]
EndStructure
Structure NNN
  nn.MMM[10]
EndStructure  

Define M_3_10.NNN
Define *p_Int.Integer

M_3_10\nn[0]\mm[0]\ll[0] = 0
M_3_10\nn[9]\mm[9]\ll[9] = 999

Debug M_3_10\nn[0]\mm[0]\ll[0]
Debug M_3_10\nn[9]\mm[9]\ll[9]

; и вишека на торте
Debug SizeOf(M_3_10)/SizeOf(Integer)

*p_Int = @M_3_10
Debug *p_Int\i
*p_Int = *p_Int + SizeOf(M_3_10) - SizeOf(Integer)
Debug *p_Int\i

Я долго не подозревал, что в PB таки есть типизированные указатели.
Пока Пётр не ткнул меня в то, что всё реализовано через структуры. ( в том числе для базовых типов )
Почему то я сам не сразу обратил на это внимание.

Отредактировано useful (02.08.2021 21:26:50)

0

9

useful написал(а):

А что, по вашему, не так с массивами сейчас?

код на Си/Борман Паскаль:

Код:
    pindex: array[0..23] of byte = {plane index: 4 points = 1 plane}
     (0,3,1,2,0,5,4,1,0,6,2,4,6,3,2,7,3,5,1,7,4,7,6,5);
Код:
short lx[8]={1,1,1,1,-1,-1,-1,-1};
short ly[8]={1,1,-1,-1,1,1,-1,-1};
short lz[8]={1,-1,1,-1,1,-1,1,-1};

Код здесь:

Код:
  Restore pindex_
 For i=0 To 23
   Read.b pindex(i)
 Next i

pindex_:
Data.b 0,3,1,2,0,5,4,1,0,6,2,4,6,3,2,7,3,5,1,7,4,7,6,5

0

10

Код:
DataSection
pindex_:
Data.b 0,3,1,2,0,5,4,1,0,6,2,4,6,3,2,7,3,5,1,7,4,7,6,5
EndDataSection

Structure PIND
  pindex.b[24]
EndStructure
Define *p_pindex.PIND
*p_pindex = ?pindex_
Debug *p_pindex\pindex[ 0] ;0
Debug *p_pindex\pindex[23] ;5

0

11

о-о-о-о, в области указателей я неосилятор xD

0

12

Код Си можно получить или оно просто компилирует сразу в исполняемый не показывая промежуточного результата?

0

13

Как то так...

Код:
Debug 1
; IDE Options = PureBasic 6.00 Alpha 4 (Windows - x64)
; EnableThread
; EnableXP
Код:
// 
// PureBasic 6.00 Alpha 4 - C Backend (Windows - x64) generated code
// 
// (c) 2021 Fantaisie Software
// 
// The header must remain intact for Re-Assembly
// 
// :System
// 
#pragma warning(disable: 4024)
// 
typedef long long quad;
typedef quad integer;
#define PB_INFINITY (1.0 / 0.0)
#define PB_NEG_INFINITY (-1.0 / 0.0)
typedef struct pb_array { void *a; } pb_array;
typedef struct pb_array2 { void *a; integer b[2]; } pb_array2;
typedef struct pb_array3 { void *a; integer b[3]; } pb_array3;
typedef struct pb_array4 { void *a; integer b[4]; } pb_array4;
typedef struct pb_array5 { void *a; integer b[5]; } pb_array5;
typedef struct pb_array6 { void *a; integer b[6]; } pb_array6;
typedef struct pb_array7 { void *a; integer b[7]; } pb_array7;
typedef struct pb_array8 { void *a; integer b[8]; } pb_array8;
typedef struct pb_array9 { void *a; integer b[9]; } pb_array9;
typedef struct pb_listitem { void *a; void *b; void *c;} pb_listitem;
typedef struct pb_list { void *a; pb_listitem *b; } pb_list;
typedef struct pb_mapitem { void *a; void *b; void *c;} pb_mapitem;
typedef struct pb_pbmap { pb_mapitem *a; } pb_pbmap;
typedef struct pb_map { pb_pbmap *a; } pb_map;
static integer s_s[]={0, -1};
#define M_SYSFUNCTION(a) a __stdcall
#define M_PBFUNCTION(a) a __stdcall
#define M_CDECL
typedef void TCHAR;
static integer SYS_BankerRound(double i) { return i >= 0 ? i+0.5 : i-0.5; }
integer __stdcall ExitProcess(integer);
integer __stdcall HeapCreate(integer,integer,integer);
integer __stdcall HeapDestroy(integer);
integer __stdcall GetModuleHandleW(integer);
// 
static char *tls;
int PB_ExitCode=0;
integer PB_MemoryBase=0;
integer PB_Instance=0;
// 
// 
// 
// 
void SYS_Quit();
int PB_DEBUGGER_LineNumber=-1;
int PB_DEBUGGER_IncludedFiles=0;
char *PB_DEBUGGER_FileName=0;
// 

integer ms_s[]={0,-1};
// 
// 
// 
char PB_OpenGLSubsystem=0;
int PB_Compiler_Unicode=1;
int PB_Compiler_Thread=0;
int PB_Compiler_Purifier=0;
int PB_Compiler_Debugger=0;
int PB_Compiler_DPIAware=0;
int PB_Compiler_XPSkins=0;
int PB_ExecutableType=0;
// 
void PB_EndFunctions() {
}
// 
int __stdcall WinMain(void *instance, void *prevInstance, void *cmdLine, int cmdShow) {
PB_Instance = GetModuleHandleW(0);
PB_MemoryBase = HeapCreate(0,4096,0);
// Debug 1
SYS_Quit();
}

void SYS_Quit() {
PB_EndFunctions();
HeapDestroy(PB_MemoryBase);
ExitProcess(PB_ExitCode);
}

0

14

Код:
EnableExplicit
Define ans.s
OpenConsole()
PrintN("Си")
ans = Input()
CloseConsole()

c:\Sys\PB6A4\Compilers>pbcompilerc /CONSOLE /COMMENTED d.pb

Код:
// 
// PureBasic 6.00 Alpha 4 - C Backend (Windows - x64) generated code
// 
// (c) 2021 Fantaisie Software
// 
// The header must remain intact for Re-Assembly
// 
// Console
// :System
// 
#pragma warning(disable: 4024)
// 
typedef long long quad;
typedef quad integer;
#define PB_INFINITY (1.0 / 0.0)
#define PB_NEG_INFINITY (-1.0 / 0.0)
typedef struct pb_array { void *a; } pb_array;
typedef struct pb_array2 { void *a; integer b[2]; } pb_array2;
typedef struct pb_array3 { void *a; integer b[3]; } pb_array3;
typedef struct pb_array4 { void *a; integer b[4]; } pb_array4;
typedef struct pb_array5 { void *a; integer b[5]; } pb_array5;
typedef struct pb_array6 { void *a; integer b[6]; } pb_array6;
typedef struct pb_array7 { void *a; integer b[7]; } pb_array7;
typedef struct pb_array8 { void *a; integer b[8]; } pb_array8;
typedef struct pb_array9 { void *a; integer b[9]; } pb_array9;
typedef struct pb_listitem { void *a; void *b; void *c;} pb_listitem;
typedef struct pb_list { void *a; pb_listitem *b; } pb_list;
typedef struct pb_mapitem { void *a; void *b; void *c;} pb_mapitem;
typedef struct pb_pbmap { pb_mapitem *a; } pb_pbmap;
typedef struct pb_map { pb_pbmap *a; } pb_map;
static integer s_s[]={0, -1};
#define M_SYSFUNCTION(a) a __stdcall
#define M_PBFUNCTION(a) a __stdcall
#define M_CDECL
typedef void TCHAR;
static integer SYS_BankerRound(double i) { return i >= 0 ? i+0.5 : i-0.5; }
integer __stdcall ExitProcess(integer);
integer __stdcall HeapCreate(integer,integer,integer);
integer __stdcall HeapDestroy(integer);
integer __stdcall GetModuleHandleW(integer);
// 
integer PB_CloseConsole();
typedef void* (*pbv_Input)(int);
extern pbv_Input PB_Input;
integer PB_OpenConsole();
typedef integer (*pbv_PrintN)(void*);
extern pbv_PrintN PB_PrintN;
static char *tls;
int PB_ExitCode=0;
integer PB_MemoryBase=0;
integer PB_Instance=0;
// 
// 
// 
// 
void SYS_Quit();
M_SYSFUNCTION(void) SYS_AllocateString4(TCHAR **String, int PreviousPosition);
extern void *PB_StringBase;
extern integer PB_StringBasePosition;
M_SYSFUNCTION(void) SYS_InitString(void);
M_SYSFUNCTION(void) SYS_FreeStrings(void);
// 
M_SYSFUNCTION(void) SYS_PushStringBasePosition(void);
M_SYSFUNCTION(integer) SYS_PopStringBasePosition(void);
M_SYSFUNCTION(integer) SYS_PopStringBasePositionUpdate(void);
M_SYSFUNCTION(void *) SYS_PopStringBasePositionValue(void);
M_SYSFUNCTION(void *) SYS_PopStringBasePositionValueNoUpdate(void);
M_SYSFUNCTION(integer) SYS_GetStringBasePosition(void);
M_SYSFUNCTION(void) SYS_SetStringBasePosition(integer Position);
M_SYSFUNCTION(integer) SYS_StringBasePositionNoPop(void);
M_SYSFUNCTION(char *) SYS_GetStringBase(void);
int PB_DEBUGGER_LineNumber=-1;
int PB_DEBUGGER_IncludedFiles=0;
char *PB_DEBUGGER_FileName=0;
// 
static unsigned short _S1[]={1057,1080,0};
void *PB_NullString=0;

integer ms_s[]={0,-1};
void* v_ans=0;
// 
// 
// 
char PB_OpenGLSubsystem=0;
int PB_Compiler_Unicode=1;
int PB_Compiler_Thread=0;
int PB_Compiler_Purifier=0;
int PB_Compiler_Debugger=0;
int PB_Compiler_DPIAware=0;
int PB_Compiler_XPSkins=0;
int PB_ExecutableType=1;
// 
void PB_EndFunctions() {
}
// 
int pb_main(int argc, char* argv[]) {
PB_Instance = GetModuleHandleW(0);
PB_MemoryBase = HeapCreate(0,4096,0);
SYS_InitString();
// EnableExplicit
// Define ans.s;
// OpenConsole()
integer rr0=PB_OpenConsole();
// PrintN("")
integer rr1=PB_PrintN(_S1);
// ans = Input()
SYS_PushStringBasePosition();
SYS_PushStringBasePosition();
PB_Input(SYS_PopStringBasePosition());
SYS_AllocateString4(&v_ans,SYS_PopStringBasePosition());
// CloseConsole()
integer rr2=PB_CloseConsole();
SYS_Quit();
}

void SYS_Quit() {
PB_EndFunctions();
HeapDestroy(PB_MemoryBase);
ExitProcess(PB_ExitCode);
}

0

15

Через ком-строку сделал в AkelPad, а как сделать в PureBasic? То есть я уже выбрал компилятор по описанию на оффоруме, но есть ли способ задать параметр /COMMENTED в GUI-настройках компилятора? Там есть только ком-строка для уже скомпилированного приложения, а для компилятора похоже нет. Но может я просто не знаю, может в каком то конфиге можно указать? Или сделать это через "Инструменты"?

0

16

есть же инструмент для предоставления кода в asm, ну, то есть теперь в Си:

код

; FileName: AsmTools.pb
; Author:   void
; Compiler: PB531 (Windows only)
; Ver:      001
;
;  Запускать как Tools из IDE с параметром "%FILE" (ручной запуск, без условий)
;
;  по мотивам: http://www.purebasic.fr/english/viewtop … mp;t=30864
;  Отличается:
;  1) Путь к компилятору берет из переменной среды (правильно работает с портабельными версиями)
;  2) Использует все доступные флаги компиляции (Unicode, ThreadSafe, итд), никто это не учитывал.
;  3) ASM файл кладет рядом с исходником, с именем исходника + ".asm"
;  4) Временный бинарник кладет во временную папку, и удаляет, по окончании работы.
;  Известные проблемы:
;  1) Нет кросс-платформенности (надо допиливать ключи компилятора, мне лень)
;*********************************
EnableExplicit

Define compiler$ = GetEnvironmentVariable("PB_TOOL_Compiler")
If Not (Len(compiler$) And FileSize(compiler$) > 0)
  MessageRequester("ERROR!!!", "Run only as <PB_Tools>")
  End
EndIf

Define srcFile$ = ProgramParameter(0)   
If Not (Len(srcFile$) > 0 And FileSize(srcFile$) > 0)   
  MessageRequester("ERROR!!!", "Not found source file: " + srcFile$)
  End
EndIf

Define options$ = #DQUOTE$ + srcFile$ + #DQUOTE$ + " /COMMENTED"
If Val(GetEnvironmentVariable("PB_TOOL_Debugger"))
  options$ + " /DEBUGGER"
EndIf
If Val(GetEnvironmentVariable("PB_TOOL_Unicode"))
  options$ + " /UNICODE"
EndIf
If Val(GetEnvironmentVariable("PB_TOOL_Thread"))
  options$ + " /THREAD"
EndIf
If Val(GetEnvironmentVariable("PB_TOOL_XPSkin"))
  options$ + " /XP"
EndIf
If Val(GetEnvironmentVariable("PB_TOOL_OnError"))
  options$ + " /LINENUMBERING"
EndIf
If Len(GetEnvironmentVariable("PB_TOOL_SubSystem"))
  options$ + " /SUBSYSTEM " + #DQUOTE$ + GetEnvironmentVariable("PB_TOOL_SubSystem") + #DQUOTE$
EndIf
Define tmpBin$ = GetTemporaryDirectory() + "~tmpcompile"
options$ + " /EXE " + #DQUOTE$ + tmpBin$ + #DQUOTE$

;ищем недостающие настройки (выходной формат) в конце файла
Define tmpStr$
Define srcFile = ReadFile(#PB_Any, srcFile$)
Define format = ReadStringFormat(srcFile)
While Not Eof(srcFile)
  tmpStr$ = ReadString(srcFile, format)
  If Left(tmpStr$,21) = "; ExecutableFormat = "
    tmpStr$ = LCase(Trim(Mid(tmpStr$,22)))
    Select tmpStr$
      Case "console" 
        options$ + " /CONSOLE"
      Case "shared dll"
        options$ + " /DLL"
    EndSelect
    Break
  EndIf
Wend 
CloseFile(srcFile) 

Define srcPath$ = GetPathPart(srcFile$)
Define asmFile$ = srcPath$ +"PureBasic.asm"
Define trgName$ = srcPath$ + GetFilePart(srcFile$) + ".asm"

DeleteFile(asmFile$, #PB_FileSystem_Force)
DeleteFile(trgName$, #PB_FileSystem_Force)

;MessageRequester("Compiler options:", options$) ;For Debug

RunProgram(compiler$, options$, srcPath$, #PB_Program_Hide|#PB_Program_Wait)
Delay(500)
DeleteFile(tmpBin$, #PB_FileSystem_Force)

If Not (FileSize(asmFile$)>0)
  MessageRequester("ERROR!!!", "Not create ASM file: " + asmFile$ + #CRLF$ + "Compiler options: " + options$)
  End
EndIf

RenameFile(asmFile$, trgName$)

RunProgram("notepad", trgName$, srcPath$)
; IDE Options = PureBasic 5.61 (Windows - x86)
; CursorPosition = 92
; FirstLine = 61
; EnableXP
; Executable = asm.exe
; DisableDebugger
; EnableUnicode

кстати, есть ещё инструмент (вдруг кто-то не знает?) "pbOptimizer", который хорошо чистит код и уменьшает размер выходного exe.

Отредактировано bizdon (12.09.2021 07:16:42)

0

17

bizdon

pbOptimizer

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

Интересно, можно ли код Си компилировать сторонним компилятором, то есть например выложить в репозиторий Linux, чтобы он был собран? В коде есть строки "integer PB_FreeLibraries();" и таких полста, что говорит о наличии каких-то готовых объектов, которые используется в коде и без них не соберётся, а префикс "PB_" может указывать о принадлежности файлов к PureBasic, то есть фактически PureBasic транслирует код в Си только ради оптимизации, но ни разу не для возможности использовать отдельно от PureBasic.

Отредактировано AZJIO (12.09.2021 14:41:13)

0

18

AZJIO написал(а):

попробовал использовать, получил тот же код в оригинале

Вероятно имелось в виду что исключается неиспользуемый код в частности неиспользуемые процедуры. Если весь код используется, нечего оптимизировать.
Для Си в стороннем оптимизаторе нет необходимости, т. к. компилятор прекрасно оптимизирует. Здесь я показывал пример того во что компилируется код Что за ошибка?

AZJIO написал(а):

Интересно, можно ли код Си компилировать сторонним компилятором, то есть например выложить в репозиторий Linux, чтобы он был собран?

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

AZJIO написал(а):

то есть фактически PureBasic транслирует код в Си только ради оптимизации

Не только. Еще для поддержки новых платформ таких как Mac M1, малина и др. с ARM процессором. Также возможно появление версий для Windows ARM, (планшетов и нетбуков с виндой и ARM процессором).

0

19

AZJIO написал(а):

Интересно, можно ли код Си компилировать сторонним компилятором, то есть например выложить в репозиторий Linux, чтобы он был собран? В коде есть строки "integer PB_FreeLibraries();" и таких полста, что говорит о наличии каких-то готовых объектов, которые используется в коде и без них не соберётся, а префикс "PB_" может указывать о принадлежности файлов к PureBasic, то есть фактически PureBasic транслирует код в Си только ради оптимизации, но ни разу не для возможности использовать отдельно от PureBasi

Все процедуры самого PB - в файлах lib. По идее, подключив нужные библиотеки, скомпилировать можно.

0

20

pbOptimizer "сжимает" ( у меня:) выходной файл раза в 1,5-2 за счёт удаления мусора. Настройки там есть, примерно видно что оптимизируется.
http://i.prntscr.com/xXON7CDwRKuZbPmXekOmzw.png
https://disk.yandex.ru/d/BYzUVpbYECR0Mw
на старших версиях PB5.7х выходной exe получается как на версиях 4.хх. Если использовать чистый winapi, то, конечно, сжатия не будет.

0

21

https://www.purebasic.fr/english/viewto … 41#p577441
Теперь PB и для малины (и др. одноплатников с похожей конфигурацией). :)  :idea:

0

22

Пётр. RPi есть под руками? Поделишься впечатлениями? Фред пишет, что вообще собирал на RPi2.

0

23

Есть Raspberry PI Zero.
Пока не тестировал.

0

24

Попробовал версию под Мак М1, так как на нем работаю.
В общем все старые проекты компилируется и работают, за исключением тех проектов которые используют внешние библиотеки.
Есть пару проектов с использованием Chilkat PureBasic модулей - не работает.
Поставил версию для Мак 64 бит - все компилится и работает.

0

25

useful написал(а):

Пётр. RPi есть под руками? Поделишься впечатлениями?

Впечатления не очень... Причем даже не дошел до тестирования PB. Проблема в кривости линукса...
Сначала установил текущую версию ОС - 2021-10-30-raspios-bullseye-armhf.iso
Запустилась, работает. При старте подключил к сети. ОС захотела обновится... Обновилась, перезагрузка и зависание во время запуска... Как я понял из логов какая проблема с автологином пользователя pi.
Ладно, записал ОС заново на флешку. Опять тоже самое повторилось - перезагрузка и зависание.
Ладно, записал ОС заново на флешку. Запустил, но на сей раз при старте пропустил этап установки обновления. Перезагрузил, нормально запустилась. Установил PB. IDE запустилась, работает, но для компилирования нужно установить пакеты... Подключаю к сети и... прилетает обновление... После перезагрузки в логе пишет что-то при ошибку монтирования root раздела (или что-то подобное).
Ладно, качаю предыдущую версию ОС - 2021-05-07-raspios-buster-armhf.iso
Установилась, обновления ставить не просит. Уже хорошо, но нужно добавить возможность переключения раскладок клавиатуры. Делаю по инструкции https://www.prosto-comp.ru/2020/11/kak- … ry-pi.html
И после того как в окне "Обработчик раскладки клавиатуры" снимаю галку "Сохранить системные раскладки", ОС начинает сильно тормозить. Курсор двигается рывками. На клики реагирует с задержкой 10 - 20 минут! Перезагрузил и проблема не исчезла.
Такое впечатление проблема где-то в ядре, но как ее мог вызвать пользовательской процесс? В винде ни разу не было чтобы от обычного процесса зависала вся система.

dibor написал(а):

Есть пару проектов с использованием Chilkat PureBasic модулей - не работает.

Скачивали здесь? https://www.chilkatsoft.com/purebasic.asp
Там только один файл для MacOS - libchilkatPb-9_5_0.dylib и вероятно он для x86 или x64, а не для М1.
То есть дело не в PB, а в отсутствии Chilkat для M1.

0

26

Пётр написал(а):

То есть дело не в PB, а в отсутствии Chilkat для M1.

Тоже так думаю, значит и на Расбери Пай тоже не скомпилится т.к. либы для Linux x86 а не для ARM32 :(
Вот досада :(

0

27

Просто для информации https://www.purebasic.fr/english/viewtopic.php?t=78280
Но с командной строки компилятся успешно оба бэкенда.

p.s. И на форуме уже было сообщение, что в линуксах pbcompilerc нужно права на запуск установить.

Отредактировано useful (29.11.2021 10:48:10)

0

28

Запустил PB на малине. :)  Работает нормально. Компилятор, компилирует, отладчик отлаживает, а редактор - редактирует! :D
Несколько скринов запущенных программ.

Простая программа

http://a.radikal.ru/a41/2111/1a/11dd67f400ad.png

Растровая графика

http://c.radikal.ru/c28/2111/bb/4e020178086e.png

Векторная графика

http://c.radikal.ru/c27/2111/2a/674edb02d18f.png

Простой браузер

http://b.radikal.ru/b16/2111/00/0754a5fb022d.png

3D примеры компилируются, но тормозят. Не предназначена малина для 3D.

http://a.radikal.ru/a05/2111/ec/6fe61e954591.png

+1

29

dibor написал(а):

Есть пару проектов с использованием Chilkat PureBasic модулей - не работает.

Посмотрите здесь https://www.chilkatsoft.com/chilkatMacOSX.asp
Там есть библиотека для MacOS M1.

dibor написал(а):

Тоже так думаю, значит и на Расбери Пай тоже не скомпилится

Для малины архив Chilkat armhf C/C++ Libs for Linux (armv7l)

0

30

Пётр написал(а):

Для малины архив Chilkat armhf C/C++ Libs for Linux (armv7l)

Это проверенно или предположение???
Надо для Пурика.
Написал автору Chilkat - он выслал мне для М1 и для АРМ32 обновленные либсы.
Будет время, сегодня проверю.

0


Вы здесь » PureBasic - форум » OffTop » PureBasic 6.00