Kendi programlama dilinizi oluşturun (I)

Programlama dillerinin gelişimi

İlk makaleyi yazdıktan sonra kendi işletim sisteminizi nasıl oluşturabilirsinizBirisi bana bir makale yazıp yazamayacağımı söyledi bir programlama dili nasıl oluşturulur. İlk başta pek dikkat etmedim ama şimdi ve diğer yollarla programlama dillerinin yaratılması hakkında çok daha fazla şey öğrendim. Öyleyse yapalım temel bir programlama dili, diğer programlara kolayca gömülebilen ve bizim de tasarlayacağımız bir sanal makine ile çalışan. Bugün en temel sanal makineyi yapmamız gerekiyor.

Muhtemelen merak ediyorsunuz: «Sanal bir makine mi? Ama bu çok zor değil mi ve programları da yavaşlatıyor mu? " Buna karşılık, basit bir sanal makine çok basit ve nispeten hızlıdır. Ben seçtim Rust sanal makine için bir dil olarak. Ama bu ne Rust?

Rust Yürütme güvenliğine odaklanan bir programlama dilidir, bu nedenle onu kullanmak birinin sanal makineyi kapatması neredeyse imkansız olacaktır. Oluşturulan geliştirmede derlenmiş bir dildir. mozilla. Servoyerine Geko, onda gelişiyor. Sözdiziminizi yine de değiştirebilirsiniz, ancak kullanacağım kod ilk kararlı sürüme kadar tutulacaktır.

Rust yükleme Linux Basit bir şekilde. Ancak resmi parsel bulunmamaktadır. Kullanıcıları Ubuntu bu ikisini ekleyebilir PPA: ppa: hansjorg / pas  y ppa: cmrx64 / kargo, kullanıcıları Kemer kullanabilirsiniz AUR (kargo-git her şeyi yükleyen pakettir). Gerisi şunları kullanabilir:

curl -s https://static.rust-lang.org/rustup.sh | sudo sh

Sanal makine nasıl çalışır?

Birleştirici dünyasının nasıl çalıştığını biliyorsanız, yığın veya yığınla tamamen aynıdır. Değilse, size açıklayacağım. Aşağıdaki kodu hayal edelim:

2 + 3 yazdır

Bilgisayar 2 + 3'ün ne anlama geldiğini anlamıyor, hangi sırayı takip edeceğini de bilmiyor. Bilgisayarlar, verilerin toplandığı ve sürekli olarak çıkarıldığı piller veya yığınlarla çalışır. Sanal makinemizdeki bu kod şunun gibi görünmelidir:

PUSH 2 PUSH 3 EKLE YAZDIR

Temel olarak 2'yi yığının üstüne koyarız, 3'ü de. ADD, yığındaki son 2 öğeyi çeker (yani yığından kaldırır ve değerini alır) ve sonucu yığının en üstüne ekler. YAZDIR, yığındaki son öğeyi alır ve bize göstermek için kullanır. Şimdi bunu içeride yapalım Rust.

İlk önce bir dil tanımlamalıyız Bayt kodu, şuradaki gibi mevcut olanı kullanabiliriz Java veya CLR NET / Mono, ancak daha basit bir tane oluşturacağız.

https://gist.github.com/a01de8904fd39a442c20

Her talimat için onaltılı gösterim kullanıyoruz. Yükseğe koyduk # [deriving (FromPrimitive)], bir tuhaflığı Rust ve daha sonra numaralandırmayı baytlarla doğrudan karşılaştırabilmemize yardımcı olacaktır.

Şimdi bu komutların her birini çalıştıran bir işlev yapmalıyız. Bunun için bir bayt okumalı ve numaralandırmada sahip olduğumuz talimatlarla karşılaştırmalıyız. Var olan herhangi birini bulursanız, eyleminizi gerçekleştirmelisiniz.

https://gist.github.com/8950ce212a2de2f397f9

Bunu her baytı ayrı ayrı okumak ve çalıştırmak için yapıyoruz:

https://gist.github.com/12e24a1f0dd65e4cd65d

Gördüğünüz gibi, daha önce PUSH komutu (INTEGER komutumuz) verilmişse, bir sonraki bayt tamamen yığın üzerinden alınacaktır. Orada size öğretmediğim iki işlevi kullanıyoruz. self.pop () y self.push (), açıkça yığının taşınmasından sorumludur.

https://gist.github.com/54147f853a8a2b8c01d9

Çok karmaşık değillerdir, ancak pop işlevinin hata algılama mekanizmaları vardır. Aslında Rust, bu mekanizmaları kaldırırsak bu bize bir derleme hatası verir. Şimdi sadece bir program çağırmamız gerekiyor Çok (sanal makinemiz) ve bir bayt kodu yürütün.

https://gist.github.com/99b1ab461318b3a644d0

Bu bayt kodu bir dosyadan okunabilir, ancak burada basit olması için onu bir değişkende sakladım. Eğer yürütürsek, bize beklenen sonucu verecektir:

Perin v0.1 Perin VM, FlopFlip bayt kodunu çalıştırır PerinVM örneğini başlatır PerinVM v0.1.0 Tamsayı değeri 5

Tüm kod şu adreste mevcuttur: GitHub altında Apache Lisansı 2.0: https://github.com/AdrianArroyoCalle/perin. Derlemek için sahip olmaları gerekir Kargo yüklendi ve koy:

şarj oluşturma && ./target/main

Bir sonraki bölümde programlama dilimiz hakkında daha fazlasını göreceğiz.


Yorumunuzu bırakın

E-posta hesabınız yayınlanmayacak. Gerekli alanlar ile işaretlenmiştir *

*

*

  1. Verilerden sorumlu: Miguel Ángel Gatón
  2. Verilerin amacı: Kontrol SPAM, yorum yönetimi.
  3. Meşruiyet: Onayınız
  4. Verilerin iletilmesi: Veriler, yasal zorunluluk dışında üçüncü kişilere iletilmeyecektir.
  5. Veri depolama: Occentus Networks (AB) tarafından barındırılan veritabanı
  6. Haklar: Bilgilerinizi istediğiniz zaman sınırlayabilir, kurtarabilir ve silebilirsiniz.

  1.   yolcu dijo

    İlginç bir merak, gerçekte çok yararlı olmasa da bilmekten zarar gelmez.

    Rust'un reklamını yapmanız harika, çok şey vaat eden bir dil, sadece c ++ 'dan daha güvenli değil, aynı zamanda (şimdilik) sözdiziminde daha net.

    Fotoğrafa gelince, java evolution XD'yi düşünmüyorum.

    1.    yolcu dijo

      Ve fortran'dan hiç kullanmadım ama hakkında pek iyi şeyler duymadım ...

      1.    Fosforlu dijo

        Yapıyorum ve Python zemin kazanıyor olsa da özellikle mühendislikte kullanışlıdır.

      2.    John dijo

        Fortran belki de C ile birlikte diğer büyük dildir. Bugün bile gerçekten kritik sorularda biri ya da diğeri olacaktır.

        Ve Fortran'ın, C'nin daha yeni, modern ve daha fazla olasılığa sahip olması nedeniyle, belki de tam tersi olması gerektiğinde, C'nin bir "evrimi" olduğu tartışmalı olacaktır; biri diğerinden hiç de kopuk olmasa da.

        Nihai pozisyonların hepsi bazı açılardan tartışmalı olsa da.

    2.    Francisco dijo

      Java'ya +1

  2.   Portaro dijo

    Bakalım bunu beğenirsem, programlamaya bir şey vereceğim ama daha fazla anlayıp anlamadığımı görmek için temel olacağım.

  3.   Usergnulinux dijo

    Yeni bir programlama dili yaratmanın gerçek amacı nedir? Kişisel olarak bana kaynak kodunu gizlemek için bir hile gibi geliyor.

  4.   yeil dijo

    Arkadaşım, "kendi işletim sisteminizin" devamına ne oldu? Orada bırakmayın lütfen devam edin.

    Aslında sen bir ustasın ve bu iki şarkı tamamen ilgimi çekti ama yarı yolda kalmalarını istemem.

    Çoğumuzun da aynı şeyi düşündüğünü biliyorum ve bu çok ilginç konuların devamını ve sonuçlarını bekliyoruz.

  5.   Hıristiyan David dijo

    Çok ilginç, çok teşekkür ederim. 🙂

  6.   Açık sözlü dijo

    Derlenebilir olmadığı için java'yı bir programlama dili olarak değil, bir komut yorumlayıcısı olarak görmüyorum

    1.    Mario dijo

      [Programlama dili, bilgisayarlar gibi makineler tarafından gerçekleştirilebilen süreçleri ifade etmek için tasarlanmış resmi bir dildir.]

      Bu nedenle Java bir programlama dilidir. Bash dili (linux kabuk dili) bile başlı başına bir programlama dilidir.

      İki tür dil vardır:
      - Derlendi
      - Yorumlandı
      - Karışık (Sanal makineler, yerel kitaplıklar derlenir ve işlevsel kod yorumlanır)

      Çevirmenler, çoklu platform söz konusu olduğunda çok kullanışlıdır ve bunun için feci bir performansa sahip değildir. Java, VB.NET, C ++ .NET, F #, C # hepsi karma dillerdir. Bash dili, bat, PHP, Javascript ve daha pek çoğu yorumlanmış dillerdir.

      Java'yı yorumlandığı için (ki öyle değil) bir dil olarak görmüyorsanız, program yapmak için kullanılan diğer birçok dili dikkate almamalısınız. Üstelik, bu üç kuralına göre, makine dilinin kendisi dışında herhangi bir programlama dili olduğunu düşünmemelisiniz.

      Ve neden olmasın? Makine dili bile bir dil olarak düşünülemez çünkü bu aslında sadece işlemci tarafından "yorumlanan" bir komutlar dizisidir.

      Çünkü etkili bir şekilde TÜM diller, bir işlemci tarafından yorumlanan bir dizi komuttan başka bir şey değildir.

      Bir dili az ya da çok sevebilirsiniz (bu durumda Java), az ya da çok kullanışlı ve güçlü görünebilir, ancak onun bir programlama dili olmadığını çünkü derlenmediğini söylemek… tüm programlama dili tanımlarına aykırıdır.

    2.    Mario dijo

      😐 Umarım çok kaba görünmemişimdir

      1.    Manuela Cardenas'lı Maria Antoinette dijo

        sessizlik yok sadece hayatlarımızı mahvettin

      2.    Mario dijo

        hahahahaha, perdoooon. niyetim değildi xD

    3.    carlos dijo

      java bir programlama dilidir. çünkü bir uygulama geliştirebiliyorsunuz ve derlediğinizde JVM tarafından yorumlanan bir .jar yapıyorsunuz.Sonra python mantığınıza göre yorumlanmıyor ama farklı çalıştırılabilir dosyalara derleniyor ...

  7.   İlyas Mongelos dijo

    Çok iyi bilgi

  8.   Carlos Arturo dijo

    iyi bilgi ama şüphem var, başka analojilere veya yazılıma güvenmek zorunda kalmadan sıfırdan yeni bir programlama dili oluşturmak mümkün olacak. Diğer dillerin java veya HTML gibi yapıldığı gibi konuşuyorum.
    Bu sorudaki yardımınızı çok takdir ediyorum.