C Programlama Dilinin Evrimi

0
sametc
Aşağıdaki yazı benim çok ilgimi çekti paylaşmak isterim sanırım herkes benim gibi bu dilin nasıl ortaya çıktığını merak etmiştir.

C'nin tarihini tartışmaya UNIX'ten bahsedilmeden başlanamaz çünkü işletim sistemi ve sistem üzerinde çalışan programların bir çoğu C'de yazılmıştır.
UNIX'in tarihi New Jersey Murray Hill'deki Bell Laboratuvarlarında imal edilen DEC PDP-7'nin 1969 yılında geliştirilmeye başlanmasıyla ortaya çıkar. UNIX'in bu ilk sürümü tamamen PDP-7 denilen makina dilinde yazılmıştı. UNIX işletim sistemi, programcılara faydalı olsun, kolaylık sağlasın diye ve sistem seviyesinde geliştirme araçları olacak ve göreli olarak açık donanımı bulunacak şekilde oluşturulmuştu.

PDP-7 için UNIX'in geliştirilmesindeki bu hızlandırıcı başarıyı yaratan Ken Thompson, derleyiciler için üretilen yeni dile B adını verdi. Thompson, Bell Laboratuvarlarında sistem programlayıcısıydı. B dilinin ilginç bir gelişimi vardır. Arkasından C gelmiştir. Aslında C dilinin bilinen 4 ayrı atası vardır. Algol68, CPL, BCPL ve B.

Algol68, Avrupa tabanlı bir dildir. 1960'ların başında uluslararası komite tarafından hazırlanmıştır. Algol68, FORTRAN'ın tanıtıldığı yıldan sonra ortaya çıkmıştır. Bu yeni dil, FORTRAN'dan çok daha karmaşıktı ve geleceğin programlama dillerini etkilemiştir. Yaratıcıları, yazılım kurallarının düzenliliği, modüler yapıları ve diğer özellikleri ile bir yüksek seviyeli yapısal bir dilde olması gereken özellikleri bir araya getirmeye özen göstermişlerdi.

Ne yazik ki ALGOL68, ABD'de hiç anlaşılamadı. Bu dilin genelliği ve özü hakkında pek çok şey söylendi. Biraraya getirilmiş programlama dilleri (CPL), bir başka Avrupa kaynaklı programlama diliydi ve Cambridge ile Londra Üniversitelerinde 1963 başlarında birlikte geliştirildi. Dilin evrim aşamaları izlendiğinde CPL, ALGOL68'in çok güzel amaçlarından bilgisayar gerçeklerine geçişini sağlamıştır. Ancak Algol68'in en büyük sorunlarından birisi olan dilin karmaşık olması ve boyutlarındaki esaslar, CPL'de geçmiştir. Bu kısıtlar dili zor ve calışılması güç hale getirmiştir ve çöküşünü açıklamaktadır.

BCPL (temel birleştirilmiş programlama dili) bir önceki sürümü olan CPL'ye cok benziyordu. 1967'lerin ortasında Cambridge'de Martin Richards tarafından geliştirilmiştir. Yine de CPL'nin önerdiklerine bağlı kalınmıştı. BCPL'nin yaratıcıları, CPL'nin temelindeki iyi özellikleri kazanmak istiyorlardı.

B dili 1970'de Ken Thompson tarafından Bell Laboratuvarlarında geliştirilmişti. Thompson, UNIX'in ilk denemelerini B dili ile oluştururken, BCPL dilini de daha fazla basitleştirmeye çalışmaktaydı. Onun başarısı, elindeki donanıma en iyi uyan dili yaratması olmuştur. BCPL ve B, sınırlı problemlere çözüm getirme başarısını göstermiş ancak bu nedenle de sınırlı bir dil olmuş ve yanlızca bazı özel problemlerin çözümünde kullanılabilmiştir. Olayın bu noktasında Thompson DEC PDP-7 makinasında B dilini calıştıramaz bunun yerine DEC PDP-11 denilen makinayı tanıtır. Bu yeni makinada UNIX ve B derleyicisi birarada bulunmaktaydı. Ancak başarıya ulaşma konusunda iki büyük problem vardı.

Yeni DEC PDP-11, atası olan PDP-7'den daha büyüktü. Onun yalnızca 24KB belleği vardı ve sistem 16KB'ını kullanıyordu. 512 KB'lık sabit diski vardı. İlk sorun B dilinde UNIX'ın yazılmasıydı. Ne yazık ki B dili yorumsal yapısı nedeniyle cok yavaştı. Bununla birlikte en büyük problem, B'nin byte düzenlemeli dil olmasıydı; fakat DEC PDP-11, harf düzenlemeliydi. Bütün bu nedenlerden dolayı B dilini başarılı hale getircek çalışmalar 1971 yılında başladı ve buna uygun olarak C dili geliştirildi.

C dili, B ile aynı coğrafi kökenlere sahiptir. 1972 yılında Bell Laboratuvarlarında Dennis Ritchie tarafından geliştirilmiştir. C'deki en büyük gelişmeler Ritchie tarafından sağlanmıştır. Ritchie BCPL ile B dili arasında kaybolan bağları yeniden kurmayı başarmıştır. Veri tiplerini zekice kullanarak güzel bir yapı meydana getirirken CPL'nin orjinal düzenlenmesinde amaçlanan basit hedefleri de korumuştur. C dilinin bu kadar başarılı olmasında en büyük payın Dennis'in deneyim ve uzmanlık dizilerindeki çalışmalarının yansımasından kaynaklanır. C donanıma yakın bağıl düşük seviyeli bir dildir. C programcıya bilgisayarın yeteneklerini en fazla kullanabilmesi için tüm detayları kapsayacak algoritmaları kurma olanağı sağlar.

Kaynak: C/C++ Programcının Rehberi, Chris H. Pappas - William H. Murray, SİSTEM Yayıncılık A.Ş

Görüşler

0
muhendisce
High School/Jr.High 10 PRINT HELLO WORLD 20 END First year in College program Hello(input, output) begin writeln(''Hello World'') end. Senior year in College (defun hello (print (cons ''Hello (list ''World)))) New professional #include void main(void) { char *message[] = {Hello , World}; int i; for(i = 0; i Seasoned professional #include #include class string { private: int size; char *ptr; public: string() : size(0), ptr(new char(''\0'')) {} string(const string &s) : size(s.size) { ptr = new char[size + 1]; strcpy(ptr, s.ptr); } ~string() { delete [] ptr; } friend ostream &operator Master Programmer [ uuid(2573F8F4-CFEE-101A-9A9F-00AA00342820) ] library LHello { // bring in the master library importlib(actimp.tlb); importlib(actexp.tlb); // bring in my interfaces #include pshlo.idl [ uuid(2573F8F5-CFEE-101A-9A9F-00AA00342820) ] cotype THello { interface IHello; interface IPersistFile; }; }; [ exe, uuid(2573F890-CFEE-101A-9A9F-00AA00342820) ] module CHelloLib { // some code related header files importheader(); importheader(); importheader(); importheader(pshlo.h); importheader(shlo.hxx); importheader(mycls.hxx); // needed typelibs importlib(actimp.tlb); importlib(actexp.tlb); importlib(thlo.tlb); [ uuid(2573F891-CFEE-101A-9A9F-00AA00342820), aggregatable ] coclass CHello { cotype THello; }; }; #include ipfix.hxx extern HANDLE hEvent; class CHello : public CHelloBase { public: IPFIX(CLSID_CHello); CHello(IUnknown *pUnk); ~CHello(); HRESULT __stdcall PrintSz(LPWSTR pwszString); private: static int cObjRef; }; #include #include #include #include #include thlo.h #include pshlo.h #include shlo.hxx #include mycls.hxx int CHello::cObjRef = 0; CHello::CHello(IUnknown *pUnk) : CHelloBase(pUnk) { cObjRef++; return; } HRESULT __stdcall CHello::PrintSz(LPWSTR pwszString) { printf(%ws , pwszString); return(ResultFromScode(S_OK)); } CHello::~CHello(void) { // when the object count goes to zero, stop the server cObjRef--; if( cObjRef == 0 ) PulseEvent(hEvent); return; } #include #include #include pshlo.h #include shlo.hxx #include mycls.hxx HANDLE hEvent; int _cdecl main( int argc, char * argv[] ) { ULONG ulRef; DWORD dwRegistration; CHelloCF *pCF = new CHelloCF(); hEvent = CreateEvent(NULL, FALSE, FALSE, NULL); // Initialize the OLE libraries CoInitializeEx(NULL, COINIT_MULTITHREADED); CoRegisterClassObject(CLSID_CHello, pCF, CLSCTX_LOCAL_SERVER, REGCLS_MULTIPLEUSE, &dwRegistration); // wait on an event to stop WaitForSingleObject(hEvent, INFINITE); // revoke and release the class object CoRevokeClassObject(dwRegistration); ulRef = pCF->Release(); // Tell OLE we are going away. CoUninitialize(); return(0); } extern CLSID CLSID_CHello; extern UUID LIBID_CHelloLib; CLSID CLSID_CHello = { /* 2573F891-CFEE-101A-9A9F-00AA00342820 */ 0x2573F891, 0xCFEE, 0x101A, { 0x9A, 0x9F, 0x00, 0xAA, 0x00, 0x34, 0x28, 0x20 } }; UUID LIBID_CHelloLib = { /* 2573F890-CFEE-101A-9A9F-00AA00342820 */ 0x2573F890, 0xCFEE, 0x101A, { 0x9A, 0x9F, 0x00, 0xAA, 0x00, 0x34, 0x28, 0x20 } }; #include #include #include #include #include #include pshlo.h #include shlo.hxx #include clsid.h int _cdecl main( int argc, char * argv[] ) { HRESULT hRslt; IHello *pHello; ULONG ulCnt; IMoniker * pmk; WCHAR wcsT[_MAX_PATH]; WCHAR wcsPath[2 * _MAX_PATH]; // get object path wcsPath[0] = ''\0''; wcsT[0] = ''\0''; if( argc > 1) { mbstowcs(wcsPath, argv[1], strlen(argv[1]) + 1); wcsupr(wcsPath); } else { fprintf(stderr, Object path must be specified ); return(1); } // get print string if(argc > 2) mbstowcs(wcsT, argv[2], strlen(argv[2]) + 1); else wcscpy(wcsT, LHello World); printf(Linking to object %ws , wcsPath); printf(Text String %ws , wcsT); // Initialize the OLE libraries hRslt = CoInitializeEx(NULL, COINIT_MULTITHREADED); if(SUCCEEDED(hRslt)) { hRslt = CreateFileMoniker(wcsPath, &pmk); if(SUCCEEDED(hRslt)) hRslt = BindMoniker(pmk, 0, IID_IHello, (void **)&pHello); if(SUCCEEDED(hRslt)) { // print a string out pHello->PrintSz(wcsT); Sleep(2000); ulCnt = pHello->Release(); } else printf(Failure to connect, status: %lx, hRslt); // Tell OLE we are going away. CoUninitialize(); } return(0); } Apprentice Hacker #!/usr/local/bin/perl $msg=Hello, world. ; if ($#ARGV >= 0) { while(defined($arg=shift(@ARGV))) { $outfilename = $arg; open(FILE, > . $outfilename) || die Can''t write $arg: $! ; print (FILE $msg); close(FILE) || die Can''t close $arg: $! ; } } else { print ($msg); } 1; Experienced Hacker #include #define S Hello, World main(){exit(printf(S) == strlen(S) ? 0 : 1);} Seasoned Hacker % cc -o a.out ~/src/misc/hw/hw.c % a.out Guru Hacker % echo Hello, world. New Manager 10 PRINT HELLO WORLD 20 END Middle Manager mail -s Hello, world. bob@b12 Bob, could you please write me a program that prints Hello, world.? I need it by tomorrow. ^D Senior Manager % zmail jim I need a Hello, world. program by this afternoon. Chief Executive % letter letter: Command not found. % mail To: ^X ^F ^C % help mail help: Command not found. % damn! !: Event unrecognized % logout Anonymous
0
tongucyumruk
Bu kadar kasmanın yerine şu linki verseydin?

Laugh Along With GNU
Görüş belirtmek için giriş yapın...

İlgili Yazılar

Açık Akademi'den Ajax kitabı: Sağlamlığı Kanıtlanmış Tekniklerle Web 2.0 AJAX

yenigul

New Riders yayınlarından çıkan Bulletprof AJAX kitabı, Açık Akademi yayınlarından Sağlamlığı Kanıtlanmış Tekniklerle Web 2.0 AJAX adıyla yayınlanmıştır.

Doğru Düzgün Soru Sormanın Yolları

yalcink01

FM Forumda açılmış bir konu altında oluşan doğal süreç, bizi forumlarda ve e-posta listelerinde nasıl soru sormak gerektiği konusuna götürdü. Dernek listelerinde zaman zaman dalgalanmalar yaşanmakla birlikte, genelde ortanın üstü diye tabir edebileceğimiz bir ileti yazım tarzı var. FM Forum'un durumu da pek farklı değil. Yeni katılan arkadaşlar haricinde, acayip ve garip tarzda soru soran pek çıkmıyor. Bununla birlikte, söz konusu forum konusunda görülebileceği üzere, bazen iyi bir kılavuza ihtiyaç duyuluyor. Diğer forumlarda ise durum içler acısı :( Türkçe, Türkçe olduğuna bu kadar pişman edilebilir. İmla ve yazım kurallarındaki boşvermişlik bir tarafa, kelimelerde bile acayiplikler "var way!", "ajaip şeler oljek amma bnm sormk isterim...", şeklinde devam eden ucubeler etrafta cirit atmakta. Elbette ki tek bir kılavuz ile bütün bunları sonlandırmak ve insanları doğru yola sokmak mümkün değil -zaten ahir zaman peygamberliği gibi bir derdimiz de yok :)- ama bir yerden de başlamak gerek, değil mi? Peygamber olamadık diye hayatı tamamen boşvermek de olmaz.

Osman Yüksel'e, bu kadar işinin gücünün ve dahi Debian .po çevirilerinin arasında bu işe vakit ayırdığı için teşekkür ederim.

Türkçe çeviri için ilk sürüme http://www.geocities.com/yalcink01/smart-questions.html adresinden ulaşabilirsiniz. Her türlü geri beslemeye kapımız açıktır. Eklemek istediğiniz bölümler var ise, lütfen çekinmeden bildirin.

Hızlı ve Kirli Bir mod_chroot Kılavuzu

anonim

Apache ile çalışıyorsanız güvenlik işlemlerinin en başında yer alan şartlardan biri Apache'yi kafes içinde çalıştırmaktır.

Ancak klasik kafesleme yaklaşımları bazen insanın sabrını zorlayacak derecede karmaşık ve problemli olabiliyor ( Kişisel görüş kimseyi bağlamaz :) ) .

Ben kendi çözümümü mod_chroot ile hızlı ve kolay biçimde tamamlarken ortaya bu belge çıktı. Her ne kadar sürç-i lisan ettikse affola...

Vpopmail Kullanım Kılavuzu

anonim

Vpopmail bir sanal domain ve sanal kullanıcı yonetim aracı olarak yazılmıştır, yazılmasında temel MTA (Mail Transfer Agent)olarak qmail ele alındığı için bu sadece bu MTA ile çalışır. Son zamanlarda postfix ile birlikte de çalışabilmesi için gerekli düzenlemeler yapılmıştır. Postfix ile çalıştırabilmeniz için yine aynı sitede bulunan vpopmail-postfix dökümanına göz atabilirsiniz.

Matematik Dünyası Dergisi

FZ

Prof. Dr. Ali Nesin yönetiminde çıkmaya başlayan Matematik Dünyası dergisi dolu dolu içeriği ile karşınızda.

Kapak konusu "Fonksiyonlar" olarak seçilmiş son sayıda, bunun yanı sıra, aramızdan ayrılan matematikçiler, topoloji köşesi, Fibonacci sayıları, bilgisayar bilimi köşesi (robotik ve diğer ilginç konular), geometri köşesi, paradoks ve satranç köşeleri gibi birçok başka bölüm de var.