- -pv
スレッドの閲覧状況:
現在、- がスレを見ています。
これまでに合計 - 表示されました。
※PC・スマホの表示回数をカウントしてます。
※24時間表示がないスレのPVはリセットされます。

Lazarus と Free Pascal

※ID非表示スレ
1名無しさん@おーぷん:2015/12/09(水)12:38:51 ID:???
Lazarus Homepage
http://www.lazarus-ide.org/

Free Pascal - Advanced open source Pascal compiler for Pascal and Object Pascal - Home Page
http://www.freepascal.org/

>>1-10 その他の情報
701名無しさん@おーぷん :2018/05/17(木)14:52:07 ID:???
だから Terminated に排他処理が不要なのか

[fpc] Contents of /trunk/rtl/objpas/classes/classesh.inc
https://svn.freepascal.org/cgi-bin/viewvc.cgi/trunk/rtl/objpas/classes/classesh.inc?view=markup#l1682
> property Terminated: Boolean read FTerminated;
702名無しさん@おーぷん :2018/05/17(木)15:00:12 ID:???
言語によるみたいだ
ってことは、 FPC は Boolean 型について、特別な処理をしてくれること?

java - クラス AtomicBooleanについて。 - スタック・オーバーフロー
https://ja.stackoverflow.com/questions/35667/%E3%82%AF%E3%83%A9%E3%82%B9-atomicboolean%E3%81%AB%E3%81%A4%E3%81%84%E3%81%A6

Boolean変数をスレッドセーフに設定する方法について
https://social.msdn.microsoft.com/Forums/ja-JP/3f3fdf3e-e943-48c1-883e-efb5950a2388/boolean?forum=csharpgeneralja
703名無しさん@おーぷん :2018/05/17(木)15:07:21 ID:???
特別なことは何もしていない

[fpc] Contents of /trunk/rtl/unix/tthread.inc
https://svn.freepascal.org/cgi-bin/viewvc.cgi/trunk/rtl/unix/tthread.inc?view=markup#l252
procedure TThread.Terminate;
begin
FTerminated := True;
end;
704名無しさん@おーぷん :2018/05/17(木)15:38:37 ID:???
Delphiでは他のスレッドから Terminate を呼び出せる
中身がどうなってるかは不明

他のスレッドによる終了の確認 - RAD Studio
http://docwiki.embarcadero.com/RADStudio/Tokyo/ja/%E4%BB%96%E3%81%AE%E3%82%B9%E3%83%AC%E3%83%83%E3%83%89%E3%81%AB%E3%82%88%E3%82%8B%E7%B5%82%E4%BA%86%E3%81%AE%E7%A2%BA%E8%AA%8D
>他のスレッドからスレッドを終了させるには、Terminate メソッドを呼び出します。
705名無しさん@おーぷん :2018/05/17(木)15:48:03 ID:???
JavaとC#はネイティブコンパイラじゃないから参考にならないのかも
706名無しさん@おーぷん :2018/05/17(木)16:23:56 ID:???
Tips IA32(x86)命令一覧 Lから始まる命令 LOCK命令
http://softwaretechnique.jp/OS_Development/Tips/IA32_Instructions/LOCK.html
マルチプロセッサ環境では、LOCK#信号がアクティブである間
プロセッサが任意の共有メモリを独占的に使用できるように保証します
707名無しさん@おーぷん :2018/05/17(木)17:43:33 ID:???
Boolean型は複雑な処理ができないから、
Atomic なのかもしれない。
708名無しさん@おーぷん :2018/05/18(金)20:19:08 ID:???
Free Pascal - Online documentation
https://www.freepascal.org/docs.var
https://www.freepascal.org/docs/ClassChart3.pdf
709名無しさん@おーぷん :2018/05/19(土)12:03:36 ID:???
>>631
D&Dで開かないときは、 メニューバーにD&Dすれば開く
 InvalidateFileStateCache でキャッシュを無効化しないといけない

[lazarus] Contents of /trunk/ide/mainbar.pas
https://svn.freepascal.org/cgi-bin/viewvc.cgi/trunk/ide/mainbar.pas?root=lazarus&view=markup#l397

procedure TMainIDEBar.MainIDEBarDropFiles(Sender: TObject;
 const FileNames: array of String);
begin
 // the Drop event comes before the Application activate event
 // => invalidate file state
 InvalidateFileStateCache;
 LazarusIDE.DoDropFiles(Sender,FileNames);
end;
710名無しさん@おーぷん :2018/05/19(土)12:05:42 ID:???
んで、 ここの先頭に  InvalidateFileStateCache を入れれば
エディタ上への D&D も使える。

for i := 0 to High(FileNames) do
InvalidateFileStateCache(FileNames[i]);
の方が高率は良いかもしれない。

[lazarus] Contents of /trunk/ide/sourceeditor.pp
https://svn.freepascal.org/cgi-bin/viewvc.cgi/trunk/ide/sourceeditor.pp?root=lazarus&view=markup#l7915

procedure TSourceNotebook.SourceNotebookDropFiles(Sender: TObject;
 const FileNames: array of String);
begin
 FManager.ActiveSourceWindow := Self;
 LazarusIDE.DoDropFiles(Sender,Filenames,WindowID);
end;
711名無しさん@おーぷん :2018/05/19(土)12:11:35 ID:???
ソースエディタの上でマウスカーソルを動かすたびに、
アクティブなタブのファイル名.lfm/.dfm ファイルが存在するか探している。
(存在しない場合)
712名無しさん@おーぷん :2018/05/19(土)12:42:40 ID:???
フォーラムじゃ問題視していない人もいるけど、
これが出るのは空のファイルに限らないから、
新しくファイルを作成するか尋ねられた時に、「はい」を選んで保存すると、
そのファイルが消えてしまうから
713名無しさん@おーぷん :2018/05/19(土)12:45:12 ID:???
実行時パッケージでも対処可能

エディタのフォーム作成時に
>>710 の OnDropFiles イベントを置き換えればいい

エディタフォーム作成時はこれでわかる
SourceEditorManagerIntf.RegisterChangeEvent(semWindowCreate, @SourceWindowCreated);
714名無しさん@おーぷん :2018/05/19(土)13:48:06 ID:???
検索をもっと速くする方法

procedure TSearchProgressForm.OnAddMatch( で毎回
UpdateMatche を呼び出して これまでに一致した数を更新してるから、
たくさん一致すると遅くなる。

なので、
procedure TSearchProgressForm.UpdateProgress(FileName: string);
で更新すれば速くなる。

[lazarus] Contents of /trunk/ide/searchfrm.pas
https://svn.freepascal.org/cgi-bin/viewvc.cgi/trunk/ide/searchfrm.pas?root=lazarus&view=markup#l701

[lazarus] Contents of /trunk/ide/searchfrm.pas
https://svn.freepascal.org/cgi-bin/viewvc.cgi/trunk/ide/searchfrm.pas?root=lazarus&view=markup#l931
715名無しさん@おーぷん :2018/05/20(日)04:38:24 ID:???
コンパイル時のマクロがいっぱい増えてるけど、
パスは無いんか?

[fpc] Contents of /trunk/compiler/scanner.pas
https://svn.freepascal.org/cgi-bin/viewvc.cgi/trunk/compiler/scanner.pas?revision=38329&view=markup&sortby=file#l2435
716名無しさん@おーぷん :2018/05/21(月)18:36:47 ID:???
動的配列が色々サポート

Free Pascal - General - Feature announcement: Dynamic array extensions
http://free-pascal-general.1045716.n5.nabble.com/Feature-announcement-Dynamic-array-extensions-td5731410.html

Free Pascal - General - Dynamic Array, operator +
http://free-pascal-general.1045716.n5.nabble.com/Dynamic-Array-operator-td5731426.html
717名無しさん@おーぷん :2018/05/22(火)05:32:27 ID:???
ソースはこの辺

[fpc] Log of /trunk/compiler/ngtcon.pas
https://svn.freepascal.org/cgi-bin/viewvc.cgi/trunk/compiler/ngtcon.pas?sortby=file&view=log

[fpc] Revision 39041
https://svn.freepascal.org/cgi-bin/viewvc.cgi?view=revision&sortby=file&revision=39041

https://svn.freepascal.org/cgi-bin/viewvc.cgi/trunk/compiler/ngtcon.pas?revision=39041&view=co&pathrev=39041
718名無しさん@おーぷん :2018/05/23(水)19:45:29 ID:???
国別のダウンロード数
Windowsではロシア、ドイツ、ウクライナがトップ3
Linuxはブラジルがトップ

Lazarus - Browse Files at SourceForge.net
https://sourceforge.net/projects/lazarus/files/

Download Statistics: Lazarus Windows 32 bits
https://sourceforge.net/projects/lazarus/files/Lazarus%20Windows%2032%20bits/stats/map

Download Statistics: Lazarus Windows 64 bits
https://sourceforge.net/projects/lazarus/files/Lazarus%20Windows%2064%20bits/stats/map

Download Statistics: Lazarus Linux amd64 DEB
https://sourceforge.net/projects/lazarus/files/Lazarus%20Linux%20amd64%20DEB/stats/map
719名無しさん@おーぷん :2018/05/23(水)19:49:34 ID:???
Download Statistics: All Files
https://sourceforge.net/projects/lazarus/files/stats/map

SourceForge Support / Documentation / Download Stats API
https://sourceforge.net/p/forge/documentation/Download%20Stats%20API/
720名無しさん@おーぷん :2018/05/23(水)20:00:23 ID:???
2012年の国別ダウンロード数

https://sourceforge.net/projects/lazarus/files/stats/json?start_date=2017-01-01&end_date=2017-12-31&os_by_country=false
721名無しさん@おーぷん :2018/05/24(木)20:07:44 ID:???
Windowsでしか動かないけど

1. China 5,572
2. United States 5,012
3. Russia 4,336
4. Germany 3,351
5. Japan 3,243
6. India 2,888
7. Brazil 2,534
8. Mexico 2,493
9. Italy 1,752
10. Indonesia 1,666

Download Statistics: All Files
https://sourceforge.net/projects/sharpdevelop/files/stats/map

SharpDevelop - Wikipedia
https://ja.wikipedia.org/wiki/SharpDevelop
722名無しさん@おーぷん :2018/05/25(金)15:40:47 ID:???
>>277
pchararr32 に変更した時のスレがあった

0015845: XQueryKeymap function declaration (in xlib.pp) seems to be wrong - Free Pascal/Lazarus Bug Tracker
https://bugs.freepascal.org/view.php?id=15845

[fpc] Contents of /trunk/packages/x11/src/xlib.pp
https://svn.freepascal.org/cgi-bin/viewvc.cgi/trunk/packages/x11/src/xlib.pp?view=markup#l1604

[fpc] Contents of /trunk/packages/x11/src/xlib.pp
https://svn.freepascal.org/cgi-bin/viewvc.cgi/trunk/packages/x11/src/xlib.pp?view=markup#l1285

これでポインタになるのか?
type
chararr32 = array[0..31] of char;
pchararr32 = chararr32;
723名無しさん@おーぷん :2018/05/25(金)16:56:23 ID:???
FPCの方の文書は見つけられなかった

32バイトの静的配列はポインタで渡される
cdecl は関係ない

プログラムの制御(Delphi) - RAD Studio
http://docwiki.embarcadero.com/RADStudio/Berlin/ja/%E3%83%97%E3%83%AD%E3%82%B0%E3%83%A9%E3%83%A0%E3%81%AE%E5%88%B6%E5%BE%A1
>1 バイト、2 バイト、または 4 バイトの集合、レコード、静的配列は、
>8 ビット値、16 ビット値、32 ビット値として渡されます。
>これより大きい集合、レコード、静的配列の場合は、値への 32 ビット ポインタとして渡されます。
724名無しさん@おーぷん :2018/05/26(土)17:12:27 ID:???
pchararr32 = ^chararr32;
にすると呼び出し元のコードをポインタにしないといけない。

それが嫌なら
function XQueryKeymap(para1:PDisplay; para2:pchararr32):cint;cdecl;external libX11;

function XQueryKeymap(para1:PDisplay; var para2:chararr32):cint;cdecl;external libX11;
にすべき。
725名無しさん@おーぷん :2018/05/26(土)17:13:30 ID:???
もしかして、
pchararr32 = ^chararr32;
にしたつもりだったとか?

>Better always use pointer
って言ってるし

[fpc] Diff of /branches/fixes_2_4/packages/x11/src/xlib.pp
https://svn.freepascal.org/cgi-bin/viewvc.cgi/branches/fixes_2_4/packages/x11/src/xlib.pp?r1=13515&r2=16401&pathrev=16401
726名無しさん@おーぷん :2018/05/28(月)19:03:36 ID:???
\lazarus\ide\以下のユニットにアクセスするために、
自作unitをそこへ置いて、 他のideのunitのusesに追加したら、
普通にコンパイル・リンクされましたわ。
lazarus.iniのプロジェクトインスペクタに追加してもダメみたい。

unitの中身をインクルード指令 {$I フルパスファイル名} のみにして、
他に飛ばせるし、 いろいろできそうだ。
727名無しさん@おーぷん :2018/05/28(月)20:12:27 ID:???
あ、自作パッケージの出力先を ide の ppuファイルの出力先と同じにして、
Other unit files と インクルードファイル のパスを追加したら、
自作パッケージから ide 以下のunitにアクセスできましたわ。
728名無しさん@おーぷん :2018/05/28(月)20:23:05 ID:???
他の場所に出力すると、
ide のユニットを使っているユニットで、checksum が違うと出て再コンパイルして、
そのファイルが見つからないって出る。
729名無しさん@おーぷん :2018/05/28(月)20:32:42 ID:???
>>727 はしかも、 ide内部のユニットから
自作パッケージ内のユニットを使用可能にする。
730名無しさん@おーぷん :2018/05/28(月)20:34:42 ID:???
もともと ide内部から、インストールされているパッケージのユニットにはアクセス可能なのか
731名無しさん@おーぷん :2018/05/30(水)03:08:03 ID:???
自作パッケージで
Application.OnException を設定して、
例外を MessagesView に表示したほうがいいと思う。
732名無しさん@おーぷん :2018/05/30(水)23:57:39 ID:???
Simulating the Windows API's FindWindow function with Kylix
http://edn.embarcadero.com/article/27395
733名無しさん@おーぷん :2018/05/31(木)04:19:30 ID:???
https://wandbox.org/nojs/fpc-3.0.2/permlink/428n9YwIXIC41qWv

uses Types, SysUtils;

var
T: QWOrd;
begin
T := GetTickCount64;
S l e ep(1);
WriteLn(GetTickCount64 - T);
end.

program output:

1
734名無しさん@おーぷん :2018/05/31(木)04:23:38 ID:???
Windowsでは 0 か 15 やった
timeBeginPeriod(1) してても。
735名無しさん@おーぷん :2018/05/31(木)06:02:08 ID:???
パッケージのコンパイルは並列に実行されて速いんだけど、
IDEのコンパイルは時間がかかる。

Speedup Lazarus's recompiling
http://forum.lazarus-ide.org/index.php/topic,41348.msg286876.html#msg286876

Lazarus Packages - Free Pascal wiki
http://wiki.freepascal.org/Lazarus_Packages#Parallel_Compilation
736名無しさん@おーぷん :2018/06/02(土)22:22:59 ID:???
RTLEventWaitFor(AEvent) で待機中のスレッドに対し、
別スレッドから RTLEventDestroy(AEvent) を実行すると、
どうなるかは未定義。

WaitForSingleObject question for Events
https://social.msdn.microsoft.com/Forums/en-US/37a0a4bf-6b0b-470f-9ce0-1c8f89fe6b55/waitforsingleobject-question-for-events?forum=vcgeneral
>The fine manual says: "If this handle is closed while the wait is still pending, the function's behavior is undefined." In other words, don't do that.
737名無しさん@おーぷん :2018/06/13(水)17:52:02 ID:???
[fpc] Contents of /trunk/rtl/inc/heap.inc
https://svn.freepascal.org/cgi-bin/viewvc.cgi/trunk/rtl/inc/heap.inc?view=markup#l1330

SysTryResizeMem が False を返した時は


[fpc] Contents of /trunk/rtl/inc/heap.inc
https://svn.freepascal.org/cgi-bin/viewvc.cgi/trunk/rtl/inc/heap.inc?view=markup#l1460

で再確保とコピーが発生する
738名無しさん@おーぷん :2018/06/13(水)17:55:33 ID:???
説明

[fpc] Contents of /trunk/rtl/inc/heap.inc
https://svn.freepascal.org/cgi-bin/viewvc.cgi/trunk/rtl/inc/heap.inc?view=markup#l113
739名無しさん@おーぷん :2018/06/13(水)18:09:06 ID:???
チャンクサイズの下位4bitがフラグに使われていて、
これをクリアしたり、取り出したりするコードが頻繁に出てくる。
740名無しさん@おーぷん :2018/06/13(水)18:12:37 ID:???

{ fix p to point to the heaprecord }
chunksize := pmemchunk_fixed(p-sizeof(tmemchunk_fixed_hdr))^.size;

32bitの場合、 4byte戻して、 pmemchunk_fixed でキャストする理由がわからない。

memchunk_fixed(p-sizeof(tmemchunk_fixed_hdr))^.next_fixed

memchunk_fixed(p-sizeof(tmemchunk_fixed_hdr))^.prev_fixed
は既にデータが始まってる場所だと思うのだが?
741名無しさん@おーぷん :2018/06/13(水)18:29:38 ID:???
ここも良くわからないな
1024+8 の heaprecord とは何だ?

blocksize = 16; { at least size of freerecord }
blockshift = 4; { shr value for blocksize=2^blockshift}
maxblocksize = 512+blocksize; { 1024+8 needed for heaprecord }
742名無しさん@おーぷん :2018/06/13(水)18:45:42 ID:???
fixedsize は 大きく確保したメモリを
同じサイズで小分けして使うタイプのメモリ
743名無しさん@おーぷん :2018/06/13(水)19:19:46 ID:???
要求サイズが524バイト以下の時に fixedchunk になる

525バイト以上なら サイズいろいろchunk になる

サイズいろいろchunk が ReallocMem(P, 263) 以下だと、
ポインタが変わってコピーが発生する
744名無しさん@おーぷん :2018/06/14(木)01:16:11 ID:???
inline関数内が空だと、何も挿入されないんだね
745名無しさん@おーぷん :2018/06/14(木)01:51:09 ID:???
{$I %FILE%}と{$I %LINE%} を渡せば Assertもどきを作れる
746名無しさん@おーぷん :2018/06/14(木)02:16:27 ID:???
ReallocMem でコピーが発生するのは、ポインタが変わった時だけみたいだが

だから、 SetLength で一つずつ増やしていっても、毎回コピーが発生するとは
限らないはず。
747名無しさん@おーぷん :2018/06/15(金)04:21:54 ID:???
出力がちょっと安定しないが、 262127+1 の方が 262128+1 より遅いんよ

https://wandbox.org/nojs/fpc-3.0.2/permlink/TCWYnuz5PaJGV4em

uses
 Types, SysUtils;

function Test(Len: Integer): Int64;
var
 A: TStringDynArray;
 I: Integer;
 T: Int64;
begin
 Result := 0;
 for I := 1 to 1000 do
 begin
  A := nil;
  SetLength(A, Len);

  T := GetTickCount64;
  SetLength(A, Len + 1);
  Inc(Result, GetTickCount64 - T);
 end;
end;

begin
 WriteLn(Test(65519));
 WriteLn(Test(65520));
 WriteLn(Test(262127));
 WriteLn(Test(262128));
end.

1
0
4
2
748名無しさん@おーぷん :2018/06/15(金)04:24:30 ID:???
自前のPCだと100回に減らしてこう

2
0
268
0
749名無しさん@おーぷん :2018/06/15(金)04:26:35 ID:???
WandBoxのサーバがほとんど1ms以内に終わらせているかもしれんね
さすがに600倍の性能差のPCは無いやろ
750名無しさん@おーぷん :2018/06/15(金)04:32:17 ID:???
1ms未満だと、1000回実行する意味なかったわ
偶然またぐかもしれないってだけで。

自宅PCの場合、2〜3ms掛かってるってことだ

新着レスの表示 | ここまで読んだ

名前: mail:





Lazarus と Free Pascal
CRITEO