Neden bazı programlar C + + windows-sadece yazılı ve diğerleri değil mi?

8 Cevap php

Ben bir süre için şimdi merak ettiğim bir şey var.

Instace için Notepad + + atın. Wikipedia, C + + ile yazılmış ve Windows yalnızca bu oldu bana söyler.

Şimdi PHP alır. Wikipedia bu da C + + ile yazılmış bana söyler, ama bu da diğer işletim sistemi üzerinde çalışır.

Ama sonra PHP için sadece C + + ... Bu nasıl yapılıyor daha dilleri görmek? Onlar C bazı yeni kod yapabilirim + +, o olur çalışır ve daha sonra Perl bunu nasıl anlamaya, ya da ne gördün mü?

8 Cevap

Bu platform belirli kitaplıkları veya kullanıyor olmasına bağlıdır. Notepad + + bir masaüstü uygulaması ve bir GUI gerekiyor. Qt ve WxWidgets gibi çapraz-platform C + + kütüphaneleri olmasına rağmen, Notepad + + muhtemelen Microsoft'un belirli teknolojisini kullanıyor. Böylece diğer platformlarda taşıdık olamaz.

GUI kitaplığı gerek yok yani diğer tarafta PHP WEB kodlama teknolojisidir. Ayrıca Notepad + + için orada daha birçok platformda PHP çalışan çok daha güçlü bir ilgi var. Yani C + + kod çapraz platform yapmak için geliştiriciler için bir teşviktir.

Platforma özel kütüphaneler kaçının bir C + + çapraz platform uygulama için gerekli tek şey değil. Genellikle az ortak payda için kodlama ve desteklenen her platform için farklı kod dalları tutmak anlamına gelir. C + + bir çapraz platform dili olmasına rağmen, her sistem kendi karışıklıklar vardır. Aslında kodu, hem de aynı platformda farklı bir derleyici kullanılmak için ise farklı olabilir. Örneğin PHP gibi, açık kaynak kodlu bir uygulama C + + kaynak indirmeyi deneyin. Siz fazla kod tüm platformlar için aynı olduğunu fark ediyorum, ama aynı zamanda farklı bit olacaktır. Bazen Önişlemci direktifleri kullanılır, başka bir yerde tamamen farklı kaynak dosyaları katılıyor.

Yani gerçek bir çapraz-platform C + + uygulama oluşturma zor bir iş olduğunu ve bu yüzden ve birçok kişi katılıyor yapmak için güçlü bir teşvik olduğunda genellikle oluşturulur. Gerçekten Notepad + + gibi bir tek adam uygulama çapraz platform olamaz.

Genellikle tek bir platform üzerinde çalışacak programlar işletim sistemi (örn. sistem pencereler, düğmeler, hizmetleri ele aramaları) bazı olanaklarından yararlanabilirler. Açıkçası kod kesinlikle sistem-bağımlı ve diğer ortamlarda çalışamaz. Çapraz-platform yazılımı için çeşitli yaklaşımlar takip edebilirsiniz, bazıları şunlardır:

  • Sen işletim sistemi ve ayaklarınızın altında bırakır şeyler bağımsız programlamak (yani işletim sistemi olanakları, çerçeveler ve benzeri kullanmayın).
  • Eğer bu şekilde programlanır kütüphaneleri ve araçları kullanarak, ve böylece (örneğin, pencereleri ve arayüzleri yönetmek için, çapraz-platform olduğunu, Qt veya wxwindows kullanın) çeşitli işletim sistemleri altında çalışma programı.
  • Bunu üzerinde çalışacak, çeşitli mimarileri özel durumları işlemek için, birçok kod sürümleri oluşturmak. Bu şekilde muhtemelen kod kendi mimarisi için optimize edilmiş olduğundan daha fazla performans ve "daha iyi" yazılım ulaşmak, ancak korumak için çok zor olabilir.

Ben çoğu dil birinci şekilde çalışmak olduğunu düşünüyorum, ama bazen onlar ... (Bu durumda Windows, MacOS için PHP, örneğin PHP olacak) bazı performans elde etmek çağrıları işletim sistemini kullanabilirsiniz.

Java ve C # gibi bazı modern diller aksine, C + + dili sadece temel işlevleri sağlar. Bu kullanıcı arayüzü, konuları, ağ etkileşimi, kriptografi, hatta okuma XML işleme standart bir yolu yoktur. Bunun yerine, işlevsellik bu tür için destek işletim sistemi kadar bırakılır. , Windows, Windows için yazılan uygulamalar yararlanmak Win32 adı verilen geniş bir API kümesi sağlar. Linux ve diğer işletim sistemleri üzerine inşa benzer API'leri vardır. Yazarlar, belirli bir işletim sisteminin kütüphanelerinde yararlanmak zaman, onlar bunu kendi programları diğer işletim sistemlerinde çalışmaz olun.

Bu işletim sistemi ile etkileşim öğeleri uzak soyutlayarak işletim sistemleri arasında çalışacak bir C + + program yazmak mümkün, ama bu basit değildir ve çoğu zaman yapılmaz.

C + + bir doğal çapraz platform dilidir; o kullanımı belirli bir platforma özgü özellikler C + + ile yazılmış kütüphanelerin çok olduğunu, sadece, bu yüzden bu programlar o platforma sınırlıdır. Bu platforma özgü özellikleri kaçının ve kendinizi çok fazla uğraşmadan en platformlarda derlemek gereken bir C + + program var.

Notepad + + Notepad + + herkesin bildiği kötü Windows Not Defteri için bir yedek çünkü sadece Windows içindir. >; Herhangi bir öz-saygı OS kimse adına 'Not Defteri' ile bir editör kullanmak istiyorsunuz.

Notepad + + çekirdek (Linux, OS X ve Windows) çapraz platform ve çapraz platform ve platform-spesifik hem de kullanılan, Scintilla text editor component olup applications. Çekirdek görünümü mantığı pencere sistemleri ve grafik bağlamlarda ile arabirim için soyut sınıflar ile paylaşılır. Uygulamalar çapraz platform bileşeni almak ve OS belirli pencere ve grafik bağlamda bağlayabilirsiniz. Linux ve Windows üzerinde benim favori editörü Lua scripting editörü etrafında çok hızlı bir hafif sarıcı olan SciTE olduğu; Başka bir çapraz platform C + + yığını - Komodo bir Mozilla XUL kapta Zerre editör bileşeni sarar hangi da var.

Uygulamaları çapraz platform hale getirmek için bazı maliyeti yoktur; bu platformlarda potansiyel kullanıcıları varsa sadece o yatırımın değer.

Now take PHP. Wikipedia tells me this is also written in C++, but that runs on other OS too.

PHP sadece daha platformlarda kullanılabilir hale getirmek için C yazılır. Sadece C tarzı yorumlar, C + + / / yapmak için kurallar bile vardır.

Bkz PHP coding standards.

Apart platforma özel kütüphaneler ve API'ler gelen, C ve C + + (iyi bir neden için) değil gerçekten çapraz platfrom diller de vardır. Bunlar kasıtlı tipi uzunlukları, endian, yapılar değişken uyum ve yeni ayrılan bellek initialzed olup olmadığını gibi, belirtilmemiş ayrıntıları bir çok bırakın.

Bu CPU muhtemelen gitmek gibi hızlı (platform-spesifik) kod yazmak için izin verir, ama aynı zamanda size kod taşınabilir olmasını istiyorsanız, bazı ek çaba ve test alır demektir - ki Windows hedefleyen birçok kişi / x86 platformu muhtemelen atlayın.

Diğerleri GUI'leri ve önemli platformlarda yalnızca bir alt kümesi üzerinde mevcut diğer kütüphanelerin kullanımına yorumladı.

Bir diğer faktör geliştiriciler. Birçok geliştirici (veya yazılım şirketleri) sadece uzmanlık, erişim, müşteri talep var, ya da tek bir platformu kullanmak gerekir, ve bu yüzden onların yazılım çapraz platform yapmak için ekstra çaba harcamak yok. Örneğin, bir şirketin herkesin masasında, geliştirmek veya üzerinde test etmek için evde hiçbir Linux ya da Mac makineleri, ve bu diğer platformlarda uzmanlar ve farklı bir platform talep hiçbir büyük müşterileri hiçbir geliştiriciler üzerinde bir Windows PC ve geliştirici araçları varsa, Onları sadece, yalnızca Windows paketi ile önde çiftçilik değil haklı için çok zor. Daha sonra kendi fikrinizi değiştirirseniz eğer uzmanlık, ekipman veya ek gereksinimleri olduğunda Ve, onlar çok platforma bağımlı hale izin edilmiş bir büyük kod tabanı düzeltmek için çok geç bulabilirsiniz.

Platform-bağımsızlık, gerçek bir çaba, yolun her adımını atar. Eğer bir plan ile ilk günden itibaren başlarsanız, çapraz-platform kitaplıkları (dikkatle MFC, DirectX, vb kaçınarak örn., Qt, boost, OpenGL,), kullanımı ve inşa etmek ve tüm platformlarda testi düzenli olarak, muhtemelen sadece 10 var -20% iyi bir çapraz platform uygulama yapmak için daha fazla çaba. Ama bir tek platform çapraz platform sıfırdan yazmak kadar çaba alabilir yapma, uzun bir süredir geliştirilmekte oldu uygulaması ve yeni bir platform nispeten varsa o haklı özellikle zor olabilir ile başlarsanız küçük bir pazar payı kendi sektöründe veya eğer geliştiriciler üzerinde çalışma nefret.