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?
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?
Yanıtlar:
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 :)
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.
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ı.
Ç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.
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.
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.
Linux kampı birkaç noktaya işaret ediyor:
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.
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.
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.