Re: [fpc-pascal] cocoa programming without objective-pascal mode

2014-11-03 Thread Bee
On Mon, Nov 3, 2014 at 11:00 AM, Dmitry Boyarintsev 
skalogryz.li...@gmail.com wrote:


 Just don't bother yourself with cocoa api don't go too specific.


I don't, hence this thread. :) If want to use a TObject, I want the exact
same properties, exact same behavior, exact same declaration of TObject on
everywhere else. At least, 90% of them, with 10% is special particularly to
where TObject platform is defined. I don't care if beneath it acts as
NSObject on OSX, or WinObject on Windows, or QTObject on QT, or whatever.


On Mon, Nov 3, 2014 at 1:45 PM, Sven Barth pascaldra...@googlemail.com
wrote:


 That's because FireMonkey abstracts all those APIs for you. The LCL by
 Lazarus has the same target: no matter whether you are on Win32/64, GTK,
 Qt, Carbon, Cocoa, whatever you get the same set of APIs (the API provided
 by the LCL) and you don't (normally; bugs not withstanding) need to care
 about platform differences.


FireMonkey isn't native UI. It's custom drawn UI controls (based on
OpenGL?). That's why I left Delphi. I don't like non-native UI, except for
games.


 Even if you'd directly access Cocoa using Object Pascal means you would
 not be compatible with Object Pascal codes on other platforms. The same is
 true for Delphi by the way. They interface with Cocoa code using COM
 interfaces which are not used on the Windows platform (for this purpose).
 Two different API sets!


Why would that be? A pascal TStringList can be a NSStringArray on Cocoa, or
regular list of strings on Windows. I don't care as long as my pascal
TStringList behaves consistently on any platforms. What I do care is if I
can use TStringList on Windows, but I'm forced to use NSStringList on OSX
for the same purpose and function. I don't want that. That's why I don't
like objective-pascal dialect. *btw, the class names are just pseudo class,
you should get the point* :)


 Also using Objective Pascal does in no way mean that you can not use
 Object Pascal. You can mix them as you want and you can use Objective
 Pascal classes in Object Pascal code and vice versa (otherwise this feature
 would be rather useless).


Oh, really? I didn't know that. So, I could use objective-pascal mode on
Windows too? Including its protocol and messaging mechanism?


 So please use Objective Pascal. It will save you from quite some trouble
 to implement the APIs manually (afterall there is a reason why we
 implemented Objective Pascal).


Of course there is a reason for objective pascal existence. But should I
use it? I don't know. Unless you can give me guarantee that
objective-pascal dialect can be used on Windows and Linux as well. But if
it does, why do we bother to have objective pascal at the first place? :D

FYI, just as food for thought... I'm now considering to use RemObject's
Oxygene (another pascal variant) as it behaves almost like the way I want.
I could use the same consistent syntax on any platforms. Although I have to
know special cases where API on particular OS is very much different from
other OSes. But it's pretty rare cases. If you want to know the concept of
the language, please refer to this site:
http://www.elementswiki.com/en/Oxygene_Language

But honestly, I'd love to use FreePascal. :)

Regards,

-- 
-Bee-
___
fpc-pascal maillist  -  fpc-pascal@lists.freepascal.org
http://lists.freepascal.org/cgi-bin/mailman/listinfo/fpc-pascal

Re: [fpc-pascal] cocoa programming without objective-pascal mode

2014-11-03 Thread Jonas Maebe
On 03/11/14 09:02, Bee wrote:
 If want to use a TObject, I want the
 exact same properties, exact same behavior, exact same declaration of
 TObject on everywhere else.

Then you are in luck, because that is exactly how it is today. (*)

 I don't care if beneath it acts as NSObject on OSX, or WinObject on
 Windows, or QTObject on QT, or whatever.

It will never act like any of those, beneath or otherwise.

As other people have said, use Lazarus if you want to abstract away the
APIs of GUI frameworks. If you want to directly program using Cocoa, Qt,
KDE, Win32, NativeNT or Metro, then you won't ever be able to directly
pass a TStringList to an API call in FPC on any platform.

Or...

 use RemObject's Oxygene

It doesn't do everything you summed up in your mail either, but it's
possible that it does offer transparent bridging in the specific case of
Objective-C classes (or at least for supported Cocoa classes) and e.g.
COM objects. I doubt you'll be able to directly pass Oxygene classes to
Qt API calls though.


Jonas

(*) except on the JVM platform, where it is not technically possible to
declare your own class hierarchy.
___
fpc-pascal maillist  -  fpc-pascal@lists.freepascal.org
http://lists.freepascal.org/cgi-bin/mailman/listinfo/fpc-pascal


Re: [fpc-pascal] Effective memory allocation

2014-11-03 Thread Bruno Krayenbuhl
My results :

_Ptr:=GetMem(1)18 mus, 824 ns / GetMem
_Ptr:=GetMem(1) + FillChar(_Ptr^,1,0)); 81 ms / GetMem + 
FillChar

var
  ArInt:array of int32;
.
SetLength(ArInt, 1 shr 2); 81 ms / SetLength

All timings are variable within [time, time+8%] on repeated runs as is 
generally the case for system timings.

SetLength 0's (Internally calls FillChar) the array ArInt so to do a identical 
comparison you need to add the FillChar to the GetMem if it is your intention 
to 0 the array before using it.

You have to compare things that do the same thing in the end.

Tested on XP Pro Win32 Sp3
Intel Core 2CPU
6400 #@ 2.13GHz
2.05 GHr., 1.00 Gb RAM
___
fpc-pascal maillist  -  fpc-pascal@lists.freepascal.org
http://lists.freepascal.org/cgi-bin/mailman/listinfo/fpc-pascal

Re: [fpc-pascal] cocoa programming without objective-pascal mode

2014-11-03 Thread Sven Barth
Am 03.11.2014 09:02 schrieb Bee bee.ogra...@gmail.com:
 On Mon, Nov 3, 2014 at 1:45 PM, Sven Barth pascaldra...@googlemail.com
wrote:


 That's because FireMonkey abstracts all those APIs for you. The LCL by
Lazarus has the same target: no matter whether you are on Win32/64, GTK,
Qt, Carbon, Cocoa, whatever you get the same set of APIs (the API provided
by the LCL) and you don't (normally; bugs not withstanding) need to care
about platform differences.


 FireMonkey isn't native UI. It's custom drawn UI controls (based on
OpenGL?). That's why I left Delphi. I don't like non-native UI, except for
games.

The non-native UI aspect isn't what's the point here. It uses
nevertheless the native API (WinAPI on Windows, Cocoa on Mac OS X, etc.)
and presents you with an abstract API that allows you to use the same code
(more or less) on all supported platforms. It's the same for the LCL, but
here with native controls (mostly).


 Even if you'd directly access Cocoa using Object Pascal means you would
not be compatible with Object Pascal codes on other platforms. The same is
true for Delphi by the way. They interface with Cocoa code using COM
interfaces which are not used on the Windows platform (for this purpose).
Two different API sets!


 Why would that be? A pascal TStringList can be a NSStringArray on Cocoa,
or regular list of strings on Windows. I don't care as long as my pascal
TStringList behaves consistently on any platforms. What I do care is if I
can use TStringList on Windows, but I'm forced to use NSStringList on OSX
for the same purpose and function. I don't want that. That's why I don't
like objective-pascal dialect. *btw, the class names are just pseudo class,
you should get the point* :)

No, a TStringList can't be a NSStringArray, because they have different
functionality. The same is true for whatever other platform specific class
or functionality you pick. And somewhere there must be tee abstraction if
one wants to share code. In case of Objective Pascal you need to have
Object Pascal code that uses the Objective Pascal classes.


 Also using Objective Pascal does in no way mean that you can not use
Object Pascal. You can mix them as you want and you can use Objective
Pascal classes in Object Pascal code and vice versa (otherwise this feature
would be rather useless).


 Oh, really? I didn't know that. So, I could use objective-pascal mode on
Windows too? Including its protocol and messaging mechanism?

In theory it would be possible, because there exists a criss platform port
of the Objective C runtime, but that is currently not supported, because
noone had the need for it yet.
But that's not what I meant. The point is: on Mac OS X the classes provided
by Objective Pascal are the system API, on Windows it's the WinAPI. They
are different API and it's not the compiler's job to abstract this, but of
the runtime library (for low-level functionality) or the GUI library (in
our case LCL or fpGui).
If you access the Objective C API manually you are basically interfacing a
C API which you wrap using Object Pascal objects. So why not instead have
these Object Pascal classes wrap the Objective Pascal classes? Because then
you don't have to worry to correctly interface with the Objective C
runtime, because the compiler does the job for you. Otherwise you need to
do all this manually which is error prone.


 So please use Objective Pascal. It will save you from quite some trouble
to implement the APIs manually (afterall there is a reason why we
implemented Objective Pascal).


 Of course there is a reason for objective pascal existence. But should I
use it? I don't know. Unless you can give me guarantee that
objective-pascal dialect can be used on Windows and Linux as well. But if
it does, why do we bother to have objective pascal at the first place? :D

I'm not giving you a guarantee, because that's not the purpose of the
Objective Pascal dialect. It's purpose is to efficiently interface with Mac
OS X's API like Delphi Interfaces were originally to efficiently interface
with COM classes on Windows.


 FYI, just as food for thought... I'm now considering to use RemObject's
Oxygene (another pascal variant) as it behaves almost like the way I want.
I could use the same consistent syntax on any platforms. Although I have to
know special cases where API on particular OS is very much different from
other OSes. But it's pretty rare cases. If you want to know the concept of
the language, please refer to this site:
http://www.elementswiki.com/en/Oxygene_Language

You may have the same language, but you nevertheless need to write
different code, because .Net, Objective C and Java all have different
restrictions and the base types are named differently.

Regards,
Sven
___
fpc-pascal maillist  -  fpc-pascal@lists.freepascal.org
http://lists.freepascal.org/cgi-bin/mailman/listinfo/fpc-pascal

Re: [fpc-pascal] Effective memory allocation

2014-11-03 Thread Sven Barth
Am 03.11.2014 08:32 schrieb Nico Erfurth n...@erfurth.eu:

 On 02.11.14 15:05, Xiangrong Fang wrote:
  Sorry, the results in previous mail was mis-labeled.
 
  ​
  The result is:
 
  Using SetLength:
 
  Alloc:  9.40781697E-0001
  Clear:  2.13420202E-0001
 
  Using GetMemory:
 
  Alloc:  2.8100E-0005
  Clear:  7.74975504E-0001


 SetLength will already clear the array before returning it, so the time
 for SetLength is approximate time(GetMem) + time(Clear).

Ah, right. I forgot that :)

Regards,
Sven
___
fpc-pascal maillist  -  fpc-pascal@lists.freepascal.org
http://lists.freepascal.org/cgi-bin/mailman/listinfo/fpc-pascal

Re: [fpc-pascal] cocoa programming without objective-pascal mode

2014-11-03 Thread Bee
Alright, guys. Thank you for all the informations and discussion. I got
many things to learn from all of your responses. They're all valuable to
me. I haven't yet decided which way I will choose, whether to stay with
FPC, move to Oxygene, or completely migrate to Swift. I'm still on testing
phase right now before jump into Apple platform next year. Wish me luck! :)

-- 
-Bee-
___
fpc-pascal maillist  -  fpc-pascal@lists.freepascal.org
http://lists.freepascal.org/cgi-bin/mailman/listinfo/fpc-pascal

Re: [fpc-pascal] Effective memory allocation

2014-11-03 Thread Adriaan van Os

Xiangrong Fang wrote:

Hi All,

I am programming a Bloom Filter and need a high-performance way to 


On what platform are you doing this ?

Regards,

Adriaan van Os

___
fpc-pascal maillist  -  fpc-pascal@lists.freepascal.org
http://lists.freepascal.org/cgi-bin/mailman/listinfo/fpc-pascal


Re: [fpc-pascal] cocoa programming without objective-pascal mode

2014-11-03 Thread C Western

On 02/11/14 18:38, Felipe Monteiro de Carvalho wrote:

The Cocoa interface is advancing fast. I am even running out of known
bugs, so other people testing would be appreciated.


I have some interest in this.

Is http://wiki.lazarus.freepascal.org/Cocoa_Interface reasonably up to 
date as to how to use it (assuming trunk lazarus + fpc)?


http://wiki.lazarus.freepascal.org/Roadmap#Status_of_features_on_each_widgetset

suggests lots of stuff not implemented - should more of this be 
yellow/green?


Colin
___
fpc-pascal maillist  -  fpc-pascal@lists.freepascal.org
http://lists.freepascal.org/cgi-bin/mailman/listinfo/fpc-pascal


Re: [fpc-pascal] Effective memory allocation

2014-11-03 Thread Xiangrong Fang
2014-11-03 23:40 GMT+08:00 Adriaan van Os f...@microbizz.nl:

 Xiangrong Fang wrote:

 Hi All,

 I am programming a Bloom Filter and need a high-performance way to


 On what platform are you doing this ?


​I am programming on Linux, but it will be used on both Windows and Linux,
Windows is the primary target.​
___
fpc-pascal maillist  -  fpc-pascal@lists.freepascal.org
http://lists.freepascal.org/cgi-bin/mailman/listinfo/fpc-pascal

Re: [fpc-pascal] Effective memory allocation

2014-11-03 Thread Nico Erfurth
Hi,

 Hi All,
 
 I am programming a Bloom Filter and need a high-performance way to
 
 On what platform are you doing this ?
 
 ​I am programming on Linux, but it will be used on both Windows and
 Linux, Windows is the primary target.​


Well, the first thing you should ask yourself is Do I REALLY need such
a large bloom filter. Everything larger than the last level cache will
seriously harm your performance as you are going to trigger a lot of
cache and TLB misses. In general you should target for typical L1-Cache
sizes (16-32KByte) or if REALLY necessary L2-Cache-sizes
(256KByte-32MByte). Everything above that will make the performance go
down rapidly, especially in hashing-application the CPU can't prefetch
data properly as the access-patterns are erratic.

Nico
___
fpc-pascal maillist  -  fpc-pascal@lists.freepascal.org
http://lists.freepascal.org/cgi-bin/mailman/listinfo/fpc-pascal

Re: [fpc-pascal] Effective memory allocation

2014-11-03 Thread Xiangrong Fang
2014-11-04 6:35 GMT+08:00 Nico Erfurth n...@erfurth.eu:


 Well, the first thing you should ask yourself is Do I REALLY need such
 a large bloom filter. Everything larger than the last level cache will
 seriously harm your performance as you are going to trigger a lot of
 cache and TLB misses. In general you should target for typical L1-Cache
 sizes (16-32KByte) or if REALLY necessary L2-Cache-sizes
 (256KByte-32MByte). Everything above that will make the performance go
 down rapidly, especially in hashing-application the CPU can't prefetch
 data properly as the access-patterns are erratic.


​I didn't think of things like cache and TLB misses. Because I try to use
BloomFilter and HASH to avoid repeated calculation ​and/or lookups which
are time consuming. So, I don't think it will harm performance, unless
bloom filter lookup is slower than the calculation, am I right?

Thanks!
___
fpc-pascal maillist  -  fpc-pascal@lists.freepascal.org
http://lists.freepascal.org/cgi-bin/mailman/listinfo/fpc-pascal