Dlaczego oprogramowanie korzysta z nazwy Win32?

31

Jeśli oprogramowanie / biblioteka ma pewne wsparcie dla platformy Windows, prawie zawsze nazywają swoje katalogi i zmienne jako win32. Jest to najbardziej rozpowszechnione w projektach C / C ++. Nawet trzykrotne wykorzystanie docelowego projektu MinGWwin32 . Czy jest tego powód? Dlaczego nie użyć prawidłowej nazwy, takiej jak Windows lub Microsoft Windows? Czy istnieje jakiś problem związany z wyborem nazwy?

To pytanie nie dotyczy interfejsu API, ale stosowanej konwencji nazewnictwa. Kiedy biblioteka obsługuje inne systemy operacyjne, często używają odpowiednich nazw, takich jak linux, freebsdlub jakiejkolwiek innej specjalnej wymaganej pomocy. Ale jeśli chodzi o system Windows, często jest on skracany, win32co wydaje się nieco dziwne w porównaniu z resztą.

Bezzałogowy gracz
źródło
11
Ponieważ aplikacje 32-bitowe różnią się od aplikacji 64-bitowych?
Oded
52
Win32 to nazwa interfejsu API systemu Windows , podobna do roli POSIX w systemach Unix / Linux. Nazwa mogła pochodzić od 32-bitowych procesorów, ale należy to postrzegać jako historyczny artefakt.
amon
4
Dlaczego bin jest tradycyjnie używany do wskazania katalogu z binarnymi plikami wykonywalnymi? To tylko konwencja. win32 to tylko skrót dla programu działającego w systemie Windows z 32 bitami. Jeśli wolisz nazywać to flimflam, możesz to zrobić, chociaż może to nie być bardzo jasne w twoim projekcie.
Neil
37
Dużo dezinformacji w komentarzach tutaj ... Win32 nie sugerował kodu 32-bitowego od wczesnych lat 90., kiedy to rozróżniał 16-bitowy system Windows 3 od 32-bitowych późniejszych wersji. Nowoczesne 64-bitowe wersje systemu Windows implementują natywny 64-bitowy interfejs API, który nazywa się „Win32”. Zachowuje tę samą nazwę, ponieważ jest kompatybilny z 32-bitowym interfejsem API, ale jest natywną 64-bitową implementacją i byłoby dobrze, gdyby 64-bitowa biblioteka nazywała się „Win32”. „Win64” w rzeczywistości oznaczałoby architekturę Itanium, a nie x86-64 / AMD64.
Cody Gray
6
@Oded: win32 to pozostałość po przejściu systemu Windows z 16 do 32 bitów.
whatsisname

Odpowiedzi:

61

Win32 to zwyczajowa nazwa interfejsu API systemu Windows. Ten interfejs API określa, w jaki sposób aplikacje mogą łączyć się z systemem operacyjnym. Jest w przybliżeniu porównywalny ze standardem POSIX w Uniksie, ale Win32 obejmuje również GUI i wiele innych funkcji.

Win32 API nie jest ograniczony do 32-bitowych instalacji Windows.

Z Windows Dev Center :

Interfejs programowania aplikacji (API) systemu Windows umożliwia tworzenie aplikacji komputerowych i serwerowych, które działają poprawnie we wszystkich wersjach systemu Windows, jednocześnie korzystając z funkcji i możliwości unikalnych dla każdej wersji.

Interfejs API systemu Windows może być używany we wszystkich aplikacjach opartych na systemie Windows, a te same funkcje są zazwyczaj obsługiwane w 32-bitowym i 64-bitowym systemie Windows. Różnice w implementacji elementów programowania zależą od możliwości bazowego systemu operacyjnego. Różnice te odnotowano w dokumentacji API.

Uwaga Poprzednio nazywało się to Win32 API. Nazwa Windows API dokładniej odzwierciedla swoje korzenie w 16-bitowym systemie Windows i jego obsługę w 64-bitowym systemie Windows.

Nie musisz używać Win32 API do programowania w systemie Windows. Alternatywami są klasy .NET lub interfejs Windows RT.

Technicznie istnieje wariant Win64. Różni się jednak od Win32 głównie w modelu danych (rozmiar wskaźników). To nie jest odrębny zestaw interfejsów API:

Środowisko API Win64 jest prawie takie samo jak środowisko Win32 API - w przeciwieństwie do głównej zmiany z Win16 na Win32. Interfejsy API Win32 i Win64 są teraz połączone i nazywane Windows API. Korzystając z interfejsu API systemu Windows, można skompilować ten sam kod źródłowy, aby działać natywnie w 32-bitowym systemie Windows lub 64-bitowym systemie Windows. Aby przenieść aplikację do 64-bitowego systemu Windows, po prostu ponownie skompiluj kod.

Pliki nagłówkowe systemu Windows są modyfikowane, dzięki czemu można ich używać zarówno dla kodu 32-bitowego, jak i 64-bitowego. ( źródło )

Ponieważ Win64 nie różni się zasadniczo, prawie nigdy nie zobaczysz projektów ukierunkowanych win64na kod źródłowy, chociaż nowsze projekty mogą być kierowane winapizamiast tradycyjnych win32. Ale dla wszystkich praktycznych celów wszystkie te nazwy odnoszą się do tego samego interfejsu API.

amon
źródło
5
Ponadto interfejs API Win32 jest / był obsługiwany w innych systemach operacyjnych, np. OS / 2, ReactOS, a następnie istnieje Wine, który jest także implementacją interfejsu API Win32.
Jörg W Mittag
6
@UnmannedPlayer, cóż, Win32 to nazwa platformy docelowej. Win32 to Windows taki, jaki znamy. Jak wyjaśnia powyższy cytat, obecnie właściwą nazwą jest „Windows API”, ale opisuje to samo.
amon
8
„Aby przenieść aplikację do 64-bitowego systemu Windows, po prostu ponownie skompiluj kod.” ... riiiiiiiiiiiiiiiiiiiiiight.
Daniel Kamil Kozar
7
@DanielKamilKozar To mniej szalone niż się wydaje - to ten sam API. Pewnie, to mógł być dział marketingu. mówiąc. Ale przy odrobinie dyscypliny i wystarczających testach napisanie przenośnego kodu nie jest zasadniczo trudne. Ważną różnicą jest to, że w typach Win32, int, long i wskaźniki są 32-bitowe. To założenie nie dotyczy już Win64, który łamie kod, który starał się być sprytny. Ale kiedy kod zostanie przekształcony w przenośny, różnica między Win32 a Win64 kończy się niewiele więcej niż opcją kompilatora.
amon
4
@amon: Niestety Microsoft z jakiegoś dziwnego powodu zmusił aplikacje 32-bitowe i 64-bitowe do korzystania z różnych obszarów rejestru, co utrudnia grupie powiązanych aplikacji udostępnianie ustawień, chyba że wszystkie są 32-bitowe lub 64 kawałek. Tak, są obejścia, ale żadne nie jest tak proste, jak zwykłe korzystanie z tego samego magazynu.
supercat
29

Ponieważ interfejs API systemu Windows ma ponad 30 lat i był już dostępny, gdy komputery były 16-bitowe, pojawiły się 32-bitowe wersje, następnie Win32s, a następnie Win64. Podczas opracowywania systemu Windows istnieje zależność od platformy i potrzebny jest kod pasujący do bibliotek systemu operacyjnego (bibliotek dll) w architekturze.

https://en.wikipedia.org/wiki/Windows_API#Versions

Aplikacja systemu Windows zbudowana na systemie Windows 32 będzie działać w architekturze 32-bitowej i będzie działać w systemie 64-bitowym dzięki systemowi operacyjnemu Windows zapewniającemu podsystem win32, dzięki czemu aplikacje win32 będą działać w nowoczesnym 64-bitowym systemie operacyjnym Windows.

Podczas gdy kompilacje win32 stają się coraz mniejsze w miarę upływu czasu, win32 prawdopodobnie nie zniknie całkowicie w najbliższym czasie. Kiedy kompilacje win32 zostaną wycofane, prawdopodobnie pojawi się win128, a win64 będzie nową win32.

Thomas Carlisle
źródło
3
Nowe API systemu Windows nazywa się WinRT. Ma wiele wspólnego z Win32, ale także wiele innych - tak jak Win32 zrobił to z Win16 (?).
user253751,
10
@immibis WinRT to środowisko wykonawcze, które Microsoft chciał prawdopodobnie być „nowym”. Jest to środowisko wykonawcze aplikacji sklepowych Windows, działających w systemie Windows 8+, Windows RT i Windows Phone 8+. Wiesz, dla tych aplikacji nikt nie lubi.
Metallkiller
Dziękujemy obu za dodanie interfejsu API WinRT do tej odpowiedzi. Wydaje mi się, że należę do grupy osób, które nie przepadają za aplikacjami na komputery inne niż Win 8+. Ale wygląda na to, że Microsoft zmienił nazwę Win32 na „Windows API”: msdn.microsoft.com/en-us/library/windows/desktop/ ... Odpowiedziałem na pytanie w kontekście tego, dlaczego w istniejącym oprogramowaniu widzisz odniesienia do „win32” itp.
Thomas Carlisle,
Kilka głosów z poprzedniego miesiąca bez komentarzy sugerujących, jak można poprawić tę odpowiedź. Przyjęta odpowiedź w zasadzie odpowiada na pytanie „dlaczego nazywa się win32”, mówiąc „ponieważ nazywa się win32”. Stoję za moją odpowiedzią, ponieważ główny punkt jest taki, że w czasach, gdy 16-bit wciąż był większością, ludzie, którzy kupili komputery z 32-bitowymi możliwościami, nie chcieli widzieć ani słyszeć „16” nigdzie w architekturze sprzętu lub oprogramowania . Dlatego API zostało odpowiednio nazwane, prawdopodobnie nie myśląc o tej dekadzie, kiedy 32-bit stał się nowym 16-bitowym.
Thomas Carlisle,