首先,我看到了关于这两个的一些话题,但不是我的答案.
我在GNU/Linux上寻找一个好的FPC(Free Pascal Compiler)IDE.
有一些IDE像Lazarus和CodeTyphon.我需要建议选择其中之一.
我曾尝试过Lazarus,但所有的窗户都是分开的.它看起来很乱,没有趣味.
我想知道这两者有什么区别?
我想知道每个的优点/缺点.谢谢
在语言枪战基准http://benchmarksgame.alioth.debian.org/表明FPC程序使用约1 /第50次的存储器的,使用克++使用比较的方案.难道这些基准无意青睐FPC或者是难道真的是FPC是这要比G ++好?我一直认为这些基准测试是一系列不错的微基准测试,所以我对这些结果感到惊讶,因为50倍是相当重要的恕我直言.
参考文献:
http://benchmarksgame.alioth.debian.org/u32/pascal.php http://benchmarksgame.alioth.debian.org/u64q/pascal.html
编辑: 这变得更加有趣,因为这个页面声称pascal只使用了8KB的一些程序,这看起来非常低
让我们回到基础.坦率地说,我之前从未使用New和Dispose运作过.但是,在我阅读了Embarcadero技术网站上的New()文档和包含的示例以及New()的Delphi Basics解释之后,它在我脑海中留下了一些问题:
System.New()除了节省少量内存之外,使用而不是局部变量有什么好处?
常用代码示例New()或多或少如下:
var
pCustRec : ^TCustomer;
begin
New(pCustRec);
pCustRec^.Name := 'Her indoors';
pCustRec^.Age := 55;
Dispose(pCustRec);
end;
Run Code Online (Sandbox Code Playgroud)
在什么情况下上面的代码比下面的代码更合适?
var
CustRec : TCustomer;
begin
CustRec.Name := 'Her indoors';
CustRec.Age := 55;
end;
Run Code Online (Sandbox Code Playgroud) 在Delphi中,查看项目属性时有一个选项VersionInfo-> Language-> Locale ID.
我正在徘徊如何为Free Pascal下编译的程序设置这样的属性.
欢迎任何解决方案:命令行参数或预处理器指令,如{$key value}; 相当于德尔福.
谷歌对这些类型的搜索毫无用处,因为你得到了数亿个结果,绝对没有一个与特定问题有关.
问题很简单:
这是我试过的......
type
TMyObject = class
// ...
end;
TMyObjectClass = class of TMyObject
TMyObjectA = class(TMyObject)
// specifics here
end;
TMyObjectB =class(TMyObject)
// specifics here
end;
TMyComponent = class(TComponent)
private
FObjectType: TMyObjectClass;
published
property ObjectType: TMyObjectClass read FObjectType write FObjectType;
end;
Run Code Online (Sandbox Code Playgroud)
上面的代码编译得很好,但是Object Inspector根本没有显示ObjectType属性.
我的目标(如果您还没有猜到)是为了让我可以从特定基类中选择一个类后代,以使相同的组件以不同的方式运行.
我想这样做,以便组件不需要直接了解子类(它需要完全模块化).
让我说清楚一点:我不能使用Enum在子类类型之间进行选择,因为组件不能直接链接到子类类型(在这种特殊情况下根本不可能)
无论如何......提前谢谢!
任何人都可以帮我解决Delphi中一些裸骨,旧学校3D方法的例子吗?不使用openGL或firemonkey或任何外部库(vanilla canvas编码).我想要做的是能够围绕共同的原点旋转X个点.从我以往的记忆中,你从右边减去(在3d点上),使origo始终为0,0 - 然后执行计算,最后添加左/上像素偏移量以获得实际的屏幕位置.
我正在寻找的是一套小型的临时例程,ala:
使用这些功能,创建旧的"旋转三维立方体"(8分)应该相当容易.
还有,有没有找出可见的"面孔"的功能?如果我想要一个填充的矢量立方体,那么我想我需要提取可见区域(基于距离/重叠?),然后将其绘制为X个填充多边形?毫无疑问,这些必须按深度排序,以免出现问题.
例如:
欢迎任何帮助!
使用ToBytes方法(见下文)将AnsiString的硬类型转换替换为TBytes(字符串数组)后,Delphi报告没有内存泄漏 - 但是,如果将TBytes值传递给具有a的方法,则Free Pascal 2.6.2会显示泄漏类型的参数Pointer.
以下代码泄漏内存:
program project1;
{$mode delphi}
uses
SysUtils;
function ToBytes(const AValue: AnsiString): TBytes;
begin
SetLength(Result, Length(AValue)); // <-- leak (ine 10)
if Length(AValue) > 0 then
Move(AValue[1], Result[0], Length(AValue));
end;
procedure Send(P: Pointer);
begin
end;
begin
Send(ToBytes('test'));
SetHeapTraceOutput('heaptrace.log');
end.
Run Code Online (Sandbox Code Playgroud)
内存泄漏报告:
Call trace for block $001C5CC0 size 12 $00401586 TOBYTES, line 10
of project1.lpr $00401622 main, line 21 of project1.lpr
Run Code Online (Sandbox Code Playgroud)
如果我将Send方法更改为采用TBytes类型的参数,则内存泄漏将消失.
试图将Delphi库移植到Android.免费Pascal支持Android/ARM - 可以使用Windows的预构建编译器.但是,Android NDK现在也支持MIPS和x86.FPC支持者的状态如何?目前,我的项目或多或少与CPU无关 - 本机位是为所有四种支持的体系结构构建的.不想放手.
我不是在Pascal的完整Android开发周期之后 - 只是一个没有I/O的算法库.我尝试用p2c将其翻译成C语言,但译者对来源进行了扼流.
我是否应该尝试使用Linux为相关CPU构建交叉编译器,然后链接到NDK库?
编辑:我已经从Android分支的源代码构建了针对Intel/Linux的交叉编译器.它工作,除了你必须调用ppcross386编译,而不是fpc.看起来,后者忽略-Tlinux选项并调用Intel/Win32编译器.
EDIT2:对makefile和源进行少量更改,MIPS交叉编译器构建.但是,随着构建转移到跨CPU RTL,它几乎立即出错.
考虑一下代码:
procedure DoSmthSecret;
var
Seed: array[0..31] of Byte;
begin
// get random seed
..
// use the seed to do something secret
..
// erase the seed
FillChar(Seed, SizeOf(Seed), 0);
end;
Run Code Online (Sandbox Code Playgroud)
代码的问题是:FillChar是编译器内在的,并且编译器可能会"优化它".问题是C/C++编译器所知,请参阅SecureZeroMemory.现代Pascal编译器(Delphi,FPC)可以进行这样的优化,如果可以的话,它们是否提供了与SecureZeroMemory等效的?
我试图找出是否有办法做类似于Delphi的增强型RTTI功能.
据我所知,FPC不提供自Delphi 2010以来Delphi中出现的RTTI功能.但我想找到一些方法在运行时做一些技巧.
typinfo在FPC中使用单位我可以做以下事情:
getPropList来自typinfo单元;GetPropValue(...): Variant/ SetPropValue(...Value: Variant);MethodAddres;但我还没有办法做一些事情,比如:
更新:构造函数的问题很像方法一 - 我希望有一种方法可以传递不同的参数:
// concept of code
type
TClass = class of TObject;
TMyClass1 = class
public
constructor Create(Param1: Integer; Param2: string); override;
end;
TMyClass2 = class
public
constructor Create(ObjectParam: Object); override;
end;
TParams = array of Variant;
var
Classes: array of TClass
Instances: array of Object;
ParamArray: array of TParams; …Run Code Online (Sandbox Code Playgroud) fpc ×10
delphi ×6
freepascal ×5
pascal ×3
3d ×1
android ×1
android-ndk ×1
codetyphon ×1
comparison ×1
compiler-bug ×1
g++ ×1
graphics ×1
ide ×1
lazarus ×1
locale ×1
memory-leaks ×1
oop ×1
properties ×1
reference ×1
rtti ×1
runtime ×1