Linus Torvalds, taşınabilirlik konusundaki teklifiyle ne demek istedi? [kapalı]


41

In Andrew Tanenbaum ile bir tartışmada monolitik bir işletim sistemi mimarisi vs mikroçekirdeğini üzerinde, Linus Torvalds , dedi

Taşınabilirlik, yeni programlar yazamayan insanlar içindir.

Bununla ne demek istedi?


8
Bu “tartışmaları” (flamewars) “eski” günlerden çekerken ne okuduğunuza dikkat edin. Linux'un Linus'un kalbine çok değer verdiği için, bu tartışmalar sırasında ortaya çıkan çok fazla duygu olduğunu düşünün. Bu nedenle, sadece arsız olmak ya da birisini kızdırmak için yapılan birçok ifadeyle karşılaşmanız olasıdır.
Wayne Koorts,


1
Önerilen okumalar: Tartışın $ {blog}
gnat

Yanıtlar:


82

Linus'un tartışmada yazdığı gibi, dili yanaktadır (yani çok fazla ciddiye alınmamalıdır).

Sonra, taşınabilirlik iyi bir şey olsa da, bunun bir takas olduğunu; taşınabilir kod çok daha kolay olabilir. Yani, kodu tamamen taşınabilir yapmak yerine, onu yeterince basit ve taşınabilir hale getirin ("taşınabilir bir API'ye uyun") ve ardından taşınması gerekiyorsa, gerektiği şekilde yeniden yazın. Kodu tamamen taşınabilir yapmak, erken bir optimizasyon biçimi olarak da görülebilir - genellikle iyiden daha fazla zarar verir.

Elbette, yeni programlar yazamıyorsanız ve orijinal programa bağlı kalıyorsanız, bu mümkün değil :)


20
Erken optimizasyon üzerinde anlaşıldı.
Mark Gibaud

4
+1 Linus, yanak mizahındaki diliyle tanınır ancak bazıları söylediklerini çok ciddiye alır.
Spoike

12

Her programın çalıştığı donanım ve işletim sistemi için özel olarak yazılması gerektiğini düşünüyorum.

Sanırım, birkaç platformda çalışabilen genel amaçlı kodun, tek bir platform için özel olarak yazılmış ve uyarlanmış koddan daha az verimli veya daha fazla hataya eğilimli olduğunu düşünüyorum. Bununla birlikte, bu şekilde geliştirdiğinizde birkaç farklı kod satırını sürdürmeniz gerektiği anlamına gelir.


bence tam olarak ne demek istediğini düşünüyorum
Chani

9

Linux ilk yazıldığında, o zamanlar oldukça yeni ve pahalı olan sadece i386 CPU'daki özellikleri kullanıyordu.

Bu tam olarak linux'un yaptığı şeydir: 386 özelliklerinden sadece diğer çekirdeklerin göründüğünden daha büyük bir alt kümesini kullanır. Elbette bu, çekirdeği uygun olmayan bir şekilde uygun hale getirir, fakat aynı zamanda / / daha basit bir tasarım için de yapar. Kabul edilebilir bir takas ve ilk olarak linux'u mümkün kılan bir tanesi.

21. yüzyıla girerken, i386'yı benzersiz kılan özellikler, Linux'un çok taşınabilir bir hale gelmesine izin vererek tamamen yaygınlaştı.


2
“... tamamen yaygın bir hale geldi, Linux'un çok taşınabilir hale gelmesini sağladı” ve Linux'un bu noktada taşınabilirliğinin erken optimizasyon olacağını kanıtladı.

2
@Roger: Gerçekten aynı fikirdeyim. Bu özellikler genel haline geldi - ancak o zamandan beri CPU'ların çoğu Linux'u tamamen görmezden geldiği, sadece çok az kullandığı ya da makul derecede iyi kullanabilmesi için büyük ölçüde (ve acı verici) yeniden yazılması gereken daha fazla özellik ekledi. Aynı zamanda, Linus'un en azından bir noktaya değindi : şu anda oldukça iyi çalışan (taşınabilir olmayan bir biçimde), yıllarca konuşulan ancak hiç bitmeyen (örneğin, GNU HURD) bir şeyi dövdüğü bir şey.
Jerry Coffin,

@Jerry - Eskiden çalıştığım bir yerde araştırma projeleri gibi geliyor: "Şimdi vazgeçmelisin. Üzerinde çalıştığım her şey eski hale gelecektir". Bu 20 yıl önceydi. Hala yeni bir şeylerin araştırma laboratuvarından çıktığını görmedim.
Çabucak_şimdi

@Roger, taşınabilirlik bir optimizasyon değil.

7

Çok fazla Java yapan ve "bir kez yaz, her yerde hata ayıkla" fenomenini yıllarca haftalık olarak deneyimleyen biri olarak, bununla tamamen ilişki kurabilirim.

Ve Java muhtemelen hafif bir örnektir. Hatta kendi içinde taşınabilir olması için tasarlanmamış bir dilde / araç setinde taşınabilir bir kod üssü yaparken neler yaşadıklarını hayal bile edemiyorum.

Şu an işte, mobil cihazlarımız için ürünlerimizden birinin lite versiyonunu yazma fikrini araştırıyoruz. Hem J2ME hem de Android için bunun taşınabilir bir versiyonunun nasıl yapıldığına dair bazı araştırmalar yaptım - kod tabanının mümkün olduğunca fazlasını paylaşmaya çalışıyor (tabii ki tamamen kendi başına tamamen "taşınabilir" olamaz, ancak benzer bir felsefe ). Bu bir kabus.

Bu yüzden, evet, bazen verilen iş için verilen araçları kullanabilmek için düşünmek (ve yapmak) gerçekten iyidir. yani, bir, tek, monolitik platform / çevreye karşı özgürce gelişiyor. Ve her biri için ayrı ve temiz sürümler yazıyor.


5

Her ne kadar bazı insanlar taşınabilirliği görebiliyor / tedavi etse de, standartları takip etmeyi, ahlaki açıdan üstün olduğunu ya da bu siparişte olan bir şeyi, gerçekte aşağıya kaybedeceği ekonomi.

Taşınabilir kod yazmanın, kodu taşınabilir hale getirme ve tüm hedeflerde bulunmayan bazı özelliklerden (genellikle) bahsetme çabası açısından maliyeti vardır.

Taşınabilir olmayan kodun, yeni bir mimariye önem veriyorsanız / umursanız ve (genellikle) orijinal hedefte bulunmayan (veya kullanılmayan) bazı özelliklerden bahsettiğinizde, kodu taşıma çabası vardır.

Buradaki en büyük nitelik "ne zaman / yeni bir mimariye önem veriyorsanız" şeklindedir. Taşınabilir kod yazmak, bu kodu yeni / farklı mimarilerde az çabayla veya hiç çaba harcamadan kullanabilme umuduyla umut verici bir çaba gerektirir. Taşınabilir olmayan kod, belirli bir hedefe yönlendirmeniz gerektiğinden (en azından makul bir şekilde) emin olana kadar bu taşıma işlemine yaptığınız yatırımı geciktirmenizi sağlar.

Çok fazla hedefe yönlendireceğinizden eminseniz, uzun vadeli taşıma maliyetlerini en aza indirmeye genellikle yatırım yapmakta fayda vardır. Kodu ne kadar (veya hatta) kodlamanız gerektiğinden daha az eminseniz, taşınabilir olmayan kod yazmak, ön maliyeti azaltmak, geciktirmek veya hatta kodu tamamen taşınabilir hale getirme maliyetinden kaçınmanıza olanak sağlar.

Sanırım ikisi arasında net bir bölünme varmış gibi "taşınabilir" ve "taşınabilir olmayan" konuştuğumu da dikkate almaya değer. Gerçekte, bu doğru değil - taşınabilirlik, tamamen taşınabilir olmayan (ör. Montaj kodu) çok taşınabilir (örn. Info-zip) ve aralarındaki her yerde çalışan bir sürekliliktir.


4

Tanenbaum, Linux etkileşiminin bir bileşen olması ve böylece kolaylıkla değiştirilebilmesi için 386 işlemciden, zamanın en son teknolojilerinden yararlanacak şekilde Linux'un çok modüler bir şekilde yazıldığı anlamına geliyor. Tanenbaum, aslında Çekirdeğin bu kadar monolitik ve 386 CPU'ya bağlı olduğu gerçeğinin, bunu çok zorlaştırdığına inanıyor.

  • Port Linux kendisini başka bir CPU platformuna (Açıkçası yanlış, AMD64, PowerPC vb.)
  • Linux x86 için başka bir CPU mimarisine yazılmış Port Programlar (aynı zamanda yanlış)

Linux kampı birkaç noktaya işaret ediyor:

  • Linux, tasarımın bir parçası olarak çok iş parçacıklı dosya sistemi sunar
  • Microkernel, ilginç ve sezgisel olsa da çok iyi performans göstermiyor
  • Taşınabilir API uyumu, taşınabilirlik sorununu daha fazla ya da bir engelleyicinin aksine çekingen yapar.

1
Şimdi bekleyin ... bu tartışma sırasında, taşınabilirlik çok daha büyük bir endişe kaynağıydı. AMD64 ve PPC yıllarca geldi.
Matt Olenik

1
Kesinlikle haklısın - ancak Linus dahil diğerleri, Tanenbaum'un düşündüğü kadar endişeli olmadığını belirtti
Anatoly G

Mikro çekirdekler iyi performans göstermiyor mu? Bu, onları kullananlar için bir şok olacaktı.
SADECE MY DOĞRUDAN FAALİYET

Ben ben Mach (OSX) kullanmak ve o inşaat büyük - mikro çekirdek iyi çalışmayan sanmıyorum. Linus, ancak bahsetti.
Anatoly G

3

Taşınabilir kod yazmak istiyorsanız, taşınabilir kod yazmak zorundasınız.

Bununla ne demek istiyorum?

Tasarım amacı yansıtmalıdır. Örneğin, dil C ise, çalışması için asgari kod satırı sayısının değiştirilmesi gerekecek şekilde tasarlayın. Bu genellikle, ekranı yine de iyi bir tasarım felsefesi (MVC) olan hesaplamadan ayırmak anlamına gelir. İyi bir derleyiciye erişiminiz olması koşuluyla, çoğu C kodu herhangi bir yerde derlenebilir. Bundan yararlanın ve jenerik olmak için olabildiğince çok yazın.

BTW, bu cevabı sadece uygulamalar için geçerli olacaktır. OS ve gömülü tamamen başka bir hayvandır.


2

Bu ifadeyi "tam anlamıyla" olduğu gibi yorumlayın.

Linus'un alıntılarından bir başkası da şöyle dedi: "C ++ tüm Yanlış Sorunları çözmeye çalışıyor. C ++ 'nın çözdüğü şeyler önemsiz şeyler, neredeyse sadece gerçek bir problemi çözmekten ziyade neredeyse tamamen C'nin sözdizimsel uzantıları."

Ayrıca, biyografisinde mikrokernellerden alıntı yaparken "Just For Fun" linusu, 'n /' karmaşıklığı olan bir problem için, sorunu '1 / n' benzersiz parçalarına bölerseniz, o zaman böyle bir sistemin geliştirilmesinin toplam karmaşıklığının olacağını söyledi. ol 'n!' Bunun kendisi böyle bir şeyi denememek için yeterli bir faktördür ve böylesi karmaşık bir sistemden verimlilik elde etmek çok zor olacaktır.


2

Bu tartışmalar sırasında Linux'un çok yeni olduğu ve büyük ölçüde 386 işletim sistemi olduğu gerçeğini hesaba katmanız gerekir. Bence bugün Linus'a sorarsanız, farklı bir görüşü olacaktır. Belki de Tannenbaumlar kadar aşırı olmasa da, muhtemelen başını sallayacak ve bazı şeyler hakkında haklı olduğunu söyleyecektir.

Linus ve diğer çekirdek geliştiriciler, Linux'u taşınabilir hale getirmek için çok fazla acı çektiler, ancak daha sonra, eğer Linus'un başlaması için portatif hale getirmek zorunda kalması durumunda Linux bir daha var olamayabilirdi.


2

Bu, iyi programlar yazabilen kişilerin taşınabilir olacak şeylere ihtiyaç duymadıkları anlamına gelir çünkü sıfırdan çalışabilirler.

Mevcut programa diğer programları (taşınabilirlik) "almak" isteyen daha az yetenekli programcılar.

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.