Bilimsel programlama dilleri neden bu kadar tuhaf? [kapalı]


9

Bana öyle geliyor ki, bilim ve mühendislikte kullanılması amaçlanan programlama dilleri , genel amaçlı dillere kıyasla sürekli olarak garip . Kafamın üstünden bazı örnekler:

  • Matlab'da her işlev ayrı bir dosyaya yerleştirilmelidir
  • R'de, <- hemen hemen her dilde = yerine, değerlendirme operatörüdür
  • Matlab, R, Julia ve diğerleri 1 endekslidir
  • Matlab, yorumlar için% değerini kullanır, standart # veya // değil

Tabii ki, bu dilleri tüm çeşitli tasarım özellikleri var aslında onları daha kolay böyle daha doğal matris notasyonu olarak bilimsel uygulamalar için kullanmaya karar verir. Yine de, hepsi, dil tasarımcıları diğer dillerin% 99'unun yaptıklarını yapmayı seçtiyse, hiçbir şeyi kolaylaştırmayan ve kolayca önlenebilecek tüm bu tuhaf seçimleri yaparlar. Neden satıcı kilitlendi? Daha geniş yazılım geliştirme topluluğuyla iletişim eksikliği? Başka bir şey?

Bu konuyu okudum ve açıklamaları tatmin edici bulamadım. R bilimsel bir dil olarak tasarlanmış diye o anlamına gelmez vardı yerine of = - Tamamen kuralları ve kullanımını <görmezden.


6
Kısa cevap: çünkü onlar programcılar için değil, bilim adamları için yapıldı.
Bart van Ingen Schenau

19
Kısa cevap: Çünkü normal olduğunu düşündüğünüz her dil ortak bir atadan etkilendi, C.
Ross Patterson

3
Bence diller arasında herhangi bir sözleşme bulmakta zorlanacaksınız . Bu onların mirasına bağlıdır.
Robbie Dee

6
Bunun hiçbir şeyi tuhaf değil. Sadece farklı . Çünkü belirli bir dilin belirli yazarının ne için kullanıldığı dışında, bir sözdizimini diğerine göre seçmek için özel bir neden yoktur.
Jan Hudec

8
% 99'unuz yanlış. Yalnızca C ve türevlerini biliyorsanız, böyle düşünebilirsiniz, ancak C olmayan dillerin% 50'sinden fazlası atama, dizin oluşturma ve / veya yorumlar için farklı bir şey kullanır.
david.pfx

Yanıtlar:


21
  • Farklı sözleşmeler var. Matematik, mantık ve uygulamalı bilimler ile bilimlerde konvansiyonlar. İlki çok daha yaşlı.
  • Bilimsel diller, THEIR kullanıcılarının hayatını kolaylaştırmak için yapılmıştır. Kullanıcı, gerçekten yeni bir şey öğrenmeye gerek kalmadan, zaman zaman bazı algoritmaları gerçekleştirebilen veya bazı teorileri kontrol edebilen bir bilim adamı olarak görülür. Bu nedenle, bilim adamları için diller BT dışı standartlara uygun OLMALIDIR. Çünkü onlar BT insanlarının kullanımı için değil. DİĞER standartlara uygun ve hedef işitsel yüzünden iyi. İyi SW kullanıcı arayüzü ve dil SW kullanıcı arayüzü olduğundan, kodlayıcının değil kullanıcının ihtiyaçlarına göre yapılmalıdır.
  • BT standartlarımız endüstri standartlarıdır. BT endüstridir. Bilim endüstri değildir. Bilim adamları bununla gurur duyuyor. Ve gönülsüzce bizim pratiğimizden onlarınkine bir şey alacaklardı. Ve standartları hiç sevmiyorlar. Ve hiç kimse yabancı standartları sevmiyor. Yani, eğer birisi BT standartlarına bakacak bir bilimsel dil yapacaksa, nesnel olarak daha uygun olsa bile, hedef işitselden hoşlanmadığı için pek iyi satılamazdı.

Ve sadece BT standartlarına göre değerlendirsek bile ... Üzgünüm, ne standartlar demek istiyorsun? APL veya SNOBOL'da bir program yazmaya çalıştınız mı? Bu iki dil, IMHO, uygun alanlarda (sayma ve dizgiler) en güçlü olanlardır. Ancak sözdizimi ÇOK garip (ve etkili) bir şeydir Bir APL kodu satırı okumak günler sürebilir. Öte yandan, böyle bir çizgi ciddi bir SW parçasıdır. Mathlab'a rahatlama gözyaşlarıyla dönecektin.

"=" Söz konusu olduğunda, birçok insan eşitlik değil, görevlendirme olduğuna alışık olmakta zorlanıyor. BTW, Pascal'da eşitlik ve ödev ": =" dir.

Ve gerçekten == eşitlik için daha doğal olduğunu mu düşünüyorsunuz? Aksine, karıştırma = ve ==, C programlamasında EN yaygın bir hatadır, otomatik kontrolleri ile çağdaş IDE'lerde bile çok sık görülür.

1'den endeksleme hakkında - tek doğal olanıdır. Çocukken, saydığınız şiirler ve şarkılar öğrendiniz: bir, iki, üç ... Ve 0,1,2 değil ... Okul matematiğinde sayımın 1'den başladığını ve 0 doğal / sayma sayılarına ait değildir. Sadece fonksiyonların tanımı ile doğal olmayan indeksler gelir. Sonuçta, 0, atamızın parmağını kaldırmasından binlerce yıl sonra icat edildi.

0-start'ın gerçekleştirilmesi daha kolaydı ve C görünümünden hemen sonra BT pratiğine geçti. Ancak ilk dil olan Fortran'da 1 endeksleme kullanılır. Aynı şey, sanayi öncesi dönemin diğer dilleri için de geçerlidir.

Ve evet, Dyjkstra'nın 0 tabanlı sayımın doğallığı hakkındaki makalesini okumuştum. Ve tartışmasına tamamen katılmıyorum. Müzisyenler için doğaldır. Ve C ve Java derleyicilerini oluşturan 0 meraklı bile, 1'den BAŞLAYAN kod satırlarını sayıyor!


1
Atama ve 1 tabanlı indeksleme için ": =" Smalltalk'ta da kullanılır.
Rory Hunter

1
0 tabanlı indekslemenin uygulama kolaylığı nedeniyle olduğunu satın almıyorum (FORTRAN bunu hemen hemen çürütüyor). cs.utexas.edu/users/EWD/transcription/EWD08xx/EWD831.html , 0 tabanlı dizine eklemeyi tercih edebileceğiniz bazı nedenler sunar, ancak seçimin oldukça keyfi olduğunu unutmayın.
jk.

2
FORTRAN'ın 1 tabanlı indekslemesi vardı. PASCAL, rasgele tabanlı dizinlemeye izin verdi: dizini örneğin -42 ile +57 arasında değişen bir dizi bildirebilirsiniz. ( Bunun yararlı olduğu bir örnek için en.wikipedia.org/wiki/…
adresine bakın

1
@Gangnus Bence modern dilleri C ile karşılaştırmak ve bilerek okumak zor. Düşük seviyeli dillere yüksek düzeyde bir alternatif olacak şekilde tasarlanmıştır.
Robbie Dee

1
FORTH, yığın tabanlı bir dildir. HP hesap makinesini düşünün. Çok kompakt ve hızlıydı, ancak geçilemeyen bir kod yazmak zordu. FORTH'da, değişkenleri nadiren kullanırsınız, daha çok şeyleri yığının üzerine itersiniz ve yığına etki eden işleçleri kullanırsınız.
Robot Gort

16

1'den indeksleme garip değil, programcılar hariç tamamen normal ve bekleniyor , çünkü C (işlemci mimarisinin özelliklerinden koşullandırılan) 0 tabanlı saymayı beklemeye şartlandırılmışlar.

Yorumlar farklı dillerde birçok, birçok farklı şekilde ifade edilir; orada hiçbir standart yolu her dil zaten alınmaz bir sembol veya digraph seçer.

Atama, programcılar dışında aynı şekilde garip ve anlaşılmaz bir kavramdır ; Çoğu insan bu kadar mı az bakım olabilir =ya :=ya <-, onlar anlamak için mücadele anlam (ve onlar için, daha iyi aslında değil kullanımına =bu atamayı vurgulayan çünkü eşitlik değil, - olmayan programcılar için en yaygın engel kodu anlamak).

Kısacası, profesyonel programcılar dışındaki kişilere yönelik programlama dilleri farklı görünüyor çünkü onları en çok kullanan insanlar bu şekilde istiyorlar.


4
1'den endekslemenin garip olmadığını kabul etmiyorum. 0-indeksleme en azından matematikte 1-indeksleme kadar yaygındır ve Matlab veya S / R'nin ortaya çıkmasından yıllar önce programlamada norm olmuştu.
haroba

9
@Aqwis Oh, evet, bebeğin sıfır, bir, iki saydığını zaten görüyorum ... En doğal yol, gerçekten.
Gangnus

4
Bebekler kod yazmaz. Sıfır indeksleme kullanmak için iyi nedenler vardır (bakınız: Dijkstra) ve sıfır indeksleme matematikte de yaygın olduğunda, 1 indeksleme kullanmak için pek çok neden göremiyorum.
haroba

1
@Aqwis Kendi kelimelerinize cevap verin. Garip olan ne. Bebeklikten ve matematikten (doğal sayılar sıfır içermez) ayarlanan bir şey, herhangi bir taraftan tuhaf olamaz. Ve onunla çelişen şey garip. Ve başka bir şeye alıştığınız, alakasız. Bu diller sizin veya benim için yapılmaz.
Gangnus

1
@phresnel Cevaptan yorumlamak için: 1'den indeksleme normaldir. Programcılar hariç, çünkü C
Robbie

5

Üç sorun var:

  1. Belirli geleneklerin ve belirli seçimlerin iyi nedenlerinin farkında değilsiniz.
  2. Sentaksa çok fazla önem veriyorsunuz, anlambilime çok az önem veriyorsunuz.
  3. Mühendisler ve bilim adamları, dil tasarımı konusunda şüpheli bir sözdizimine sahip değildir.

Şimdi özel noktalarınıza:

  • Matlab'ı bilmiyorum, bu yüzden dosya organizasyonunun gereksinimleri hakkında yorum yapamam. Java'nın herkese açık sınıf başına bir dosya kullanmanızı istediğini unutmayın.

  • R =de atama operatörü olarak kullanılabilir. Birden fazla atama operatörüne ihtiyaç duyduğunu <-ve <<-kapsam belirleme kavramını ele alması gerektiğini unutmayın ( <<-bir fonksiyonun içinde yeni bir sembol oluşturmak yerine dış kapsamdaki bir sembole atar). Oklar olası temizleyici kodu yapmak, diğer yönde de kullanılabilir: complex_calculation() -> x.

  • 1-tabanlı indeksleme, Matlab ve R kullanıcılarının C'den daha rahat oldukları matematikte standarttır. Julia, daha iyi bir öğrenme eğrisi elde etmek için Matlab'ı takip eder.

  • %yorumlar için TeX / LaTeX'te de kullanılır. Bu #sadece Unix kodlama dillerinden ve onların torunlarından ibarettir.

Ayrıca, “gerçek” programlama dillerinin çok garip kısımları olduğunu da görmezden gelirsiniz. Scheme neden kullanılmıyor =? Yerine:

(define foo 5)

*Bir ^xgeleneğin diğer geleneklerde daha yaygın olduğu durumlarda neden C , kayıt silme için kullanılıyor ?


"Matlab'ı bilmiyorum, bu yüzden dosya organizasyonunun gereksinimleri hakkında yorum yapamıyorum. Java'nın herkese açık sınıf başına bir dosya kullanmanızı istediğini unutmayın." Bence dilin projenizi birkaç dosyaya bölmenizi beklemesinin gayet makul olduğunu düşünüyorum. Bununla birlikte, bir sınıf genellikle nispeten büyük miktarda koddur. Fonksiyonlar olmak zorunda değildir. Matlab her işlev için ayrı bir dosyayı zorlayarak küçük işlevler oluşturmanızı önler ve bunun yerine büyük, yekpare işlevleri destekler.
haroba

1
S.3 dışında neredeyse her şeye katılıyorum. Bilim adamları dillerini yapmazlar, SİPARİŞ EDİRLER. Bunlar müşteriler, kullanıcılar, ancak yaratıcıları değil. Eğer biri öyleyse, o zaten bir BT geekidir. Ve herhangi bir dilin sözdizimi sorgulanabilir, hiç kimse tüm görevler için ideal değildir.
Gangnus

Matlab, işlevleri / dosyaları gerektiği gibi tam zamanında derler. Programın gerçek bir konsepti yok, sadece bir grup fonksiyon var. Foo () işlevine çağrı yapan bir işlev çalıştırıyorsanız, yolunda foo.m adlı bir dosyayı arar, derler ve çalıştırır. Matlab'ı kullanmayı düşündüğüm dosyaları önceden anlatmaya gerek yok.
Simon B

1

Diğer dillere maruz kalmanıza bağlı olduğunu düşünüyorum. Kafamın üstünden:

  • C / C ++ ayrı kaynak dosyalara sahiptir (.c / .cpp & .h)
  • -> karakterleri lambda ifadeleri için C # 'da kullanılır
  • VB'nin eski sürümleri 1'i varsayılan dizin olarak kullandı (bu, Seçenek Tabanı ile değiştirilebilir)

1
C ve C ++ 'da, bir dosyada istediğiniz kadar işlev tanımlayabilirsiniz.
haroba

Sadece modüllerin birden fazla dosyaya bölünmesinin olağandışı olmadığına dikkat çekiyorum. Size diledi Eğer olabilir .NET dillerini kullanarak ayrı dosyalarda tüm işlevlerini koymak kısmi sınıfta yapısının.
Robbie Dee

1
Elbette modüllerin birkaç dosyaya bölünmesi olağandışı değildir ve çoğu durumda istenir. Ancak Matlab'da her bir fonksiyonu kendi dosyasına koymanız gerekir, yani bin fonksiyonunuz varsa bin dosyaya ihtiyacınız vardır .
haroba

3
HTML'deki yorumlar benzer <!-- ... -->. Yüzde işareti URL kodlaması için kullanılır: http://example.com/()olur http://example.com/%28%29.
amon

Üzgünüm, benim hatam.
Robbie Dee
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.