← rfc/
╔══════════════════════════════════════════════════════════════════════════╗
RFC 5 · data

DEL (Decode-Encode Language - Kod Çözme-Kodlama Dili)

Yazar
Jeff Rulifson
Kurum
Stanford Research Institute (SRI)
Tarih
2 Haziran 1969
Durum
Network Working Group Belgesi
Kanal
data/

İçindekiler

  1. Özet
  2. Önsöz
  3. Ağ Standart Çeviricileri (NST)
  4. Evrensel Donanım Temsili
  5. NST'ye Giriş
  6. NST'nin Avantajları
  7. Örnek: AHI NLS Kullanıcı Konsol İletişimi
  8. DEL Sözdizimi
  9. Bildirimler
  10. Aritmetik İşlemler
  11. Birincil Değerler
  12. Bağlaçlı İfadeler
  13. Aritmetik İfadeler
  14. Ağaç Manipülasyonu
  15. Akış ve Kontrol
  16. G/Ç İfadeleri
  17. Örnek Programlar

Özet

Decode-Encode Language (DEL - Kod Çözme-Kodlama Dili), iki spesifik bilgisayar ağı görevine özel olarak tasarlanmış makine-bağımsız bir dildir:

  1. Giriş İşleme: Etkileşimli konsollardan giriş kodlarını kabul etme, anında geri bildirim verme ve sonuç bilgilerini ağ iletimi için mesaj paketlerine paketleme.
  2. Çıkış İşleme: Başka bir bilgisayardan mesaj paketlerini kabul etme, bunları açma, görüntü bilgilerinin ağaçlarını oluşturma ve bilgileri kullanıcının etkileşimli istasyonuna gönderme.

Bu, DEL dilinin evrimi için bir çalışma belgesidir. Yorumlar SRI'daki Jeff Rulifson aracılığıyla yapılmalıdır.


Önsöz

DEL'in Evrimi

İlk ARPA ağı çalışma grubu 25-26 Ekim 1968'de SRI'da toplandı. Genel olarak, ağ üzerinden etkileşimli programların çalıştırılmasının karşılaşılacak ilk problem olduğu konusunda anlaşmaya varıldı.

İlk Toplantı (Ekim 1968)

Grup, DEL benzeri bir yaklaşımın temel kavramları hakkında zaten anlaşmış durumda, aşağıdakileri belirledi:

Katılımcılar: Andrews, Baray, Carr, Crocker, Rulifson ve Stoughton

Sonraki Toplantılar

Kamuya Açıklama

Bu yazının ilk kamuya açıklanması 13 Şubat 1969'da Cambridge'deki BBN NET toplantısında yapıldı.


Ağ Standart Çeviricileri (NST)

Genel Bakış

NST kütüphanesi, sunucu host'tan alınan DEL programlarından kullanıcı sitelerinde derlenen kodla verimli bir şekilde bütünleşmek için gerekli programlar kümesidir.

NST-DEL yaklaşımı, NET etkileşimli sistem iletişimi için geniş bir kullanım senaryosu yelpazesinde çalışmak üzere tasarlanmıştır.

NST-DEL Kullanımının Üç Seviyesi

Seviye 1: Doğrudan İletim (Minimum İşleme)

En düşük karmaşıklık modu

NST-DEL kullanımının en düşük seviyesi, kullanıcı programlarının kullanıcı-host'ta alacağı aynı formatta bilgilerle sunucu-host'a doğrudan iletimdir.

Özellikler:

Seviye 2: Yankı Tabloları ile TTY (Orta)

Orta karmaşıklık modu

Daha orta düzeyde bir kullanım, kullanıcı-host'ta bir TTY için yankı tablolarına sahip olmaktır.

Özellikler:

Seviye 3: Büyük Görüntü Odaklı Sistemler (Gelişmiş)

En yüksek karmaşıklık modu

DEL için daha iddialı bir görev, büyük, görüntü odaklı sistemlerin ağ üzerinden uzak konsollardan çalıştırılmasıdır.

Problem Tanımı:

Yük Problemi:

DEL Çözümü:

Gelişmiş Özellik: Standart Olmayan Konsol Simülasyonu

Daha zor, genellikle ihmal edilen problemlerden biri, bir standart olmayan konsolun başka bir standart olmayan konsol üzerinde etkili simülasyonudur.


Evrensel Donanım Temsili

Amaç

Herhangi bir tesisin kullanıcı kodlarını başka bir tesise eşlemek için gereken çevirici sayısını en aza indirmek için evrensel bir donanım temsili vardır.

Bu sadece, ilk ağdaki tüm etkileşimli görüntü istasyonlarındaki tüm donanım aygıtları hakkında genel terimlerle konuşmanın bir yoludur.

Görüntü Koordinat Sistemi

Örnek: Görüntü Temsili

Bir görüntü kare olarak düşünülür:

Avantajlar:


Ağ Standart Çeviricisine (NST) Giriş

Senaryo: Uzaktan NLS Erişimi

Uzak bir sitedeki (örneğin Utah) bir kullanıcının AHI sistemine kayıtlı olduğunu ve NLS (Network Line System) çalıştırmak istediğini varsayalım.

Adım 1: NLS'ye Girme

İlk adım, normal şekilde NLS'ye girmektir. O anda, Utah sistemi NLS'den sembolik bir program isteyecektir.

Adım 2: Uzaktan Kodlama Programı (REP)

REP Tanımı:

REP Yetenekleri:

Adım 3: Derleme ve Yürütme

Program Utah'ta ilk alındığında:

  1. Program derlenir
  2. Program standart kütüphane ile çalışmak üzere yüklenir
  3. Utah konsolundan gelen tüm girişler NLS NEP'e (Network Encode Program) gider

Adım 4: İşleme Hattı

NLS NEP girişi işler:

  1. İşleme
  2. Ayrıştırma
  3. Bloklama
  4. Çeviri
  5. Uygun karakter alındığında:

NST'nin Avantajları

Dağıtılmış Programlama Modeli

Her düğüm NST'nin kütüphane kısmını uyguladıktan sonra, her alt sistem için yalnızca bir program yazması gerekir:

Çıkarım: Konsol tam olarak kullanılırsa bu beklenen minimum programlamadır

Donanım Optimizasyonu

NST kodlama çevirisi kullanıcı sitesinde kodlandığından:

  1. Donanım Kullanımı: Konsollardaki donanımdan tam olarak yararlanabilir
  2. Genişletilebilirlik: Host'tan yeni çeviri tabloları gerektirmeden donanım özellikleri eklenebilir veya kaldırılabilir
  3. Yerel Kontrol: Yerel kullanıcılar sistem değişiklikleri konusunda güncel tutulur

Otomatik Özellik Yayılımı

Sembolik Çeviri Avantajları

Kodlama çeviri programlarının sembolik olarak (ikili değil) aktarılmasının avantajları:

  1. Siteye Özgü Optimizasyon: Her site uygun gördüğü şekilde çeviri yapabilir
  2. Makine Kod Kalitesi: Üretilen makine kodu her siteye optimal olarak uyar
  3. Performans: Daha hızlı çalışma süreleri ve daha yüksek kod yoğunluğu
  4. Genişletilebilirlik: Kullanıcı sitesinde kodlanan ekstra sembolik programlar kolayca arayüzlenebilir
  5. Problem Çözme: Esneklik kaybı olmadan konsol genişletme problemini (olağandışı tuşlar/düğmeler) kolaylaştırır

Eşleşen Donanım İşleme

Eşleşen donanım olduğunda:


AHI NLS - Kullanıcı Konsol İletişimi - Bir Örnek

Blok Diyagram Genel Bakışı

Blok diyagram şunları temsil eder:

Her etiket, aynı ada sahip bir ifadeye karşılık gelir.

Diyagram ile ilişkili dört bilgi izi (t1-t4 işaretçileri aracılığıyla izlenebilir):


Kullanıcıdan Host'a İletim

Giriş Yolu: Konsoldan Sunucuya

Klavye Girişi

Klavye = kullanıcının konsolundaki giriş aygıtları kümesi

İstasyonlardan gelen giriş bitleri şunlardan geçer:

  1. İzleme seviyeleri
  2. Kesme işleyicileri
  3. Sonunda kodlama çeviricisine ulaşır

Kodlama Çevirisi

Kodlama, yarı-ham giriş bitlerini sunucu-host alt sistemine uygun forma eşler

Kodlama Özellikleri:

Yerel Görüntü Yönetimi (dm)

Kodlama çeviricisinden anında geri bildirim yerel görüntü yönetimine gider:

Örnek: Yüksek hızlı görüntü kullanıcıları Culler görüntüsünde eğrileri seçici olarak temizleyebilir (saklama tüpünde imkansız)

Ağ İletimi

Sunucu-host için kodlama çeviricisinden çıkış:

  1. Görünmez IMP'ye gider
  2. Uygun boyutlara bölünür
  3. Kodlama çeviricisi tarafından etiketlenir
  4. NET-host çeviricisine gider

Not: Çıkış, çevrimiçi girişten daha fazlasını içerebilir:

Host Alım Programı (hrp)

Sonunda host'a ulaşır, host alım programından geçmelidir:


Host'tan Kullanıcıya İletim

Çıkış Yolu: Sunucudan Konsola

Kod Çözme Çevirisi

Sunucu-host'tan çıkış başlangıçta kod çözme'den geçer:

Kod Çözme Programı Özellikleri:

IMP Kontrol Bilgisi (imp ctrl)

Sunucu-host, IMP'lere kontrol bilgisi göndermek isteyebilir:

Görünmez IMP

Bilgi, host kod çözücüsünden görünmez IMP aracılığıyla NET-kullanıcı çeviricisine akar:

Kullanıcı Alım Çeviricisi (urt)

URT, kullanıcı-site IMP'sinden mesajları kabul eder ve kullanıcı-site görüntüsü için düzeltir

Minimum Eylem: Mesaj parçalarının yeniden sıralanması

Görüntü Kontrolü (dctrl)

Görüntü çıkışı için daha fazlası gerekir:

Program Kontrolü (prgmctrl)

Başka bir eylem: bilgilerin belirli kullanıcı-site alt sistemlerine seçici çevirisi ve yönlendirilmesi

Örnek: Kayan noktalı bilgi blokları:

Görüntü Çıkışı

Bilgi sonunda kullanıcı görüntüsüne gönderilir

Kullanıcıdan Host'a Dolaylı İletim (ağ modu)

Uzak kullanıcının başka bir düğüm aracılığıyla dolaylı olarak düğüme bağlanabileceği mod


DEL Sözdizimi

NLS Kullanıcıları İçin Notlar

PROGRAMLAR

Sözdizimi

meta dosya (k=100, m=300, n=20, s=900)
dosya = mesdecl $bildirim $prosedür "FINISH";
prosedür =
procname (
(
tür "FUNCTION" /
"PROCEDURE") .id (tür .id / -boş)) /
"CO-ROUTINE") ' /
$bildirim etiketlenmiş_ifade $(etiketlenmiş_ifade ';) "endp.";
etiketlenmiş_ifade = ((sol ok).id ': / .boş) ifade;
tür = "INTEGER" / "REAL";
procname = .id;

Prosedür Türleri

Fonksiyonlar

Prosedürler

Eş-rutinler


Bildirimler

Sözdizimi

bildirim = sayıtürü / yapılandırılmıştür / etiket / lcl2uhr /
uhr2rmt / pipetürü;
sayıtürü = ("REAL" / "INTEGER") ("CONSTANT" sabitlist /
değişkenlist);
sabitlist =
.id '(sol ok)sabit
$('. .id '(sol ok)sabit);
değişkenlist =
.id ('(sol ok)sabit / .boş)
$('. .id('(sol ok)sabit / .boş));
idlist = .id $('. .id);
yapılandırılmıştür = ("tree" / "pointer" / "buffer") idlist;
etiket = "LABEL1" idlist;
pipetürü = "PIPE" çiftids $(', çiftids);
çiftids = .id .id;
procname = .id;
integerv = .id;
pipename = .id;
etiketv = .id;

Bildirim Özellikleri


Aritmetik

İfade Grameri

ifade = "IF" bağlaç "THEN" ifade "ELSE" ifade;
toplam = terim (
'+ toplam /
'- toplam /
-boş);
terim = faktör (
'* terim /
'/ terim /
'^' terim /
.boş);
faktör = '- faktör / bitop;
bitop = tümleyen (
'/' bitop /
'/\' bitop /
'&' bitop /
.boş);
tümleyen = "--" birincil / birincil;

Operatör Notları

Önemli Varsayımlar


Birincil

Sözdizimi

birincil =
sabit /
yerleşik /
değişken /
blok /
'(' ifade ')';
değişken = .id (
'(sol ok)' ifade /
'(' blok ')' /
.boş);
sabit = tamsayı / gerçel / dizi;
yerleşik =
mesinfo /
cortnin /
("MIN" / "MAX") ifade $('. ifade) '/';

Özellikler


Bağlaçlı İfade

Sözdizimi

bağlaç = ayrım ("AND" bağlaç / .boş);
ayrım = olumsuzlama ("OR" olumsuzlama / .boş);
olumsuzlama = "NOT" ilişki / ilişki;
ilişki =
'(' bağlaç ')' /
toplam (
"=" toplam /
'' toplam /
'=' toplam /
'"' toplam /
.boş);

Değerlendirme Optimizasyonu

Bağlaç yapısı şu şekilde yapılandırılmıştır:

Derleyici Optimizasyonu: Çoğu derleyici gereksiz değerlendirmeleri atlayabilmelidir:


Aritmetik İfade ve İfadeler

Sözdizimi

ifade = koşullu / koşulsuz;
koşulsuz = döngü_if / durumlar / kontrol_if / uist / ağaç_if /
blok / boş / ifade;
koşullu = "IF" bağlaç "THEN" koşulsuz (
"ELSE" koşullu /
.boş);
blok = "begin" ifade $('; ifade) "end";

İfade Kuralları


Yarı-Ağaç Manipülasyonu ve Test

Sözdizimi

ağaç_if = işaretçi_ayarla / işaretçi_ekle / işaretçi_sil;
işaretçi_ayarla = "set" "pointer" işaretçiadı "to" işaretçiifade;
işaretçiifade = yön işaretçiifade / işaretçiadı;
işaretçi_ekle = "insert" işaretçiifade "as"
(("left" / "right") "brother") /
(("first" / "last") "daughter") "of" işaretçiifade;
yön =
"up" /
"down" /
"forward" /
"backward" /
"head" /
"tail";
ağaç_değiştir = "replace" işaretçiadı "with" işaretçiifade;
işaretçi_sil = "delete" işaretçiadı;
ağaç = '(' ağaç1 ')';
ağaç1 = düğümadı $düğümadı;
düğümadı = terminal / '(' ağaç1 ')';
terminal = ağaçadı / tamponadı / işaretçiadı;
ağaçadı = id;
ağaç_bildirimi = "pointer" .id / "tree" .id;

Ağaç Oluşturma

Ağaç oluşturmada ekstra parantezler, tıpkı LISP'te olduğu gibi doğrusal alt kategorileştirme ile sonuçlanır


Akış ve Kontrol

Kontrol İfadeleri

kontrol_if = git_if / altrutin_if / döngü_if / durum_if;

GO TO İfadeleri

git_if = "GO" "TO" (etiketv / .id);
etiket_ata = "ASSIGN" .id "TO" etiketv;

Alt rutinler

altrutin_if = çağrı_if / dön_if / cortnout;
çağrı_if = "CALL" procname (ifade / .boş);
dön_if = "RETURN" (ifade / .boş);
cortnout = "STUFF" ifade "IN" pipename;
cortnin = "FETCH" pipename;

Not: FETCH, değeri adlandırılmış eş-rutini çağırarak hesaplanan yerleşik bir fonksiyondur

Döngü İfadeleri

döngü_if = while_if / until_if / for_if;
while_if = "WHILE" bağlaç "DO" ifade;
until_if = "UNTIL" bağlaç "DO" ifade;
for_if = "FOR" integerv '=' ifade ("BY" ifade / .boş) "TO" ifade
"DO" ifadeler;

Döngü Özellikleri

Durum İfadeleri

durum_if = i_durum_if / koşul_durum_if;
i_durum_if = "ITHCASE" ifade "OF" "BEGIN" ifade $(';
ifade) "END";
koşul_durum_if = "CASE" ifade "OF" "BEGIN" koşul_durumlar $('; koşul_durumlar)
"OTHERWISE" ifade "END";
koşul_durumlar = bağlaç ':' ifade;

Değer: Durum ifadesinin değeri, yürütülen son durumun değeridir


Ekstra İfadeler

boş = "NULL";

G/Ç İfadeleri

Mesaj G/Ç

mesaj_if = mesaj_oluştur / mesaj_iste;
mesaj_oluştur_if = mesaj_başlat / mesaj_ekle / mesaj_gönder;
mesaj_başlat = "start" "message";
mesaj_ekle = "append" "message" "byte" ifade;
mesaj_gönder = "send" "message";
mesaj_iste = "demand" "message";
mesinfo =
"get" "message" "byte" /
"message" "length" /
"message" empty: '?;
mes_bildirimi = "message" "bytes" "are" "n" "bits" "long";

Görüntü Tamponları

görüntü_if = tampon_başlat / tampon_ekle / kur;
tampon_başlat = "start" "buffer";
tampon_ekle = "append" tamponmalzeme $('&' tamponmalzeme);
tamponmalzeme =
"parameters" görüntü_param $('. görüntü_param) /
"character" ifade /
"string" dizi /
"vector" ("from" ifade ':' ifade / .boş) "to" ifade '.' ifade /
"position" (açkapa / .boş) "beam" "to" ifade '=' ifade /
"curve";
görüntü_param =
"intensity" "to" ifade /
"character" "width" "to" ifade /
"blink" açkapa /
"italics" açkapa;
açkapa = "on" / "off";
kur = "establish" tamponadı;

Mantıksal Ekran

Ekran Temsili:

Konum Kaydı (PREG):

Yoğunluk (INTENSITY):

Diğer Parametreler:

Tampon Oluşturma

Terminal Düğümler: Yarı-ağaçlar şunlardan biridir:

Görüntü Tamponu: Mantıksal varlıklar dizisi (tamponmalzeme)

Tampon Başlatma:

Mantıksal Giriş Aygıtları

Ses Çıkış Aygıtları

(Spesifikasyona dahil edilmiş bölüm)


Örnek Programlar

TTY Görüntü ve Klavye Programı

[Görüntü ve klavyeyi TTY olarak çalıştıracak program]

NLS'yi Çalıştırma

Giriş Kısmı

(Belirtilecek)

Görüntü Kısmı

DEMAND MESSAGE;
While LENGTH > 0 DO
ITHCASE GETBYTE OF BEGIN
ITHCASE GETBYTE OF %dosya alanı güncelleme% BEGIN
%literal alanı%
%mesaj alanı%
%ad alanı%
%hata%
%sıra özellikleri%
%filtre özellikleri%
%format özellikleri%
%komut geri bildirim satırı%
%filtre alanı%
%tarih saat%
%yankı kaydı%
BEGIN %DEL kontrolü%

Dağıtım Listesi

İsim Kuruluş Konum Telefon
Steve Carr University of Utah, Department of Computer Science Salt Lake City, Utah 84112 801-322-7211 X8224
Steve Crocker University of California, Boelter Hall Los Angeles, California 213-825-4864
Jeff Rulifson Stanford Research Institute Menlo Park, California 94035 415-326-6200 X4116
Ron Stoughton University of California, Computer Research Laboratory Santa Barbara, California 93106 805-961-3221
Mehmet Baray University of California, Corey Hall Berkeley, California 94720 415-843-2621

Önem

RFC 5, bilgisayar ağları üzerinden etkileşimli konsol iletişimini özellikle işlemek için tasarlanmış ağ farkında bir dil için en erken önerilerden birini temsil eder. Temel yenilikler şunları içerir:

Dil Tasarımı Katkıları

  1. Makine Bağımsızlığı: Evrensel Donanım Temsili, donanım özelliklerini protokolden ayırır
  2. Kaygıların Ayrılması: Kodlama/Kod Çözme paradigması giriş ve çıkışı temiz bir şekilde ayırır
  3. Dağıtık İşleme: Anında geri bildirimin yerel işlenmesi desteği ağ yükünü azaltır
  4. Eş-rutinler: Karmaşık etkileşim kalıpları için eş-rutin yapılarının erken kullanımı

Ağ Mimarisi Çıkarımları

Miras

DEL, şunlar hakkında erken düşünceyi temsil eder:


Network Working Group

Stanford Research Institute

Haziran 1969