close

Programlama dili

Navigasyona git Aramaya git
Image
Java programlama dilinde yazılmış, "Merhaba Dünya!" mesajını yazdıracak bir kaynak kodu örneği. derlendiğinde ve yürütüldüğünde standart çıktıya

Bir programlama dili , bir kişiye, bu durumda programcıya, bir dizi talimat veya sipariş dizisini yazma (veya programlama) yeteneği veren resmi bir dildir (veya yapay, yani iyi tanımlanmış gramer kurallarına sahip bir dildir). bir bilgisayar sisteminin fiziksel veya mantıksal davranışını kontrol etmek için algoritmalar şeklinde , böylece çeşitli türde veriler elde edilebilir veya belirli görevler yürütülebilir. Bir programlama dili kullanılarak yazılan bu komut setinin tamamına bilgisayar programı denir . [ 1 ] ​[ 2 ] ​[ 3 ] ​[ 4 ]

Özellikler

Programlama , yazarak, test ederek , hata ayıklayarak , derleyerek veya yorumlayarak güvenilir yazılım oluşturma ve o bilgisayar programının kaynak kodunu koruma sürecidir . Temel olarak, bu süreç aşağıdaki adımların mantıksal olarak uygulanmasıyla tanımlanır:

  • Belirli bir sorunu çözmek için programın mantıksal gelişimi.
  • Belirli bir programlama dili kullanarak program mantığı yazma (program kodlama).
  • Programın makine diline derlenmesi veya yorumlanması .
  • Program testi ve hata ayıklama .
  • Dokümantasyon geliştirme.

Programlama dilleri, birlikte dilin geçerli yapılarını ve anlamlarını tanımlayan bir dizi sembol ( alfabe olarak adlandırılır ), gramer ( sözcüksel / morfolojik ve sözdizimsel ) ve anlamsal kurallardan oluşur. 'Programlama dili' ve ' bilgisayar dili ' terimlerini eşanlamlı olarak ele almanın yaygın bir yanılgısı vardır . Bilgisayar dilleri, programlama dillerini ve HTML gibi diğerlerini içerir ( gerçekten bir programlama dili olmayan web sayfalarını işaretlemek için bir dil, daha ziyade belgelerin içeriğini yapılandırmaya izin veren bir dizi talimat ).

Programlama dili, belirli bir yazılımın hangi veriler üzerinde çalışması gerektiğini , bu verilerin nasıl saklanması veya iletilmesi gerektiğini ve yazılımın çeşitli koşullar altında hangi eylemleri gerçekleştirmesi gerektiğini tam olarak belirtmenize olanak tanır . Bütün bunlar, insan diline veya doğal dile nispeten yakın olmaya çalışan bir dil aracılığıyla. Programlama dillerinin ilgili bir özelliği, tam olarak, birden fazla programcının, işbirliği içinde bir program oluşturmak için birbirleri tarafından anlaşılan ortak bir talimat kümesini kullanabilmesidir.

Tarih

Image
1-5, 6 ve 73-80 sütunlarının özel kullanımını gösteren delikli kart üzerindeki Fortran kodu

Bilgisayarın talimatlarımızı anlaması için, makine tarafından kolayca okunabilen, ancak insanlar için aşırı karmaşık olan makine kodu olarak bilinen belirli bir dil kullanılmalıdır. Aslında, yalnızca 0 ve 1 numaralı uzun dizelerden oluşur .

İşi kolaylaştırmak için, ilk bilgisayar operatörleri 0 ve 1'i İngilizce'den kelimeler veya kelimelerin ve harflerin bir soyutlaması ile değiştirmek için bir çevirmen oluşturmaya karar verdiler ; bu, montaj dili olarak bilinir . Örneğin, eklemek için İngilizce add kelimesinin A harfi kullanılır . Assembly dili, makine diliyle aynı yapıyı takip eder, ancak harflerin ve kelimelerin hatırlanması ve anlaşılması sayılara göre daha kolaydır.

Olağan eylemler için programlama sıralarını hatırlama ihtiyacı, onları ezberlemesi ve ilişkilendirmesi kolay isimlerle çağırmaya yol açtı: ADD(ekleme), SUB(çıkarma), MUL(çarpma), CALL(alt rutini yürütme), vb. Bu konum dizisine "talimatlar" adı verildi ve bu komut dizisine montaj dili adı verildi . Daha sonra, insanlar tarafından yazılan dillere benzer sözdizimsel bir yapıya sahip oldukları için adını alan farklı programlama dilleri ortaya çıktı, aynı zamanda üst düzey diller olarak da adlandırılır . [ 5 ]

1953'ün sonlarında , John Backus IBM'deki üstlerine, IBM 704 ana bilgisayarını programlamak için montaj diline daha pratik bir alternatif geliştirmek için bir teklif sundu . John Backus'un tarihi Fortran ekibi , programcılar Richard Goldberg , Sheldon F. Best , Harlan Herrick , Peter Sheridan , Roy Nutt , Robert Nelson , Irving Ziller , Lois Haibt ve David Sayre'dan oluşuyordu . [ 6 ]

Fortran dili için ilk el kitabı Ekim 1956'da yayınlandı ve ilk Fortran derleyicisi Nisan 1957'de teslim edildi . Bu, optimize edilmiş bir derleyiciydi, çünkü müşteriler, derleyicileri, performansı el yazısı derleme dili koduyla karşılaştırılabilir kod üretemediği sürece, üst düzey bir dil kullanmak konusunda isteksizdi .

1960 yılında , iş bilgisayarlarında bugün hala kullanılan dillerden biri olan COBOL oluşturuldu .

Bilgisayarlar tarafından gerçekleştirilen görevlerin karmaşıklığı arttıkça, onları programlamak için daha verimli bir yönteme sahip olmak gerekli hale geldi. 1980'lerde mikrobilgisayarlarda tanıtılan sürümlerde BASIC olduğu gibi üst düzey diller oluşturuldu . İki sayı eklemek kadar basit bir görev, Assembly dilinde birkaç talimat gerektirebilirken, yüksek seviyeli bir dilde tek bir ifade yeterli olacaktır.

Programlama dillerinin sınıflandırılması

Programlama dilleri tarihsel olarak farklı kriterlere göre sınıflandırılmıştır:

  • tarihsel sınıflandırma
Daha etkileyici programlamanın yeni stillerine izin veren yeni diller ortaya çıktıkça, bu stiller bir dizi nesilde ayırt edildi , her biri benzer bir zamanda ortaya çıkan ve ortak genel özelliklere sahip programlama dillerini temsil etti.
  • Yüksek ve düşük seviyeli diller
Programlama dilleri genellikle "soyutlama düzeylerine", yani kullanılan sistemin doğasında bulunan bilgi işlem mimarisine ne kadar özel veya genel olduğuna atıfta bulunan iki geniş kategoride sınıflandırılır .
  • Paradigmalara göre sınıflandırma
Programlama paradigmaları, farklı hesaplama modellerini ve bir programın gerçekleştirmesi gereken görevleri yapılandırma ve düzenleme stillerini ayırt eder. Bir programlama dili, bir veya daha fazla programlama paradigmasını tamamen veya kısmen destekleyebilir.
  • Amaca göre sınıflandırma
Genel amaçlı programlama dilleri , özel amaçlı olanlardan ayrılır .

Bazı durumlarda, programlama dilleri, kullandıkları sözdiziminin genel stili gibi belirli ortak özellikleri paylaşan ailelere de sınıflandırılır . Bu özellikler genellikle, söz konusu dilin yaratıcılarına ilham kaynağı olan önceki programlama dillerinden miras alınır.

Tarihsel veya nesil sınıflandırması

Bilgisayar donanımı ( donanım ), ilk üçü ( tüplü , transistörlü ve entegre devreli bilgisayarlar ) çok açık, dördüncüsü ( büyük ölçekli entegre devreler ) daha tartışmalı olan dört nesilden geçti .

Benzer bir şey bilgisayar programlamasında ( yazılım ) genellikle beş kuşakta sınıflandırılan dillerde gerçekleştirilen, ilk üçü açıkken, diğer ikisi üzerinde herkes aynı fikirde değil. Bu nesiller, donanım olanlarla tam olarak zamanında değil, yaklaşık olarak çakıştı ve bunlar:

  • Birinci nesil : İlk bilgisayarlar , 0 ve 1 dizileriyle temsil edilebilen ( ikili sisteme dayalı olarak ) doğrudan makine kodunda programlandı . Ancak, programlama söz konusu olduğunda her bilgisayar modelinin kendi iç yapısı vardır. Bu dillere düşük seviyeli diller adı verildi , çünkü yönergeleri donanım üzerinde doğrudan kontrol sağlıyor ve onu destekleyen bilgisayarların fiziksel yapısı tarafından şartlandırılıyor. Bu tür bir dil, makine mantığına insan mantığından çok daha yakın olduğu için, onunla programlamak çok daha karmaşıktır. Adında low kelimesinin kullanılması , dilin yüksek seviyeli bir dilden daha az güçlü olduğu anlamına gelmez, daha ziyade dil ve donanım arasındaki azaltılmış soyutlamayı ifade eder. Örneğin, bu tür bir dil, işletim sistemlerinin , gerçek zamanlı uygulamaların veya aygıt sürücülerinin kritik görevlerini programlamak için kullanılır . Bu dillerin bir diğer sınırlaması, mantıksal komut dizilerini gerçekleştirmek için belirli programlama bilgisinin gerekli olmasıdır.
  • İkinci nesil : Sembolik diller , yine makineye özgüdür, komutların yazılmasını basitleştirir ve onları daha okunaklı hale getirir. Bir makro birleştirici aracılığıyla birleştirilmiş montaj dilini ifade eder . Karmaşık kontrol ve veri yapılarının bildirilmesine izin veren bir dizi güçlü makro ile birleştirilmiş makine dilidir.
  • Üçüncü nesil : Üst düzey diller , sembolik talimatların yerini, insan dili veya Matematik gibi makineden bağımsız kodlarla değiştirir . Ortak kullanıcının bir veri işleme sorununu daha kolay ve hızlı bir şekilde çözebilmesi için oluşturuldular. Önceki nesillerin dillerine göre yüksek performansın elde edildiği hesaplama ortamlarında kullanılırlar. Bunlar arasında C , Fortran , Smalltalk , Ada , C++ , C# , Cobol , Delphi , Java ve PHP bulunur . Bu dillerden bazıları genel amaçlı olabilir, yani dil tek bir uzmanlık alanına odaklanmaz, her türlü programı oluşturmak için kullanılabilir. Bazı daha yaygın görevler için, kodun yeniden kullanımına izin veren programlamayı kolaylaştıran kitaplıklar vardır.
  • Dördüncü nesil : Prefabrike parçaların birleştirilmesiyle basit uygulamaların oluşturulmasına izin veren bazı araçlara bu isim verilmiştir. Bugün bu araçların tam anlamıyla diller olmadığı düşünülüyor. Bazılarının dördüncü neslin adını nesne yönelimli programlama için ayırmayı önerdiğini belirtmekte fayda var . İkincisi, İngilizce diline çok benzer bir yapıya sahiptir. Bazı özellikleri şunlardır: veritabanı erişimi , grafik yetenekleri, otomatik kod oluşturma, ayrıca görsel olarak programlayabilme ( Visual Basic veya SQL gibi ). Yararları arasında daha yüksek üretkenlik ve programcının daha az yorulması ve ayrıca sağlanan araçlar talimat dizilerini içerdiğinden programcının daha az konsantrasyonu vardır. Aletlere verilen bazı talimatlar, sırayla, alet içinde başka bir seviyedeki talimat dizilerini içerdiğinden, gereken konsantrasyon seviyesi daha düşüktür. Önceden hazırlanmış programların sürdürülmesi gerektiğinde, daha düşük konsantrasyon gerektirdiğinden daha az karmaşıktır. Öte yandan, dezavantajları, bu yerleşik araçların genellikle düşük seviyeli dillerdeki doğrudan talimatlardan daha az esnek olmasıdır. Ek olarak, bağımlılıklar genellikle bir veya daha fazla dış sağlayıcı ile oluşturulur ve bu da özerklik kaybına neden olur. Ayrıca, bu önceden hazırlanmış araçlar genellikle diğer sağlayıcıların kitaplıklarını içerir ve bu da isteğe bağlı olarak kabul edilen ek seçeneklerin yüklenmesini gerektirir. Diğer sağlayıcılarla anlaşmalar olmadığı sürece, yalnızca kendilerini oluşturan dille çalışan programlardır. Ayrıca , piyasada geçirdikleri süre bilinmediği için gelecekte risk oluşturan ISO ve ANSI uluslararası standartlarına da uymazlar. Bazı örnekler: NATURAL ve PL/SQL .

Programlama paradigması

Bir programlama paradigması, hesaplamaları yürütmek için bir yöntemden ve bir program tarafından gerçekleştirilecek görevlerin yapılandırılması ve düzenlenmesi gereken yoldan oluşur. [ 7 ] Bir programcılar ve geliştiriciler topluluğu tarafından benimsenen teknolojik bir öneridir ve merkezi çekirdeği sorgulanamaz, çünkü yalnızca bir veya birkaç açıkça tanımlanmış sorunu çözmeye çalışır; bu problemlerin çözümü sonuç olarak yazılım mühendisliğini etkileyen en az bir parametrede önemli bir ilerlemeyi varsaymalıdır . Çözüm tasarlamak için belirli bir yaklaşımı veya felsefeyi temsil eder. Paradigmalar , bir problemde yer alan unsurları soyutlamanın kavramları ve yollarının yanı sıra, problemin çözümlerini bütünleştiren adımlarda, diğer bir deyişle hesaplamada birbirinden farklıdır. Tanım anında belirli dillerin resmileştirilmesi ile yakından ilgilidir. Kullanılan bir programlama stilidir.

Bir programlama paradigması, kabul ve kullanım açısından zamanla sınırlıdır, çünkü yeni paradigmalar, kısmen veya tamamen yerini alan yeni veya daha iyi çözümler sunar.

Şu anda en yaygın olarak kullanılan programlama paradigması " nesne yönelimi "dir (OO). Bu paradigmanın merkezi çekirdeği, sırayla diğer "nesne" varlıklarla ilişkilendirilebilen "nesne" adı verilen bir varlıkta veri ve işlemenin birleşimidir.

Geleneksel olarak, veri ve işleme, yazılım tasarımı ve uygulamasının farklı alanlarına ayrılmıştır. Bu, büyük gelişmelerin güvenilirlik, bakım, değişikliklere uyum ve ölçeklenebilirlik sorunları yaşamasına neden oldu. OO ve kapsülleme, polimorfizm veya kalıtım gibi özelliklerle , herhangi bir üretim ölçeğinde yazılım geliştirmede önemli bir ilerlemeye izin verildi. OO, kökeninde Lisp ve Simula gibi dillerle bağlantılı görünüyor , ancak Smalltalk "nesne yönelimli programlama" başlığını ilk kullanan kişiydi .

Paradigmalara göre sınıflandırma

Genel olarak, çoğu paradigma, zorunlu ve bildirimsel olmak üzere iki ana programlama türünün varyantlarıdır. Zorunlu programlamada, programın durumunu değiştirmek ve çözümü bulmak için yürütülmesi gereken bir dizi talimat adım adım açıklanır, yani sorunu çözmek için gerekli adımları tanımlayan bir algoritma .

Bildirimsel programlamada, yaptıkları işlerde kullanılan ifadeler çözülmesi gereken problemi tanımlar; kullanıcı düzeyinde neyi çözmek istediğini söyleyerek programlanır, ancak onu çözmek için gerekli talimatlar değil. İkincisi, yapılan açıklamaya dayalı olarak dahili bilgi çıkarım mekanizmaları aracılığıyla yapılacaktır.

Programlama paradigmalarının farklı türevlerinden bazıları aşağıda açıklanmıştır:

  • Zorunlu veya prosedürel programlama :Genel olarak en çok kullanılanıdır, problemi veya çözümü anlatmak yerine, bilgisayara bir şeylerin nasıl yapılacağına dair talimatların algoritmalar şeklinde verilmesi esasına dayanır. Yemek kitapları ve süreç kontrol listeleri, bilgisayar programları olmasa da, tarz olarak zorunlu programlamaya benzer tanıdık kavramlardır; burada her adım bir talimattır. En eski ve en çok kullanılan programlama biçimidir, ana örneği makine dilidir . Bu paradigmanın saf dillerinin örnekleri C , BASIC veya Pascal olacaktır .
  • Olaya dayalı programlama: Olaya dayalı programlama, programların hem yapısının hem de yürütülmesinin sistemde meydana gelen, kullanıcı tarafından tanımlanan veya bunlardan kaynaklanan olaylar tarafından belirlendiği bir programlama paradigmasıdır.
  • Bildirimsel programlama :yönergeler yerine yerine getirilmesi gereken özellikleri ve kuralları bildirerek sorunu tanımlamaya dayanır. Fonksiyonel programlama , mantık programlama veya mantık-fonksiyonel kombinasyon için diller vardır . Çözüm, tam olarak nasıl bulunacağını belirtmeden, iç kontrol mekanizmaları aracılığıyla elde edilir ( bilgisayara yalnızca ne elde etmek istediğinizi veya ne aradığınızı söylersiniz). Yıkıcı atama yoktur ve değişkenler bilgi şeffaflığıyla kullanılır . Bildirimsel diller, matematiksel olarak mantıklı olma avantajına sahiptir, bu da program performansını optimize etmek için matematiksel mekanizmaların kullanılmasına izin verir. [ 8 ] İlk işlevsel dillerden bazıları Lisp ve Prolog idi .
  • Reaktif programlama : bu paradigma, bir dizi asenkron olay yayıcı nesnenin ve ilklerine "abone olan" (yani, bunların olay emisyonunu dinlerler) başka bir nesne dizisinin bildirilmesine dayanır ve bunlara * tepki verirler* aldıkları değerler. Birden çok programlama dili için kullanılabilen Microsoft'un Rx kitaplığını (Reaktif Uzantılar için Kısaltma) kullanmak çok yaygındır.
  • Etki Alanına Özgü Dil veya DSL: Belirli bir sorunu çözmek için geliştirilen dillere verilen addır ve önceki grupların herhangi birine dahil edilebilir. En iyi temsili , bildirimsel türde veritabanlarını yönetmek için SQL olacaktır, ancak Logo gibi zorunlu olanlar da vardır .

Öğeler

Değişkenler ve vektörler

Image
Arjantin'de oluşturulan İspanyol programlama dili Pauscal'dan alınan görüntü

Değişkenler , belirli verileri depolamak için bellekteki boşluklara atanan başlıklardır. Veri kapsayıcılarıdır ve bu nedenle depolayabildikleri veri türüne göre farklılık gösterirler. Çoğu programlama dilinde, belirli bir veriyi depolamak için belirli bir değişken türü belirtmek gerekir. Örneğin, Java'da bir metin dizesini kaydetmek istiyorsak, değişkenin String türünde olduğunu belirtmeliyiz . Öte yandan, PHP veya JavaScript gibi dillerde bu tür değişken belirtimi gerekli değildir. Ayrıca vektör adı verilen bileşik değişkenler de vardır. Bir vektör, bellekteki ardışık baytlar kümesinden başka bir şey değildir ve bir kap değişkeninde depolanan aynı türdedir. En yaygın değişken ve vektör türlerinin listesi:

Veri tipi Kısa Açıklama
karakter Bu değişkenler tek bir karakter, yani bir harf, bir işaret veya bir sayı içerir.
int Bir tamsayı içerirler.
batmadan yüzmek Bir ondalık sayı içerirler.
Sicim Metin dizeleri içerirler veya aynısı, Char türünde birkaç değişkene sahip bir vektördür.
boole Yalnızca bir sıfır veya bir içerebilirler.

Boole değişkenleri söz konusu olduğunda, birçok dil için sıfır, gerçek yanlış (" Yanlış ") olarak kabul edilirken, biri doğru (" Doğru ") olarak kabul edilir.

Koşullar

Koşullu ifadeler, programın belirli bir bölümünün yürütülmesi için belirli öncüllerin karşılanması gerektiğini belirten kod yapılarıdır; örneğin: iki değerin eşit olması, bir değerin var olması, bir değerin diğerinden büyük olması... Bu koşullar genellikle program boyunca yalnızca bir kez yürütülür. Programlamada en iyi bilinen ve en çok kullanılan koşullandırma faktörleri şunlardır:

  • If : Programın bir bölümünün çalıştırılması için bir koşulu belirtir.
  • Else if : Her zaman bir "If" ile başlar ve programın bir bölümünün önceki if koşulu karşılanmadığı ve "else if" ile belirtilen koşul karşılandığı sürece yürütülecek bir koşulu belirtir.
  • Else : Her zaman "If" ve bazen "Else If" ile başlar. Ön koşullar karşılanmadığında yürütülmesi gerektiğini belirtir.

Döngüler

Döngüler, koşul ifadelerinin yakın akrabalarıdır, ancak belirli bir koşul karşılandığı sürece sürekli olarak kod yürütürler. En sık:

  • For : Bir değişken 2 belirli parametre arasındayken bir kod yürütür.
  • while : İstenen koşul karşılandığında bir kod yürütür.

Farklı döngü türleri olmasına rağmen, hepsinin tamamen aynı işlevleri yerine getirebilecekleri söylenmelidir. Birinin veya diğerinin kullanımı, genel olarak programcının zevkine bağlıdır.

Özellikler

Kod parçacıklarını sürekli olarak tekrarlamaktan kaçınmak için işlevler oluşturuldu. Bir fonksiyon, kodu kendi içine alan bir değişken olarak düşünülebilir. Bu nedenle, söz konusu değişkene (fonksiyon) eriştiğimizde, aslında yaptığımız şey, programa önceden tanımlanmış belirli bir kodu yürütmesini emretmektir.

Tüm programlama dilleri, verilerin ve bu verilere uygulanan işlemlerin veya dönüşümlerin (iki sayının eklenmesi veya bir koleksiyonun parçası olan bir öğenin seçilmesi gibi) açıklaması için bazı ilkel eğitim öğelerine sahiptir. Bu ilkel öğeler, sırasıyla yapılarını ve anlamlarını açıklayan sözdizimsel ve anlamsal kurallarla tanımlanır.

Sözdizimi

Image
Sözdizimi öğeleri, okunmasını kolaylaştırmak için genellikle farklı renklerle vurgulanır. Bu örnek Python'da yazılmıştır .

Bir programlama dilinin görünür biçimi sözdizimi olarak bilinir. Çoğu programlama dili tamamen metinseldir, yani doğal yazılı dillere benzer şekilde kelimeler, sayılar ve noktalama işaretleri içeren metin dizileri kullanırlar. Öte yandan, bir programı belirtmek için semboller arasındaki görsel ilişkileri kullanan, doğası gereği daha grafiksel olan bazı programlama dilleri vardır.

Bir programlama dilinin sözdizimi, sözdizimsel olarak doğru bir programı oluşturan olası sembol kombinasyonlarını tanımlar. Bir sembol kombinasyonuna verilen anlam, semantiği tarafından ele alınır (resmi olarak veya uygulama referansının sabit kodunun bir parçası olarak). Çoğu dil metinsel olduğundan, bu makale metinsel sözdizimi ile ilgilidir.

Programlama dillerinin sözdizimi genellikle düzenli ifadeler (morfolojik/sözcüksel yapı için) ve Backus-Naur Notasyonu (sözdizimsel yapı için) kombinasyonu kullanılarak tanımlanır. Bu, Lisp dilinden alınan basit bir dilbilgisi örneğidir :

ifade  ::=  atom  | liste 
atom ::= sayı |  sembol 
numarası  ::=  [+-]?  [ '0'-'9']+ 
sembol  ::=  [ 'A'-'Z']  [ 'a'-'z'].* 
liste  ::=  ' ( '  ifade*  ' ) '

Bu dilbilgisi şunları belirtir:

  • bir ifade bir atom veya bir liste olabilir ;
  • bir atom bir sayı veya bir sembol olabilir ;
  • bir sayı , isteğe bağlı olarak önünde bir artı veya eksi işareti bulunan, bir veya daha fazla ondalık basamaktan oluşan sürekli bir dizidir;
  • sembol , ardından sıfır veya daha fazla karakter (boşluklar hariç) gelen bir harftir ; Y
  • liste , aralarında sıfır veya daha fazla ifade bulunan bir çift açma ve kapama parantezidir .

Bu gramere göre iyi biçimlendirilmiş dizilerin bazı örnekleri:

' 12345', ' ()', ' (a b c232 (1))'

Sözdizimsel olarak doğru olan tüm programlar anlamsal olarak doğru değildir. Sözdizimsel olarak doğru olan birçok programın dil kurallarıyla tutarsızlıkları vardır; ve (dil belirtimine ve uygulamanın sağlamlığına bağlı olarak) bir çeviri veya yürütme hatasıyla sonuçlanabilir. Bazı durumlarda, bu tür programlar tanımsız davranış sergileyebilir. Ayrıca, bir program bir dilde iyi tanımlanmış olsa bile, onu yazan kişinin kurmaya çalıştığı şey olmayan bir anlamı olabilir.

Örneğin, doğal dili kullanarak dilbilgisi açısından geçerli bir cümleye anlam yüklemek mümkün olmayabilir veya cümle yanlış olabilir:

  • "Yeşil ve solmuş fikirler öfkeyle uyur" dilbilgisi açısından iyi oluşturulmuş bir cümledir, ancak genel olarak kabul edilen bir anlamı yoktur.
  • "John evli bir bekardır" da dilbilgisi açısından iyi biçimlendirilmiştir ancak gerçek olamayacak bir anlamı ifade eder.

Aşağıdaki C dili parçacığı sözdizimsel olarak doğrudur, ancak anlamsal olarak tanımsız bir işlemi yürütür ( p bir boş gösterici olduğundan, p->real ve p->im işlemlerinin hiçbir anlamı yoktur):

karmaşık * p = NULL ;   
karmaşık abs_p = sqrt ( p -> gerçek * p -> gerçek + p -> im * p -> im );          

İlk satırdaki tür bildirimi atlanırsa, " p " değişkeni tanımlanmayacağından program bir derleme hatası tetikler . Ancak tür bildirimleri yalnızca anlamsal bilgi sağladığından program yine de sözdizimsel olarak doğru olacaktır.

Bir programlama dilini belirtmek için gereken dilbilgisi, Chomsky Hiyerarşisindeki konumuna göre sınıflandırılabilir . Çoğu programlama dilinin sözdizimi, Tip-2 dilbilgisi kullanılarak belirlenebilir, yani bunlar bağlamdan bağımsız dilbilgileridir. Perl ve Lisp dahil olmak üzere bazı diller, ayrıştırma aşamasında yürütmeye izin veren yapılar içerir. Programcının bir ayrıştırıcının davranışını değiştirmesine izin veren yapılara izin veren diller, sözdizimi ayrıştırmayı kararsız bir sorun haline getirir ve genellikle ayrıştırma ile yürütme arasındaki ayrımı gizler. Genel hesaplamalara sahip olabilen Lisp'in makro sistemi ve Perl'in BEGIN bloklarının aksine , C makroları yalnızca dizge değiştirmeleridir ve kod yürütmesi gerektirmez.

Statik anlambilim

Statik anlambilim, standart sözdizimsel biçimcilikleri kullanarak ifade edilmesi imkansız veya çok zor olan geçerli metinlerin yapısı üzerindeki kısıtlamaları tanımlar. Derlenmiş diller için, statik anlambilim temel olarak derleme zamanında kontrol edilebilen anlamsal kurallar içerir. Örneğin, her tanımlayıcının kullanılmadan önce bildirildiğinin (bu tür bildirimleri gerektiren dillerde) veya bir vaka yapısının her kolundaki etiketlerin farklı olduğunun kontrol edilmesi. Tanımlayıcıların uygun bağlamlarda kullanılmasını sağlamak (örneğin, bir işlev adına bir tamsayı eklememek) veya alt program çağrılarının uygun sayıda ve türde parametreye sahip olması gibi bu türden birçok önemli kısıtlama, tanımlanarak uygulanabilir. tür sistemi olarak bilinen bir mantıkta kurallar olarak. Veri akışı analizi gibi diğer statik analiz biçimleri de statik anlambilimin parçası olabilir. Java ve C# gibi diğer programlama dilleri , statik anlambilimlerinin bir parçası olarak, bir veri akışı ayrıştırma biçimi olan eşleme tanımlı ayrıştırmaya sahiptir.

Sistem yazın

Bir veri türü sistemi, bir programlama dilinin değerleri ve ifadeleri türlere ayırma biçimini, bu türlerin nasıl manipüle edilebileceğini ve nasıl etkileşime girdiklerini tanımlar . Bir tür sisteminin amacı, belirli geçersiz işlemleri tespit ederek, söz konusu dilde yazılmış programlarda belirli bir doğruluk düzeyini doğrulamak ve genellikle uygulamaktır. Herhangi bir karar verilebilir tip sistemin avantajları ve dezavantajları vardır: bir yandan birçok kötü programa izin vermezken, aynı zamanda bazı iyi ancak nadir programlara da izin vermez. Bu dezavantajı en aza indirmek için, bazı diller , programcı tarafından farklı türler arasında normalde izin verilmeyen bir işleme açıkça izin vermek için kullanılabilecek tür boşlukları , açık denetlenmemiş dönüşümler içerir. Yazılan dillerin çoğunda, tür sistemi yalnızca program türlerini kontrol etmek için kullanılır, ancak genellikle işlevsel olan birkaç dil, tür çıkarımı olarak bilinen şeyi gerçekleştirir ve bu da programcının yükünü hafifletir. Tip sistemlerinin tasarımı ve resmi çalışması, tip teorisi olarak bilinir .

Yazılan dillere karşı yazılmamış diller

Her işlemin belirtiminin, diğer türlere uygulanamayacağı anlamına gelecek şekilde, uygulanabilir olduğu veri türlerini tanımlaması gerekiyorsa, bir dilin yazıldığı söylenir. Örneğin, " este texto entre comillas" bir karakter dizisidir. Çoğu programlama dilinde, bir sayıyı bir karakter dizisine bölmenin bir anlamı yoktur. Bu nedenle, çoğu modern programlama dili, herhangi bir programın böyle bir işlemi gerçekleştirme girişimini reddedecektir. Bazı dillerde, bu anlamsız işlemler, program derlendiğinde ("statik" tür doğrulaması) algılanır ve derleyici tarafından reddedilirken, diğerlerinde program yürütüldüğünde ("dinamik" tür doğrulaması) algılanır ve reddedilir. çalışma zamanında bir istisna atar.

Yazılı dillerin özel bir durumu, düz yazılan dillerdir . Bunlar genellikle REXX veya SGML gibi komut dosyası veya biçimlendirme dilleridir ve yalnızca bir veri türüne sahiptir; daha sonra hem sayısal hem de sembolik veriler için kullanılan yaygın karakter dizileri.

Buna karşılık, çoğu derleme dili gibi, türsüz bir dil , tipik olarak çeşitli uzunluklardaki bit dizileri olarak kabul edilen herhangi bir veriye herhangi bir işlemin uygulanmasına izin verir. Verisiz üst düzey diller , BCPL ve bazı Forth çeşitlerini içerir .

Pratikte, tip teorisi açısından birkaç dilin yazıldığı kabul edilse de (yani, tüm işlemleri kontrol eder veya reddederler), çoğu modern dil bir dereceye kadar tip işleme sunar. Birçok üretim dili, tip sisteminden kaçınmak veya atlamak için araçlar sağlasa da.

Statik türler ve dinamik türler

Statik olarak yazılan dillerde , tüm ifadelerin türü program yürütülmeden önce belirlenir (genellikle derleme zamanında). Örneğin, 1 ve (2+2) tamsayı ifadeleridir; dize bekleyen bir işleve geçirilemezler ve tarih olarak tanımlanan bir değişkene kaydedilemezler.

Statik yazılan diller, açık türleri veya çıkarsanan türleri işleyebilir . İlk durumda, programcı türleri belirli metinsel konumlarda yazmalıdır. İkinci durumda, derleyici bağlama göre ifadelerin ve bildirimlerin türlerini çıkarır . C++ , C# ve Java gibi popüler statik olarak yazılan dillerin çoğu açık yazmayı işler. Tam tür çıkarımı genellikle Haskell ve ML gibi daha az popüler olan dillerle ilişkilendirilir . Ancak, açıkça yazılan birçok dil, kısmi tür çıkarımlarına izin verir; Örneğin hem Java hem de C# , sınırlı sayıda durumda türler çıkarır.

Dinamik olarak yazılan diller , program yürütme sırasında işlemlerde yer alan türlerin geçerliliğini belirler . Başka bir deyişle, türler metinsel ifadelerden ziyade çalışan değerlerle ilişkilendirilir . Çıkarsanan yazılan dillerde olduğu gibi, dinamik olarak yazılan diller, programcının ifadelerin türlerini yazmasını gerektirmez. Diğer şeylerin yanı sıra, bu, bir programın yürütülmesi sırasında aynı değişkenin farklı zamanlarda farklı türlerdeki değerlerle ilişkilendirilmesine izin verir. Ancak, tür hataları, kod yürütülene kadar otomatik olarak algılanamaz, bu da programların hatalarını ayıklamayı zorlaştırır.Ancak, dinamik olarak yazılan dillerde, hata ayıklama genellikle BDD ve TDD gibi geliştirme teknikleri lehine ihmal edilir . Ruby , Lisp , JavaScript ve Python dinamik olarak yazılan dillerdir.

Zayıf tipler ve güçlü tipler

Zayıf yazılan diller , bir türün değerinin başka bir tür olarak ele alınmasına izin verir, örneğin bir dize bir sayı olarak çalıştırılabilir. Bu bazen yararlı olabilir, ancak derleme sırasında veya bazen yürütme sırasında bile yakalanamayan belirli türdeki arızalara da izin verebilir.

Güçlü yazılan diller , yukarıdakilerin olmasını engeller . Yanlış türde herhangi bir işlem gerçekleştirme girişimi bir hatayı tetikler. Kesin olarak yazılan dillere genellikle type-safe denir .

Perl ve JavaScript gibi zayıf yazılan diller , çok sayıda örtük tür dönüştürmeye izin verir. Örneğin JavaScript'te ifade 2 * xörtük xolarak bir sayıya dönüşür ve bu dönüştürme , , a veya bir harf dizisi olduğunda xbile başarılı olur. Bu örtük dönüştürmeler genellikle yararlıdır, ancak programlama hatalarını da gizleyebilirler. nullundefinedArray

Statik ve güçlü özellikler artık genellikle ortogonal kavramlar olarak kabul edilir, ancak bunların farklı metinlerde ele alınması farklıdır. Bazıları, güçlü türler terimini , güçlü bir şekilde statik türlere atıfta bulunmak için veya kafa karışıklığına eklemek için basitçe statik tür eşdeğeri olarak kullanır . Dolayısıyla C , hem güçlü yazılmış bir dil hem de statik olarak zayıf yazılmış bir dil olarak adlandırılmıştır.

Uygulama

Image
Java programlama dilinde yazılmış bir programın kaynak kodu

Bir dilin uygulanması, bir programın belirli bir yazılım ve donanım kombinasyonu için çalışması için bir yol sağlar . Bir dili uygulamanın temel olarak iki yolu vardır: derleme ve yorumlama .

  • Derleme : Bir programlama dilinde yazılmış bir programı başka bir programlama diline çevirerek, makinenin yorumlayabileceği eşdeğer bir program üreten işlemdir. Bunu yapabilen çevirmen programlarına derleyiciler denir . Bunlar, gelişmiş derleme programları gibi, kaynak programdaki her bir ifade için birçok makine kodu satırı üretebilir.
  • Yorumlama : biçimsel bir dilin iyi biçimlendirilmiş formüllerine bir anlam atamasıdır . Biçimsel diller tamamen sözdizimsel terimlerle tanımlanabildiğinden, iyi biçimlendirilmiş formülleri, hiçbir anlamı olmayan sembol dizilerinden başka bir şey olamaz . Bir yorum bu formüllere anlam verir.

Yüksek seviyeli dilleri çevirmek için bir alternatif de kullanılabilir. Kaynak programı çevirmek ve derleme sırasında üretilen nesne kodunu gelecekteki bir çalıştırmada kullanılmak üzere kalıcı olarak kaydetmek yerine, programcı işlenecek verilerle birlikte kaynak programı bilgisayara yükler. Bir yorumlayıcı program , ya işletim sisteminde diskte depolanır ya da makinenin içine kalıcı olarak gömülür, daha sonra kaynak programdaki her bir ifadeyi veri işleme sırasında gerektiği gibi makine diline dönüştürür. Nesne kodu daha sonra kullanılmak üzere kaydedilmez.

Bir sonraki komut kullanıldığında, tekrar yorumlanmalı ve makine diline çevrilmelidir. Örneğin, döngü adımlarının tekrarlı işlenmesi sırasında, döngüdeki her ifadenin döngünün her tekrarlanan yürütülmesinde yeniden yorumlanması gerekecektir, bu da programı çalışma zamanında yavaşlatır (çünkü çalışma zamanında kodu gözden geçirmeye gider) ancak tasarım zamanında daha hızlıdır (çünkü tüm kodun her zaman derlenmesi gerekmez). Yorumlayıcı, özellikler eklemek veya hataları düzeltmek istediğinizde, her program değişikliğinden sonra derleme ihtiyacını ortadan kaldırır; ancak önceden derlenmiş bir nesne programının, bir kod yürütmesi sırasında her adımda yorumlanması gereken bir programdan çok daha hızlı yürütülmesi gerektiği açıktır.

Çoğu üst düzey dil, çok amaçlı programlamaya izin verir, ancak çoğu, Pascal'ın emekleme döneminde matematikle olduğu gibi, özel programlamaya izin verecek şekilde tasarlanmıştır. Logo gibi çocukların eğitim dilleri de bir dizi basit talimat aracılığıyla uygulanmıştır. Şu anda, özellikle web uygulamaları için belirtilen bazı diller çok popüler , örneğin Perl , PHP , Ruby , Python veya JavaScript .

lehçeler

Bir programlama dilinin lehçesi , dilin kendi doğasını değiştirmeyen (nispeten küçük) bir varyasyonu veya uzantısıdır. Scheme ve Forth gibi dillerle , uygulayıcılar standartları yetersiz, yetersiz veya gayri meşru bulabilirler, bu nedenle genellikle standarttan saparak yeni bir lehçe oluştururlar . Diğer durumlarda , genellikle bir alt küme olan alana özgü bir dilde kullanım için bir lehçe oluşturulur . Lisp dünyasında , bir S ifadesinin temel sözdizimini ve Lisp benzeri anlambilimi kullanan çoğu dil , örneğin Racket ve Clojure gibi büyük farklılıklar gösterse de Lisp lehçeleri olarak kabul edilir . Bir dilin birden fazla lehçesi olması yaygın olduğundan, deneyimsiz bir programcının doğru belgeleri bulması oldukça zor olabilir. BASIC programlama dilinin birçok lehçesi vardır .

Teknik

Image
Çeşitli programlama dilleri üzerine kitaplar

En iyi sonuçları veren programları yazmak için dikkate alınması gereken bir takım ayrıntılar vardır.

  • düzeltme _ Bir program, gelişiminin önceki aşamalarında kurulduğu gibi yapması gerekeni yapıyorsa doğrudur. Bir programın yapması gerekeni yapıp yapmadığını belirlemek için, onu geliştirmeden önce programın ne yapması gerektiğini açıkça belirtmek ve ardından bittiğinde gerçekte ne yaptığıyla karşılaştırmak çok önemlidir.
  • netlik _ Programın geliştirilmesini ve sonraki bakımını kolaylaştırmak için programın mümkün olduğunca açık ve okunabilir olması çok önemlidir. Bir program geliştirirken, yapısı basit ve tutarlı olmalı, aynı zamanda düzenleme stiline de özen gösterilmelidir; Bu şekilde, hem oluşturma aşamasında hem de sonraki hata düzeltme, genişletme, değişiklik vb. aşamalarda programcının işi kolaylaşır . Başka bir programcı tarafından bile yapılabilecek, diğer programcıların çalışmaya kolayca devam edebilmeleri için netliğin daha da gerekli olduğu aşamalar. Bazı programcılar , kod bölümlerini sınırlamak için ASCII Art'ı bile kullanır. Diğerleri, eğlence için veya diğer programcılar tarafından uygun analizleri önlemek için, karmaşık kod kullanmaya başvururlar .
  • verimlilik _ Buradaki fikir, programın yaratıldığı şeyi yapmanın (yani doğru olmanın) yanı sıra, bunu kullandığı kaynakları mümkün olan en iyi şekilde yöneterek yapmasıdır. Normalde, bir programın verimliliğinden bahsederken, genellikle yaratıldığı görevi yerine getirmek için geçen süreye ve ihtiyaç duyduğu bellek miktarına atıfta bulunuruz, ancak verimlilik elde edilirken dikkate alınabilecek başka kaynaklar da vardır. doğasına bağlı olarak (kullandığı disk alanı, oluşturduğu ağ trafiği vb.)

Paradigmalar

Programlar, onları üretmek için kullanılan dil paradigmasına göre sınıflandırılabilir . Ana paradigmalar şunlardır: zorunluluklar , bildirimler ve nesne yönelimi .

Zorunlu bir dil kullanan programlar bir algoritma belirtir , bildirimler, ifadeler ve ifadeler kullanır. [ 11 ]​ Bir bildirim, bir değişken adını bir veri türüyle ilişkilendirir, örneğin: var x: integer;. Bir ifade bir değer içerir, örneğin: 2 + 2değeri içerir. Son olarak, bir ifade bir değişkene bir ifade atamalı veya bir programın akışını değiştirmek için bir değişkenin değerini kullanmalıdır, örneğin: x := 2 + 2; if x == 4 then haz_algo();. Zorunlu dillerin yaygın bir eleştirisi, atama ifadelerinin "yerel olmayan" olarak adlandırılan bir değişken sınıfı üzerindeki etkisidir. [ 12 ]

Bildirim dili kullanan programlar, çıktının bilmesi gereken özellikleri belirtir ve herhangi bir uygulama ayrıntısı belirtmez. İki geniş bildirim dili kategorisi, işlevsel diller ve mantıksal dillerdir . İşlevsel diller, yerel olmayan değişken atamalarına izin vermez, bu nedenle örneğin bu tür matematiksel işlevleri programlamayı kolaylaştırır. [ 12 ] Mantık dillerinin ardındaki ilke, çözülmesi gereken problemi (hedef) tanımlamak ve çözümün detaylarını sisteme bırakmaktır. [ 13 ]​ Hedef, alt hedeflerin bir listesi verilerek tanımlanır. Her alt hedef, alt hedeflerinin bir listesi vb. verilerek de tanımlanır. Bir çözüm bulmaya çalışırken, bir alt hedef rotası başarısız olursa, o alt hedef atılır ve sistematik olarak başka bir rota denenir.

Programlanma şekli metin veya görsel olarak olabilir. Görsel programlamada öğeler metin yoluyla belirtilmek yerine grafiksel olarak değiştirilir .

Ayrıca

Referanslar

  1. Castilla Y Leon Topluluğunun Bilgisayar Destek Teknisyenleri. Gündem Cilt i Ebook . MAD-Eduforma. ISBN  9788466551021 . 7 Kasım 2019'da alındı . 
  2. Juganaru Mathieu, Mihaela (2014). Programlamaya Giriş . Vatan Editör Grubu. ISBN  978-607-438-920-3 . 21 Mayıs 2021'de alındı . 
  3. Yanez, Luis Hernandez (2013-2014). Programlama Temelleri . 21 Mayıs 2021'de alındı . 
  4. Joyanes Aguilar, Luis (2008). Jose Luis Garcia ve Cristina Sanchez, ed. PROGRAMLAMA TEMELLERİ Algoritmalar, veri yapısı ve nesneler . McGRAW-HILL/INTERAMERICANA DE ESPAÑA, SAU ISBN  978-84-481-6111-8 . 
  5. ^ Gary Bronson (2000). Cengage Learning Publishers, SA De CV, 2006, ed. Bronson C++ 2. Baskı . 
  6. Paul McJones. "FORTRAN ve FORTRAN II'nin Tarihi" . Plone Vakfı . 20 Şubat 2019'da alındı . 
  7. César Vaca Rodriguez. "Programlama Paradigmaları" . Valladolid Üniversitesi Bilgisayar Bölümü. p. 2 . 20 Şubat 2019'da alındı . 
  8. ^ "Arşivlenmiş kopya" . 14 Mart 2011 tarihinde kaynağından arşivlendi . 1 Mayıs 2011 tarihinde alındı . 
  9. a b "İşlevsel Programlama NASIL — Python 3.5.3rc1 belgeleri" . docs.python.org . 13 Ocak 2017'de alındı . 
  10. "Genel Bakış - D Programlama Dili" . dlang.org (İngilizce) . 2014-07-29 alındı . « D'nin Başlıca Tasarım Hedefleri ... 4. Çoklu paradigma programlamayı destekleyin, yani minimum destek zorunlu, yapılandırılmış, nesne yönelimli, genel ve hatta işlevsel programlama paradigmaları. » 
  11. ^ Wilson, Leslie B. (1993). Karşılaştırmalı Programlama Dilleri, İkinci Baskı . Addison-Wesley. p. 75. ISBN 0-201-56885-3 .  (İngilizcede).
  12. ^ a b Wilson, Leslie B. (1993). Karşılaştırmalı Programlama Dilleri, İkinci Baskı . Addison-Wesley. p. 213. ISBN 0-201-56885-3 .  (İngilizcede).
  13. ^ Wilson, Leslie B. (1993). Karşılaştırmalı Programlama Dilleri, İkinci Baskı . Addison-Wesley. p. 244. ISBN 0-201-56885-3 .  (İngilizcede).

Dış bağlantılar