Yazılımın yerel olarak çalıştırılması ne anlama geliyor?


27

Yazılımın yerel olarak çalışmasının ne demek olduğunu merak ediyordum. Bu tür bir yazılım tam olarak nedir ve doğal olarak çalışmayan bir yazılımdan ne kadar farklıdır? Belirli bir yazılım kümesi bilgisayarımda yerel olarak çalışıp çalışmayacağını nasıl anlarım? Bilgisayarımda zaten yerel olarak çalışan bir yazılım olabilir mi?


2
"native", bulunduğu platform / işletim sistemi üzerinde çalışacak şekilde tasarlandığını gösterir
yuritsuki

Ben de ... görünüşe göre moderatörler soru

5
@faB Sorunun kapatılmasında moderatör olmadığının farkında mısın?
slhck

Kabul ediyorum, soru başlığı bana bir "işletim sistemi" altında ya da işlemcinin kendisinde (örneğin doğrudan donanım erişimi) bir "program" çalıştırmak arasındaki farkı düşündürdü.
Atılım

Bu soru kendi başına kötü değil, ama bu site için iyi değil. Cevapların gösterdiği gibi, bu, temiz bir şekilde cevaplanabilecek bir şey değil ve etrafını saran bir çok tartışmaya sahip, bu da SSS'ye göre kapanışını tamamen uygun kılıyor.
afrazier

Yanıtlar:


43

Bir yazılım, söz konusu platformda çalışacak şekilde tasarlanmışsa, bir platforma özgüdür.

Bir platform genellikle bir işletim sistemine işaret eder, ancak Nintendo Game Boy gibi cihazlara da uygulanabilir.

Game Boy'u örnek olarak kullanmak, yazılımını kartuşlardan alır. Bu kartuşlar , Game Boy'da yerel olarak çalışan kod içerir .

Emülatörler , bir platform için tasarlanmış yazılımın diğerinde çalıştırılmasına izin veren bir katmandır. Örneğin, Game Boy kartuşlarının görüntülerini çalıştırabilen ve bilgisayarınızda, hatta cep telefonunuzda Game Boy oyunlarını oynamanıza izin veren emülatörler var.

Bir uyumluluk tabaka tür bir emülatör benzeri unsurlardan yoksundur. 64 bit bilgisayarlar ve işletim sistemleri ana hale geldiğinde, mevcut 32 bit teknolojilerle uyumlu olmaları gerekiyordu. 64 bit ve 32 bit mimariler çok farklı olduğu için, 64 bit makinelerde 32 bit yazılımı çalıştırmak için genellikle bir uyumluluk katmanı gerekir. Microsoft Windows'un 64 bit sürümleri için, 32 bit programların yeni 64 bit sistemde çalışabilmesi için Microsoft'un bir uyumluluk katmanı yazması gerekiyordu. Bazı programlar genellikle adlı bir klasöre yüklenir nedeni budur Program Files (x86), x86araç "32-bit".

Uyumluluk katmanları, yerel sistemle emülatörlerden daha samimi olma eğilimindedir. VirtualBox öykünür işletim sistemleri için donanım * ve konak sistemi ile çok doğrudan etkileşim yoktur öykündüğünü sistemleri. WoW64 , 32 bit programların 64 bit Windows'ta daha tümleşik bir şekilde çalışmasını sağlayan bir uyumluluk katmanıdır . WoW64, programları yalıtılmış bir ortamda taklit etmek yerine uyumlu hale getirmeye yardımcı olur .

Bir çeviri kütüphanesi , uyumluluk katmanlarının bir bileşenidir. İkili kod yerel olmayan bir şekilde çalıştırıldığında, bir çeviri kitaplığı yabancı, yerel olmayan aramaları sistemin anlayabileceği yerel aramalara yönlendirmeye yardımcı olur. Orijinal TI-83 için yazılmış olan montaj programları, daha yeni TI-83/84 Plus hesap makineleri ile uyumlu olmayabilir, çünkü TI-83'ün mimarisinde anlamlı olan bazı çağrılar artık TI-83/84 + 'da geçerli olmayabilir. Bir çeviri kütüphanesi (muhtemelen MirageOS gibi mermilerde bulunur ), TI-83 çağrılarının, TI-83/84 + hesap makinelerinde yeni ve güncellenmiş yerlere gitmesini sağlar.

Platformdan bağımsız kod , genellikle yerel olarak çalışan bir şey tarafından yorumlanan bir dilde yazılır . Örneğin, PHP, yerel olarak Windows, Mac ve Unix tabanlı işletim sistemleri için derlenmiş olan, kurulu PHP ikili tarafından yorumlanan ve yürütülen bir programlama dilidir . Web betiklerinin yazdığı PHP kodu platformdan bağımsızdır ve bu işletim sistemleri için PHP kurulu olduğu sürece kodun birden fazla işletim sisteminde çalışmasına izin verir.


Çeşitli

Düzeltmeler

* Teşekkür ederim, Michael Kjorlıng için, bazı sorunlar alıcı ile bu cevap .

Diğer

"Yerel" ve "yerel olmayan" arasındaki fark siyah ve beyaz değildir . (Daha fazla kredi için kredi )


3
Minor nitpick: (bu VirtualBox, VirualBox değil ve) VirtualBox işletim sistemini taklit etmiyor, donanımı taklit ediyor . Böylece, istediğiniz herhangi bir işletim sistemini VirtualBox'a yükleyebilirsiniz (sanallaştırma sınırlamalarına tabidir), hatta sıfırdan kendinizinkini bile yazabilirsiniz.
CVn

1
Yerli ayrıca sıklıkla, temel platform için birincil kütüphane setini ve API'yi kullandığı anlamına gelir; bu da, farklılıkları biraz bulanıklaştırabilir. .NET uygulamalarını Win32 API uygulamaları gibi "yerel" olarak kabul etmeyen birkaç kişi var ve benzer şekilde bazı insanlar Gnome masaüstünde "native" çalışan bir KDE programını düşünmüyorlar.
afrazier

@ afrazier: .NET uygulamalarının "Ortak Dil Çalışma Zamanı Modülü" nde çalışacak şekilde tasarlandığından ve Windows'ta çalışmak için bir uyumluluk katmanına ihtiyaç duyulduğundan. Veya Linux'ta çalıştırmak için farklı bir uyumluluk katmanı.
Ben Voigt

@Ben Voigt: Hala birinci taraf bir API, ikili dosyalar yerel x86 / amd64 koduna (CLR tarafından çalıştırılırken veya ngen ile önceden) ngen ile derlendi ve çerçeve Windows'un son sürümleriyle birlikte gönderildi. Bu olsa daha büyük bir tartışmanın parçası ve burada gerçekten uygun değil.
afrazier

Sanal Kutu teknik olarak bir emülatör değil, bir Sanallaştırıcıdır. Geçen zamanların bir öykünücüsü her zaman tamamen farklı bir donanım taklit etmiştir. Sanallaştırıcı altında, işletim sistemi ve yazılım aslında ana bilgisayar CPU'sunda çalışır. Aradaki fark, cihazların sanal olması veya öykünmesidir. Sanal Kutu web sitesinin bile burada gösterdiği çok küçük bir teknik fark var: virtualbox.org/wiki/Virtualization
Matt H

4

Yerel kod genellikle platform bağımsız kodunun karşıtı olarak kullanılır. Yerel bir yazılım kullanıyorsanız, derlenmiş bir ikili dosya kullanıyorsunuz, örneğin javascript veya Java bayt kodu gibi platformdan bağımsız bir komut dosyası değil. Derlenmiş C veya derlenmiş C ++ yerel kodun iyi örnekleridir.


3

Şaşırtıcı bir şekilde birkaç olası cevap vardır, ancak standart genellikle: CPU için opcoda derlenen ve bilgisayarı başlatan işletim sisteminin programlama kitaplıklarına karşı çalışan koddur. Bu durumda, çalıştırdığınız çoğu kod yerel kod olacaktır. Belki bazı karşıt örnekler işleri açıklığa kavuşturur.

Java yerel kod değil. Daha sonra belirli bir yonga kümesinde çalıştırılan bir ara bayt koduna derlenir. Java yerel kodu arayabilir . Eclipse harika bir örnektir - hız için, Java bazı platform yerel grafik aramalarını çağırır.

Eğer kaçarsan ŞARAP , bir MS Windows API emülatör, bu yerli kod değildir. Bu yonga seti için tasarlanan kodu (x86) yürütüyorsanız da, onu başlatan işletim sisteminin kodunu değil, kitaplıkları değiştiriyorsunuzdur. MAME , farklı işlemciler ve işletim sistemleri için ikili dosyaları çalıştırıyor.

Komut dosyaları yerel kod değil. Daha yüksek seviyeli bir dilde yazılırlar ve daha sonra çalışma zamanında CPU'nuzda çalışan koda dönüştürülmeleri gerekir.

Bazı bulanık çizgiler var. Web tarayıcınız yerel kod olarak çalışır, ancak Java (bayt koduna göre derlenmiş) veya Javascript (bir komut dosyası tarafından tercüme edilmiş bir dil) de çalıştırabilir.


.NET, VBA, XUL , IA-32 (en azından AMD64 CPU'larda), ...
CVn'de bir CVn

3

Bağlamına çok bağlıdır. Bana göre, "yerel", bir uygulamanın işletim sisteminin sağladığı özellikleri ve mekanizmaları kendi yerine kullanmak yerine kullandığı anlamına gelir. Bu kullanıcı arayüzü özellikleri (düğmeler, pencereler, dosya seçici diyalogları) ve kaputun altındaki özellikler için de geçerlidir (örneğin, "Birlikte Aç ..." ile entegrasyon).

Örneğin, Windows'ta yerel bir uygulama, diğer uygulamalarla aynı düğmeleri, kaydırma çubuklarını vb. Almak için "WinAPI" yi kullanır. Yerel üçüncü taraf uygulamalarında olduğu gibi sistem uygulamalarında (not defteri) tam olarak aynı şekilde davranırlar.

Java uygulamaları genellikle "Swing" kullanır ve tamamen farklı görünürler çünkü sistemlerini kullanmak yerine kontrollerini kendileri çizerler. Avantaj, programın her işletim sisteminde aynı görünmesidir.

Bir GUI oluşturmak için başka bir seçenek "QT" gibi bir çapraz platform araç takımıdır. QT, işletim sisteminden kontrolleri çizmesini isteyecektir, bu yüzden Windows, OSX veya Linux kullanıyor olsanız da çok doğal görünmelidirler. Bir QT metin kutusu sadece Windows metin kutusu gibi görünecek, ancak doğal olarak değil, bir tür öykünme. Ayrıntılarda küçük farklılıklar olduğunu görebilirsiniz (örn. Bağlam menüsü, giriş yöntemleri vb.).

İnsanlar "yerel" deyince, genellikle bir programın sanal bir makinede (Java ve .NET programları gibi) çalıştırılan bir ara kod yerine makine koduyla derlendiği anlamına gelir. Yukarıdaki örneklerde, WinAPI ve QT uygulaması makine kodunu kullanıyor, oysa Java programı Java bytecode'a derlenmiştir. Bu kullanım günümüzde biraz problemlidir, çünkü birçok kullanıcı Windows için yerel bir .NET uygulaması olarak kabul eder - yalnızca bir .exe'dir, başlık altında aynı kontrolleri ve API'leri kullanır ve derlenen bir programdan neredeyse ayırt edilemez makine kodu.

Aynı şekilde, GTK kullanan, Unix dosya sistemi yapısını bilen ve belki de Ubuntu veya Gnome için yerel bir .deb paketinde bulunan bir program düşünürdüm. Hatta javascript ile yazılmış, yerli diyebileceğin birinci taraf Gnome uygulamaları bile var! Aynısı, bazıları derlenmiş, bazıları değil, çeşitli dillerde yazılmış Windows 8 "Metro" uygulamaları için de geçerlidir.


2

Daha soyut terimlerle ifade etmek gerekirse, başka birinin kendi dilindeki programı farklı bir dilde yürütmesine güvenmesine izin vermek gibidir.

  • Yerel, işletim sisteminin bildiği en hızlı ve en basit lehçeyi kullanacağı anlamına geliyor.

    Artıları: Metalden düştüğü için birbirleriyle konuşabilen hızlı, geniş bir dil kullanılabilirliği. Eksileri: Güvenlik, karmaşık API, işletim sistemi yetenekleri ile sınırlı, ayrıca derleyiciler de yapmak zor, çünkü bir kez derlendikten sonra bir program vahşi doğaya yayılıyor.

  • Yerel değil, kodunuzun doğrudan işletim sistemi tarafından yürütülmeyeceği anlamına gelir. Programın bir bytecode versiyonunu sanal bir makinede yorumlamak ve çalıştırmak birçok ana yolla gerçekleştirilebilir.

    Artıları: API neredeyse hiç değişmiyor, bu nedenle programcıların çalışması çok daha kolay (en azından bu dile bağlı olduklarında). Eksileri: performans (genellikle hafif bir düşüş, nadiren sorun olabilir) ve herkes bu belirli dili kullanmayacak, bu yüzden bu teknolojiyi benimsemek de bir sorun olabilir. Güvenlik de bir sorun olabilir, ancak çok daha kontrol altında. Bir şekilde.

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.