Selam,
Mr. Ritchie'ye sormak için geç ama Mr. Kernighan'ın olası yanıtına şuradan bakılabilir. Kendisi dokümanın sonuna doğru bir liste yapmış (1981'de, muhtemelen Borland'ın Turbo Pascal'ı ortalarda yokken) ve ilk maddesi şöyle:
1. Since the size of an array is part of its type, it is not possible to write general-purpose routines, that is, to deal with arrays of different sizes. In particular, string handling is very difficult.
Konuyu okuyunca hevesle birkaç arama yaptım ama pek fazla doyurucu bilgi bulamadım, özellikle compiler ile çalışmış kişiler benden daha yetkin cevap verebilirler. Yine de Ref gibi konuyu tam olarak anlamıyorum ama kendisine katılıyorum. İki dilin ortaya çıkış tarihleri arasındaki çok kısa zamana rağmen (Pascal 69, C 70 sanırım) tasarlanma amaçları ve tanıtılmaları sırasında kullanılan ilkelerinde temel bir farklılık var. C "a general-purpose, imperative computer programming language, supporting structured programming, lexical variable scope and recursion, while a static type system prevents many unintended operations." olarak pazarlanırken, Pascal "small, efficient language intended to encourage good programming practices using structured programming and data structuring" pazarlanmış (tanımları wikipedia'dan aldım, çoğu kaynak aynısını söylemiş).
Kernighan'ın dediğinden hareketle bence bir sebep esneklik; UNIX (dolayısı ile C) geleneğinde yapılacak her işin sorumluluğunun kullanıcıya (o dönemde programcıya) ait olması isteniyor sanırım, ama asıl bununla alakalı sebep muhtemelen sistemin tamamiyle text stream'ler üzerine inşa edilmesi ve text arayüzünün evrensel olarak görülmesi (stdin, stdout, stderror ve pipe'lar, tüm datayı flat text file'de tutmalar vs). Bunlar tek bir ağızdan söylenen ve uygulanan prensipler değiller doğal olarak, her geçen birkaç kuruş ekleyerek konuyu felsefe haline getirmiş: The UNIX Philosophy. Bir yandanda C'de string tipinin hiç olmayıp handling için neredeyse assembly kabilinden işler yapmak gerekirken, aynı insanların Unix sistemleri acayip text manipulation araçları ile doldurmuş olması çok ilginç gelmişti bana, herhalde sistemi bi' ayağa kaldıracak kadar dili yapalım içine string yapısı koymaktansa oturur sistemde sed, awk, grep... yazarız işimize bakarız diye düşündüler.
Dizi uzadıkça yavaşlayan ikinci yapının tercih edilme sebebi ne olabilir?
Muhtemelen yukarıdakilerle alakalı nedenlerden dolayı esneklik ve yavaşlamanın design decision'larına göre ihmal edilebilir olmasıdır, bunu da dilin içine string yapısı (ya da sınırlı uzunlukta string) koymaktansa serbest bırakmışlar ki port edilebilirlik açısındandır (dilin kendisi minimum eforla hedef platformda çalışır hale gelince, platform spesifik konuların kütüphaneler ile halledilmesi amaçlanmış olabilir). Pascal'ın data structure'lar ile çalışmaya meyilli dil yapısının aksine, text işleyecek adam oturur kütüphanesini yazar demişler.
İlk okumam gereken bağlantılar en sona kalmışlar:
http://stackoverflow.com/questions/4418708/whats-the-rationale-for-null-terminated-stringshttps://en.wikipedia.org/wiki/Null-terminated_string#Historyve
https://www.bell-labs.com/usr/dmr/www/chist.htmlWikipedia linkinden:
At the time C (and the languages that it was derived from) was developed, memory was extremely limited, so using only one byte of overhead to store the length of a string was attractive. The only popular alternative at that time, usually called a "Pascal string" (a more modern term is "length-prefixed"), used a leading byte to store the length of the string. This allows the string to contain NUL and made finding the length need only one memory access (O(1) (constant) time), but limited string length to 255 characters (on a machine using 8-bit bytes). C designer Dennis Ritchie chose to follow the convention of NUL-termination, already established in BCPL, to avoid the limitation on the length of a string and because maintaining the count seemed, in his experience, less convenient than using a terminator.
Bu alıntının altında bide z80'den bahsediyor, hangi instruction bilen var mı?:
This had some influence on CPU instruction set design. Some CPUs in the 1970s and 1980s, such as the Zilog Z80 and the DEC VAX, had dedicated instructions for handling length-prefixed strings.
Bunların dışında Pascal'la ilgili aklımda kalan son ilginç ayrıntı, 2000'lerin başında byte'ın bir sayısında Pournelle Windows XP'deki buffer overflow'lardan birinden şikayet ederken 80'lerde işletim sistemi programcılarının içinden C'nin yerine Pascal'ın kullanılmasını öneren bir grubun türediğini fakat haklı iddialarını C'nin derlenme hızı yüzünden uygulamaya koyduramadıklarını anlatıyordu. Pascal'ın günlerine karşın C'nin saatlerle hesaplanan bir avantajı varmış o zamanlar.