Bazıları eğlence için, bazıları varlığı kanıtlamak veya bir hipotezi çürütmek için, bazıları beyinlerini çalıştırmak için (Klein şişesinin yüzeyinde veya dört boyutlu uzayda seyahat etmek), ancak yüzlerce insan "ezoterik" programlama dilleri yarattı. Bu dillerden yaklaşık 150 tanesini okudum ve bir daha asla eskisi gibi olmayacağım.

“Ahhh!”, “Oof!”, “2-hasta”, “Nhohnhehr”, “Noit o" mnain gelb”, “DZZZZ”, “Ypsilax”, “YABALL”, kahretsin - bunlar büyüler, şiir sadece isimlerdir ... catom altında - en göz alıcı programlama dillerindeki kod örnekleri.

Tavşan deliği derindir.

INTERCAL (Turing-tamamlandı)



Don Woods ve Jim Lyon

En eski ezoterik programlama dillerinden biri. Yaratıcılara göre adı “Telaffuz Edilemez Kısaltması Olmayan Derleyici Dili” anlamına geliyor. Dil, 1972 yılında öğrenciler Don Woods ve James M. Lyon tarafından mevcut programlama dillerinin ve zihinsel jimnastiğin bir parodisi olarak oluşturuldu.

Selam Dünya

Her program komutuna, program başladığında yürütüleceği bir olasılık verilebilir. Ek olarak, belirli bir türdeki sonraki komutların yürütülmesini veya değişkenlerde yapılan değişiklikleri engelleyen komutlar da vardır.

Selam Dünya!

// Stephen McGreal'dan “Merhaba Dünya”.
// Bu kaynak kodunda ifade edilen görüşlerin,

Gr34t l33tN3$$?
M3h…
41 değil 7rickY.

L33t SP33K, 1'inci yıl boyunca 4'üncü sırada yer alıyor.
1f u w4nn4be UB3R-l33t u d3f1n1t3lY w4nt in 0n a b4d4sS h4xX0r1ng s1tE!!! ;P
w4r3Z c0ll3cT10n2 r 7eh l3Et3r!

Qu4k3 CL4nS r 7eh be5t th1ng 1n the 3nTIr3 DÜNYADA!!!
g4m3s wh3r3 u g3t'den 5 saate kadar kişi 70tAl1_y w1cK1d!!!
Ben fr4GM4ster'im ve t0t41_1LECE phr34k1ng fL00r ***j3d1 5tYlE*** SİZİN H1DE İLE SİLECEĞİM!!! L0L0L0L!
t3lEphR4gG1nG l4m3rs ile mY m8tes r34lLy k1kK$ A$$

L33t hAxX0r$ CrE4t3 u8er- k3wL 5tUff GİBİ n34t pR0gR4mm1nG DİLİ$…
s0m3tIm3$ teh l4nGu4gES l00k SADECE l1k3 rE41_ 0NES 7o yapmak ppl Th1nk th3y"r3 sadece N0rMal LEE7 5PEEk ama th3y"re 5ecRetLy C0dE!!!
n080DY ALTINDA VE $ l33t KONUŞ 4p4RT FR0m j3d1!!!
50mE ÇOCUK 0n A me$$4gEb04rD m1ghT 8E a r0xX0r1nG hAxX0r wH0 w4nT2 t0 bR34k 5tuFf, 0r mAyb3 ju5t göster 7eh wAy5 l33t kişi 8E y0d4'e daha çok benzeyebilir!!! hE i5 ve u8ER!!!
1t m1ght 8E 5omE v1rus 0r a Pl4ySt4tI0n ch34t C0dE.
1t 3v3n MiTe jUs7 s4y “H3LL0 DÜNYA!!!” gu3s5'i yapamazsınız.
TH3r3"ün n3v3r HERHANGİ BİR NOKTA 100KiNG SC3pT1c4l c0s th4t, be1_1Ev3 iT 0r n0t, 1s ne bu 1s!!!

5uxX0r5!!!L0L0L0L0L!!!

ArnoldC

Terminatör programlama dili.

Selam Dünya!

Tamam!

Ya orangutanların dili ya da Occam'lı William'ın rüyası.

Selam Dünya!

Şef

David Morgan-Mar tarafından geliştirilen ve programların mutfak tariflerine benzer olduğu ezoterik bir programlama dili. Dildeki her program bir addan, değişkenlerin bir listesinden, bunların değerlerinden ve bir talimat listesinden oluşur. Değişkenler ancak temel gıda maddelerinin isimleriyle adlandırılabilir. Değişkenlerin değerlerinin yerleştirildiği yığına denir. karıştırma kabı ve değişkenleri değiştirme işlemleri karıştırma, karıştırma vb.'dir.

Selam Dünya

Merhaba Dünya Suflesi.

İçindekiler.
72 gr kuru fasulye
101 yumurta
108 gr domuz yağı
111 su bardağı sıvı yağ
32 kabak
119 mi su
114 gr kırmızı somon
100 gr dijon hardalı
33 patates

Yöntem.
Patatesleri karıştırma kabına koyun.
Dijon hardalını karıştırma kabına koyun.

Kırmızı somonu karıştırma kabına koyun.

Karıştırma kabına su koyun.
Kabaklar karıştırma kabına alınır.
Karıştırma kabına yağı koyun.
Domuz yağını karıştırma kabına koyun.
Domuz yağını karıştırma kabına koyun.
Yumurtaları karıştırma kabına koyun.
Kuru fasulyeyi karıştırma kabına alın.
Karıştırma kabının içeriğini sıvılaştırın.
Karıştırma kabının içeriğini pişirme kabına dökün.

Artık programlama kavramını anladığınıza göre, kaynak koduna, ana bileşenlerine ve onlarla nasıl çalışılacağına bakacağız.

Bu makale yeni başlayanlar için geliştirmeyle ilgili bir dizi makalenin parçasıdır.

Bölüm 2 – Kaynak Kodu

Birçok programlama dili birçok kütüphaneyle birlikte gelir. Genellikle denir SDK(yazılım geliştirme kitleri). Daha fazla teknoloji, uygulama ve proje oluşturmak için derleyiciyle birlikte yüklenir. Ayrıca orada çerçeveler Bir projenin geliştirilmesini kolaylaştırmak ve çeşitli bileşenlerini birleştirmek için oluşturulmuştur.

Seçilen dilin içerdiği bazı tanımlayıcılar kullanıcı tanımlayıcı olarak kullanılamaz. Bir örnek kelimedir sicim Java'da. Bu tür tanımlayıcılara anahtar kelimelerle birlikte denir Ayrılmış kelimeler. Onlar da özeldir.

Tüm anahtar kelimeler saklıdır. Ayrıca seçtiğiniz kelimelerin ilk kez görenlere anlamlı gelmesi gerekir.

Temel Veri Türleri

Kaynak kodu, farklı veri türlerinin birleşimidir: sayılar(3, 5,7, -100, 3,142) ve semboller(E, A). Bazı programlama dilleri sayıları aşağıdaki gibi alt türlere ayırır: tamsayılar(bütün sayılar).

Tamsayılar olabilir ikonik Ve imzasız, büyük ve küçük. İkincisi aslında bu tür numaralar için ayrılan hafıza miktarına bağlıdır. Genellikle ondalık kısımlara sahip sayılar vardır. çift Ve batmadan yüzmekÖğrendiğiniz dile bağlı olarak.

Mantıksal veri türleri de vardır boolean bu önemli doğru veya YANLIŞ.

Karmaşık veri türleri

Yukarıdaki türler temel, birincil veya temel olarak bilinir. Bu temel veri türlerinden daha karmaşık veri türleri oluşturabiliriz.

Sıralamak( Sıralamak) karmaşık tipin en basit şeklidir. Astar ( Sicim) bir karakter dizisidir. Bu veriler olmadan yapamayız ve kod yazarken sıklıkla kullanırız.

Karakterlerin birleşimi astar. Bir benzetme yapmak gerekirse, bilgisayara giden bir dize, kelimenin bir insana ait olduğu anlamına gelir. "Termometre" kelimesi 9 karakterden oluşur - biz buna basitçe karakter dizisi diyoruz. Dize işleme, her istekli programcının öğrenmesi gereken geniş bir konudur.

Karmaşık veri türleri, kullanılan çoğu programlama diliyle birlikte gelir. Sınıf sistemleri gibi başkaları da var. Bu olgu aynı zamanda nesne yönelimli programlama olarak da bilinir ( OOP).

Değişkenler

Değişkenler basitçe hafıza konumlarının adlarıdır. Bazen kaynak kodunuzdaki verileri, kullanmak üzere çağırabileceğiniz bir yerde saklamanız gerekir. Bu genellikle derleyici/yorumlayıcı tarafından ayrılan bir bellek konumudur. Daha sonra hatırlayabilmemiz için bu hafıza hücrelerine isim vermemiz gerekir. Aşağıdaki Python kod parçacığını göz önünde bulundurun:

evcil hayvan_adı = "Su aygırı" evcil hayvan_adı yazdır

pet_name = "Suaygırı"

evcil hayvanın adını yazdır

Evcil Hayvan adı– bir değişken örneği ve içinde saklanan veri türü Evcil Hayvan adı, değişkeni bir dize haline getiren bir dizedir. Sayılar da var. Böylece değişkenler veri türüne göre sınıflandırılır.

Sabitler

Sabitler bir programın yaşam döngüsü boyunca değişmeyen değerlerdir. Çoğu zaman adlarında büyük harfler kullanılır. Bazı diller kalıcı değerler oluşturmayı desteklerken bazıları desteklemez.

Var olmak güçlü yazılan programlama dilleri Her değişkenin belirli bir türde olması gerekir. Bir tür seçtikten sonra artık onu değiştiremezsiniz. Java böyle bir dilin iyi bir örneğidir.

Diğerleri bu işlevleri sağlamaz. Bunlar gevşek yazılmış veya dinamik programlama dilleri. Örnek - Python.

JavaScript'te sabit bir değeri nasıl bildireceğiniz aşağıda açıklanmıştır:

JavaScript

const evcil hayvanAdı = "Suaygırı"

const evcil hayvanAdı = "Suaygırı"

Değişmez değerler

Her kaynak kodunda, baştan sona kullanılan ve yalnızca düzenlendiklerinde değişen veri türleri vardır. Bu değişmez harfler değişkenler veya sabitlerle karıştırılmaması gerekir. Hiçbir kaynak kodu onlarsız yapamaz. Değişmez değerler dizeler, sayılar, ondalık sayılar veya başka herhangi bir veri türü olabilir.

Yukarıdaki kod parçasında "Hippo" kelimesi bir dize harfidir. Kaynak kodunu düzenleyene kadar her zaman "Hippo" olacaktır. Kodlamayı öğrendikten sonra, değişmez değerleri kodun çoğunu değiştirmeden nasıl değiştireceğinizi öğreneceksiniz.

Noktalama İşaretleri/Semboller

Çoğu yazılı programda, seçtiğiniz programlama diline bağlı olarak farklı noktalama işaretleri bulacaksınız. Örneğin Java, Python'dan daha fazla noktalama işareti kullanır.

Temel karakterler virgül içerir ( , ), noktalı virgül ( ; ), kolon ( : ), küme parantezleri ( {} ), normal parantez ( () ), köşeli parantezler (), tırnak işaretleri ( «» veya » ), dikey çubuk ( | ), yırtmaç ( \ ), nokta ( . ), soru işareti ( ? ), arabalar ( ^ ) ve yüzde ( % ).

Noktalama işaretlerinin en iyi arkadaşlarınız olduğu programlama dünyasına hoş geldiniz. Yakında kodunuzda bunlardan çok sayıda bulunduğunu keşfedeceksiniz.

Operatörler

Bazı işlemleri gerçekleştirmek için kaynak kodu yazma olasılığınız son derece yüksektir. Kullandığımız herhangi bir programlama dili çok sayıda operatör içerir. Kullanılanlar arasında ekleme ( + ), bölüm ( / ) çarpma işlemi ( * ), çıkarma ( ) ve işaretten büyük ( > ).

Operatörler genellikle şu şekilde sınıflandırılır:

  1. Atama Operatörleri. Bazen şu şekilde yorumlanırlar: eşittir, Yanlış olan ne. Eşitlik iki değeri karşılaştırmak için kullanılır. Ancak atama operatörü bir değişkene bir değer atar; örneğin pet_name = 'Suaygırı'
  2. Aritmetik operatörler. Toplama ve çıkarma gibi aritmetik görevleri gerçekleştirecek operatörlerden oluşur. Bazı programlama dilleri aritmetik operatörler sağlarken diğerlerinin cephaneliğinde olmayabilir. Örneğin, modül/kalan operatörü ( % ) bölme işlemlerinin geri kalanını döndürür.
  3. İlişkisel Operatörler. Değerleri karşılaştırmak için kullanılır. Bunlar, büyüktür, küçüktür, eşittir, eşit değildir şeklindedir. Sunumları aynı zamanda hangi programlama dilini öğrendiğinize de bağlıdır. Bazı PL'ler için bu eşit değildir; <> , başkaları için - != veya !== .
  4. Mantıksal operatörler. Mantıksal işlemleri gerçekleştirmek için kullanılır. Yaygın olarak kullanılan mantıksal operatörler şunlardır: Ve, veya, HAYIR. Bazı diller bu operatörleri özel karakterler olarak temsil eder. Örneğin, && mantıksal temsil etmek Ve, || - İçin veya, Ve ! - İçin HAYIR. Boole değerlerini kullanarak mantıksal değerleri değerlendirmek gelenekseldir doğru veya YANLIŞ.

Yorumlar

Dokümantasyon programlama faaliyetlerinin önemli bir yönü olacaktır. Kodunuzu diğer programcılara bu şekilde açıklayabilirsiniz. Bu, kodun çeşitli bölümlerine eklenen yorumlar kullanılarak yapılır. Yorumlarla diğer programcılara yazılı programınız boyunca rehberlik edebilirsiniz.

Derleyici yorum niteliğindeki kod satırlarını dikkate almaz.

Yorumların beyanı farklı diller için farklıdır. Örneğin, # Python'da yorum girmek için kullanılır.

İşte Python'daki bir yorumun örneği:

# Fibonacci'yi N sayıdan hesaplamak için program parçası

Java

// özyinelemeli uygulama Faktöriyel içe aktarma java.util.Scanner; class RecursiveFactorial ( public static void main(String args) ( Tarayıcı girişi=yeni Tarayıcı(System.in); System.out.print("Faktöriyelini Bul: "); int num=input.nextInt(); System.out .println(""+sayı+" = "+gerçek(sayı)'nın çarpanları); ) static long fact(int n) ( if(n)< 2) return 1; return n * fact(n-1); } }

Günümüzde pek çok şirket ve bireyler kendi web sitelerine sahip olma ihtiyacını hissediyorlar, bu nedenle İnternet projelerinin geliştirilmesi ve tanıtılması konusundaki bilgiler bu kadar talep görüyor. Birçok kişi şu soruyla ilgileniyor: kendinizinkini nasıl yaratacağınız web sitesi, program kodu ki bu bir evin temeli gibidir? Web geliştirme konusunu derinlemesine inceleyerek bu konuyu anlamaya çalışalım.

Bir web sitesi yalnızca metin, bağlantı, resim ve renkli bannerlardan oluşan bir koleksiyon değildir; aynı zamanda kullanıcının bilgisayarında veya sunucu tarafında çalışan bir program kodudur. Ve bugün neredeyse herkes, internetten veya herhangi bir popüler grafik düzenleyiciden hazır görüntüler kullanarak gerekli çözünürlük ve kalitede gerekli formatta görüntüler oluşturabiliyorsa, o zaman site kodu uzman olmayan biri için önemli zorluklarla doludur.

Uygulamaların kalitesi ve bir bütün olarak İnternet projesi, büyük ölçüde siteyi geliştiren programcının becerisine bağlıdır; program kodu, web sayfalarının yüklenme hızını ve tüm sitenin çalışmasının diğer birçok yönünü büyük ölçüde etkileyen hatalar içerebilir. Güvenlikle ilgili olanlar da dahil olmak üzere site. Bu nedenle, herhangi bir web sitesi oluştururken koddaki hataları tespit etmek ve ortadan kaldırmak zorunlu bir bileşendir. Karmaşık bir kurumsal web sitesinin geliştirilmesini uzmanlara emanet etmek en iyisidir (eğer değilseniz), çünkü bazı hataların tespit edilmesi zordur ve bunların çoğu, web sayfalarının tarayıcılarda yavaş yüklenmesine ve yanlış görüntülenmesine neden olabilir. İnternet kullanıcılarının bilgisayarları. Çok uzun süreli yükleme, siteden ziyaretçi çıkışına ve trafik kalitesinin düşmesine neden olabilir, bu da ticari İnternet projelerinin kullanımının kârını ve verimliliğini azaltır.

Önce HTML ve CSS

Bir web belgesinin temeli HTML biçimlendirme dilinde yazılmış koddur. İşaretleme dili, programlama dili ile karıştırılmamalı, asıl farkın ne olduğu ayrıntılı olarak yazılmıştır. Prensip olarak, HTML'nin site geliştiricisi için sunduğu komut dizisini kullanarak, statik bir web belgesinin gerekli tüm parametrelerini (öğelerin düzeni (blok işaretleme), başlıklar, paragraflar, tablolar, resimler vb.) ayarlayabilirsiniz. Ve HTML için özel bir eklenti olan CSS'nin yardımıyla, listelenen tüm işaretleme nesnelerini konumlandırabilir, stillerini (renk, boyut, format vb.) değiştirebilirsiniz.

Daha sonra JavaScript

Web sayfalarındaki banner'lar, işaretler, geri bildirim formları gibi etkileşimli ve animasyonlu öğeler, sunucu veya istemci programlama dillerinde yazılmış komut dosyaları ve kodların varlığı nedeniyle çalışır. JavaScript programlama dili kullanılarak geliştirilen scriptler oldukça popülerdir. Bu tür istemci komut dosyaları, çalışmalarında sunucunun yeteneklerini kullanmaz ve kullanıcının bilgisayarının yanında, yani tarayıcıda yürütülür. Bu, JavaScript uygulamalarını basit ve hızlı hale getirir.

Ve son olarak PHP

Örneğin forumlar veya ziyaretçi defterleri için karmaşık ve hacimli kodlar yazmak gerektiğinde, programcılar yardım için sunucu tarafı programlama dillerine, özellikle de . PHP kodları sunucu tarafında yürütülür, dolayısıyla uzak bilgisayarla bağlantının hızına ve ne kadar meşgul olduğuna bağlı olarak performansları biraz daha yavaş olabilir. PHP ve SQL komutlarını (ilişkisel bir veritabanı için özel bir sorgulama dili) kullanarak, bir web sitesinin veritabanlarıyla etkileşimini düzenleyebilir ve etkileşimli İnternet projeleri oluşturabilirsiniz - forumlar, çevrimiçi mağazalar, bülten panoları, çeşitli dizinler vb.

Sitenin temeli program kodudur En son değiştirilme tarihi: 3 Mart 2016 tarafından Yönetici

3 Eylül 2014, 16:07

Kaynak koduna gerçekten ihtiyacınız var mı?

  • Mikrodenetleyici programlama
  • Tercüme
Birçok bilgide, birçok üzüntü
Herhangi bir ürün yazılımı geliştiricisine, kullandıkları gerçek zamanlı işletim sisteminin kaynak koduna erişmek isteyip istemediklerini sorarsanız, yanıt neredeyse kesinlikle evet olacaktır. Aynı şey satın alınan herhangi bir yazılım için de geçerlidir. Bu her durum için makul bir cevap mı ve neden kaynak kodu bazen gerekli, bazen de beklenenden daha az kullanışlı oluyor?

Gerçek zamanlı bir işletim sistemi (RTOS) seçerken mühendislerin kullandığı bir dizi temel kriter vardır. Bunların çoğu - maliyet, işlevsellik, lisanslama, destek - şüphesiz çok önemlidir (özellikle maliyet - bunlar bizim gerçeklerimizdir). Ancak başka bir kriter (kaynak kodunun bulunabilirliği) o kadar önemli olmayabilir ancak her zaman güçlü bir faktör olarak değerlendirilir.

Kaynak kodunun mevcut olması, otomatik olarak ücretsiz olarak sağlandığı anlamına gelmez. Bu yaklaşım yalnızca açık kaynaklı ürünler için geçerlidir; diğer durumlarda üreticiler kaynak kodu için ücret alabilir veya talep üzerine bunu sunabilir.

Donanım geliştirme. Bu, özellikle VHDL ve Verlog kullanılarak yapılan geliştirmeler için geçerli olan kaynak kodunu da içerir. Burada işler nasıl gidiyor? Geçmişte, bir entegre devre seçerken ve uygulamasını tasarlarken mühendisler, işlevsellik, pin çıkışı, güç gereksinimleri vb. gibi spesifikasyonlara güveniyordu. Ve aynı zamanda, hiç kimse IC'nin iç yapısının tam bir diyagramını görmeyi beklemiyordu, ancak çoğu zaman bir blok diyagramı görebiliyorlardı (esas olarak çalışma prensiplerini anlamayı kolaylaştıran açıklayıcı materyal olarak) ve hatta bazen bir devre şeması (op-amp'ler gibi analog IC'ler için), ancak hiçbir değer yoktur.
Bugün bir ASIC veya FPGA ürün yazılımı tasarlayan bir mühendis, muhtemelen belirli işlevler sağlayan önceden paketlenmiş bir blok olan bazı önceden oluşturulmuş IP bloklarını kullanacaktır. Ancak seçim spesifikasyonlara göre yapılacak ve orijinal HDL for IP'nin pakete dahil edilip edilmeyeceği pek de açık değil. Bu kara kutu yaklaşımı donanım dünyasında iyi bilinmektedir.

Emniyet. Bir ürüne dahil edilen herhangi bir teknoloji, gelecekteki teknik destek dikkate alınarak seçilmelidir. Örneğin, IP seçerken tek bir üreticinin benzersiz ürünlerini kullanmaktan kaçınmalısınız; bu, tedarik kesintileriyle ilgili sorunları azaltabilir.
İster donanım ister sağlanan yazılım olsun, IP kullanıldığında, bu tür tedarik arızalarının meydana gelmesi pek olası değildir (tek seferlik lisanslar hariç), ancak sürekli desteğin mevcut olması gerekir. Bu nedenle, tedarikçinizin, ürününüzün tüm ömrü boyunca faaliyette bulunup bulunmayacağı sorusunun, belirli bir uygulamayı seçmeden önce sorulması en iyisidir.

Bir IP'nin kaynak kodu mevcutsa, satıcı artık destek sağlayamasa bile her türlü (hemen hemen her türlü) yazılım sorununu çözmeyi mümkün kılar. Bu nedenle birçok RTOS alıcısı vb. Her ihtimale karşı, hiç bakmasalar bile kaynak kodunun rafta kalmasını isterler.

Yazılımın kişiselleştirilmesi Gömülü sistemler ile masaüstü bilgisayarlar arasındaki temel fark, eskinin değişkenliğidir. Çoğu bilgisayar diğerlerine benzer ve tek seçenek yürütme ortamı arasındadır: Windows, Mac veya Linux. Öte yandan gömülü sistemler inanılmaz derecede değişkendir; değişen işlemciler, bellek yapılandırmaları ve çevre birimleri. Sonuç olarak, IP yazılımının çeşitli sistemlere uygulanabilmesi için esnek olması gerekir. RTOS gibi pek çok ürün ikili biçimde (genellikle belirli bir mimariye göre özelleştirilmiş bir kitaplık) teslim edilse de, kaynak kodu teslim gereksinimleri, IP'yi kaynak olarak sağlamak bunların çoğunu çözdüğünden, birden fazla varyasyonu saklama ve destekleme ihtiyacını ortadan kaldırarak satıcıları teşvik edebilir. sorunlar. Kullanıcı belirli bir işlemci için kod oluşturabilir, bunu cihazın hafıza kartına uyarlayabilir ve gerekli cihaz uzantılarını ekleyebilir. Bazı durumlarda, bir IP bloğu koşullu derleme kullanılarak yapılandırılabilir; genellikle yapılandırmayı tanımlamak için bir başlık dosyası düzenlenir.

Sertifikasyon. Askeri/havacılık ve tıbbi uygulamalar gibi bazı uygulama türleri için aygıt yazılımının güvenlik ve çeşitli standartlara uygunluk açısından onaylanması gerekir. Bu süreç karmaşık ve pahalıdır ve genellikle kodun her satırının kontrol edilmesini gerektirir. Bu nedenle, uygulamanın tamamı incelemeye tabi olduğundan, "ön sertifikalı" yazılım birimlerini satın almak genellikle mümkün değildir. Bu nedenle, görev açısından kritik bir uygulama geliştiricisi, tam doğrulamanın gerçekleştirilebilmesi için büyük olasılıkla kaynak koduyla birlikte mevcut olan bir IP'yi arayacaktır.

Kaynak Kodu Nedir?
Soru garip görünebilir, ancak bir cevap olmadan onun varlığının (ya da yokluğunun) herhangi bir yönünü tartışmak biraz tuhaf bir alıştırmaya dönüşüyor. Yanıt açık görünebilir: Bir programın kaynak kodu, çalışan ikili talimatlar halinde derlenip bir araya getirilebilen üst düzey veya montaj dili talimatlarını içeren bir dosya koleksiyonudur. Hemen soru şu: Dönüşüm süreci için gerekli programlar ve onlar için yürütme ortamı kaynak kodun bir parçası mı (ikili biçimde)? Yine de bu tanım, kalitenin bozulma sırasına göre “kaynak kodu” verilebileceği (örneğin C dilinden bahsedelim) en az 3 biçimi karşılamaktadır:
1) İyi bir düzene sahip, açık değişken adlandırma kurallarına sahip ve iyi yorumlanmış gerçekten kaynak kodu (IP geliştiricisinin tamamen isteğe bağlı olan bir taneye sahip olması koşuluyla).
2) Başarıyla derlenecek ANCAK yorumlar veya özellikle anlamlı tanımlayıcı adlar olmadan kod satırları.
3) Kodu insanlar tarafından okunamaz, ancak derleyici tarafından kabul edilebilir hale getiren engellemeden sonraki kod satırları. Bu, tanımlayıcı adların anlamsız adlarla değiştirilmesi ve tüm yorumların ve sözdizimsel olarak gereksiz boşlukların kaldırılmasıyla yapılır. Tersine bir süreç var, ancak sonuçlarının kabul edilebilir olduğu söylenemez.
Tüm bu formlar yazılım sağlayıcıları tarafından aşağıdaki amaçlarla kullanılır:
1) çoğu alıcının almayı beklediği ve birçok üreticinin gerçekte sağladığı şeydir. Ancak satın alma kararı verirken kaynak koduna ihtiyacınız varsa, seçeneğin bu olduğundan emin olmak önemlidir; şüpheniz varsa sadece numune isteyin.
2) genellikle satıcı gereken minimum tutarı sunmak istediğinde kullanılır; bu (yalnızca) sertifikasyon için yeterli olabilir.
3) IIP içeriğini meraklı gözlerden korumak için kullanılır; bu, yazılımın yapılandırılabilirlik avantajından yararlandığı, ancak daha fazlası olmadığı anlamına gelir.

Kaynak kodunun dezavantajları.
Kaynak kodunun mevcut olmasının en büyük dezavantajı: çok cazip olmasıdır. Her geliştirici, yazılımını olabildiğince iyi hale getirmek ister (eh, böyle bir bakış açısı var). Yani örneğin RTOS API, uygulama için tam olarak ideal olacak şekilde çalışmıyorsa, kaynak kodunun kullanılabilirliği onu değiştirme fırsatı sağlar.
Bir uygulamayı en uygun hale getirmek harika bir şey gibi görünse de, uzun vadeli destek konusunda bir sorun var. RTOS işlevselliğinde bir sorun varsa ne olur? Tedarikçi, değiştirilen ürünü desteklemeyecektir. RTOS'un yeni bir sürümü yayınlanırsa ne yapmalı? Bunu yeniden tasarıma dahil etmek, tekrarlanan değişiklikler için önemli miktarda zaman gerektirebilir, özellikle de yazarı artık sizin için çalışmıyorsa (yani, bu değişiklikleri ya 3 yıl önce yaptınız ve elbette ya da dedikleri gibi, elbette yapmadınız) uygun belgeleri yazma zahmetine girmeyin).

Kaynak kodunun istenebileceği, yararlı veya gerekli olabileceği durumlar dikkate alındığında, bunun mutlaka ve her zaman gerekli olmadığı sonucuna varılır. Uzun vadeli destek sunabilen, büyük, tanınmış ve istikrarlı bir sağlayıcıdan IP satın alıyorsanız, kaynak koduna sahip olmanızın bir önemi yoktur ve hatta bir dezavantaj olarak listelenebilir.

Bir montaj (veya montajcı) dili, dil ile mimarinin makine kodu talimatları arasında bir korelasyonun bulunduğu, bir bilgisayar veya diğer programlanabilir donanım için düşük seviyeli bir programlama dilidir. Her makine odaklı dil (profesyonel terminolojide - “montajcı”) belirli bir bilgisayar mimarisini ifade eder. Buna karşılık, üst düzey programlama dillerinin çoğu platformlar arasıdır ancak yorumlama veya derleme gerektirir.

Platforma özgü kod, sembolik bir dil veya doğrudan bilgisayarın merkezi işlem birimi tarafından yürütülen bir dizi talimat olarak da adlandırılabilir. Bir işlemci tarafından yürütülen her program bir dizi talimattan oluşur. Makine kodu, tanım gereği, bir programcının görebileceği en düşük programlama düzeyidir.

Kullanım

Pek çok işlem, tam bir talimat oluşturabilecek bir veya daha fazla işlenen gerektirir ve birçok derleyici, işlenen olarak kayıtlar ve etiketlerin yanı sıra sayı ifadeleri ve sabitleri de kabul edebilir. Bu, makine kodu programcısını sıkıcı, tekrarlayan hesaplamalardan kurtarır. Mimariye bağlı olarak bu öğeler, sabit adreslerin yanı sıra ofsetler veya diğer veriler kullanılarak belirli talimatlar veya adresleme modları için de birleştirilebilir. Birçok "kurucu" program geliştirmeyi kolaylaştırmak, derleme sürecini kontrol etmek ve hata ayıklamayı desteklemek için ek mekanizmalar sunar.

Tarihi bakış açısı

İlk montaj dili, 1947'de Kathleen Booth tarafından ARC2 için Birkbeck Sürecinde İleri Araştırma Enstitüsü'nde John von Neumann ve Herman Goldstein ile birlikte çalışarak geliştirildi. SOAP (Sembolik Optimal Montaj Programı), 1955'te Stan Pawley tarafından oluşturulan 650 için bir montaj diliydi.

Tarihsel olarak birçok yazılım çözümü yalnızca montaj dilinde yazılmıştır. İşletim Sistemleri, Yönetici Sistemler Sorun Odaklı Dil (ESPOL) kullanılarak yazılan Burroughs MCP'nin (1961) ortaya çıkışına kadar yalnızca bu dilde yazılıyordu. BT devleri tarafından oluşturulan büyük miktarda IBM ana bilgisayar yazılımı da dahil olmak üzere pek çok ticari uygulama, makine odaklı dilde yazılmıştır. COBOL ve FORTRAN, çoğu büyük kuruluşun 1990'lı yıllara kadar montaj dili uygulama altyapılarını korumasına rağmen, sonunda işin çoğunun yerini aldı.

Çoğu işletim sistemi ve büyük ölçekli uygulamalar da dahil olmak üzere, ilk mikro bilgisayarların çoğu elle kodlanıyordu. Bunun nedeni, bu makinelerin ciddi kaynak sınırlamalarına sahip olması, özel bellek ve ekran mimarisine yük oluşturması ve hatalarla birlikte sınırlı sistem hizmetleri sunmasıdır. Belki de daha önemlisi, mikrobilgisayar kullanımına uygun birinci sınıf, üst düzey dil derleyicilerinin bulunmamasıydı, bu da makine kodunu öğrenmeyi zorlaştırıyordu.

Uygulama alanı

Montaj dilleri, ilk bilgisayarlarda gerekli olan sorunlu, sıkıcı ve zaman alıcı birinci nesil montaj dili programlamasının çoğunu ortadan kaldırır. Bu, programcıları sayısal kodları ezberleme ve adresleri hesaplama rutininden kurtarır. İlk aşamalarda "imalatçılar" her türlü programlama için yaygın olarak kullanıldı. Ancak 1980'lerin sonunda. Artan programlama üretkenliği arayışında kullanımlarının yerini büyük ölçüde daha yüksek seviyeli diller almıştır. Bugün, montaj dili hala doğrudan donanım manipülasyonu, özel işlemci talimatlarına erişim veya kritik performans sorunlarını çözmek için kullanılıyor. Tipik uygulamalar arasında aygıt sürücüleri, düşük seviyeli gömülü sistemler ve gerçek zamanlı parametreler bulunur.

Örnek Uygulamalar

Büyük derleme dili programlarının yaygın örnekleri arasında IBM PC DOS işletim sistemleri, Turbo Pascal derleyicisi ve Lotus 1-2-3 elektronik tablo programı gibi ilk uygulamalar yer alır.

Makineye özgü dil, 1980'lerin ve 1990'ların (MSX, Sinclair ZX Spectrum, Commodore 64, Commodore Amiga ve Atari ST gibi) pek çok popüler ev bilgisayarı için birincil geliştirme diliydi. Bunun nedeni, bu sistemlerde yorumlanan BASIC diyaloglarının yavaş yürütme hızları sağlamasının yanı sıra mevcut donanımdan tam olarak yararlanma konusunda sınırlı yetenek sağlamasıdır. Bazı sistemlerde son derece gelişmiş hata ayıklama ve makro araçları içeren entegre bir geliştirme ortamı (IDE) bile bulunur. Radio Shack TRS-80 ve halefleri için mevcut olan bazı derleyiciler, yerleşik montaj kaynağını yüksek seviyeli programlarla birleştirme yeteneğine sahipti. Satır içi derleyici, derlendikten sonra satır içi ikili kod üretti.

Aptallar için makine kodu. Terminoloji

Bir montajcı programı, işlemler için anımsatıcılar ve sözdizimsel kuralların kombinasyonlarını ve adresleme modlarını sayısal eşdeğerlerine çevirerek işlem kodları oluşturur. Bu gösterim tipik olarak bir işlem kodunun yanı sıra diğer kontrol bitlerini ve verilerini içerir. Birleştirici ayrıca sabit ifadeleri değerlendirir ve bellek konumları ve diğer nesneler için sembolik adlar tanımlar.

Makine kodları ayrıca bazı basit talimat kümesine bağlı optimizasyon türlerini de gerçekleştirebilir. Bunun spesifik bir örneği, çeşitli satıcıların popüler x86 "inşacıları" olabilir. Çoğu, istek üzerine herhangi bir sayıda geçişte dal komut değişiklikleri gerçekleştirebilir. Ayrıca, RISC mimarilerine yönelik bazı derleyiciler gibi, CPU hattından en iyi şekilde yararlanmak için akıllı talimat zamanlamasını optimize etmeye yardımcı olabilecek basit talimatları yeniden gruplama veya ekleme yeteneğine de sahiptir.

Fortran, Algol, Cobol ve Lisp gibi ilk programlama dilleri gibi, birleştiriciler ve metin tabanlı bilgisayar arayüzlerinin ilk nesilleri 1950'lerden beri mevcuttur. Ancak derleyiciler ilk sırada yer aldı çünkü yazılmaları yüksek seviyeli diller için derleyicilere göre çok daha kolaydı. Bunun nedeni, her bir anımsatıcının yanı sıra talimatların adresleme modları ve işlenenlerinin, çok fazla bağlam veya analiz olmaksızın her bir spesifik talimatın sayısal temsillerine çevrilmesidir. Ayrıca hem derlemelere hem de yüksek seviyeli dillere benzer özelliklere sahip bir dizi çevirmen sınıfı ve yarı otomatik kod üreteci vardır; hız kodu belki de en iyi bilinen örneklerden biridir.

Geçiş sayısı

Bir nesne dosyası oluşturmak için kaynaktan geçen geçişlerin sayısına (okuma denemelerinin sayısı) bağlı olarak iki tür montaj dili programlaması vardır.

Tek geçişli derleyiciler kaynak kodundan bir kez geçer. Tanımlanmadan önce kullanılan herhangi bir sembol, nesne kodunun sonunda bir hata bilgisi gerektirecektir.
Çok geçişli birleştiriciler, ilk geçişte tüm sembolleri ve anlamlarını içeren tablolar oluşturur ve daha sonra kod oluşturmak için sonraki geçişlerde tabloyu kullanır.

Tek geçişli birleştiricileri kullanmanın asıl nedeni birleştirme hızıydı; genellikle ikinci geçiş, program kaynağının kasete geri sarılmasını ve yeniden okunmasını gerektiriyordu. Daha büyük miktarda belleğe sahip olan daha sonraki bilgisayarlar (özellikle disk depolama için), tekrar okumaya gerek kalmadan gerekli tüm işlemleri yapabilecek alana sahipti. Çok geçişli birleştiricinin avantajı, hataların olmaması, bağlama işleminin (veya birleştirici doğrudan yürütülebilir kod üretiyorsa program yüklemenin) daha hızlı olduğu anlamına gelmesidir.

İkili kod nedir?

Assembly dilinde yazılmış bir program, bir dizi işlemci anımsatıcı talimatından ve meta ifadelerden (direktifler, sözde talimatlar ve sözde işlemler olarak bilinir), yorumlardan ve verilerden oluşur. Montaj dili talimatları genellikle işlem kodu anımsatıcılarından oluşur. Bunu bir veri, argüman veya parametre listesi takip eder. Bunlar çevirici tarafından makine dili talimatlarına çevrilir ve bunlar belleğe yüklenir ve yürütülür.

Örneğin, aşağıdaki talimat x86/IA-32 işlemcisine 8 bitlik bir değeri bir kayda taşımasını söyler. Bu talimatın ikili kodu 10110'dur ve ardından bir kayıt kullanan 3 bitlik bir tanımlayıcı gelir. AL'nin kimliği 000'dır, dolayısıyla aşağıdaki kod AL kaydını 01100001 verisiyle yükler.

Soru ortaya çıkıyor: ikili kod nedir? Bilgisayardaki veya başka bir elektronik cihazdaki bir harfi, sayıyı veya başka bir sembolü temsil etmek için "0" ve "1" ikili rakamlarını kullanan bir kodlama sistemidir.

Örnek makine kodu: 10110000 01100001.

Teknik özellikler

Montaj dilini makine koduna dönüştürmek bir montaj dili görevidir. Ters işlem bir sökücü kullanılarak yapılır. Üst düzey dillerden farklı olarak, birçok basit montaj ifadesi ile makine dili talimatları arasında bire bir yazışma vardır. Ancak bazı durumlarda montajcı sahte talimatlar (makrolar) sağlayabilir. Yaygın olarak ihtiyaç duyulan işlevselliği sağlamak için birden fazla makine dili talimatını kapsarlar. Tam yığın birleştiricilerin çoğu, satıcılar ve programcılar tarafından daha karmaşık kod ve veri dizileri oluşturmak için kullanılan zengin bir makro dili de sağlar.

Her bilgisayar mimarisinin kendine ait bir makine dili vardır. Bilgisayarlar, destekledikleri işlemlerin sayısı ve türleri, kayıtların boyutu ve sayısı ve depolamadaki verilerin temsili bakımından farklılık gösterir. Genel amaçlı bilgisayarların çoğu aynı işlevlerin çoğunu gerçekleştirme kapasitesine sahip olsa da, bunu yapma biçimleri farklılık gösterir. İlgili montaj dilleri bu farklılıkları yansıtır.

Genellikle farklı programlarda oluşturulan tek bir talimat seti için birden fazla anımsatıcı seti veya montaj dili sözdizimi mevcut olabilir. Bu durumlarda en popüler olanı genellikle üretici tarafından sağlanan ve belgelerinde kullanılandır.

Tasarım dili

Derleyici yazarların ifadeleri nasıl sınıflandırdıkları ve kullandıkları terminoloji konusunda büyük ölçüde çeşitlilik vardır. Özellikle bazıları, bir makine veya genişletilmiş anımsatıcılar dışında herhangi bir şeyi sahte işlem olarak tanımlar. Temel montaj sözlüğü, yazılım işlemlerini tanımlamak için kullanılan üç temel talimat türü olan bir talimat setinden oluşur:

  • işlem kodu anımsatıcısı;
  • veri tanımları;
  • koleksiyoncu direktifleri.

Opcode anımsatıcıları ve genişletilmiş anımsatıcılar

Assembly dilinde yazılan talimatlar, üst düzey dillerin aksine temel düzeydedir. Tipik olarak, bir anımsatıcı (rastgele semboller), tek bir yürütülebilir kod talimatı için sembolik bir gösterimdir. Her talimat tipik olarak bir işlem kodu artı sıfır veya daha fazla işlenenden oluşur. Çoğu komut bir veya iki değere atıfta bulunur.

Genişletilmiş anımsatıcılar genellikle talimatların özel olarak çalıştırılması için kullanılır - kılavuzun adından açıkça anlaşılamayan amaçlar için. Örneğin, birçok işlemcinin açık bir NOP talimatı yoktur ancak bu amaç için kullanılan yerleşik algoritmaları vardır.

Birçok geliştirici, iki veya daha fazla makine talimatı oluşturabilen temel yerleşik makroları destekler.

Veri Direktifleri

Verileri ve değişkenleri depolamak için öğeleri tanımlamak için kullanılan talimatlar vardır. Veri türünü, uzunluğunu ve hizalamasını tanımlarlar. Bu talimatlar aynı zamanda bilgilerin harici programlarda mı (ayrıca toplanan) yoksa yalnızca veri bölümünün tanımlandığı programda mı mevcut olduğunu belirleyebilir. Bazı montajcılar bunları sözde operatörler olarak tanımlar.

Direktifler Oluştur

Sahte kodlar veya sözde işlemler olarak da adlandırılan montaj direktifleri, montajcıya montaj talimatları dışındaki işlemleri gerçekleştirmeye yönlendiren talimatlardır. Yönergeler çeviricinin çalışmasını etkiler ve nesne kodunu, sembol tablosunu, listeleme dosyasını ve dahili çevirici parametre değerlerini etkileyebilir. Bazen sözde kod terimi, nesne kodu üreten yönergeler için kullanılır.

Sözde işlem adları, onları makine talimatlarından ayırmak için genellikle bir noktayla başlar. Sahte işlemlerin diğer bir yaygın kullanımı, çalışma zamanı verileri için depolama alanları ayırmak ve belki de içeriklerini bilinen değerlerle başlatmaktır.

Kendi kendini belgeleyen kod

Sembolik birleştiriciler, programcıların rastgele adları (etiketler veya semboller) bellek konumları ve çeşitli sabitlerle ilişkilendirmesine olanak tanır. Çoğu zaman, her sabite ve değişkene kendi adı verilir, böylece talimatlar bu konumlara adlarıyla başvurabilir ve böylece kodun kendi kendini belgelemesini teşvik eder. Yürütülebilir kodda, herhangi bir altyordamın adı onun giriş noktasıyla ilişkilendirilir, böylece altyordama yapılan tüm çağrılar onun adını kullanabilir. GOTO etiketleri alt programların içinde atanır. Pek çok koleksiyoncu, sözcüksel olarak normal sembollerden farklı olan yerel sembolleri destekler.

NASM gibi birleştiriciler esnek sembol yönetimi sağlayarak programcıların farklı ad alanlarını yönetmesine, veri yapılarındaki uzaklıkları otomatik olarak hesaplamasına ve değişmez değerlere veya birleştirici tarafından gerçekleştirilen basit hesaplamaların sonucuna atıfta bulunan etiketler atamasına olanak tanır. Kısayollar, yeri değiştirilebilen adresler kullanılarak sabitleri ve değişkenleri başlatmak için de kullanılabilir.

Montaj dilleri, diğer birçok dil gibi, bir programın kaynak koduna montaj işlemi sırasında göz ardı edilecek yorumlar eklemenize olanak tanır. Adli açıklama, montaj dili programlarında önemlidir çünkü ikili makine talimatları dizisinin tanımını ve amacını belirlemek zordur. Derleyiciler veya disassembler'lar tarafından üretilen "ham" (yorumsuz) montaj dilinin, değişiklik yapılması gerektiğinde okunması oldukça zordur.