SORU
28 EKİM 2010, PERŞEMBE


Scala yazın sistemi komple Turing. Kanıt mı? Örnek? Faydalar?

Bu Scala'nın yazın sistemi komple Turing olduğunu iddia ediyor. Benim sorular şunlardır:

  1. Bunun için resmi bir kanıt var mı?

  2. Ne kadar basit bir hesaplama gibi Scala tür sistemi görünürdü?

  3. Scala fayda - dil bu? Bu hale daha fazla Scala "güçlü bir şekilde dil Turing tam tür bir sistem olmadan göre"?

Bu genel Dil ve yazın sistemleri için de geçerlidir sanırım.

CEVAP
28 EKİM 2010, PERŞEMBE


Bir yerde-tam Turing olduğu bilinen KAYAK kombinatorik hesap, türü düzey bir uygulama ile bir blog yazısı var.

Her şeyi yapabilirsin, ama çok az kanıtlayabilirim. Turing-tam: Özellikle, aslında sonunda bir şeyler yapacak olduğunu kanıtlayamazsınız.

Yazın düzey hesaplama örnek türü koruma, toplama transformers Scala 2.8 yeni. Scala 2.8, map, filter gibi yöntemler ve benzeri adlı olduklarını aynı türden bir koleksiyon iade garantisi vardır. Eğer 3 ** eğer öyleyse, bir 6 ** Set[Int] geri çekil Set[Int] List[String] geri List[Whatever the return type of the anonymous function is].

, map aslında öğe türü dönüştürebilirsiniz gördüğünüz gibi şimdi. Yeni öğe türü, özgün koleksiyon türü ile temsil edilmesi durumunda ne olur? Örnek: BitSet yalnızca sabit genişlikli içeren bir tamsayı. , BitSet[Short] Bir şey var ve bir dize gösterimine her numarayı göster ne olur?

someBitSet map { _.toString() }

SonuçBitSet[String], ama bu imkansız. Yani, Scala bu durumda Set[String] String, tutabilir BitSet en türetilmiş supertype seçer.

Bu hesaplama tüm sırasında oluyorderleme zamanıya da daha doğrusu boyuncakontrol zamanı yazınyazın seviyeli fonksiyonları kullanarak. Böylece, statik olarak türleri aslında hesaplanmış ve böylece tasarım zamanında bilinmiyor olsa bile tip-güvenli, garantili.

Bunu Paylaş:
  • Google+
  • E-Posta
Etiketler:

YORUMLAR

SPONSOR VİDEO

Rastgele Yazarlar

  • LavcoPriceTech

    LavcoPriceTe

    21 AĞUSTOS 2010
  • metallmanutza13

    metallmanutz

    13 NİSAN 2007
  • theKGB65

    theKGB65

    24 Aralık 2007