Turing tamlığı dışındaki güç ölçüsü


18

Başlangıçta bunu StackOverflow üzerinde sormaya çalıştım, ama çok özneldi :-(. Programlama dillerinin gücünü tanımlama yöntemleri ile ilgileniyorum. gerçekte kullanılan programlama dilleri arasında ayrım yapan güç ölçüsü Örneğin, montaj ve Java arasında ayrımcılık yapacak öznel olmayan bir yöntem önerilebilir mi?

Tamlığı çevirmek, bir dilin üretebileceği şeyde maksimum derecede güçlü olduğu anlamına gelir (bu, gerçek dünyaya dayanan zamana bağlı olmayan her şeyi yapabileceği anlamına gelir). Dolayısıyla, daha güçlü bir güç ölçüsü tanımlamak istiyorsak, başka bir yaklaşım benimsememiz gerekir. Orijinal soruda kısalık önerildi, ancak bunu tanımlamak hiç de kolay değil. Başka önerisi olan var mı?

Yanıtlar:


24

Aradığınız düşünceye ifade denir ve Matthias Felleisen'ın matematiksel olarak titiz bir tanımı vardır:

" Programlama Dillerinin Etkileyici Gücü Üzerine "

www.ccs.neu.edu/scheme/pubs/scp91-felleisen.ps.gz (Postscript sürümü)

Fikrin arkasındaki sezgi, iki farklı dilde iki eşdeğer programınız varsa (örneğin, X dilinde A programı ve Y dilinde B programı) ve A'da B'de global bir değişiklik gerektiren yerel bir değişiklik yapmanızdır. , o zaman X Y'den daha etkileyici olur.

Felleisen tarafından sağlanan bir örnek atamadır: Şema programlama dillerinde atama işlecini kaldırabilir ve yine de Turing tam diline sahip olabilirsiniz. Ancak, bu tür sınırlı bir dilde, atamaya izin verildiyse yerelleştirilecek bir özellik eklemek, atamadan programda genel bir değişiklik gerektirir.

Tartışmam bazı ayrıntıları basitleştirdi ve tüm hesap için makalenin kendisini okumalısınız.

Diğer sorunuza cevap vermek için: Java programınıza yeni bir sınıf ekleyebileceğiniz ve daha sonra programınızın diğer bölümlerinin yöntemlerini global değişiklik yapmadan çağırmasını sağlayarak polimorfizmin avantajlarından yararlanabileceğiniz için Java'nın derlemeden daha etkileyici olduğunu söyleyebilirsiniz. İstisna işleme, Java'nın derlemeden daha etkileyici olduğu başka bir örnektir: throwDenetimi yığına aktarmak için tek bir ifade yazmanız yeterlidir . Daha temel bir düzeyde, a'nın casebaşına yeni bir ifade de ekleyebilirsiniz switchve herhangi bir atlama ofsetini elle yeniden hesaplama konusunda endişelenmenize gerek kalmaz.


Çok teşekkür ederim! Tam da aradığım şey buydu!
Casebash

6

Sorunuzu doğru bir şekilde anlarsam, yine de yalnızca öznel bir karar çağrısı değil, nispeten ölçülebilir bir şey arıyorsunuz. Eğer öyleyse, kişisel olarak herhangi bir problemi çözmek için harcanan zamanı tercih ederim (tüm problemler ve tüm programcılar üzerinden ortalama). Bu önlemde, yalnızca dilin kendisini değil, aynı zamanda onunla kullanılan çerçeveyi / API'yi de düşünmeniz gerekebilir. Özlü sözdizimi çok küçük bir faktördür: çok daha önemli olanı, en çok ihtiyaç duyulan işlevselliğe kolayca erişilebilir olmasıdır.

Daha öznel bir şey arıyorsanız, bunun ne kadar eğlenceli olduğunu söyleyebilirim . Programcılar sorunların çözülmesini isteyen insanlar olma eğilimindedir, bu nedenle programcılar için eğlenceli bir programlama dili kaçınılmaz olarak en çok sorunu çözecek dil olacaktır. Bu önlem, farklı insanların şeyleri nasıl kullanacakları konusunda farklı tercihlere sahip olduklarını dikkate alır, bu nedenle “en iyi” programlama dili, en geniş programcı yelpazesi için en çekici olan dil olacaktır. Ancak, burada sadece programlama dilini ve API'yi değil, aynı zamanda programcının gerçekte etkileşime girdiği ortamı da (IDE) dikkate almanız gerekebilir.


Geçen zamanı ölçmenin de öznel olduğunu söyleyebilirim. Hangi programcı zaman aldı? Her iki dili de aynı programcıyla test ederseniz hangi dili daha iyi biliyordu? Bununla başa çıkmak için istatistiksel yollar var, ancak bir kişi bunu tek başına yapamadı.
John Fisher

1
@John: Bir şeyin sadece istatistiksel olarak analiz edilebilmesi öznel olduğu anlamına gelmez.
David Thornley

@David: Bu gerçekten benim açımdan değildi. Mesele şu ki, önceden var olan bir çalışma olmadan, asker, önemsediği dillerin "gücünü" karşılaştıramayacaktı - büyük bir grup üzerinde istatistiksel olarak analiz edilmediğinde öznel bıraktı.
John Fisher

1

Bir dilin ne kadar güçlü olduğunu, onunla ne kadar üretken olabileceğini tanımlarım. Birçok insan hızlı bir şekilde kod yazma açısından verimlilik hakkında konuşmaya eğilimlidir, ancak bir programın yaşam döngüsünün çoğunluğu geliştirme değil bakım olduğundan, daha iyi bir önlem, özellikle birisi tarafından yazıldığında kodu ne kadar kolay okuyabileceğiniz ve hatalarını ayıklayabileceğinizdir. Başka. En güçlü diller, okunması ve bakımı en kolay dillerdir.


2
Buradaki zorluk, bir dil bilmenin onu bilenin daha kolay olmasını sağlamasıdır. Böylece, bu önlem öznel hale gelir.
John Fisher

1

Terminolojinizi daha iyi tanımlamanız gerekir.

Tamlığı çevirmek muhtemelen demek istediğin anlamda "güç" ile ilgili değildir. Daha çok hesaplanabilirlikle ilgilidir; belirli bir dilin Turing makinesi kullanılarak uygulanabilecek herhangi bir programı ifade edip edemeyeceği. Hemen hemen her programlama dilinin Turing tamamlandığı ortaya çıkıyor.

Muhtemelen peşinde olduğunuz şey, programlama dili "ifade" olarak adlandırılan şeyin bir ölçüsüdür. Böyle bir önlemin var olup olmadığından ya da eğer işe yarayıp yaramadığından emin değilim. Temel olarak, farklı programlama dilleri farklı türdeki sorunlara çözüm sunmada daha iyidir.

DÜZENLE

Sadece söylemek gerekirse, programlama dillerinin "güç" olarak bilinen bir özelliği yoktur. Bir programlama dilinin yaygın olarak "ifade gücü" veya "ifade gücü" olarak bilinen bir kavram vardır. Anlatımcılık, kısmen, belirli sorunları ele almak için özlü programlar yazmanın ne kadar kolay olduğu ile ilgilidir. Ancak programları okumanın ve yazmanın ne kadar kolay olduğunun da önemli bir ölçüsü vardır. Bir nevi "güzellik" gibi. Gördüğüm zaman bileceğim, ama tanımlamamı istemeyin.

Karakter sayılarını karşılaştırmak size yeterli bir ifade ölçüsü vermez. Aksi takdirde, kaynak kodunu sıkıştırarak bir dili daha etkileyici hale getirebilirsiniz ... ve bu saçmalıktır. Aslında, herhangi bir nesnel ifade ölçüsü bilmiyorum ve hiçbirinin var olmadığından şüpheleniyorum. Bu, karakteristikleri işe yaramaz ve oldukça ilginç kılar.


1
Turing tamlığının hesaplanabilirlik ile ilgili olduğunu biliyorum. Hesaplanabilirlik ölçeğinde sonlu durum makineleri gibi daha az önlem olduğunu biliyoruz. Ancak, Turing bütünlüğü hesaplanabilirlik açısından maksimum derecede güçlü olduğundan hesaplanabilirliği
kullanamayız

@Casebash - "güç" ün ne olduğunu hala söylemediniz.
Stephen C

2
Thats çünkü bilmiyorum ve bu sorunun bütün mesele bu!
Casebash

O zaman cevap vermenizin anlamı nedir? Bir yorum olmalıydı.
reinierpost

@reinerpost - noktası benim cevap Soru anlamsız ve neden olduğu ayrıntılı olarak açıklamaktır. Temelde soru "Etkileyici güç" adı verilen bir şey var - bunun ne olduğunu bilmiyorum ama bana nasıl ölçüleceğini söyleyebilir misiniz? " Ve cevabımın yanı 'ifade gücü' kötü tanımlanmış bir kavram / özelliktir ve KESİNLİKLE ölçülebilir / ölçülebilir değildir. (Ve bu açıkça bir cevap ve bir yorum değil. Belki de ne söylemeye çalıştığımı anlamadın mı?)
Stephen C
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.