Hoş geldiniz S.Aydın...
Elbette "Windows aptallaştırır" ifadesi bir görüştür, olgu değil. Üstelik bu benim görüşüm de değil. Sanırım bu görüşe sempati beslemeyenlerin fikrini kolaylaştırmak da kolay değil. Yine de bir kaç örnek verebilirim:
Mesela internet reklamlarında uygulanan ve kullanıcıyı aptal yerine koyan Windows penceresi görünümlü reklam uygulamalarını düşünün. Artık Windows kullanıcıları o kadar çok aptalca ileti ile karşılaşır ki reklamlarda bu gördüğü şeyi hiç okumadan tıklar. Linux kullanıcısı ise bir hata iletisi ile karşılaşırsa (bu çok az olur!) dikkatlice inceler ve kaynağını bulmaya çalışır. Aynı durum yazılım kurmada da (sürekli next next diye geçmede de vardır!) ama Linux kullanıcısı komutlar ile iş yaptığı için hiç bir şeyi es geçemez dikkatlice inceler...
Windows kullanıcısı bir şey taktığı gibi çalışmasını ister. O yüzden autorun'lar, plug&play'ler ve daha nice kolaylıklar ile doludur. Buna rağmen bir ISO dosyasını üçüncü parti bir yazılıma ihtiyaç duymadan mount edemez. O da virüslü çıkar sonra ne oluyor bu bilgisayara der ve aptallaşır. Tek yapacağı format atmaktır...:)
Format ile Windows adeta bütünleşmiştir. Bir şeyler yavaşladığında veya aptallaştığında kullanıcının ilk aklına gelen "şunu gidip format attırayım da geleyim" olur. Hatta bu tür kullanıcılar fazla dosyanın bilgisayarı yavaşlatıracağını zanneder. Çünkü geçmişte bellek sorunları (yetersiz disk alanı) gibi şeyler ile karşılaşmıştır. O yüzden bilgisayarım penceresine girdiğinde orada kırmızı barlar görmek istemez görürse ürker bir şey olur zanneder.
Linux kullanıcısı her şeyin otomatik mount olmasını istemez ama gerekirse USB aygıtları gibi otomatik mount olur. ISO dosyasını ise çok basit bir komut ile tıpkı bir diskin içine bakıyor gibi ekrana getirir. Bir çok işini komut satırı ile hızlıca halledebilir. İstediği her şeyi hiç bir kısıtlama yaşamadan yapabilir. Örneğin internette biriyle sohbet ederken tüm sistem dosyalarını silebilme yetkisine sahiptir ve buna rağmen Linux çalışmaya devam eder. Oysa Windows kendine ait tek bir dosyanın bile taşınmasına kesinlikle izin vermez. Çünkü tüm kontrol ondadır ne derse onu yapmamız icap eder.
Standart Windows kullanıcısı için komut satırı bir kabustur. Gördüğü siyah ekranı itici bulur ve bir şey o ekranda çalışıyorsa hemen uzaklaşır. Hatta virüs sanar afallar gider GUI yazılımlarına kendini emanet eder. Orada hangi tuş varsa ona tıklar.
Neyse o kadar çok şey yazabilirim ki vakit yetmez...:)
Alıntı (saydin77):
> bana şu an 100 küsür KB. devasa bir boyut gibi geliyor :)
Ali hocamın yazdıklarına ek olarak belirtmeliyim ki yazılım 'main()' işlevi ile başlatılırsa farklı 'WinMain()' işlevi ile başlarsa daha farklı nitelik ve boyutlar meydana geliyor. Ama genelde Windows ortamında 100 KB.'lık bir standart derleme boyutu söz konusu ki bunun nedenleri yukarıda sıralandı...
Belki de yazılımın derlendiği ana dosya boyutunun büyük olmasında endişelenecek bir şey söz konusu değildir. Aksine küçük olduğunda ileride ne tür illegal durumlar ile karşılaşıp göçme olasılığını düşünmek gerekir. Yoksa D'nin çok farklı bir kod ürettiğini sanmıyorum ve yaptığı C ile aynı; gdi32.lib kütüphanesine erişmek.
Bakınız aşağıda D ile yazılmış bir Windows API örneği var ve derleme boyutu sadece 109,596 KB.:
OBJ dosyası ise 1,872 KB. tabi bu aldatıcı bütün iş DLL'de...:)
// dmd winsamp -L-Subsystem:Windows
pragma(lib, "gdi32.lib");
import core.runtime, std.c.windows.windows;
extern(Windows) {
int WinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance, LPSTR lpCmdLine, int iCmdShow) {
WNDCLASS wndclass;
wndclass.style = CS_OWNDC | CS_HREDRAW | CS_VREDRAW;
wndclass.lpfnWndProc = &WindowProc;
wndclass.cbClsExtra = 0;
wndclass.cbWndExtra = 0;
wndclass.hInstance = hInstance;
wndclass.hIcon = LoadIconA(null, IDI_APPLICATION);
wndclass.hCursor = LoadCursorA(null, IDC_CROSS);
wndclass.hbrBackground = cast(HBRUSH)GetStockObject(WHITE_BRUSH);
wndclass.lpszMenuName = null;
wndclass.lpszClassName = "DWndClass";
if (!RegisterClassA(&wndclass)) return 0;
HWND hWnd = CreateWindowA("DWndClass", // window class name
"Merhaba Windows API'si...", // window caption
WS_THICKFRAME |
WS_MAXIMIZEBOX |
WS_MINIMIZEBOX |
WS_SYSMENU |
WS_VISIBLE, // window style
CW_USEDEFAULT, // initial x position
CW_USEDEFAULT, // initial y position
600, // initial x size
400, // initial y size
HWND_DESKTOP, // parent window handle
null, // window menu handle
hInstance, // program instance handle
null); // creation parameters
ShowWindow(hWnd, iCmdShow);
UpdateWindow(hWnd);
MSG msg;
while (GetMessageA(&msg, null, 0, 0)) {
TranslateMessage(&msg);
DispatchMessageA(&msg);
}
return msg.wParam;
}
LRESULT WindowProc(HWND hWnd, UINT message, WPARAM wParam, LPARAM lParam) {
switch (message) {
case WM_PAINT:
PAINTSTRUCT ps;
HDC dc = BeginPaint(hWnd, &ps);
scope(exit) EndPaint(hWnd, &ps);
RECT r;
GetClientRect(hWnd, &r);
HFONT font = CreateFontA(80, 0, 0, 0, FW_EXTRABOLD, FALSE, FALSE,
FALSE, ANSI_CHARSET, OUT_DEFAULT_PRECIS, CLIP_DEFAULT_PRECIS,
DEFAULT_QUALITY, DEFAULT_PITCH | FF_DONTCARE, "Arial");
HGDIOBJ old = SelectObject(dc, cast(HGDIOBJ) font);
SetTextAlign(dc, TA_CENTER | TA_BASELINE);
TextOutA(dc, r.right / 2, r.bottom / 2, "D Windows'da", 12);
DeleteObject(SelectObject(dc, old));
break;
case WM_DESTROY:
PostQuitMessage(0);
break;
default:
break;
}
return DefWindowProcA(hWnd, message, wParam, lParam);
}
}
--
[ Bu gönderi, http://ddili.org/forum'dan dönüştürülmüştür. ]