Bir programlama dili belirtimi yazmaya nasıl devam edebilirim?


16

Programlama dili tasarımından gerçekten hoşlanıyorum. Bazen dil projelerimin ve potansiyel kullanıcılarının kapsamlı bir standart belgesinden faydalanacağını düşünüyorum. Ben çok resmi (C ++) oldukça gayri resmi (ECMAScript) kadar değişen birçok dil standartlarına baktım, ama ben nasıl olsa ben bir şey kırmak ve böyle bir belgeyi düzenlemek nasıl gerçekten bir ele alamıyorum genel olarak teknik yazı konusunda oldukça iyi olduğumu düşünüyorum.

Uzun bir öğretici veya daha çok resmi bir matematik kağıdı gibi mi yazmalıyım? Bir referans uygulamasının yanında geliştirirsem nasıl güncel tutabilirim? Uygulama ve dokümantasyondan vazgeçip de fiili standart olarak mı davranmalıyım? Ayrıca, bir standarda sahip olmanın gerçekten önemli bir yararı var mı? Standart istemek , dilin gereksiz yere karmaşık olduğu anlamına mı geliyor?


1
Martin Fowler'ın Etki Alanına Özel Diller'i henüz okudunuz mu? amazon.com/…
Gary Rowe

@Gary Rowe: Yapmadım. Belki de tam olarak aradığım şey olmasa da, iyi bir okuma gibi görünüyor.
Jon Purdy

Bir standardın referans uygulamaya göre avantajı, diğer uygulamaların uygulamanızın yaptıklarından nerede sapabileceğini tanımlayabilmenizdir.
Bart van Ingen Schenau

Yanıtlar:


3

Java dil özelliklerini hem resmi hem de okunabilir buldum ve bence makul bir yapıya sahip. Bazı W3C spesifikasyonları da iyi örnekler olabilir.

Resmi işi yapmak, dil karmaşıklığını düşük tutmanıza ve köşe vakalarını görmenize yardımcı olabilir.

Başlıklar beyin dökümü: kaynak kodlama, lexing, temel türler, değişmez değerler, operatörler, ifadeler, basit ifadeler, koşullu, döngüler, işlevler (tanımlar ve çağrılar), tür bildirimleri, modüller, derleme birimleri, değişken kapsam belirleme, çeşitli ad çözümlemeleri (ör. içe aktarma, yöntem), bellek modeli, yan etkiler, yazım, eşzamanlılık…


Öneri listeniz çok faydalı. Ben yapacağım benzer bir liste beyin fırtınası, öğretici benzeri bir biçimde sıralamak ve bir EBNF dilbilgisi gibi birkaç resmi addenda ile kısa bir gayri resmi bir özellik yazmak olduğunu düşünüyorum. Fikirler için bahsettiğiniz özelliklere kesinlikle bir göz atacağım.
Jon Purdy

7

Bir sürü okuyun ve basit tutun

Yeni bir dil tasarlamak zor. Gerçekten zor. Ama sonuçta popüler hale gelir ve insanların zarif bir şekilde yaşadıkları bir sorunu gerçekten çözerse çok tatmin edici.

Yorumlarda da bahsettiğim gibi, Martin Fowler'ın Etki Alanına Özgü Diller'i aşağıdaki nedenlerle okumanızı tavsiye ederim :

  1. Neden bir dil tasarlamanız gerektiği konusunda birçok pratik derinliğe giriyor
  2. Nasıl yapılacağı hakkında ayrıntılar var (ayrıştırıcılar, sözlük analizörleri, dil çalışma tezgahları vb.)
  3. Seçtiğiniz sözdiziminin kapanışlar, ek açıklamalar, sabit listeler, dinamik alım vb.

Spesifikasyonunuzu nasıl yazacağınıza gelince, kitlenizi düşünün. Açıkçası, dilinizi tasarlamak için parmağınızı klavyeye koymadan önce ne yapması gerektiğini dikkatlice düşünmüş olacaksınız.

JavaScript'in yerini almak için yeni ve yorumlanmış bir dilse, web geliştiricilerine sınırlı bir dikkat süresi ve anında sonuç alma arzusu ile veya mümkün olduğunda daha hızlı bir şekilde ulaşmak için çok laissez faire yaklaşımı isteyeceksiniz.

Titan'ın bir sonraki görevinde kullanılacaksa, her bir bileşenin davranışının kesin resmi kanıtlarını gösteren son derece ayrıntılı özellikler minimum giriş seviyesi olacaktır.

Yani, bu basit bir şey değil. Spesifikasyona yaklaşmak için, muhtemelen dillerinizi oluştururken ve bunları gerçekten günlük olarak kullanan kişilerle çalışırken çok fazla deneyim kazanmanız daha iyi olur. İstekli kurbanlarınız varsa ... geliştiricileriniz, işinizde dilinizi öğrenmek için biraz zaman ayırabilecekleri takdirde, onu kullanmaları için neye ihtiyaç duydukları hakkında geri bildirimde bulunabilirler.

Kısacası, basit tutun ve daha fazla kişi onu kullanacaktır.


Bunun için teşekkürler. Dil geliştirme ve hatta bunları tam olarak belgeleme konusunda çok fazla deneyime sahibim, ancak bu beni sürekli olarak getiren bir standart fikri. Ben sadece önerilen okuma almak ve biraz denemek zorunda kalabilirsiniz.
Jon Purdy

@Jon Purdy Soruya ekleyebileceğiniz çevrimiçi dil örnekleri var mı?
Gary Rowe

Şu anki projeme ilişkin örneklerim yok. Yaptığım bir dilin (gerçekten kullandığım) gerçekten tam bir kamu örneği vision-language.sourceforge.net/cgi-bin/Home
Jon Purdy

@Jon Purdy Vision ilginç görünüyor - bir çeşit çorba Hız. Bir kenara, bir YouTube ekran görüntüsünü nasıl kuracağınızı ve örnek bir küçük web sitesi yazacağınızı (yerel bir tesisatçı için söyleyin) düşünmek isteyebilirsiniz. Bu, öğrenme eğrisini çok daha kolay hale getirecektir, çünkü insanlar bunu eylemde görebilir ve hemen faydaları alabilir. JSP, Velocity, ASP.Net, Freemarker vb.'ye kıyasla avantajlar hakkında konuşabilirsiniz
Gary Rowe

Bu iyi bir fikir; Son zamanlarda YouTube videolarını çok yapıyorum (haftada üç kez), bu yüzden kesinlikle bir tanesine sığabileceğimi düşünüyorum
Jon Purdy

3

Wirth birçok programlama dili tasarladı ve uyguladı: Bunlardan Oberon ve Oberon2 dillerinin özellikleri tamlık, sağlamlık ve okunabilirlik açısından dikkat çekicidir.


2

Ortak Lisp ve Haskell dil standartlarına sahiptir. Ruby ve Python'un uygulamaları ve belgeleri vardır. Bu yüzden bir dil standardının gerekli olmadığını söyleyebilirim, ancak tasarladığınız dilin birden fazla uygulanmasını bekliyorsanız yardımcı olabilir. Öte yandan, dil tanımınızda önemli değişiklikler bekliyorsanız, standart bir prematürdür.


Aslında, Ruby'nin "şartname" olarak kabul edilebilecek iki şeyi vardır. Şu anda Nihai Taslak durumunda olan ve dil spesifikasyonları konusunda deneyim sahibi (ANSI Common Lisp ve ISO C ++ üzerinde çalışmış) bazı kişiler tarafından yazılan ISO Ruby Spesifikasyonu var. Ve hem insan tarafından okunabilir bir şartname hem de bu şartname için makine tarafından yürütülebilir bir uyumluluk testi paketi oluşturan bir dizi RSpec tarzı yürütülebilir örnek olan RubySpec projesi var.
Jörg W Mittag

1

herhangi bir şartname kısa olmalı ve zaman testine dayanabilmelidir

bu yüzden birçok dil standardı için kullanılan BNF gibi bir soyutlama görüyorsunuz ... terse ve mevcut araçlarımızın birçoğu geride bırakıldıktan çok sonra anlaşılacak.

tabii ki sadece bir gramerden daha fazlası var. başkalarının ne yaptığını görün ... perl6, şema, C ... uygulayıcının da önem verdiği konuları ele alıyorlar.

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.