Von von olmayan pratik bir mimari nedir?


16

Von Neumann olmayan programlama modelleri için pratik uygulamalar var mı? En yaygın olarak kabul edilen von Neumann olmayan programlama dilleri nelerdir?


6
"von Neumann olmayan" programlama modeli nedir?
Suresh Venkat

Soruyu da anlamıyorum, belki soruya biraz arka plan ekleyebilirsiniz, böylece ne istediğini anlamanız daha kolay hale gelir.
Kaveh

3
von neumann mimarisinin bir CPU'su var. bu nedenle paralel bir işleme mimarisi tartışmalı olarak von Neumann değildir (paralel işleme öncesinde neumann mimarisi icat edildi). ancak kararlaştırılan soru belirsiz veya puslu tanımlı görünüyor. von neumann, tam olarak bir programlama modeli değil, bir bilgisayar mimarisini ifade eder. ama sinerji / ortak yaşam bir çeşit programlama modeli ve cpu / bilgisayar mimarisi exist da programlama modeli mimarisi ... için "birleştiğinde" olmadan farklı programlama modellerini uygulayabilir birbirlerine .... farklı mimarileri nisbeten bağımsız
vzn

1
Von Neumann olmayan programlama dili nedir? Bu nedenle, von Neumann programlama dili nedir? (
Backus'un

1
@Ronny: Wikipedia sayfası Backus'un makalesini papağan ediyor.
Jeffε

Yanıtlar:


12

"Von Neumann mimarisi" dediğimde, "von Neumann darboğazı" ile sınırlı bazı donanımları kastediyorum - yani, tüm verileri dar bir veri yolu aracılığıyla huniden alıyor.

En sık karşılaştığım von Neumann olmayan programlama dilleri VHDL ve Verilog'dur . VHDL ve Verilog'da varsayılan olarak her şey aynı anda olur. Programcı, bir dizi olayı sırayla gerçekleştirmek için ekstra çaba sarf etmelidir. Bu, varsayılan olarak, herhangi bir anda en fazla bir kod satırı yürüten bir "talimat işaretçisi" anlamına gelen diğer birçok programlama dilinden çok farklıdır ve programcı aynı anda birden çok şeyin gerçekleşmesi için ekstra çaba sarf etmek zorundadır saati.

Bazı insanlar bunun daha doğal bir varsayılan olduğunu söyleyebilir. Programlama öğrencileri başlayan bir sürü bir "süre (x> 0) {...}" döngü x sıfıra eşit olur anlık çıkmak için bekliyoruz ve onlar bilgisayar olduğunu öğrenmek şaşırttı gelmez devamlı o durumunu değerlendirmek.

VHDL ve Verilog kodu yazan çoğu insan programlarını FPGA'larda derler ve her zaman tam hızda çalışan küçük aktivite blokları oluşturur. Çoğu zaman bu tür insanlar giriş pinlerinden veri okuyan, bir dizi blok boyunca işleyen, bir blokun çıkış pinleri doğrudan bir sonraki blokun giriş pinlerine bağlanan bir "boru hattı" kurar ve son blok sonucu gönderir çıkış pimleri. Unix ardışık düzenini anımsatıyor , ancak her saat döngüsünde yeni bir veri parçası giriyor ve yeni bir veri parçası çıkıyor.

Giriş pinleri, ara aşamalar ve çıkış pinleri birbirinden bağımsızdır - çeşitli veri parçaları arasında çoğullanmış tek bir veri yolunu tekrar kullanmanız gerekmez.

Ayrıca ilginizi çekebilir: von neumann / turing mimarileri dışında başka bilgisayar mimarileri var mı?


11

Von Neumann olmayan biri tarafından, Backus'un makalesine göre "Von Neumann Darboğazını" atlayan dilleri kastediyorsunuz "Programlama Von Neumann Stilinden Kurtuluyor mu?" İlgilenenler için burada bir kopya bulabilirsiniz: http://www.thocp.net/biographies/papers/backus_turingaward_lecture.pdf

Sorunuzun cevabının birkaç nedenden dolayı belirsiz olması gerekir.

İlk olarak, hangi diller makalesindeki kriterleri karşıladı? Bu makalede fonksiyonel programlamayı izleyenler olsa da, şimdi noktasız programlama gibi bir şey ifade ettiği için bir yanlış anlama olarak kabul edilmektedir. Yani orijinal yanlış anlama veya makalenin gerçek niyeti ile mi gidiyorsunuz? Ne anlama geldiğiyle ilgili biraz ayrıntılı bilgi için lütfen aşağıdakilere bakın: http://en.wikipedia.org/wiki/Function-level_programming

İkincisi, yanlış anlama ile devam ederseniz, ne kadar işlevseldir? Saf işlevsel dillere, saf olmayan işlevsel dillere ve işlevsel paradigmaya nispeten dostça dillere sahipsiniz. Popülerlikten bahsettiğiniz ve bu ve fonksiyonel saflık arasında ters bir ilişki olduğu düşünüldüğünde, sadece hangi diller dahil edilmelidir? En popüler saf işlevsel dili (hiç popüler olmayacak) mı yoksa bazı "işlevsellik" ölçütlerini karşılayan daha popüler bir dil mi istiyorsunuz? İkincisi ise, bu kriterler nelerdir?

Bakış açınıza bağlı olarak:

  1. Haskell, bildiğim tamamen saf fonksiyonel dillerin en popüleridir ve içinde yazılmış uygulamalar vardır. Bununla birlikte, fonksiyonel programlama topluluğunda ağır bir ağırlık olsa da, daha büyük programlama topluluğunda popüler değildir. Ayrıca, kullandıktan sonra, gerçek dünya kullanımı için pratik olduğunu hissetmedim ve teorik çalışma için değerli görünüyor. Noktasız bir stile izin verir, böylece Backus'un bazı hedeflerine bununla yaklaşabilirsiniz.

  2. Clojure, Scala ve F # daha az saf, ancak daha pratik ve popüler fonksiyonel dillerdir. F #, noktasız stile de dostça davranır.

  3. Forth, noktasız bir dilin prototipik bir örneği olabilir ve günümüzde oldukça yaygındı ... Faktör, biraz dikkat çeken başka bir noktadan bağımsız dildir, ancak Forth'ın popülaritesinin en parlak zamanıyla eşleştiğinden şüpheliyim .

  4. APL, Backus tarafından bir noktada (belki de makalesinde değil) bir adım olarak belirtildi, ancak hedefleriyle tam olarak uyumlu değildi. Gününde finans sektöründe büyüktü. J gibi torunlarını kontrol ettiğinizden emin olun.

  5. JavaScript işlevsel değildir, ancak kapakların yoğun kullanımı ile kanıtlandığı gibi, daha üst düzey bir programlama stiline karşı oldukça dostudur. Popülerliği göz önüne alındığında, sadece kriterleri karşılayabilir. JavaScript ile yapılan, körili ve birleştirici uygulaması gibi ilginç şeyleri kontrol ettiğinizden emin olun.

Bir dipnot olarak size hedefleri hakkında daha fazla perspektif kazandırmak için ölçütlerini karşılamak üzere tasarladığı iki dili kontrol edebilirsiniz. Hiç AFAIK'te popüler değiller, bu yüzden bu sadece bilgi uğruna olurdu:

http://en.wikipedia.org/wiki/FP_(programming_language )

http://en.wikipedia.org/wiki/FL_(programming_language )


1
Görünüşe göre işlevsel programlama yerine noktasız programlama gibi bir şey ifade ediyor gibi görünüyor - bununla ilgili bir tartışmanın göstergesi var mı? kulağa ilginç geliyor.
Suresh Venkat

Backus'un programlama modeline "İşlev Düzeyinde Programlama" denir ve burada bir makale vardır: en.wikipedia.org/wiki/Function-level_programming . Gerçekten iyi bir bağlantı bilmiyorum (herhangi bir bulup bulamayacağınızı bilmek isterim!), Ama Googling "Fonksiyon seviyesi Programlama" bir video da dahil olmak üzere bazı ilginç görünümlü bağlantılar ortaya çıkıyor.
Ronny

1
@SureshVenkat: FP ve FL dilleri Backus tarafından özellikle işlev düzeyinde programlama fikrini desteklemek için oluşturuldu. Ayrıca , gerçek kullanımda hem en şifreli hem de en anlamlı genel amaçlı dili oluşturmak için APL ve FP / FL'yi birleştiren "örtük programlama" ve daha spesifik olarak J diline bakın . Ayrıca fonksiyonel dillerde tacit programlamanın kullanımı hakkında SO hakkında bir yazı hatırlıyorum .
CA McCann

Bu arada, bu yazıdaki kronoloji önemli ölçüde kapalı görünüyor. İşlevsel programlama (hem Lisp hem de ML geleneklerinde) , hem Kilise'nin lambda hesabı hem de Turing'den önce gelen Kombinasyon Mantığı biçiminde, işlev düzeyinde programlama dahil olmak üzere mevcut programlama paradigmalarının çoğunun veya tümünün yanı sıra Backus'un Turing Ödülü dersinden önce gelir. hesaplama teorisi üzerinde çalışın! (Oh, ve istiyorum çok ziyade JavaScript gibi bir vahşetin daha pratik, gerçek dünya amaçlı Haskell kullanın.)
CA McCann

@camccann Gönderiye asla kronoloji koymadım. Ayrıca, Lisp herhangi bir iddiayı destekleyemeyecek kadar geniştir. Örneğin, tüm Lisp'ler işlevsel değildir, çünkü hepsi kuyruk özyinelemeli değildir. Kombinasyon Mantığı'na göndermenizi seviyorum, ama Backus'un amacının paradigmayı destekleyen bir bilgisayarı programlayabileceği bir dile sahip olduğunu düşünüyorum. Bu nedenle, Kombinasyon Mantığı argümanına ışık tutsa da, nihayetinde amacını etkilemez.
Ronny

2

Bence Linda ve tuplespace programlaması bu faturaya uyuyor. Eşzamanlılık ile ilişkili / örüntü eşleştirme bellek işlemleri (kavramsal olarak) Von-Neuman darboğazının ortadan kaldırıldığı anlamına gelir.

Bu doğrultuda, saf bir Aktör-model dilleri, komut dizilimi yerine iletişimi de modelliyor. Biçimcilikler ve gerçek programlama dilleri olmasalar da, Pi hesabı, CSP ve Petri Nets gibi hesaplamaları iletişimi ilgili yollarla modellerler.

Bağlantılar için wikipedia'ya bakın (ben yeni bir kullanıcıyım ve spam koruması altındayım), ancak Linda'nın adı ile ilgili bazı shomomoric mizah için http://c2.com/cgi/wiki?LindaEtymology adresini okuyun .

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.