Eski programlama dilleri neden revize edilmeye devam ediyor?


46

Bu soru , "Neden insanlar hala eski programlama dillerini kullanıyor?" Değil. Bunu oldukça iyi anlıyorum. Aslında en iyi tanıdığım iki programlama dili, her ikisi de 70'lere dayanan C ve Scheme'dir.

Son zamanlarda C99 ve C11'deki C89 ile C89 arasındaki değişiklikleri okudum (hala pratikte C'nin en çok kullanılan versiyonu ve K & R'den öğrendiğim versiyon gibi görünüyor). Etrafa bakınca, yoğun kullanımdaki her programlama dili, en az on yılda bir kez yeni bir özellik kazanıyor gibi görünüyor. Fortran bile, hala kullananların çoğunun hala FORTRAN 77 kullanıyor olmasına rağmen hala yeni revizyonlar alıyor.

Bunu, örneğin, TeX'in dizgi sistemi yaklaşımıyla karşılaştırın. 1989'da, TeX 3.0'ın piyasaya sürülmesiyle Donald Knuth, TeX'in özelliklerin tamamlandığını ve gelecekteki sürümlerin yalnızca hata düzeltmeleri içereceğini açıkladı. Bunun ötesinde, ölümü üzerine "kalan tüm hataların özellik haline geleceğini" ve kesinlikle daha fazla güncelleme yapılmayacağını belirtti. Diğerleri TeX'i çatallamakta özgürdür ve bunu başarmıştır, ancak ortaya çıkan sistemler, resmi TeX'ten farklı olduklarını belirtmek için yeniden adlandırılmıştır. Bu, Knuth'un TeX'in mükemmel olduğunu düşündüğü için değil, elli yılda aynı şeyi yapacak olan istikrarlı, öngörülebilir bir sistemin değerini anladığı için değil.

Neden çoğu programlama dili tasarımcısı aynı prensibi izlemiyor? Elbette, bir dil nispeten yeni olduğunda, yerleşmeden önce hızlı bir değişim döneminden geçeceği anlaşılır. Ve hiç kimse, mevcut sözde standartları kodlamaktan veya istenmeyen okumaları düzeltmekten çok daha fazlasını yapmayan küçük değişikliklere karşı çıkamaz. Ancak bir dil on ya da yirmi yıl sonra hala gelişime ihtiyaç duyuyorsa, neden kullanılmakta olanı değiştirmeye çalışmak yerine neden sadece onu kullanmıyor ya da yeniden başlamıyorsunuz? Bazı insanlar gerçekten Fortran'da nesne yönelimli programlama yapmak istiyorlarsa, neden bu amaç için "Objective Fortran" oluşturup Fortran'ı yalnız bırakmıyorlar?

Sanırım, gelecekteki revizyonlardan bağımsız olarak, C89'un zaten bir standart olduğunu ve hiçbir şeyin insanların onu kullanmaya devam etmesini engellemediğini söyleyebilirim. Bu doğru, ancak çağrışımların sonuçları var. GCC, pedantik modda, ya C99 programında yeni standardı tamamen görmezden gelemeyeceği anlamına gelen, ya C99'da ya kullanım dışı ya da çok farklı bir anlama sahip olan sözdizimi hakkında uyarır. Öyleyse, C99'da bu ek yükü dili kullanan herkese dayatmak için yeterli olan bir fayda olmalı.

Bu gerçek bir soru, tartışmak için bir davet değil. Açıkçası bu konuda bir fikrim var, ama şu anda bunun neden sadece işler böyle yapılmadığını anlamaya çalışıyorum. Sanırım soru şudur:

Eski dili temel alan yeni bir dil yaratmanın aksine, bir dil standardını güncellemenin (gerçek veya algılanan) avantajları nelerdir?


2
Birçok derleyici daha eski standartları uygulayacak anahtarlarla çağrılabilir (örneğin, GCC'nin --std=xanahtarı), bu nedenle daha yeni standartlar oluşturmak sanki daha eski kodu dengesizleştiren araçlarla sonuçlanır.
Blrfl

2
Eski dili temel alan yeni bir dili nasıl tanımlarsınız? Fortran 90’ın eski F77’ye dayanan “yeni bir dil” olduğunu savunuyorum. Programlama biçiminizi tamamen değiştirdi - serbest veya sabit kaynak, dinamik ve statik bellek vb. Sabit. Ayrıca Fortran 2003'ün F90'a dayalı "yeni bir dil" olduğunu da iddia edebilirsiniz. C ++ ve C arasındaki ilişki gibi Ses
tpg2114

1
Bu sorunun çok önemli olduğunu düşünüyorum ve bazılarının neden kapatmak istediğini anlamıyorum. Muhtemelen bazı açıklamaları olan çok ilginç bir fenomendir. Birkaç (20?) Yıl önce Fortran'ın yeni özelliklerini okuyordum ve kendime sordum: eğer Fortran programcıları bu özelliklere ihtiyaç duyuyorsa, neden sadece C'ye geçmiyorlar? Son zamanlarda C ++ ile ilgili benzer düşüncelerim vardı: eğer C ++ geliştiricileri lambdas kullanmak istiyorsa, neden OCaml'e ( linux-nantes.org/~fmonnier/ocaml/ocaml-wrapping-c.php ) geçmiyor ? Neden yeni bir dil oluşturmayı ve hala C ++ demeyi tercih ediyorlar?
Giorgio

3
@ tpg2114 (FORTRAN 77: Fortran 90) ve (C: C ++) arasındaki fark, Fortran 90’ın, FORTRAN 77’nin yerine geçtiğini düşünmesidir, “Fortran öğrenmek istiyorsan Fortran 2003’ü öğren. en azından 90, çünkü şimdi standart. " Kimse "C öğrenmek istiyorsan, C ++ öğren çünkü yeni standart budur" gibi bir şey söylemez çünkü iki farklı dil olarak sunulurlar. Dediğim gibi, çağrışımların sonuçları var.

6
ÇÜNKÜ ASLA KALMAYACAK
Adel

Yanıtlar:


13

Dil tasarımcılarının var olan dilleri gözden geçirme konusundaki motivasyonunun, hedef geliştirici topluluğunun bir arada kalmasını ve yeni dili benimsemesini sağlarken inovasyonu sağlamak olduğunu düşünüyorum: mevcut bir topluluğu mevcut bir dilin yeni bir revizyonuna taşımak, yeni bir topluluk oluşturmaktan daha etkilidir. yeni bir dilin etrafında. Elbette, bu, bazı geliştiricilerin, eskisi ile iyi olsalar bile, yeni standardı benimsemelerine zorlar: bir toplulukta, toplumu bir arada tutmak istiyorsanız, bazen bir azınlığa belirli kararlar vermeniz gerekir.

Ayrıca, genel amaçlı bir dilin mümkün olduğunca çok sayıda programcıya hizmet vermeye çalıştığını ve sıklıkla tasarlanmadığı yeni alanlara uygulandığını düşünün. Dolayısıyla, tasarımın sadeliğini ve istikrarını amaçlamak yerine, topluluk, dil yeni uygulama alanlarına geçerken yeni fikirleri (diğer dillerden bile olsa) dahil etmeyi seçebilir. Böyle bir senaryoda, ilk denemede doğru elde etmeyi bekleyemezsiniz.

Bu, dillerin yıllar içinde derin bir değişim geçirebileceği ve en son revizyonun birincisinden çok farklı görünebileceği anlamına gelir. Dilin adı teknik nedenlerden ötürü tutulmaz, ancak geliştiriciler topluluğu yeni bir dil için eski bir isim kullanmayı kabul eder. Böylece programlama dilinin adı, dilin kendisinden ziyade kullanıcılarının topluluğunu tanımlar.

IMO, birçok geliştiricinin bunu kabul edilebilir bulmasının (veya hatta arzu edilmesinin) nedeninin motivasyonu, biraz farklı bir dile kademeli bir geçişin, onları ustalaşmak için daha fazla zaman ve çaba harcayacak olan tamamen yeni bir dile atlamaktan daha kolay ve daha az kafa karıştırıcı olmasıdır. Bir veya iki favori dili olan ve yeni (çok farklı) dilleri öğrenmeye çok hevesli olmayan birçok geliştirici olduğunu düşünün. Ve yeni şeyler öğrenmek isteyenler için bile, yeni bir programlama dili öğrenmek her zaman zor ve zaman alıcı bir faaliyettir.

Ayrıca, daha az bilinen bir dil kullanan çok küçük bir topluluğa göre daha büyük bir topluluğun ve zengin bir ekosistemin parçası olması tercih edilebilir. Bu nedenle, topluluk devam etmeye karar verdiğinde, birçok üye izolasyondan kaçınmak için takip etmeye karar verir.

Bir yan yorum olarak, eski kodla uyumluluğu korurken evrime izin verme argümanının oldukça zayıf olduğunu düşünüyorum: Java C kodunu arayabilir, Scala Java koduyla kolayca entegre olabilir, C # C ++ ile bütünleşebilir. Kaynak kod uyumluluğu gerekmeden başka bir dilde yazılmış eski kodla kolayca arabirim kurabileceğinizi gösteren birçok örnek vardır.

NOT

Bazı cevaplardan ve yorumlardan, bazı okuyucuların soruyu "Programlama dillerinin neden gelişmesi gerekiyor?" Olarak yorumladığını anlıyorum.

Bence bu sorunun asıl amacı bu değil, çünkü programlama dillerinin gelişmesi gerektiği ve bunun nedenleri (yeni gereksinimler, yeni fikirler) olduğu açık. Asıl soru, "Bu evrim neden birçok yeni dil üretmek yerine bir programlama dili içinde olmak zorunda?" Sorusudur.


Bu cevap, burada gördüğüm herhangi biri için en anlamlı olanıdır: bir dili güncellemek, mevcut toplulukları, kütüphaneleri vb. Miras almanıza izin verir. bir topluluğun bakımını zorlaştıran uyumsuz lehçeler; Mevcut bir dili güncellemek, diğer toplulukları aynı şekilde parçalamaktan kaçınmanın bir yolu olabilir.

@ SunAvatar: Bildiğim kadarıyla Lisp'in lehçeleri var ama bazıları diğerlerinden daha başarılı (Common Lisp, Scheme, Racket, Clojure). Ne zaman yeni bir dile başlarsanız, sadece çok küçük bir topluluğun etrafında toplanma riskini alırsınız. Lisp toplumunda bu yaygın bir uygulama gibi görünmektedir: eğer birinin yeni bir fikri varsa, neye daldığını ve ne olduğunu görürler. Diğer dillerin yaratıcıları için toplumu kaybetmek bir seçenek değildir.
Giorgio

@ SunAvatar: Var olan kütüphaneleri miras almayı güçlü bir argüman olarak görmüyorum. Bunun için kaynak kodu uyumluluğu gerekmez. Örneğin Clojure ve Scala'nın Java kodunu nasıl kullanabileceğini görün.
Giorgio

1
Diller ölmez, yalnızca onları kullanan programcılar.
Evan Plaice,

@ SunAvatar: Farklı bir politika izlemeye çalışan topluluklar da var: bir ad bir dili tanımlar ve eğer topluluğun bir kısmı çok fazla farklılaşan bir lehçe oluşturursa, karışıklığı önlemek için yeni bir ad kullanırlar. Bakınız, örneğin, racket-lang.org/new-name.html
Giorgio

21

Geriye Uyumluluk cevabınız. Belirli bir dilin, özellikle C gibi yaygın bir şekilde kullanılan bir dil, on yıllardır kullanılmayan, değiştirilmekte olan bir kodu olabilir. Bakım yapılması gerekiyorsa, geliştirme çalışmaları için modern sistemler üzerinde çalışırken hala bu tür bir platformu hedef alabilecek derleyicilere sahip olmanıza yardımcı olur. Standardizasyonlar ve dil sürüm güncellemeleri, programlama uygulamalarını güncel tutarken, yepyeni bir dil öğrenmeye dirençli olan kıdemli programcılar için bir aşinalık duygusu sağlar.

Güncellenen dillerin çoğunun "yeni parlak uçların takılı olduğu" kadar az güncellendiğini unutmayın. Eskiden yaşayan hayvanlar genellikle hala içinde gizleniyor.

Knuth gittiği sürece, onun akademik olduğunu ve TeX'in yalnızca doğru olduğunu kanıtladı, güncellendiğini unutmayın.


14
Tex'in problem alanı = bilimsel makale metnini biçimlendirmek çok fazla değişmedi. Programlama dillerinin etki alanı = yeni bilgisayarlar için yeni kullanımlar bulmak, daha geniştir. Latince'nin İngilizce'den çok fazla yeni kelime eklememesinin nedeni aynı
Martin Beckett

Geriye dönük uyumluluğun geçerli bir neden olduğunu düşünmüyorum: Scala, mevcut Java koduyla kolayca tümleştirilebilir, ancak bir üst düzey Java kümesi değildir. Bu yüzden genel olarak, yeni bir dilin kaynak kod düzeyinde eski bir dille uyumlu olmasının gerekli olmadığını düşünüyorum. Eski kodu yeni koddan çağırmak için iyi tanımlanmış bir mekanizmaya sahip olmak yeterlidir.
Giorgio

@ Martin Beckett: "Tex'in problem alanı = bilimsel makale metnini biçimlendir, fazla değişmedi.": Sorunun amacını kaçırdığını düşünüyorum. OP, programlama dillerinde inovasyonun olup olmadığını sormuyor (hiç kimse inovasyonun gerekli olduğunu inkar edemez) ama neden yeni diller oluşturmak yerine eski dillerin revize edildiğini soruyor.
Giorgio

Sistemler zaman, para ve uzmanlık yatırımları üzerine kuruludur (belirli bir dilde edinilen deneyim). Yeni çabalar, bakım çabalarından önemli ölçüde daha pahalı (üç kategoride de). Genel olarak dil ve platformda iyileştirmeler olmadan, bakım maliyeti artar, ve sonra yeni bir sistemin maliyeti daha çekici olur ve COBOL uygulamasının sekizinci kez yaşamı boyunca sekizinci kez tamamen farklı bir platforma uygulanmasının gerçek anlamda yeniden canlandırılması görünmeyebilir Artık böyle büyük bir anlaşma gibi.
JustinC

COBOL dilinin güncellenmiş standartları için değildi ve COBOL aracı uygulayıcıları, yol boyunca kendi benzersiz özelliklerini ekleyerek, dili geliştirdi ve daha geniş, yaygın, modern platformlarda çalışma becerisini geliştirdiler; Uygulamanın 60 yıl hayatta olmazdı. Göreceli maliyetler yaşamında kesinlikle daha sonra yükselirken, artan uzmanlık kıtlığından dolayı, bir bütün için harcanan çaba, o anadilin ortaya çıkmasıyla ilgili düzenli bir yeniden yazma ile karşılaştırıldığında dolar üzerindeki kuruşaydı.
JustinC

5

Bence bariz cevap, dil tasarımında ve sistem mimarisinde ilerlemenin hala sürdüğü ve yeterince insanın daha yaşlı dillere cıvatalanmaktan daha yeni tekniklerden (çoklu çekirdek, daha iyi iş parçacığı veya bellek modelleri) faydalanmak istediklerini umduğudur. dil standardında veya üzerinde pişmiş. Ayrıca, bazı üçüncü taraflara bağlı olarak, hangi derleyici veya platformda olursanız olun, orada olacağınıza güvenebileceğiniz şeyleri (örneğin, XML ayrıştırma, DB erişimi) yapmak için "gerçek bir yolun" olmasına yardımcı olur. yüklenebilecek veya yüklenmeyecek kitaplık (ve istediğiniz sürümde olabilir veya olmayabilir).


Öyleyse, neden "eski dilleri yeterince önemsiyor" ise, cevabınızın "mevcut dillere duygusal bağlanma" olarak değiştirilebileceğini söyler misiniz? Bunu umutsuzca söylemiyorum, sadece cevabını anlamaya çalışıyorum.
Avner Shahar-Kashtan

Hayır, dillerin hâlâ aktif kullanımda olduğunu ve en yeni tekniklerden yararlanmak isteyen insanlar tarafından kullanıldığını söyledim. ALGOL'e kimsenin okuyuculu desteği ekleyeceğini sanmıyorum çünkü (AFAIK) aktif olarak kullanılmıyor. FORTRAN ve COBOL, yine de, yeni sistemler geliştirmek için hala kullanıldığından, dil özellikleri yeni teknikler ve teknolojiler içerecek şekilde periyodik olarak güncellenmektedir.
TMN

1

Genel amaçlı bir dilin etrafında inşa edilmiş temel kavramlar veya hedefler uygunluğu kaybetmez; bununla birlikte çalışma ortamındaki veya donanımdaki küçük değişiklikler, bir dile güncellemeler veya küçük özellikler eklenmesini gerektirir.

Algoritmaların bir dilde ifade edilme şekli, 64 bit türleri için daha temiz desteğe veya daha fazla standart düzenli ifade desteğine veya yeni dosya sistemleri türleri için daha sağlam desteğe ihtiyaç duymasına rağmen değişmeyecektir.

Mevcut dillere 'yeni' özelliklerin eklendiği birkaç durum vardır, ancak çoğu durumda bu değişiklikler insanların zaten zorlaştığı şeyleri basitleştirmeye yöneliktir. (İşlev işaretçiler ve işlevler yerine yüksek dereceli işlevler kullanarak C ++ 'a bakın.)


1
İkinci paragrafta anlattığınız değişiklikler, göz ardı edilemez niteliktedir (yani sadece itiraz etmediğimden değil, hiç kimsenin ciddi olarak itiraz edemediği anlamına gelir). Lambda'lara gelince, C ++ 'daki faydaları hakkında yorum yapamıyorum, fakat algoritmaların ifade edilme şeklini değiştirmiyorsanız neden eklemeyi tercih etmiyorsunuz ?

Oh, inanılmaz derecede faydalılar. Beni yanlış anlama. C ++ 'da (IMO) en önemli eklentilerdir. Sanırım orada ne kastettiğim konusunda net değildim. Biri genellikle C ++ 'ı belleğe, deterministik performansa ve yüksek optimizasyon potansiyeline doğrudan erişim için seçer. Bu son eklemelerle değişmiyor. C ++ 'ı seçtiğiniz neden diğer programlama görevlerinin birçoğunu basitleştiriyoruz, ancak C ++ aynı nedenlerle hala geçerli ve kullanışlıdır. Düzen düzenli olarak güncellenir, ancak veri olarak kod ve lispyness değişmez, bu nedenle bugün 20 yıl önce olduğu gibi aynı nedenlerle düzeni seçersiniz.
Ben

“Lambda'lara gelince, C ++ 'daki faydaları hakkında yorum yapamıyorum, fakat algoritmaların ifade edilme şeklini değiştirmemek için neden onları eklemeye zahmet etmiyorsunuz?”: Daha da ileri gidiyorum: başından beri onları oldu?
Giorgio

2
@Giorgio Dilde önbellek ve soyutlama özelliklerini kontrol altına almak. Eğer hiçbir dil mevcut değilse, ikisini de feda etmeden dilleri değiştiremezsin. Bir dili değiştirmeli veya yeni bir tane oluşturmalısınız.
mike30 14-21

@mike: "Önbellek özellikleri" ile neyi kastediyorsunuz?
Giorgio

-2

Bu biraz konuşulan dili düşünmek gibi.

Geçmişte, şu anda olduğu kadar sık ​​kullanılmayan (ya da farklı bir anlam için kullanılan) sözcükler vardı.

Örneğin. nice: in (very old) ingilizcesi, günümüzde kullandığımızın neredeyse ters anlamını taşıyor, özellikle birinin karakterini tanımlamak için kullanıldığında.

Kötü: çok uzun zaman önce kötü, sadece tek bir anlamı vardı, şimdi "süper şaşırtıcı" bir şey anlamına gelebilir (fesicous bir şekilde kullanılır (muhtemelen yazım fesicous'u özlüyorum)!

bir diğer yeni gelişme yazılı diller için cep telefonu olan 'Text speak'.

Neden bir programlama dilinin benzer şekilde gelişmeyeceğini şahsen görmüyorum, kelimeler ve işlevler anlam / eylemler belirledi ve yeni fikirler, yeni metodolojiler içerecek şekilde değişmesi gerekiyor.

Birçok farklı dil konuşan insanları tanıyorum ve sık sık 3. veya 4. saatten sonra yeni bir dil öğrenmenin daha kolay olacağını öne sürüyorlar.

Benzer deneyime sahip programcılar varsa bilmiyorum, olsaydı şaşırmam.

JAVA'da programlamada mutluluk duyduğumu biliyorum (ingilizce konuşmayı düşündüğüm kadarıyla) Bu, 'amerikan ingilizcesi' veya 'avustralya ingilizcesi' ile iletişim kuramadığım anlamına gelmiyor. . Java'dan PHP'ye, Perl'e gitmek gibi, yapıları benzer, ancak beni yakalamak ve başımı duvara basmak için çok az şey var.

Bu, İngilizce'den Fransızca'ya veya Java'dan SAS'a geçiş yapmaktan farklıdır. bunlar o kadar farklı ki, onlara yetkin olmak biraz zaman alıyor.

Neyse, bu benim üstüm.


Bence "yozlaşmış" olduğunu düşünüyorsun.
uliwitness
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.