Bir ürünün veya yazılımın geliştirilmesinde neden birden fazla programlama dili kullanılıyor?


114

Bilgisayar Bilimleri Yüksek Lisansına başlamayı hedefleyen yeni bir lisans öğrencisiyim. Beni gerçekten ilgilendiren ve onlara katkıda bulunmam için beni cesaretlendiren birçok açık kaynaklı projeye rastladım (CloudStack, OpenStack, moby ve Kubernetes). Çoğunluğun ortak olduğunu bildiğim bir şey, çoklu programlama dillerinin kullanımı (Java + Python + Go veya Python + C ++ + Ruby gibi). Birden fazla programlama dilinin birbirleriyle nasıl iletişim kurduklarını ele alan bu soruyu şimdiden inceledim: İki farklı dilde iki farklı programlamanın nasıl etkileşime girmesi?

İşletmelerden birden fazla programlama dili kullanmalarını isteyen gerekliliği anlamak istiyorum. Yazılım mimarı veya proje liderinin “Görev 1 için X dili ve görev 2 için Y dili kullanmasını öneriyorum” demesini hangi şart veya tür gereksinimi belirtiyor? Aynı üründe veya yazılımda birden fazla programlama dilinin neden kullanıldığını anlayamıyorum.


14
Bilgisayar mühendisliği alanında uzman bir öğrenci olarak , özellikle araştırma kodu için “yazarın (öğrencinin) ne zaman başladığında en iyi bildiği dildi” meselesi olduğunu ekleyeceğim . Araştırma projeleri, özellikle daha büyük araştırma projelerine yol açmayan bir kereye mahsus olmak üzere (benim deneyimlerime göre) sonuçları “doğruluk” üzerine değerleme eğilimindedir.
tonysdg

16
@ tonysdg: "Doğruluk" un akademide daha az alakalı olmadığını söyleyebilirim. Ne genellikle değil , ilgili idame, kullanıcı deneyimi ve / veya belgelerdir. Özellikle dilleri karıştırmak, sürdürülebilirliği etkiler; nitelikli bakıcı sayısını sınırlar.
MSalters

2
@ MSalters: Bakım, o sırada aradığımı sandığım kelime. Yazdığınız her şeye katılıyorum!
tonysdg

19
Farklı görevler için farklı araçlar. Bina mimarlarının ve mühendislerinin bir ev inşa etmek için farklı araçlar kullandıklarını fark edeceksiniz.
Paul D. Waite

17
Tatile çıktığınızda, evinizden havaalanına, sonra yabancı havaalanına, sonra otele ve plaja, seyahatin her ayağı için aynı taşıma modunu kullanıyor musunuz?
Orbit'teki Hafiflik Yarışları,

Yanıtlar:


17

Bu cevabın mükemmel kapsama alanı vardır ve farklı dillerin neden bir projeye farklı faydalar sağlayabileceği ile ilgili bağlantılara sahiptir. Ancak, projelerin neden birden çok dil kullanmaya başladığı konusundaki dil uygunluğundan biraz daha fazlası var.

Projeler altı ana sebepten dolayı birden fazla dil kullanıyor:

  1. Diğer dillerde yazılmış kodları kullanmanın maliyet avantajları;
  2. Eski kodu dahil etme ve yerine getirme ihtiyacı;
  3. Belirli diller için kodlayıcıların bulunması;
  4. Uzmanlık ihtiyaçları için özel dillere olan ihtiyaç;
  5. Eski dil önyargıları; ve
  6. Kötü proje yönetimi (planlanmamış çoklu dil kullanımı).

1-4 Sebepleri, doğrudan onlara hitap etmenin, bir projenin daha hızlı, daha verimli, daha kaliteli bir ürünle ve daha kolay ve uzun vadeli destekle sonuçlanmasına yardımcı olabileceği yönündeki olumlu sebeplerdir. Nedenler 5 ve 6 negatif, ihtiyaç duyulan değişime direnç belirtileri, zayıf planlama, etkin olmayan yönetim veya tüm bu faktörlerin bir kombinasyonu. Bu olumsuz faktörler maalesef "tesadüfi" çoklu dil kullanımının ortak nedenleridir.

Yeniden kullanımın maliyet avantajı olan 1. Sebep , hem açık kaynaklı yazılımın daha büyük rolü hem de web üzerinde doğru kod bileşenlerini bulmak için gelişmiş yetenekler nedeniyle bir projede birden fazla dilin kullanılmasına izin vermek için giderek daha güçlü bir neden haline geldi. Geçmiş yılların "hepsini içsel olarak kodlayalım" felsefesi, ekonomik gerçekler karşısında solmaya devam ediyor ve aslında herhangi bir yeni proje için en uygun maliyetli yaklaşım değil. Bu da, bir proje içinde tek bir dilin kullanılmasının daha az yaygın bir şekilde uygulanmasına yönelik fırsatlar sağlar.

Özellikle iyi yönetilen açık kaynak bileşenlerini yeniden kullanan bir proje söz konusu olduğunda, çoklu dillerin kullanımı büyük toplam maliyet avantajları sağlayabilir çünkü yeniden kullanılan bileşenlerin her ikisi de iyi tasarlanmış arayüzlerin arkasına gizlenmiştir ve bağımsız olarak sıfır maliyetli harici gruplar tarafından korunurlar. En iyi senaryolarda, dillerin bu tür yeniden kullanım yoluyla karıştırılması, proje için işletim sistemi bileşenleri kullanmaktan daha pahalı değildir. Microsoft'un tarayıcılarında açık kaynaklı yazılımların geniş çapta benimsemesinden daha iyi bir örnek olmadığını biliyorum.

Eski kodu yerine getirme gereği nedeni 2 , herhangi bir büyük projenin tehlikesinde göz ardı edilir. Bununla birlikte, birçok sorun eski kodu, yeni bir dilde kolayca yeni bir kodla değiştirilebileceğini varsayarsak inanılmaz derecede riskli olabilir. Eski kod, hatta eski kötü kod, genellikle eski ürünü kullanan topluluk tarafından beklenen özelliklerin örtük bir “sözleşmesi” ne kadar tutar getirir. Bu topluluk oldukça sık bir şirket için büyük bir gelir kaynağı veya devlet yazılımı için temel destek kaynağıdır. Basitçe atmak, zımni sözleşmenin, sürmekte olan müşterileri kovalayabilir ve başka seçenekler mevcutsa, bir şirketi iflas edebilir.

Aynı zamanda, değil eski bir dilde eski kodu yerine o toptan değiştirilmesi kadar tehlikeli olabilir. En kötü örnek, bilgisayar doktorları tarafından değil, tıp doktorları tarafından tasarlanan MUMPS (şaka yapmaz) adlı bir dilde kodlanmış çok sayıda hayati sisteme sahip olan ABD Gaziler İdaresi'dir. Kimse MUMPS'u öğrenmek istemez ve bunu bilenler ise tam anlamıyla ölüyorlar. Bu nedenle programcılar, daha yaygın, daha güçlü ve daha iyi korunan diğer dilleri kullanmaya devam etmeye çalışsalar bile MUMPS'u barındırmalıdır.

Bu tür çok dilli kullanım dikkatli bir planlama gerektirir. Bu planlama, bir yandan onlarca yıllık müşteri bilgisini kaybetmekle diğer yandan yazılımı destekleme yeteneğini kaybetmek arasında bıçak kenarını yönlendirmelidir. Eski kodu iyi tanımlanmış arayüzlerin arkasına izole eden ve davranışlarını iyi belgelendikten sonra eski kodu değiştirmek için yeni daha güçlü bir kod sağlayan teknikler yardımcı olabilir. Ancak bu eski senaryo hiçbir zaman kolay değildir ve pek çok şirketin ve örgütün geniş bir yelpazedeki ölçeğinin ölümünün nedeni olmuştur (ve olmaya da devam edecektir).

Neden 3 , çeşitli diller için kodlayıcıların kullanılabilirlik, projelerin tehlike görmezden pragmatik bir faktördür. Bununla birlikte, proje düzenleyicileri, belirli bir dilin hedefleri için en iyisi olduğunu (eğer kendileri için mevcut olan dil uzmanlığı havuzu ile çelişiyorsa), ürünün hem programının hem de kalitesinin öğrenmeden zarar göreceğini düşünüyor olabilir. yeni bir dil öğrenmeye çalışan programcılar kavisli.

Daha rasyonel bir yaklaşım, projenin dil ihtiyaçlarını fonksiyonel alanlara dayalı olarak analiz etmektir. Örneğin, projeye dikkatlice bakmak, örneğin bazı daha az kullanılan bir dilde kodlama uzmanlığı gerektiren bazı özel algoritmaları uygulamak için yüksek değerli kodun yalnızca küçük bir "tepe noktası" olduğunu gösterebilir. Herhangi bir büyük projenin diğer bölümleri genellikle daha yaygın diller tarafından kolayca veya iyi yönetilen açık kaynak ürünleri tarafından (hatta daha iyisi) yerleştirilebilir. Bu nedenle bir projeyi dilin ihtiyaçlarına göre analiz etmek, özel dillerde özel uzmanlık kiralamak veya kiralamak için çok daha gerçekçi ve uygun maliyetli bir yaklaşım sağlayabilir ve aynı zamanda tek bir projedeki diller arasındaki arayüzleri keskinleştirmeye yardımcı olabilir.

Sebep 4 , farklı ihtiyaçlar için farklı diller kullanarak, proje ihtiyaçlarının bu tür bir analizini yapmaktan hemen ve sorunsuzca takip eder. Bu konuda da dikkatli olunmalıdır, çünkü tek bir proje için destek için çok fazla dil seçmek, hem destek hem de bileşenler arasındaki arayüzlerde karmaşık bir patlamaya neden olabilir. Maliyet açısından en güvenli rota her zaman ilk kullanım için azami fırsatları bulmaktır, özellikle proje ihtiyaçlarını özelleştirmeden çok daha azını karşılayacak iyi paketler varsa. Daha sonra, belirlenen ihtiyaçların çoğuna hitap edebilecek az sayıda dilde bir tür karar verilmelidir. Yeniden yoğun kullanımda, bu genellikle bir tür yapıştırıcı kodu olacaktır.

Projenin bazı üyeleri bir diğeri gibi olduğu için, benzer yeteneklere sahip birden fazla dil seçmek genellikle iyi bir fikir değildir . Bununla birlikte, özel dil becerilerinden faydalanacak iyi tanımlanmış, iyi tanımlanmış bir yetenek altkümesi varsa, bu, yeni kod geliştirme için birden çok dil kullanmak için iyi bir neden olabilir.

Sebep 5 , kullanılan dillerde ihtiyaç duyulan değişikliklere direnç, ciddi proje bozulmalarına ve iç çekişmelere neden olabilir. Kullanıcı DaveoBu cevap üzerine yapılan yorumda, bazı proje personeli için değişim çok zor olabilir. Aynı zamanda, değişime direnç hiçbir zaman basit bir mesele değildir, bu yüzden tam olarak bu kadar çekişmeye neden olabilir. Eski dil becerilerinin kullanılması, eski dil yeteri kadar güçlü ise bir projenin verimliliğini artırabilir ve sorunsuz çalışan ve kaliteye saygılı bir ekipte mükemmel kalitede bir ürüne yol açabilir. Bununla birlikte, eski dil becerileri, birçok eski dilin artık gelişmiş özellikler, bileşen kullanılabilirliği, açık kaynak seçenekleri ve akıllı araç kiti desteği açısından daha yeni dillerle tamamlanamadığı gerçeğiyle dengelenmelidir.

Hem o zaman, hem de şimdi, daha zayıf, daha az okunabilir veya daha az üretken bir dil kullanmaya devam etmek için en yaygın (ve ironik, en sık doğru) tek argüman eski dilin daha verimli kod üretilmesine olanak sağlamasıydı. Bu, meclis dili kullanıcılarının FORTRAN ve LISP'te programlamanın ortaya çıkması sık sık acı çektiği zaman, 1950'lere kadar uzanan eski bir argümandır. Artık kod verimliliği argümanının geçerliliğine sahip olabileceği bir örnek, işletim sistemi çekirdeği gibi işlem yoğun bir kodda görülebilir, burada C, C'nin C ++ 'a göre tercih edilen dil olduğu halde kalır (basit verimliliğin ötesinde olsa da).

Ancak, yeni binyılın global olarak ağa bağlı ve güçlü bir şekilde makine destekli proje ortamlarında, bir proje dilini seçmek için temel argüman olan kod verimliliği daha da güçlendi. Yapay zeka uygulamalarının toplu pazarlanmasına olanak sağlayan aynı bilgisayar ve ağ donanım patlaması da, insan programlamanın maliyetlerinin, göreceli olarak ucuz donanım ve bulut yazılımlar üzerinde verimsiz kod yürütme işlemlerinin göreceliğini azalttığı anlamına gelir. Bu, daha yeni bileşen kütüphanesi dilleri, açık kaynak seçenekleri ve gelişmiş akıllı araç kitleri için daha fazla kullanılabilirlikle birleştirildiğinde, bir dili yalnızca verimlilik nedenleriyle tutmanın çok dar olduğu durumların sayısı. Uygulandığı durumlarda bile,

Bir projenin eski dillerle kalması için daha zorlayıcı bir neden, bir projenin personelini değiştirmek için herhangi bir nedenden dolayı çok az veya hiç seçeneğe sahip olmaması durumunda ortaya çıkar. Bu, örneğin büyük bir eski ürün hattı tamamen sadece mevcut personelin akıcı olduğu bir dilde kodlandığında olabilir. Bu gibi durumlarda, proje ya eski dilde programlamaya çalışmanın yolunu sürdürmeli ya da mevcut personeli yeni bir dilin nasıl kullanılacağı konusunda eğitmeye çalışmalıdır.

Eski dil personelini yeni bir dilde eğitmek başlı başına bir tehlike olabilir. Halen yeni eğitilmiş ve C'den C ++ 'a geçişi olan bir projenin bir nesnesine, nesne yönelimli yöntemlerin avantajlarını anlamadığı için şikayette bulunduğu bir durumu hala hatırlıyorum. Koduna baktığımda, daha önceki 103 C işlevini tek bir C ++ nesne sınıfı için 103 yönteme dönüştürmüştü ... ve bunun nasıl bir şeyin işe yarayacağını görmedi.

Daha derin olan mesaj, insanlar yıllarca ya da yıllarca tek bir dilde ve dil tarzında programlandıklarında, yeni yollarla “düşünmelerini” sağlama zorluğunun, iyi eğitim programlarında bile neredeyse aşılmaz hale gelebileceğidir. Bazı durumlarda başka bir seçenek olmayabilir, ancak mevcut eğilimler ve yöntemler ile daha uyumlu olan genç tasarımcıları ve programcıları getirmek.

Sebep 6 , kötü proje yönetimi, kendisi için konuşur. Bir projede dil seçimi ve kullanımı her zaman açıkça göz önünde bulundurulmalı ve değerlendirilmeli ve sadece kazara olmasına izin verilmemelidir. En azından, dil seçimi bir projenin uzun vadeli kaderi ve destek maliyetlerinde büyük bir fark yaratabilir ve bu nedenle her zaman dikkate alınmalı ve planlanmalıdır. MUMPS olma!


Hepsine katılıyorum. Basile'nin cevabı büyük ölçüde performans ve açıklanabilirlik konularına odaklanırken, cevabınız poliglot programlamayı seçmenin arkasındaki yönetim perspektifini anlamalarına yardımcı olur.
Parth Patel

@ParthPatel Bu cevabı kabul etmeniz gerektiğini düşünüyorum, burası burada kendi kendine yeten en iyi sarım.
leftaroundabout

2
+1: Ego'ları unuttun. Birçok kişi yeni dil öğrenmeyi reddediyor ve bildiklerini yapmayı reddediyor. Birden fazla ekiple olan bu farklı olgunluk seviyesi, birçok farklı teknolojinin tek bir projede olmasına yol açabilir
Daveo

1
Sebep 7, işe alım amaçları için BT departmanının seksi görünmesini sağlamaya çalışıyor. Net bir projede şaka değil, tek bir son noktayı mevcut bir hizmetten değiştirmek, Go'da yepyeni bir hizmet kullanmak zorunda kaldık, bu yüzden işte "polyglot" yazdılar!
Chris Lee

1
Heh! Kullanımda olan birden fazla dile sahip olmanın, çıkmaz, COBOL'ye özgü bir işe girebileceklerinden endişe duyan insanlar için bir çekim olduğuna katılmıyorum. Bu, yalnızca ve özellikle bu amaç için eklenmiş bir dilin ilk defa duyulduğudur, ancak kesinlikle çok çeşitli araçlara ve dillere sahip olmanın, en son teknolojilerle çalıştıklarının bir göstergesi olarak görüldüğü birçok ortam var. ve böylece çalışmak için daha ilerici bir yer. Güzel örnek, teşekkürler!
Terry Bollinger

158

Aynı üründe veya yazılımda neden birden fazla programlama dilinin kullanılmasının nedenini anlayamıyorum.

Çok basit: tüm ihtiyaç ve hedeflere uygun tek bir programlama dili yok.

Michael L. Scott'un Programlama Dili Pragmatik bölümünü okuyun

Bazı programlama dilleri ifade ve beyan edilebilirlikten yanadır (birçok kodlama dili, ayrıca Agda , Prolog , Lisp , Haskell, Ocaml, ... gibi üst düzey programlama dilleri ). Geliştirme maliyeti önemliyse (insan zamanı ve geliştiricilerin maliyeti), bunları kullanmak uygundur (çalışma zamanı performansı optimum olmasa bile).

Diğer programlama dilleri çalışma zamanı performansını desteklemektedir (C ++, Rust, Go, C, assembler gibi genellikle derlenmiş uygulamaları olan birçok düşük seviye dil; OpenCL ... gibi özel diller); genellikle spesifikasyonları bazı tanımsız davranışlara izin verir . Kodun performansı önemli olduğunda, bu dillerin kullanılması tercih edilir.

Bazı dış kütüphaneler , belirli bir dilde ve ABI için ve akılda tutulması ve sözleşmeler yapılması için yazılmıştır . Diğer dilleri kullanmanız ve belki de bir miktar yapıştırıcı kodu yazarak yabancı işlev arayüzü kurallarını izlemeniz gerekebilir .

Uygulamada, oldukça etkileyici bir programlama dili olması olasıdır (bu nedenle geliştiricinin verimliliğini artırır, yetenekli bir geliştirici ekibini varsayarsak) ve çalışma zamanında çok iyi performans gösterir. Uygulamada, ifade ve performans arasında bir denge vardır.

Not: Ancak bazı olmuştur yavaş programlama dillerinde ilerleme: Pas C veya hatta C göre daha anlamlıdır ++ ancak uygulanması neredeyse performanslısı ve muhtemelen aynı derecede hızlı yürütülebilir oluşturmak için artıracaktır. Bu yüzden mesleki yaşamınız boyunca yeni programlama dilleri öğrenmeniz gerekir; Ancak Gümüş Mermi Yoktur

Günümüzde geliştirme maliyetinin giderek daha önemli olduğuna dikkat edin (1970'lerde -bu zamanlar çok pahalı olan bilgisayarlarda ya da bazı gömülü uygulamalarda -çok miktarda ürünle aynı değildi). Temel kural (yaklaşık), yetenekli bir geliştiricinin her yıl yaklaşık 25 bin satır (hata ayıklanmış ve belgelenmiş) kaynak kodu yazabilmesi ve kullanılan programlama diline çok fazla bağlı olmamasıdır.

Yaygın bir yaklaşım, bazı komut dosyası dillerini (veya bazı etki alanına özgü dilleri ) büyük bir uygulamaya yerleştirmektir. Bu tasarım fikri (etki alanına özgü bir dil ile ilgili) on yıllardır kullanılmaktadır (iyi bir örnek, 1980'lerden beri komut dosyası için Elisp kullanan Emacs kaynak kodu editörüdür ). Sonra kolayca yerleştirilebilir bir tercüman kullanacaksınız ( Guile , Lua , Python gibi)., ...) daha büyük bir uygulama içinde. Bir tercümanı büyük bir uygulamanın içine yerleştirme kararı çok erken yapılmalı ve güçlü mimari etkileri vardır. Daha sonra iki dil kullanacaksınız: hızlı çalışması gereken düşük seviyeli şeyler için, C veya C ++ gibi bazı düşük seviyeli diller; Üst düzey komut dosyaları, diğer DSL veya komut dosyası dili

Ayrıca, belirli bir yazılımın, çoğu işletim işletiminde (Linux, Windows, Android, MacOSX, Hurd, ... dahil) bazı işlem içi iletişim tekniklerini kullanarak çeşitli işbirliği süreçlerinde çalışabileceğini unutmayın . Dağıtılmış hesaplama tekniklerini kullanarak (örneğin bulut bilişim , HPC, istemci sunucusu, web uygulamaları vb.) , Birkaç bilgisayarda (veya çoğunda) çalışabilir . Her iki durumda da, birkaç programlama dili kullanmak kolaydır (örneğin, bir işlem veya bilgisayarda çalışan her programı kendi programlama dilinde kodlayın). İşletim Sistemlerini Okuyun : Daha fazlası için Üç Kolay Parça . Ayrıca, yabancı fonksiyon arayüzleri(örneğin JNI ), ABI'ler , çağrı kuralları , vb ... aynı programda (veya çalıştırılabilir ) birkaç dilin karıştırılmasını kolaylaştırır - ve SWIG gibi kod üreticilerini yardım edeceksiniz .

Bazı durumlarda, gerek çeşitli programlama dilleri karıştırın: web uygulamaları JavaScript veya Webassembly bölüm tarayıcıda çalıştırmak için (sadece dil çoğu web tarayıcısı içinde çalışan) ihtiyaç (çerçeveler vardır üreten , örneğin bu ocsigen ). C ++, RDBMS sorguları SQL kullanmalısınız orada gerekli olduğunu ifade edemez, C, çünkü ya Çekirdek kod bazı şeyler ihtiyaç (örneğin görev veya kesmeleri düşük seviye taşıma) kısmen, assembler yazılacak GPGPU ler ihtiyacı bilgisayar çekirdekleri kodlanmıştır OpenCL veya CUDA C veya C ++ konak kodu tarafından yönetilen, vs .... Bazı diller (örneğin bir karışımını kolaylaştırmak için örneğin tasarlanmıştır asmifadeleri , Cbenim GCC MELT , vb benim kod parçaları . ).

Bazı durumlarda, metaprogramlama tekniklerini kullanırsınız : büyük yazılım projenizin bazı bölümlerinde, bazı özel formalizasyonlardan elde edilen kod (örneğin C veya C ++), diğer araçlar (belki de projeye özgü araçlar) tarafından oluşturulan kod bulunur: ayrıştırma jeneratörleri (uygunsuz derleyici olarak adlandırılır). derleyiciler) bizon veya ANTLR gibi akla geliyor, ama aynı zamanda SWIG veya RPCGEN. Ve GCC’nin içinde bir düzineden fazla sayıda özelleştirilmiş C ++ kod üreteci (biri, GCC içindeki her DSL için bir tane) olduğuna dikkat edin. Ayrıca bu örneğe bakınız . Metabugs bulmak zor olduğuna dikkat edin . Ayrıca bootstrapping derleyicileri ve homoikonluk ve yansıma hakkında da bilgi edinin.(öğrenmek için faydalıdır Lisp'i , oynamak SBCL ve okumak için SICP ; içine de bakmak JIT-derleme gibi kütüphaneler GCCJIT ; bunları kullanmaya zamanında bazı kod oluşturabilir bazı büyük programlarında; farkında Greenspun onuncu kural ). Ayrıca FOSDEM2018'deki Az Seyahat Edilen Devre konuşmasına da bakın.

Bazen, bazı özel açıklama dillerini (bazı DSL olarak görülebilir) kullanarak, kodunuzun resmi açıklamalarını (örneğin, sonuçlara, statik analizörlere, derleyicilere) yardımcı olmak istersiniz. İçine bak ACSL ile Frama-C C programları (emniyet kritik olanlar) veya not eklemek için OpenMP HPC pragmas. Dikkat: Bu tür açıklamaları yazmak çok fazla beceri ve gelişim süresi gerektirebilir.

BTW, bu derleyiciler ve tercümanlar hakkındaki bazı becerilerin her geliştirici için yararlı olduğunu göstermektedir (derleyiciler içinde çalışmadan bile). Derleyiciler üzerinde çalışmasanız bile Ejder Kitabı'nı okuyun . Kendi tercümanınızı kodlarsanız (veya DSL'inizi tasarlarsanız), Lisp In Small Pieces'ı da okuyun .

Ayrıca, bu & o ve o & bu cevabınızla ilgili cevabımdaki sorulara da bakınız.

Ayrıca ilham ve aydınlanma için birçok büyük ücretsiz yazılım projesinin kaynak kodunu ( github'ta veya Linux dağıtımınızdan ) inceleyin.

Ayrıca, bazı programlama dilleri mevcut dillere ek açıklamalar (pragma veya yorum olarak ) ekleyerek gelişti . Örnekler için, düşünmek ACSL (kendi delillerini etkinleştirmek için C programları açıklama a comment-uzantısı Frama-C ya) OpenCL veya (C lehçesi GPGPUs programlamak) OpenMP veya OpenACC #pragmaler veya Common Lisp tip açıklamaları .

Not: Ayrıca programlama dillerini karıştırmanın sosyal, örgütsel veya tarihsel sebepleri var; Onları burada görmezden geliyorum, ancak pratikte bu nedenlerin baskın olduğunu biliyorum. Ayrıca bakınız Efsanevi Adam Ayı


6
Bana göre bu doğru cevap. Örneğin C programlarında montaj rutinleri alabilirsiniz. UNIX kabuğu birden fazla programlama diliyle doludur ve awkbash betiği içerisinde genellikle görev için daha uygun olması nedeniyle sık sık (başka bir programlama dilidir) bulunur. @ amon'un noktası yine de duruyor.
MayeulC

8
BTW, harika bir programcı bazen kod satırlarını kaldırabilir ... (çok sayıda crappy kod satırını küçük birkaç satırla değiştirerek)
Basile Starynkevitch

12
Harika bir cevap, ancak bir istek: Onları daha az belirgin bir şekilde sunarak "kenarı" belirtme arzusunu takdir ediyorum, ancak HTML SUP etiketini kötüye kullanmayın, çünkü yalnızca küçük bir fontta görüntülemenin yan etkisi var. Bir erişilebilirlik kabusu olmalı ve HTML5 standardının belirttiği gibi, "Bu öğeler yalnızca sunum için tipografik sunum için değil, belirli anlamlara sahip tipografik sözleşmeleri işaretlemek için kullanılmalıdır. [...] Bu öğelerin yokluğu içeriğin anlamını değiştirecektir. "
FeRD

4
@FeRD: kaldırıldı <sup>ama pişmanlıkla
Basile Starynkevitch

6
@BasileStarynkevitch Takdir edildi. Dediğim gibi, niyetini takdir ediyorum ve aşırı derecede ayrıntılı, teğetlere eğilimli bir yazar olarak kendim olarak kesinlikle, StackExchange'in desteklenen bir stil metni metninin daha küçük veya belki de bir açığa vurma kabı içinde daraltılmasını sağladığını diliyorum. Ancak paragraf uzunluğu üst yazıları, bu eksikliğin cevabı değildir.
FeRD

29

Pek çok proje vardır değil birden fazla programlama dilleri ile inşa. Ancak, yazılıma yardımcı olmak için diğer dillerde komut dosyaları kullanmak yaygındır.

  • Ayrı programlar olan yönetim araçları bazen farklı bir dilde yazılmaktadır.
  • Kütüphaneler ve API'ler sıklıkla birden fazla dil için ciltlemeler sunar, böylece geliştiriciler istedikleri dili kullanabilir.
  • Derleme komut dosyaları ve ilgili geliştirme komut dosyaları genellikle özel dilleri kullanır.
  • Bir uygulamanın uçtan uca testlerinde aynı dili kullanmanız gerekmez.

Birkaç proje, uygulama içinde birden fazla dil kullanır, örneğin eklentileri bir betik dilinde birleştirebilen daha düşük seviyeli bir dilde çekirdek. Bazı ekosistemlerde (örn. JVM veya .NET), aynı dil çalışma zamanında birden fazla dilde birlikte çalışabilirlik olması nedeniyle kullanılan dil çok önemli değildir. Örneğin, Scala'da mevcut Java kitaplıklarını kullanan ve komut dosyası işlevselliğini Groovy ile bütünleştiren bir proje yazabilirim.

Bir proje birden fazla araçtan oluşuyorsa, bunlar farklı dillerde de geliştirilebilir. Tutarlılık iyi olsa da, özellikle açık kaynaklı projeler için mevcut geliştirme çabası bir darboğaz olabilir. Birisi yararlı bir araç geliştirmeye istekliyse ancak ana dili iyi bilmiyorsa, belki de bu araç tutarlılıktan daha değerlidir.


3
Bu @ Basile'nin cevabını tamamlıyor. Linux çekirdeğindeki perl scriptleri çekirdeğin bir parçası değil, Makefile de değil Bunun için C kullanarak kazanacak bir şey yok. Dahası, bu perl scriptleri Linux çekirdeğinden bağımsız olarak kullanılabilir. Oldukça sık, bunlar yakından ilişkili bir proje olarak düşünülebilir, ancak farklı projeler . Tek bir görev için genellikle tek bir dil kullanacaksınız.
MayeulC

20

Bunun iki formu ve ikisi arasında bir yere düşen bir çok kuruluşu var:

Kötü form - organizasyon bir karmaşa ve çaba için tek bir teknolojik vizyon olduğundan emin olan kimse yok. Devs en çok hangi dili kullanırlarsa kullansınlar, ya da yeni bir çerçeve ya da dil ile deneyimlendiler ve saf iyimserlik yüzünden onu kullanmaya başlamaya karar verdiler.

İyi biçim - organizasyon çok iyi bir programa sahiptir; uygulamaların iyi tanımlanmış bir sınırlayıcı bağlamda bağımsız bileşenlere dönüştürülmesi ve bu kombinasyon, en basit şekilde söz konusu bileşeni yazmalarına izin veren programlama dilini seçmelerini sağlar.

Gerçek - normalde ikincisinden daha eski. Bir kaç şirketin kendi iş alanı için bir diğeri web sunucusu için bir diğeri, çoğu zaman da veritabanı yönetimi için üçüncüsünü seçtiğini gördüm. üçünün de büyük bir karmaşa içinde bulanıklaştığı ve genellikle karışıklığın belirli bölümlerini çözmek için uygun olan daha fazla dili tanıttığı anlamına gelir.


20

32 yıldır devam eden ve hala bol miktarda yaşamı kalmış gibi görünen bir programlama projesine bir örnek verebilirim. Açık kaynaklı değil, ticari.

Çekirdek, özellikle proje için oluşturulan alana özgü bir dilde yazılmıştır. Bu, özellikle geri dönüşü temel mimariye entegre ettiği için, ancak platformun derleyicisiyle derlediğimiz C kodunu derlediği için son derece yararlı olduğunu kanıtladı. Bu süre zarfında yirmi platforma destek vermiştir, 64'e karşılık 64 bit varyasyonları saymamakta ve şu an bunlardan altı tanesinde satılmaktadır.

C ++ ile yazılmış bir eklenti vardır, ki bu projenin eski bir başkanı C ++ / MFC / Windows / x86'nın diğer tüm mimarileri ve platformları değiştireceğine ikna edildiğinde başlamıştır, bu nedenle C ++ 'a çalışmak için gerekliydi. Personel kiralayabilecektir. İşler beklediği gibi sonuçlanmadı.

Etki alanı dili ve C ++ 'a ek olarak, geliştiriciler, test kablo demeti içine yerleştirilmiş bir tercüman kullanarak test senaryoları yazmak için kullanılan LISP'de çalışmaktadır. Bir noktada LISP'yi Java ile değiştirmeyi düşündük, ancak yapmadığımız için şanslı olduğu ortaya çıktı.

Ayrıca C # ile yazılmış ana API'si için bir sargısı vardır. Bu, müşteriler talep ettiğinde yapıldı, böylece uygulamalarını C # ile tekrar yazabildiler. API'nin C başlık dosyalarını ve ayrıca önemli bir yapılandırma dosyasını okuyan bir Perl betiği tarafından oluşturulur ve sarmalayıcı için C # kodunu yazar. Bütün bu metin işlemlerini Perl'de yapmak C ++ 'da yapmaktan daha kolaydı .

Etki alanı dili, yapı tabanlı yapı sistemlerine uygun olmadığından, kendi başına bir sisteme sahip ve bunlara ihtiyaç duyuyor. UNIX benzeri platformlar için olanı kabuk komut dosyalarına, Perl'ye ve etki alanı dilinde bazı küçük programlara yazılmıştır. Windows platformları için toplu dil, Perl ve etki alanı dilinde aynı küçük programlar yazılmıştır. Eski VMS yapı sistemi DCL'de yazılmıştır, ancak bu on yıldan beri kullanılmamaktadır.

Etki alanı dili için derleyicide bazı YACC / Bison programlaması var. Objective-C ++ ile yazılmış Apple platformları için bir test kodu var. Ekibin dahili web sitelerinin bazıları (teslim edilenlerin bir parçası değil proje yönetimi için kullanılır) ASP'de, diğerleri ise Perl'de CGI betikleri olarak yazılmıştır.

Temel olarak, bu zor bir soruna yönelik bir proje olarak başladı, bu yüzden hala bu iş için mevcut olan her şeyden daha uygun görünen özel araçlar yaratmaya değdi. Ekip, programlamayı, kullanılan dilden biraz bağımsız bir beceri olarak görüyor, bu yüzden bir görevi kolaylaştırırsa, yeni bir dil kullanmaya istekli oluyorlar. Bununla birlikte, moda öncelikler listesinde üst sıralara çıkmaz, dolayısıyla yeni bir dili bir araya getirerek bir görevi parçalamazlar.

Bu kodun işlevi, iş istasyonlarında ve sunucularda kullanılan matematiksel modellemedir (ürünü tanımlamazsam biraz daha özgürce konuşabilirim). Toplamda yaklaşık elli kişilik bir ekiple şu anda yaklaşık 25 milyon LoC'dir.


Bu yazılım ürünü hakkında biraz daha bilgi vermek güzel olurdu: örneğin hangi endüstriyel alan (nöroşirürji robotları yüksek frekanslı ticaretle aynı değil)? Yaklaşık boyutu (milyonlarca kod satırında)? Hangi takım büyüklüğü?
Basile Starynkevitch,

@BasileStarynkevitch: ayrıntılar ekledi.
John Dallman

Bu. İşte bu yüzden, projelerin iyiden kötüye, çirkin dilden çoklu dilleri vardır.
Jared Smith

15

Bazı durumlarda, belirli bir dilden kolayca erişilebilecek bir araç (işletim sisteminin kullanıcı arayüzü araç takımı gibi) vardır. Örneğin, iOS ve macOS'ta, UIKit ve AppKit kullanarak GUI uygulamaları yazmak istiyorsanız, Swift veya Objective-C ile yazmak en hızlı ve en kolay yoldur. (Diğer diller için bağlayıcılar olabilir, ancak bunlar, oluşturduğunuz en son işletim sistemi sürümünün arkasında olabilirler, bu nedenle tüm özellikleri sunmayabilirler.)

Genellikle, bir uygulama çapraz platform olduğunda, uygulamanın temel mantığı her ikisinin de erişebileceği bir dilde yazılır ve UI / OS'ye özgü parçalar, hangi dilde çalışırlarsa çalışırlar.

Bu nedenle, bir Windows ve macOS uygulaması yazıyorsanız, çekirdek mantığı C ++ dilinde yazabilir ve Windows'taki UI için C # ve MacOS'taki UI için C # kullanabilirsiniz. Bu, zamandan tasarruf etmenizi sağlar çünkü çekirdek mantığı iki kez yazmanıza gerek yoktur ve her iki uygulamada da farklı hata setleri ile uğraşmanıza gerek kalmaz. Fakat aynı zamanda, kullanım gibi platformlar arasında en düşük ortak paydaya uymayan gerçek bir yerel UI sağlar. platformlar arası bir UI kütüphanesi olur.


MVC FTW! Her bir işletim sistemi / çevre için sarmalayıcı uygulamaları olan tek bir çapraz platform çekirdeğine sahip olmak ... ya da modern bağlantı dünyasında, onu bir istemci / sunucu mimarisine taşımak
ivanivan

1
Bu benim kendi tecrübemle uyuşuyor. Üzerinde çalıştığım her büyük proje birden fazla dil kullandı ve birçok dilin faydası olmadı. Sebep her zaman, belirli araçlarla arayüz oluşturmak için belirli bölümlerin belirli dillerde yazılmış olmalarıydı.
Owen,

Eski bir iOS geliştiricisi olarak, bunu yaptığımızı doğrulayabilirim. PHP'de yazılmış, Java'da yazılmış bir web ön yüzü olan JSON'da, Java'da yazılmış bir Java / HTML5 kısmı, Java'da yazılmış bir Android ön yüzü ve Objective-C'de yazılmış bir iOS ön yüzü bulunan bir API'ye sahibiz. . Daha sonra Swift'de yeni projeler yazıldı, fakat iç çerçevemiz hala Objective-C'de yazıldı. Yani bir noktada uygulamalarımızdan biri PHP, Java, Objective-C, Swift, JavaScript ve HTML5 ile yazılmış ve 3 platformda mevcut.
Belle-Sophie

10

Bazı programlama dillerinin bazı özel görevler için daha uygun olabileceğine ek olarak, pratik gerçeklik de vardır.

Pratik gerçeklikte dikkate alınması gereken 2 önemli nokta vardır:

  1. İnsanlar farklı programlama dillerinde farklı deneyime ve ilgi seviyelerine sahiptir. - İnsanların sevdikleri ve uzman oldukları dillerde çalışmasına izin vermek, bazı durumlarda onları ortak bir dile zorlamaktan daha iyi sonuçlara yol açabilir.
  2. Büyük kod tabanları, farklı kişiler tarafından uzun süre boyunca oluşturulur. - Daha iyi bir dil ortaya çıktıktan sonra bütün bir projeyi yeniden yazmak için gereken fonu veya gönüllülerin miktarını almanın bir yolu yoktur.

Ve elbette, örneğin, tamamen farklı ihtiyaçları olan bir uygulamanın belirli bölümleri de vardır:

  • Derlenmiş bir dilde geliştirilen performansa duyarlı alanlar. Örnek dil: C ++
  • Bir betik dilinde geliştirilmiş, ucuz, değiştirilmesi kolay ve potansiyel olarak özelleştirilebilir alanlar. Örnek dil: Lua.
  • GUI Düzeni. Örnek dil: HTML
  • Yükleyici. Örnek dil / araç: WiX.
  • İnşa etmek. Örnek dil / araç: Listelenecek çok fazla, genellikle bir kerede birkaçı.

Üstelik, karmaşık bir kod temeli tarafından kullanılan ve çoğu başka bir dilde gerekli kişiselleştirmeye ve eklentilere izin veren oldukça az sayıda araç var.


8
HTML bir programlama dili değildir
Bergi

1
@ Doğru Doğru. Peter öyle olduğunu iddia etmiyor. Bu bir biçimlendirme dilidir.
Belle-Sophie

1
HTML, XAML, QML, vb. Programcıların yazılım projelerinde bilgisayara ne yapacaklarını anlatmak için kullanılan dillerdir - diller genellikle kesinlikle gerekli değildir, çünkü programcılar UI dahil tüm projeyi teorik olarak tek bir dilde yazabilirler. Bu soru bağlamında onu alakalı yapan da budur.
Peter,

5

Halihazırda yapılmış doğru noktalara ek olarak:
Tecrübelerden, birçok dil veya çevre kararları, 'bir çekiçiniz varsa, her şey bir çiviye benziyor' tarafından alınmaktadır, yani insanlar, aşina oldukları araçları kullanma eğilimindedir.

Buna ek olarak, yeni bir ortam tanıtan ve hatta dil lisansı, eğitimler, belki donanım önemli bir yatırım olduğunu ve üretken zamanın büyük kayıplarla gelir - Her almak tren, yapılandırmak yüklemek temin hafta daha büyük bir şirkette, ve temelde sona acemi geliştiricileri bir sürü kadar.
Temelde asla daha modern veya daha uygun bir çevreye ya da dile 'yatırım yapma' zamanı yoktur, bu yüzden artık işe yaramaz hale gelinceye kadar sahip oldukları şeylere bağlı kalıyorlar.

Sorunuzla ilgili olarak, birden fazla kişi / ekip bir çözümün geliştirilmesine katılıyorsa, her grup en iyi bildiklerine bağlı kalmaya meyillidir, bu nedenle genel çözümün içinde potansiyel olarak birden çok dil vardır ve birden fazla ortamda gelişme olabilir.


5

Bu sorunun (ve bazı cevapların) uygulamaların tek kodlu kod blokları olduğunu varsaydığı görülüyor - bu mutlaka böyle bir şey değil.

Stack Exchange gibi tipik web siteniz aslında birbirlerinden bağımsız çalışan, aralarında bir çeşit mesajlaşma olan bir sürü farklı hizmettir. Bu hizmetler, her biri kendi güçlü yönlerine sahip farklı dillerde uygulanabilir (ve genellikle uygulanır).

Küçük topluluk bankalarını ve kredi birlikleri hedefleyen küçük bir çevrimiçi bankacılık platformunun şeritlerinde çalışıyorum. Bu platform birden fazla bileşene sahiptir - bir Web ön ucu, bir veritabanı katmanı, bir üçüncü taraf iletişim katmanı, vb. Bunlar farklı işletim sistemlerine sahip farklı sunucularda çalışan bağımsız uygulamalardır. Tarayıcıda istemci tarafında çalışan Javascript'e sahipsiniz, sunucu tarafında Perl sayfalar oluşturuyorsunuz, C ++ ile yazılmış bir çok hizmetiniz var. mesajların çeşitli katmanların, C ++ uygulamalarının dağılması ve çeşitli işlemlerin sağlığını izlemek ve durumlarını dahili bir monitöre vb.

Monolitik uygulamalar hala mevcuttur, ancak farklı nedenlerden dolayı farklı dillerden faydalanabilirler. Bir uygulamanın% 90'ını Java'da yazabilirsiniz, ancak daha fazla performans gösteren kritik bölümler için C veya C ++ 'dan yararlanmak için JNI'yi kullanın.


Hiç kimsenin SQL'den (ya da seçtiğiniz bir sorgu dilinden) bahsetmediğine şaşırdım, çoğu uygulama günümüzde onlara en azından bir çeşit "yığın" mimarisi veriyor.
user3067860

3

FORTRAN: “Farklı dillerin farklı güçlü yönleri var” motifinin çok özel bir örneğini belirtmek isterim.

Fortran, mühendislerin sayısal analiz çalışmaları yapmasını kolaylaştırmak için aslında geliştirildi ve Fortran derleyicilerinin çok verimli sayısal kodlar yayınlaması için çok çaba sarf edildi. Öte yandan, bu ilk günlerden beri bilgisayarların kullanımı binlerce tanesi patladı, hiçbiri sayısal analiz içermiyordu ve programlama dillerinin gelişimi büyük ölçüde “gerçek” dünyayı görmezden gelmişti.

SO: Bugün, ve kendinizi oldukça yaygın bir ürüne sahip bir şirket için çalışırken buluyorsunuz, birçoğu Java'da yazıyor (diyelim) (burada kişisel deneyimim var) . Ancak, ürünün temel özelliklerinden birinin bir nümerik analiz biçimi elde edeceğini ve bu özel analiz için en iyi kodların hepsinin internette Fortran'da bulunduğunu göreceksiniz. Ee ne yapıyorsun? Bu Fortran kodlarından birini indirir, arayüzünü [yani en üstteki alt rutinin argümanları] hesaplar, C için bir JNI sargısı hazırlar ve bir Java sınıfı olarak paketlersiniz. BAM! Aynı anda üç dilde gelişmeniz gerekiyordu. [özellikle Fortran kodunuzun COMMON blokları - yani statik depolama - kullandığını ve iplik güvenliği için değiştirilmesi gerektiğine karar verirseniz]


4
Veya iyi test edilmiş FORTRAN bilgi işlem çekirdeğiniz bir noktada, önceden C'ye yazdığınız işaretçilerde bir yığın sıralaması yapılmasına bağlı yeni bir algoritma çağırarak iyileştirilebilir. tarayıcı esnek. Oh, ve belki de C ++ 'dan aramanız gereken bir GUI isteyebilirsiniz. Veya müşteri gerçekten her şeyi bir Matlab alt programı olarak çağırmak ister ...
jamesqf

3

Çünkü programlama tek bir görev değildir. Bir ürün oluşturmak bile tek bir iş değildir. Farklı dillerle en iyi ifade edilen birden fazla görev türü vardır.

Daha somut hale getirmek için, bağımsız bir uygulama gibi basit bir şeyi varsayalım (dağıtılmış uygulamalar için gerçekleştirilecek daha fazla iş vardır).

Bir ürün olması gerekiyor

  • yazılı
  • bir araya getirmek (dağıtım için resimler, yazı tipleri vb. kaynakların hem derlenmesi hem de toplanmasını içerir)
  • konuşlandırılmış
  • yapılandırılmış
  • izlenen

Bir ürünün çalışma zamanını yazmak için iyi olabilecek bir dilin bir ürünü bir araya getirmek için iyi olması pek mümkün değildir. Ve bunun gibi.

Bununla birlikte, bir ürün yazma işlemi bile 1 dilde en iyi şekilde yapılamayabilir.

Diyelim ki üründe ele alınan çok sayıda yapılandırılmış veri var. Verilerin yapısı yazım sırasında biliniyor mu? Öyleyse, dağıtım sırasında bazı veritabanlarını yapılandırmak istersiniz. Bu, çalışma sürenizi derleyecek dili üretebilecek bir dilde en iyi şekilde yapılır.

Şimdi, verilerin yapısı zaman zaman değişebiliyorsa ne olur? Daha sonra, yeni veri yapılarını kod ve veritabanı yapılandırmasına dönüştürmek için yapılandırılmış bir yol gerekir. Bu en iyi başka bir dilde yapılır.

Hepsini aynı dilde yapabilir misin? Elbette. Ancak etkinliğiniz, bir projeyi ne kadar çabuk bitirebileceğiniz ve değişikliklere ne kadar dayanıklı olduğu ile belirlenir. Halihazırda var olan araçlarla işlerin çoğunu otomatize edebiliyorsan, o zaman 3 ayını aldığın şey 2 gün içinde başkası tarafından yapılabilir. Fakat birisinin, tekrarlama yoluyla ne yapacağınızı otomatikleştirmek için başka dilleri kullandığı söylenebilir.


Programlama dilleri rastgele sürecin çıkmıyorlar ... “bir ürünün çalışma süresini yazma için iyi olabilir Bir dil gibi iyi olmak çok olası değildir”, bu yüzden garip biraz bahsetmek var olasılığının bu şekilde. Programlama dilleri bazı görevleri çözmek için tasarlanmıştır . Şimdi demek istediğim, bir dilin kazara , çözmek için tasarlanmadığı başka bir sorunu da çözmesi pek mümkün değildir. Programlamanın özünün bir kişinin çözmek isteyebileceği tüm problemleri soyutlamak olduğunu ve gerçekten iyi tasarlanmış bir dilin bu nedenle herhangi bir görev için iyi olması gerektiğini savunuyorum.
leftaroundabout

@leftaroundabout, bir dilin ne yapabileceğini ve iyi ifade ettiğini karıştırmak için yaygın bir hatadır. Üst düzey bir dilin amacı bir sorunu çözmek değildir. Bazı araçların bu ifadeyi bilgisayarın gerçekleştirmesi için bir göreve dönüştüğü bir şekilde bir soruna çözüm bulmak için sözdizimi görevi görmektir. Bunu göz önüne alarak, gerçek ifade etme işinin insanlar tarafından yapıldığını hatırlamak önemlidir. İnsanlar farklı alanlardan gelen sorunların çözümlerini tanımlamak için farklı soyutlamalar kullanır.
grovkin

İnsanların farklı soyutlamalar kullandığından emin olun. Demek istediğim, iyi bir dilin tüm bu soyutlamaları ifade edebilmesi gerektiğidir.
leftaroundabout

@leftaroundabout, hiç de değil. Bir şeyi iyi ifade etmek, bir şeye doğrudan yön vermeyi gerektirir. Tüm soyutlama türlerini iyi ifade etmeye çalışmak, hepsine dikkat çekmek anlamına gelir. Bu da dikkatleri dağıtır ve fikirlerin zayıf ifade edilmesine neden olur. Neyin vurgulanacağına ve ona odaklanıldığının seçilmesinde yanlış bir şey yoktur.
grovkin

Bir yere dikkatini yönlendirebilmek aslında bunu yapmakla aynı şey değil.
18'de

1

Yazılım geliştirme Eğer noktaya ilerlemiştir olabilir aynı projede farklı programlama dillerini kullanır ve o iş yapabilirsiniz.

O zaman neden birden fazla dil kullanacağınız sorusu var .

Bunun bir nedeni, dillerin modası geçmiş ve yavaş yavaş yenileri ile değiştirilmiş olmaları ve eğer şanslıysanız, azar azar yapılabilir. Böylece projeniz eski ve yeni bir dil karışımına sahip olacak.

Diğer bir neden, X dilinin A platformunda kullanılanların çok olduğu durumdur, Y dili B platformunda kullanılanların çok fazla olmasına karşın, Z dili her iki platformda da desteklenmektedir. Bu nedenle, ortak kod, platformda bağlı olarak, daha sonra X veya Y ile birleştirilen Z dilinde yazılmıştır.

Ve insanlar başkaları tarafından yazılmış kodları kullanmayı severler (başka bir deyişle, kendileri yazmak için zaman harcamak zorunda olmadıkları kodları). Başkaları tarafından yazılmış bir kodu herhangi bir dilde kullanmaktan çekinirler ve ardından istedikleri dilde kod eklerler.


8
İlk cümle hakkında: karma dil programları 50 yıldan fazla bir zamandır bir şey olmuştur.
Blrfl
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.