Neden eski BASIC'ler (ve belki başka diller) kaynak kodun bir parçası olarak satır numaralarını kullandılar?
Yani, hangi problemleri çözmeyi denedi?
Neden eski BASIC'ler (ve belki başka diller) kaynak kodun bir parçası olarak satır numaralarını kullandılar?
Yani, hangi problemleri çözmeyi denedi?
Yanıtlar:
TEMEL, çağdaş dilleri ile bağlam içinde ele alınmalıdır: erken dönem fortran, kobol ve montaj.
Ben edildi Geri zaman 6502 aksamındaki dabbling olmadan etiket, bu size sıkıca paketlenmiş kod ortasında bir yerde bir talimat eklemek için gerekli olduğunu bulduğumda (sonradan eklenen anlamına geliyordu NOP sen atlama tüm geçmesi ve yeniden yapmak gerekli ler) adresleri. Bu zaman alıcıydı.
Fortran, BASIC’i geride bırakan, hat numaralı bir sistemdi. Fortran'da, 1-5 sütunları dallanma hedefleri için kullanılacak bir satır numarasıydı. Fortran ile kilit nokta, derleyicilerin BASIC tercümanından biraz daha zeki olma eğilimindeydi ve birkaç talimat eklemenin sadece bazı kartları delme ve onları doğru yere yerleştirme meselesi olmasıydı.
Öte yandan, TEMEL, talimatlarının tümünü düzenli tutmak zorundaydı. 'Önceki çizginin devamı' kavramı çok fazla değildi. Bunun yerine, Applesoft BASIC'te (aşina olduğum ve bilgi bulabildiğim çok kullanılan lehçelerden biri) bellekteki her satır şöyle temsil edildi:
NN NN TT TT AA BB CC DD .. .. 00
Bir sonraki satırın adresi için iki bayt vardı ( NN NN
). Bu satırın satır numarası için iki bayt ( TT TT
) ve ardından AA BB CC DD .. ..
satır işaretçisinin ( 00
) sonunda bir jeton listesi ( ). (Bu, Apple İçi'nin 84-88. Sayfalarındaki ) e )
Bu bellek temsiline bakarken fark edilmesi gereken önemli bir nokta, çizgilerin düzensiz bellekte saklanabilmesidir. Hafızanın yapısı, yapının içinde 'sonraki satır' işaretçisi bulunan bağlantılı bir listeydi. Bu, iki satır arasına yeni satırlar eklemeyi kolaylaştırdı - ancak düzgün çalışması için her satırı numaralandırmanız gerekiyordu.
BASIC ile çalışırken Çoğu zaman, aslında çalışıyorlardı içinde BASIC kendisi. Özellikle, belirli bir dize satır numarası ve TEMEL talimatlar veya temel yorumlayıcı için bir komut ya oldu RUN
ya LIST
. Bu, kodu komutlardan ayırt etmeyi kolaylaştırdı - tüm kodlar sayılarla başlar.
Bu iki bilgi, sayıların neden kullanıldığını tanımlar - 16 bitte çok fazla bilgi edinebilirsiniz. Dize tabanlı etiketler çok daha fazla yer kaplar ve sipariş vermeleri daha zordur. Sayılarla çalışmak kolaydır, anlaşılır ve temsil edilmesi kolaydır.
Değildin Sonra TEMEL lehçeleri içinde tercüman her zaman uzak her satır numaralandırılmış ve bunun yerine yalnızca şube hedefti satırları numara gereken ilgisi başardık. Aslında, etiketler.
] PRINT "FOO"
hemen BASIC tercümanı tarafından yönetildi. Bu bir ifadedir. Daha sonra çalıştırmak istersen, ] 10 PRINT "FOO"
sonra yaparsın ] RUN
. AppleSoft BASIC ortamında, her BASIC ifadesi derhal çalıştırılabilir veya ertelenebilir - DOS tarafından sağlanan ve BASIC ifadeleri için geçerli olmayan çok az komut vardı. Şimdi bir cümle ile daha sonra bir cümle arasındaki fark satır numarasıydı. Gecikmiş bir ifadeyi, karşılık gelen satır numarasını tekrar girerek de değiştirebilirsiniz. Ayrıca bir satıra birden çok ifade koyabilirsiniz::
Mikrobilgisayarların başında düzenleme satır tabanlıydı. Kaynak kodda serbestçe dolaşıp düzenleme yapamazsınız. Ekranın altında komutları yazıp kod girebileceğiniz tek bir satırınız vardı. Ekranın geri kalanı salt okunur kod listeleri ve komut çıkışıydı. Eğer programda "90" satırını söylemek isterseniz " EDIT 90
" yazmışsınız ve satırın içeriği 90
tek satırlık düzenleme tamponuna girmiştir. Girdiğiniz satırı düzenlediğinizde, girdiğiniz program listesi güncellendi. Bu yüzden programı düzenleyebilmek için satır numaralarına ihtiyacınız var.
Kod editörleri daha gelişmiş hale geldiğinde ve imleci kod listesinde hareket ettirmenize izin verdiğinde, artık satır numaralarına ihtiyacınız yoktu.
80'lerin 8-bit ev mikro bilgisayarlarının BASIC lehçelerini düşünüyorsanız, o zaman bu bilgisayarların metin editörleri yoktu (bir kelime işlemci uygulaması satın almadığınız sürece). BASIC program kaynak kodunun "bugün bir editörde açık" olması gibi bir şey yoktu, bugün programlamada olduğu gibi. Programcı, programı gerçekten bir kaynak kod dosyası ya da metin olarak düşünmezdi.
Öyleyse, kafanızda satır numaraları olmayan basit bir program olduğunu varsayalım:
FOR I=1 TO 42
PRINT I
NEXT I
Bilgisayarınızı başlattınız. Bir "hazır" ya da onun gibi bir şey istemiştiniz ve imleci bir sonraki sıraya oturtun. Bu, günümüzün farklı komut dosyası dillerinin REPL ortamları gibidir, gerçekte tam olarak satır tabanlı değil, daha çok ekran tabanlı gibi. Yani bugünün REPL'leri gibi değil, ama yakın.
Şimdi, programa girmeye başlarsanız, ilk satırdan sonra hata ile karşılaşabilirsiniz, çünkü BASIC yorumlayıcısı derhal çalıştırmaya (ve unutmaya) çalışır ve NEXT olmadan döngüyü sonlandırmanın bir anlamı yoktur. Burası metni düzenlediğiniz metin editörü değil, bilgisayara komut verdiğiniz yer!
Söylemenin bir yolu var, bu program satırı, sakla! Özel bir komutunuz olabilir ya da sadece hey, bu program satırıdır, saklayın. Bunu hayal edelim:
#FOR I=1 TO 42
#PRINT I
#NEXT I
Tamam, şimdi hayali BASIC yorumcumuz programı sakladı ve çalıştırabilirsiniz. Ancak şimdi PRINT satırını düzenlemek istiyorsunuz. Bunu nasıl yapıyorsun? Metin editöründe değilsiniz, sadece imleci satıra taşıyamaz ve düzenleyemezsiniz. Ya LET COUNT=COUNT+1
da döngüdeki gibi başka bir satır eklemek istersiniz . Yeni satırın nereye yerleştirilmesi gerektiğini nasıl belirtirsiniz?
Satır numaraları, oldukça klunky bir şekilde, bunu çok kolay bir şekilde çözmek. Zaten var olan bir sayıyla bir program satırı girerseniz, eski satır değiştirilir. Artık ekran tabanlı REPL ortamı kullanışlı hale geliyor, çünkü imleci ekranda program listesine taşıyabilir , ekrandaki satırı düzenleyebilir ve kaydetmek için ENTER'a basabilirsiniz. Bu, aslında ekrandaki metni düzenlerken ve ardından tüm satırı ekrandan yenisiyle değiştirirken, satırı düzenliyormuşsunuz gibi görünüyor. Ayrıca aralarında kullanılmamış sayılar bırakırsanız, yeni satırlar eklemek kolaylaşır. Göstermek:
10 FOR I=1 TO 42
20 PRINT I
30 NEXT I
Satır 20'yi değişikliklerle tekrar girdikten ve yeni satırlar ekledikten sonra,
5 LET COUNT=0
10 FOR I=1 TO 42
20 PRINT "Index", I
25 LET COUNT=COUNT+1
30 NEXT I
Satır numaralarını bir dil kurgusu olarak, en azından GOTO
AND GOSUB
komutunun hedefi olarak kullanabilmenin yararı (veya laneti, ünlü BASIC spagetti kodunu sağlar) . Bu, etiketlerle değiştirilebilir, ancak satır numaralarını kullanmak, 80'lerin tipik bir 8-bit ev bilgisayarında hala kesin bir bonus olan BASIC yorumlayıcısında uygulanması daha basittir.
Daha da önemlisi, kullanıcı deneyimi açısından bakıldığında, satır numaraları gerçekten de kodu düzenlemek için şaşırtıcı derecede kolay ancak eksiksiz bir arayüzdür. Yeni kod eklemek için bir sayıyla başlayan bir satır yazın. LIST 100-200
100-200 satırları göstermek için kullanın . Bir satırı düzenlemek için, ekranda listeleyin, ekrandaki metni düzenleyin ve satırı tekrar girin. Bir çizgiyi kaldırmak için boş olacak şekilde düzenleyin, bu sadece ondan sonra hiçbir şey içermeyen bir satır numarası verir. Bunu açıklamak için bir paragraf. Gibi eski metin editörü kullanımını tarif etmeye karşılaştırın edlin DOS veya ed veya eski Unix: Sadece yanlışlıkla başladığında kullanıcı, onları çıkabilirsiniz nasıl açıklamak için (sadece hafif hiberbol) Bir paragraf gerek!
Diğer cevaplar satır numaralarının nasıl oluştuğunu açıklar. Burada anlatmaya çalışıyorum, satır numaraları neden bu kadar uzun süre hayatta kaldılar, gerçek dünyadaki bir problemi nasıl çözdüler: Gerçek programlamayı gerçek bir editör olmadan çok basit bir şekilde yapmanın bir yolunu önerdiler. Uygun olduğunda, kullanımı kolay, tam ekranlı metin editörleri hem donanım sınırlamaları ortadan kalkarken hem de yeni şeyleri uyarlayan insanların ataleti üstesinden gelindiğinde kodu düzenlemek için ana yol haline geldi, çünkü sıra numarası tabanlı BASIC lehçeleri kullanımdan oldukça hızlı bir şekilde kayboldu, çünkü Çözdükleri temel kullanılabilirlik sorunu artık bir sorun değildi.
Basic geliştirildiği zaman ve yerde, mevcut en iyi I / O cihazı bir teletipti. Bir programın düzenlenmesi, tüm programın bir listesini veya kağıda yazdırarak ya da programın ilginç bir kısmını yazarak ve sonra satır numaralarını içeren yeni satırlar yazarak yapıldı.
Bu yüzden varsayılan satır numaralandırması 10'du, bu nedenle mevcut satırlar arasında kullanılmayan sayılar olacaktır.
ren
yeniden numaralandırılması için bir ' ' komutu vardı . Tipik bir çağırma ren 10, 10
(ondan başlayarak, on ile artan yeniden numaralandırma - biri yeni girilmişse varsayılan davranış ren
. goto
Ve gosub
ve then (linenumber)
komutları otomatik olarak güncellenecektir. Ancak bu, en eski BASIC'lerde kesinlikle mevcut değildi. Tamsayılı Temel, Applesoft FP temel, TI Temel / Genişletilmiş Temel, MS Temel / GW Temel, vb.
"Satır numaraları" birkaç farklı anlama gelir.
Her şeyden önce, "çizgiler" kavramının sonsuza kadar etrafında olmadığını aklınızda bulundurun. Bu çağda birçok programlama dili delikli kartlar kullandı ve sıra numaralarına (genellikle kartın son birkaç sütununda) sahip olmak, desteyi düştüğünüzde doğru sırayla kurtarmanıza ya da kart okuyucusunda korkunç bir şey olmasına yardımcı oldu. Bunu otomatik olarak yapan makineler vardı.
GOTO
İfadelerin hedefi olarak kullanılacak satır numaraları tamamen farklı bir kavramdır. FORTRAN IV'te, isteğe bağlıydılar ve ifadeden önce geldiler (1-5 sütunlarında). Serbest biçimli etiketlerden daha kolay uygulanmasının yanı sıra, rasgele bir satır numarasına atlamanıza izin veren hesaplanmış ve atanmış GOTO konsepti de vardı . Bu, çoğu modern programlama dilinin sahip olmadığı bir şeydi ( switch
ifadeler yaklaşsa da), ancak assembler programcıları için tanıdık bir numaraydı.
BASIC, FORTRAN'dan türetildi ve uygulanması ve anlaşılması daha kolay olması için, her "satırı" bir satır numarasına (hem sıralama için hem de GOTO
/ GOSUB
ifadelerin hedefi olarak) sahip olmaya zorlama muhtemelen bu nedenle verilen bir tasarım kararıydı.
goto array_of_labels[some_computation()];
GOTO
(veya ASSIGN
) hedefleri ve orijinal aka aritmetik aka üç yolunun IF
(ve nadiren kullanılan) CALL
hedeflerinin DO
ve FORMAT
ifadelerinin ( ve tabii ki sınırlayıcıların) hedeflerinin sıralamasında ve sıralamasında alternatif ifadeler için etiketler istedi . Diğer ifadelerde isteğe bağlıydılar.
GOTO 1000+N*100
bir switch
ifadeyi taklit etmek için yazabilirsiniz .
Her satırın 1-6 sütunlarında satır numaralarını kullanan COBOL'de programlama yapmaya başladım. 1970'lerde hiçbir IDE bulunmadığından, her şey delikli kartlarla yapıldı ve orijinal kaynaktaki hangi satırların değiştirileceğini ve hangi yeni satırların eklendiğini belirlemek için satır numarası kullanıldı. Daha fazla satır ekleyebilmemiz için satır sayısını 100 artırırdık.
BASIC, hat-terminal döneminde, FORTRAN'dan daha sonra ortaya çıktı. Bir kart destesinden daha etkileşimli bir okuma-exe-print-loop ortamı içeriyordu.
BASIC'te 24 karakterlik tek bir ekran üzerinde programlamayı öğrendim . Satır numaraları, bir satırın nereye gitmek istediğinizi, bir düzenlemeyi veya başkaları arasına ekleme yapıp yapmadığınızı belirtmenin doğal bir yoluydu.
Başka nasıl yaptığını hayal bile edemiyorum.
Henüz kimsenin bahsetmediği bir nokta, yeni başlayanların, dal hedeflerinin açık olduğu program akışıyla ilgili olarak akıl yürütmesinin daha kolay olması. BEGIN / END ifadeleriyle (ya da hangi blok sınırlayıcıları kullanıldıysa) eşleştirmek (muhtemelen iç içe geçmiş) kullanmak yerine kontrol akışının nereye gittiği oldukça açıktı. Bu BASIC hedef kitlesi (o verilen muhtemelen faydalı oldu Başlangıç sonuçta Çok amaçlı Sembolik Talimat Kodu).
Dartmouth Time Sharing System bir teletype arayüzü kullandı. Böylece komut tabanlı bir arayüz kullanılır. Başlangıçta, satır numaraları programı düzenlemek için sadece bir araç olarak kullanıldı. Satır numarası kullanarak ekleyebilir, değiştirebilir veya silebilirsiniz. İlk sürümün, goto ifadeleri için satır numaralarını kullandığı görülmüyor, ancak bu daha sonra dilin bir parçasıydı.