Ruby'de C kodu yazmaya karşı bir dile * programlama *


10

Eğer uzağa kodunu gerektiği olduğunu Kod tam devletler içine kod aksine bir dilde de ona. Bununla, demek istedikleri

Programlama düşüncenizi yalnızca diliniz tarafından otomatik olarak desteklenen kavramlarla sınırlamayın. En iyi programcılar ne yapmak istediklerini düşünür ve daha sonra ellerindeki programlama araçlarıyla hedeflerine nasıl ulaşılacağını değerlendirir. (34.4. bölüm)

Bu, eldeki dilin güçlü ve zayıf yanlarına bakılmaksızın, oradaki her dilde tek bir programlama tarzı kullanılmasına yol açmıyor mu?

Ya da soruyu daha cevaplanabilir bir biçimde sormak için:

Kişinin problemini mümkün olduğunca dilinin ayrıntılarıyla düzgün bir şekilde kodlamaya çalışmasını mı öneriyorsunuz, yoksa bu, doğal olarak mevcut olmayan muhtemelen garip yapıları uygulamanız gerektiği anlamına gelse bile, genel olarak en zarif çözümü aramayı mı tercih edersiniz? kendi dilinde?


5
+1 iyi soru. Bu noktada Perl'de yarım düzine farklı dilde yazabiliyorum.
Dan Ray

@Dan Ray - tuhaf! Her zaman Perl'de C yazıyorum.
James Anderson

Ayrıca bakınız: Jon Skeet tarafından "bir dile karşı programlama" içine "programlama"
Arseni Mourzenko

Yanıtlar:


7

Daha da iyi bir yaklaşım var: acınası sabit programlama dilinizi unutun. Sorununuzu, yeni oluşturduğunuz bir dilde kodlayın, ilgili sorun alan adının şartlarından türetin, mümkün olduğunca doğal olarak kodlayın ve ancak bu yeni programlama dilini uygulamayı veya kodunuzu mevcut dil.

Bu yaklaşıma Dil odaklı programlama denir . Etki alanına özgü dilleri etkili bir şekilde uygulamak için birçok teknik vardır ve bu Ruby topluluğu için özellikle sıcak bir konudur.


1
Haskell topluluğu ayrıca alana özgü dilleri de kapsar ve Haskell programlama dili bu dillerin uygulanması için özellikle uygundur.
tdammers

Lua veya Tkl gibi gömülü bir dile dayalı özel hazırlanmış bir betik sistemi uygulamak bir DSL yazmayı düşünüyor mu? Öyleyse, örneğin Lua'nın eksikliklerini nasıl ele alırsınız?
bastibe

@Paperflyer, bazı durumlarda Lua gibi bir şey üzerine dilleri uygulamak mantıklıdır (özellikle Metalua ise), ancak tipik DSL'lerin çoğu için uygun bir derleyici yazmak daha kolaydır.
SK-logic

@tdammers, evet, Haskell ve Scala tamamen DSL'lerle ilgili. Ama ben Kuvvetin daha karanlık tarafındanım: tercih ettiğim yaklaşım meta programlama. Geçici tercümanların derleyicilerden neredeyse her zaman daha düşük olduğuna inanıyorum.
SK-logic

2
@tdammers, yüksek dereceli işlevlerin üzerine uygulanan bir DSL, pratik olarak geçici bir yorumlayıcıdır. Haskell sözdizimini, Lisp'yi genişlettiğiniz şekilde genişletemezsiniz. Şablon Haskell ile bile. DSL'leri uygulamanın tamamen farklı (ve sınırlı bir yöntem) yolu. Birçok durumda sorun değil, ancak gerçekten karmaşık olan her şey için tamamen okunamayan uygulamalara yol açarken, çok aşamalı bir meta programlama DSL'nizin ne kadar büyük ve yabancı olduğuna bakılmaksızın sadece önemsizdir.
SK-logic

2

Doğru cevaba inanıyorum ve kitabın amacı:

kişinin problemini olabildiğince düzgün bir şekilde kendi dilinin ayrıntılarıyla kodlamaya çalışması gerekir

Bir dile programlayarak, her zaman, dilin normal bir üslup dışında bir fayda sağlayacağı teknikleri kullanmak olduğunu varsaydım . Bu, tüm dillerde tek bir stilde yazmak için önemli bir farktır.

Örneğin, Haskell'i öğrenmek, daha üst düzey işlevleri kullanma becerimi büyük ölçüde geliştirdi. Şimdi c # programlama sırasında, bu yöntemleri kullanarak döngüler için yazmak daha temiz kod yol açar IEnumerablegibi Selectdaha sık gibi çeşitli yöntemler kullanın . Ayrıca Func<int, int>haskell deneyimimden ötürü geçiş ve kullanım işlevlerini (yani ) daha sık kullanma eğilimindeyim . Bundan dolayı kalıtım kullanımım düştü ve çoğu zaman sonuç daha basit bir kod.

Ancak, monads veya c # cebirsel veri türleri gibi kavramları kullanmıyorum. Bunun nedeni, her ikisinin de c # 'da açıkça temsil edilememesi ve çok fazla belirsizliğin karşılığında çok az fayda sağlamasıdır.

Bu yüzden sahip olduğum becerileri en iyi şekilde kullanmak için dilin araçlarını kullanıyorum. Bunun dile göre programlandığına inanıyorum.


0

Kişinin problemini mümkün olduğunca dilinin ayrıntılarıyla düzgün bir şekilde kodlamaya çalışmasını mı öneriyorsunuz, yoksa bu, doğal olarak mevcut olmayan muhtemelen garip yapıları uygulamanız gerektiği anlamına gelse bile, genel olarak en zarif çözümü aramayı mı tercih edersiniz? kendi dilinde?

Mesele şu ki, iyi programcıların bir dili yoktur. Kitaptan alıntı "kullanımda programlama araçları" hakkında konuşuyor - yani perl ve Java biliyorsanız, o zaman belki o hızlı dize manipülasyon için perl kullanmanız gerekir. Programlama dilleri bizi sınırlayan kutular değil, sorunları çözmek için kullandığımız araçlar. Kod Komple bu (imo) alır. Bir programlama dili / ortam kutusuna kod yazmayın, sizin, sorununuz ve çözümünüz için en iyi programlama diline / ortamına en iyi çözümü yerleştirin.

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.