Du bist nicht angemeldet.

Stilllegung des Forums
Das Forum wurde am 05.06.2023 nach über 20 Jahren stillgelegt (weitere Informationen und ein kleiner Rückblick).
Registrierungen, Anmeldungen und Postings sind nicht mehr möglich. Öffentliche Inhalte sind weiterhin zugänglich.
Das Team von spieleprogrammierer.de bedankt sich bei der Community für die vielen schönen Jahre.
Wenn du eine deutschsprachige Spieleentwickler-Community suchst, schau doch mal im Discord und auf ZFX vorbei!

Werbeanzeige

LukasBanana

Alter Hase

  • »LukasBanana« ist der Autor dieses Themas

Beiträge: 1 097

Beruf: Shader Tools Programmer

  • Private Nachricht senden

11

04.07.2014, 13:34

LGPL ist für Bibliotheken denke ich sehr gut geeignet, weil die Nutzung dir nicht vorschreibt, was du mit deiner Software machst.
Nur wenn du die verwendete Bibiliothek erweiterst (z.B. Bug fixes oder Erweiterung des Funktionsumfangs einer Klasse), ist gewährleistet, dass die Modifikation nach wie vor unter der selben Lizenz steht.
Du kannst also ohne Bedenken diese Bibliothek in deine Software einbauen, auch statisch gelinkt.
Bei GPL ist das was anderes, aber dafür habe ich ja extra die LGPL genommen ;-)

David Scherfgen

Administrator

Beiträge: 10 382

Wohnort: Hildesheim

Beruf: Wissenschaftlicher Mitarbeiter

  • Private Nachricht senden

12

04.07.2014, 13:51

Dynamisch linken wäre auch ziemlich sinnlos ;)
Hast du mal den Assembler-Code angeschaut, ob es da einen Unterschied zu normalen Arrays gibt?

eXpl0it3r

Treue Seele

Beiträge: 386

Wohnort: Schweiz

Beruf: Professional Software Engineer

  • Private Nachricht senden

13

04.07.2014, 14:10

Du kannst also ohne Bedenken diese Bibliothek in deine Software einbauen, auch statisch gelinkt.
Das ist leider nach meinem Wissensstand falsch.

Zitat von »Wikipedia«

Ein Programm, das LGPL-Code zusammen mit eigenem proprietärem Code verwendet, muss so aufgebaut sein, dass jeder Endnutzer den quelloffenen LGPL-Code (oder modifizierte Versionen davon) in das endgültige Programm (selbstständig) linken kann.[1] Dies kann entweder durch dynamisches Linken geschehen (wo der LGPL-Code in einer dynamischen Bibliothek verwendet wird); dann kann der Endnutzer eine eigene dynamische Bibliothek (Linux-Jargon: Shared Object) des LGPL-Teils erstellen (beispielsweise aus einer modifizierten Version des LGPL-Codes) und nutzen. Oder es kann durch statisches Linken geschehen - dann bekommt ein Endnutzer typischerweise die Objektdateien (oder Quelltext) des proprietären Codes und die Sourcen des LGPL-Codes und kann diese zusammenlinken. (Quelle)


Aber wie gesagt, du hast nur eine Header Datei, von daher wird gar nie gelinkt. Doch der zweite Teil des Artikels steht dann wieder im Gegensatz zu dem was ich oben mit Eigen verlinkt hatte.
Allgemein bist du mit einer anderen Lizenz besser dran. ;)
Blog: https://dev.my-gate.net/
—————————————————————————
SFML: https://www.sfml-dev.org/
Thor: http://www.bromeon.ch/libraries/thor/
SFGUI: https://github.com/TankOs/SFGUI/

Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von »eXpl0it3r« (04.07.2014, 14:50)


LukasBanana

Alter Hase

  • »LukasBanana« ist der Autor dieses Themas

Beiträge: 1 097

Beruf: Shader Tools Programmer

  • Private Nachricht senden

14

04.07.2014, 14:40

Ok das klingt einleuchtend. Welche 'LGPL ähnliche' Lizenz wäre denn besser geeignet? Die BSD Lizenz?

@David: Ich schaue nachher mal nach und schreib dann was dazu.

Beiträge: 1 223

Wohnort: Deutschland Bayern

Beruf: Schüler

  • Private Nachricht senden

15

04.07.2014, 14:41

Zitat

dir nicht vorschreibt, was du mit deiner Software machst.

Sie schreibt mir zum Beispiel vor, dass ich nicht bedenkenlos statisch linken darf. Praktisch bedeutet statisch linken auch: Source rausrücken. Und das ist nicht das was ich mit der Software machen möchte. Außerdem muss jede Veränderung sofort wieder mit Quellcode veröffentlichen. Diese Beiden Einschränkungen machen LGPL für mich ziemlich unattraktiv. Wenn es geht, vermeide ich sie vollständig. Offene Softwarebibliotheken sind meiner Ansicht nach dafür da, um sie überall (bedenkenlos) verwenden zu können. Das ist bei der LGPL nicht gegeben. Deshalb ist LGPL meiner Meinung nach dafür ziemlich ungeeignet.
Und da ich hoffe, dass dir ziemlich wurscht ist, ob jemand zum Beispiel statisch linkt und ob man dass dann erneut linken kann...

EDIT:
Naja die die ich aufgezählt habe, sind meiner Ansicht nach gut geeignet.
BSD sagt kurz zusammengefasst: Man muss den Autor und Lizenz der Lib nennen. Die Unterschiede zwischen den Lizenzen die ich genannt habe, ist, soweit ich weiß, nicht besonders groß. Steht aber auch alles auf Wikipedia und co.

Dieser Beitrag wurde bereits 2 mal editiert, zuletzt von »Spiele Programmierer« (04.07.2014, 14:50)


LukasBanana

Alter Hase

  • »LukasBanana« ist der Autor dieses Themas

Beiträge: 1 097

Beruf: Shader Tools Programmer

  • Private Nachricht senden

16

04.07.2014, 14:56

So, die Lizenz habe ich jetzt zur BSD Lizenz geändert. Hoffe das kommt euch entgegen :-)

EDIT:
@David: In der Release Version (MSVC12) wird, für die multi_array Variante, nicht viel mehr Assembly erzeugt.
Hier der C++ Test:

C-/C++-Quelltext

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
// C array comparision
int A[2][3][4];
multi_array<int, 2, 3, 4> B;

A[1][2][3] = 5;
B[0][2][2] = 6;

for (size_t x = 0; x < 2; ++x)
{
    A[x][x][x] = (rand() % 10);
    B[x][x][x] = (rand() % 10);

    std::cout << A[x][x][x] << " ";
    std::cout << B[x][x][x] << " ";
}

Und hier die Assembler Ausgabe:

Quellcode

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
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
    // C array comparision
    int A[2][3][4];
    multi_array<int, 2, 3, 4> B;

    A[1][2][3] = 5;
    B[0][2][2] = 6;
00261311  lea         eax,[B]  
00261317  xor         edi,edi  
00261319  mov         dword ptr [ebp-108h],eax  
0026131F  xor         esi,esi  
00261321  lea         eax,[A]  
00261327  mov         dword ptr [ebp-10Ch],edi  
0026132D  mov         dword ptr [ebp-110h],esi  
00261333  mov         dword ptr [ebp-114h],eax  
00261339  lea         esp,[esp]  

    for (size_t x = 0; x < 2; ++x)
    {
        A[x][x][x] = (rand() % 10);
00261340  call        dword ptr ds:[2640E8h]  
00261346  cdq  
00261347  mov         ecx,0Ah  
0026134C  idiv        eax,ecx  
        B[x][x][x] = (rand() % 10);
0026134E  mov         edi,dword ptr ds:[2640E8h]  
00261354  mov         eax,edx  
00261356  mov         dword ptr [ebp-104h],eax  
        B[x][x][x] = (rand() % 10);
0026135C  call        edi  
0026135E  cdq  
0026135F  mov         ecx,0Ah  
00261364  idiv        eax,ecx  

        std::cout << A[x][x][x] << " ";
00261366  push        dword ptr [ebp-104h]  
0026136C  mov         ecx,dword ptr ds:[26405Ch]  
00261372  mov         edi,edx  
00261374  call        dword ptr ds:[264038h]  
0026137A  mov         edx,2641DCh  
0026137F  mov         ecx,eax  
00261381  call        std::operator<<<std::char_traits<char> > (0261E40h)  
        std::cout << B[x][x][x] << " ";
00261386  mov         ecx,dword ptr ds:[26405Ch]  
0026138C  push        edi  
0026138D  call        dword ptr ds:[264038h]  
00261393  mov         edx,2641DCh  
00261398  mov         ecx,eax  
0026139A  call        std::operator<<<std::char_traits<char> > (0261E40h)  
0026139F  mov         esi,dword ptr [ebp-110h]  
002613A5  mov         edi,dword ptr [ebp-10Ch]  
002613AB  add         esi,10h  
002613AE  add         dword ptr [ebp-114h],44h  
002613B5  add         edi,4  
002613B8  add         dword ptr [ebp-108h],30h  
002613BF  mov         dword ptr [ebp-110h],esi  
002613C5  mov         dword ptr [ebp-10Ch],edi  
002613CB  cmp         esi,20h  
002613CE  jb          main+60h (0261340h)  
    }

Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von »LukasBanana« (04.07.2014, 15:11)


Hello_Kitty!

unregistriert

17

04.07.2014, 15:10

Warum sollte jemand seinen Sourcecode nicht prinzipiell veröffentlichen wollen? Binaries sind doch keine hinnehmbare Distributionsform.

LukasBanana

Alter Hase

  • »LukasBanana« ist der Autor dieses Themas

Beiträge: 1 097

Beruf: Shader Tools Programmer

  • Private Nachricht senden

18

04.07.2014, 15:12

Binaries sind doch keine hinnehmbare Distributionsform.

Wenn ich ein Software Produkt verkaufen will, sind Binaries für mich die einzig sinnvolle Distributionsform.

David Scherfgen

Administrator

Beiträge: 10 382

Wohnort: Hildesheim

Beruf: Wissenschaftlicher Mitarbeiter

  • Private Nachricht senden

19

04.07.2014, 15:57

@LukasBanana:
Der Code ist nicht wirklich gut, da die beiden Arrays sich ins Gehege kommen können.
Mach mal so:

C-/C++-Quelltext

1
2
3
4
5
6
7
8
9
10
11
12
typedef int ClassicArray[10][10][10];
typedef multi_array<int, 10, 10, 10> LukasArray;

int Get(const ClassicArray& a, int x, int y, int z)
{
    return a[x][y][z];
}

int Get(const LukasArray& a, int x, int y, int z)
{
    return a[x][y][z];
}


Und dann würde ich gerne den Assembler-Code der beiden Funktionen sehen.
Achte drauf, dass sie nicht geinlined werden.

Beiträge: 1 223

Wohnort: Deutschland Bayern

Beruf: Schüler

  • Private Nachricht senden

20

04.07.2014, 16:01

__declspec(noinline)

Interessant fände ich eher realistische Situationen. Iterationen. Oder wie verhält Vektorisierung.

Werbeanzeige