JPS6367691B2 - - Google Patents

Info

Publication number
JPS6367691B2
JPS6367691B2 JP56104020A JP10402081A JPS6367691B2 JP S6367691 B2 JPS6367691 B2 JP S6367691B2 JP 56104020 A JP56104020 A JP 56104020A JP 10402081 A JP10402081 A JP 10402081A JP S6367691 B2 JPS6367691 B2 JP S6367691B2
Authority
JP
Japan
Prior art keywords
variable
function
value
list
buffer
Prior art date
Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
Expired
Application number
JP56104020A
Other languages
Japanese (ja)
Other versions
JPS585853A (en
Inventor
Akira Hatsutori
Hiroshi Hayashi
Akio Shinagawa
Takeshi Shinoki
Current Assignee (The listed assignees may be inaccurate. Google has not performed a legal analysis and makes no representation or warranty as to the accuracy of the list.)
Fujitsu Ltd
Original Assignee
Fujitsu Ltd
Priority date (The priority date is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the date listed.)
Filing date
Publication date
Application filed by Fujitsu Ltd filed Critical Fujitsu Ltd
Priority to JP56104020A priority Critical patent/JPS585853A/en
Priority to DE8282303394T priority patent/DE3270597D1/en
Priority to EP82303394A priority patent/EP0069525B1/en
Priority to US06/393,533 priority patent/US4517640A/en
Publication of JPS585853A publication Critical patent/JPS585853A/en
Publication of JPS6367691B2 publication Critical patent/JPS6367691B2/ja
Granted legal-status Critical Current

Links

Classifications

    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/44Arrangements for executing specific programs
    • G06F9/448Execution paradigms, e.g. implementations of programming paradigms
    • G06F9/4482Procedural
    • G06F9/4484Executing subprograms
    • G06F9/4486Formation of subprogram jump address

Description

【発明の詳細な説明】 本発明は、数値ではなく記号を処理するリスプ
(LispすなわちList Processor)のような関数型
言語用の関数型情報処理装置に係り、とくに、関
数が実行される環境(変数の値として何をつかう
かということ)をコンピユータ内部の記憶回路に
スタツク構造的に格納するにあたつて、そのスタ
ツクに格納された変数の検索時間を短縮するため
に上記スタツクメモリの外部に連想バツフアとカ
ウンタを設けることを特徴とする関数型情報処理
装置に関する。
DETAILED DESCRIPTION OF THE INVENTION The present invention relates to a functional information processing device for a functional language such as Lisp (List Processor) that processes symbols rather than numbers, and particularly relates to a functional information processing device for a functional language such as Lisp (List Processor), which processes symbols rather than numbers. When storing (what to use as the value of a variable) in the memory circuit inside the computer in a stack structure, the associative information is stored outside the stack memory in order to shorten the search time for variables stored in the stack. The present invention relates to a functional information processing device characterized by providing a buffer and a counter.

リスプは第1図に示すような2進木リストすな
わち記号のつながりを閉路を含まない節点と枝の
集合である木構造(第1図a)であらわしたもの
を扱うものである。すなわち、第1図aのような
木構造であらわされる記号のつながりを第1図b
のように各ノードからでる枝が2本づつである2
進木表現に直した形で第1図cに示されるような
主記憶装置に格納する。すなわち、各リストセル
は主記憶装置の1語または2語からなりその各セ
ルは左、右2つの部分からなる。各セルの左の部
分は普通はある記号、たとえばAという文字の記
号のビツトパターンが格納され、右の部分はその
記号とつながるべき、次の記号を格納しているセ
ルの番地を格納することによつて2つセルが連結
していることを表現する。従つて、第1図cのリ
ストセルのつながりは、第1図bの2進木リスト
を記憶回路上で実現しているものである。リスプ
は、このようなリスト構造をリプス言語を実行す
ることによつて、プロセツサを使つて動的に変換
し、目的のリスト構造を得る装置である。
Lisp handles a binary tree list as shown in Figure 1, that is, a tree structure (Figure 1a) in which the connections of symbols are expressed as a set of nodes and branches that do not include cycles. In other words, the connection of symbols expressed in the tree structure shown in Figure 1a is shown in Figure 1B.
There are two branches coming out of each node as in 2
It is stored in the main memory as shown in FIG. 1c in the form of a forward tree representation. That is, each list cell consists of one or two words of main memory, and each cell consists of two parts, a left and right part. The left part of each cell usually stores the bit pattern of a symbol, such as the letter A, and the right part stores the address of the cell that stores the next symbol that should be connected to that symbol. represents that two cells are connected. Therefore, the connection of list cells in FIG. 1c is the realization of the binary tree list in FIG. 1b on the memory circuit. Lisp is a device that dynamically converts such a list structure using a processor by executing the Lisp language to obtain the desired list structure.

リスプにおいてプログラムするということは、
2進木リストを変換するために必要な以下の5つ
の基本関数を組み合せて形成される関数を定義
し、その値を求めることである。
Programming in Lisp means
The purpose is to define a function formed by combining the following five basic functions necessary for converting a binary tree list, and to find its value.

5つの基本関数とは、 (イ) car〔X〕カール 2進木リストXの左の枝の先にある2進木リ
ストを値とする。
The five basic functions are: (a) car [X] Curl The value is the binary tree list at the end of the left branch of the binary tree list X.

(ロ) cdr〔X〕クダー 2進木リストXの右の枝の先にある2進木リ
ストを値とする。
(b) cdr [X] cdr The value is the binary tree list at the end of the right branch of the binary tree list X.

(ハ) cons〔X:Y〕コンス 新しいリスト・セルを設け、その左の枝を2
進木リストXとし右の枝を2進木リストYとす
るような新たな2進木リストを作つてそれを値
とする。
(c) cons [X:Y] cons Create a new list cell and change its left branch to 2
Create a new binary tree list such that the binary tree list is X and the right branch is the binary tree list Y, and use it as the value.

(ニ) atom〔X〕アトム Xがアトムの時、真という値(“T”や“*
T*”で示す)を取り、そうでないとき、偽
(“NIL”というアトムで示す)とする。
(d) atom [X] Atom When X is an atom, the value of true (“T” or “*
T*”), and if not, it is false (denoted by an atom “NIL”).

(ホ) eq〔X:Y〕イク XとYが同じ2進木リストの時、真の値
(“T”や“*T*”)を取り、そうでない時、
偽の値(“NIL”)を取る。
(E) eq [X:Y] Ik When X and Y are the same binary tree list, take a true value (“T” or “*T*”), and when not, take a true value (“T” or “*T*”)
Takes a false value (“NIL”).

例えば、f(x、y)=xy+yxの定義はf=λ
〔〔X、Y〕;XY+YX〕と表わすことにより、f
(2、3)の値は、λ〔〔X、Y〕;XY+YX〕〔2、
3〕=23+32となり、変数の対応関係を明確に規
定することができる。
For example, f(x,y)=x y +y x is defined as f=λ
By expressing [[X, Y]; X Y + Y X ], f
The value of (2, 3) is λ[[X, Y];X Y +Y X ][2,
3] = 2 3 + 3 2 , and the correspondence of variables can be clearly defined.

ここで、(X、Y)は仮引数と呼ばれる変数で
あつて(2、3)は(X、Y)のそのときの値で
ある実引数と呼ばれるものである。そして、この
実引数(2、3)を仮引数(X、Y)に代入する
ことを束縛(binding)すると呼び、実引数を仮
引数に束縛することによつて関数の値、この場合
23+32という目的のリストをつくることがリスプ
を実行することである。したがつて、リスプすな
わち関数型情報処理装置にあつては、仮引数と実
引数をどのように束縛するかが問題となる。
Here, (X, Y) are variables called formal arguments, and (2, 3) are the current values of (X, Y) called actual arguments. Assigning the actual arguments (2, 3) to the formal parameters (X, Y) is called binding, and by binding the actual arguments to the formal parameters, the value of the function, in this case
Creating the desired list 2 3 + 3 2 is executing a lisp. Therefore, in the case of a lisp, that is, a functional information processing device, the problem is how to bind formal arguments and actual arguments.

本発明においては、変数の束縛値(Bind
Value)が線形リスト(環境リスト)すなわち
FILO(First In Last OutまたはPush down Pop
up)型スタツクへ変数名と値の対で格納される。
ここでFILO型スタツクとは前記記憶回路上で2
進木リスト構造でデータを間接アドレス方式(す
なわち、あるセルに次につながるセルのアドレス
を格納しておく方式)で格納していくことであ
る。この変数名と値との対を格納していく順序
は、引数変数の関数が呼ばれたときに実引数を値
とする順番になる、いわゆるダイナミツクスコー
ピング(Dynamic Scoping)型の環境をもつ関
数型言語であつて、その変数の値がなにであるか
を参照する手順は、基本的には上記環境リスト
(又はスタツク)を先頭からシーケンシヤルに検
索して最初に見つかつた値を使う、いわゆるデイ
ープバインド(Deep Bind)型変数束縛を行な
う場合に、大域変数(関数の引数等のように、関
数を起動するときに束縛値が決定されている局所
変数とは異なり、それ以前からその値が決められ
ている変数)を捜し出すアクセスタイムを短縮す
るために主記憶装置の他に連想バツフアおよび関
数のコール時およびリターン時にそれぞれ+1、
−1されるカウンタを設けることが本発明の特徴
である。
In the present invention, the binding value of a variable (Bind
Value) is a linear list (environment list) i.e.
FILO (First In Last Out or Push down Pop
up) type stack as a variable name and value pair.
Here, FILO type stack means 2
Data is stored using an indirect address method (that is, a method in which one cell stores the address of the next cell) in a tree list structure. The order in which pairs of variable names and values are stored is the order in which the actual arguments are used as values when the function of the argument variable is called. In a type language, the procedure for referring to the value of a variable is basically to sequentially search the environment list (or stack) above from the beginning and use the first value found. When performing deep bind type variable binding, global variables (unlike local variables, such as function arguments, whose binding value is determined when the function is started, whose value has been determined before that time) In addition to the main memory, there is an associative buffer and +1 at function call and return to shorten the access time to search for (predetermined variables).
A feature of the present invention is to provide a counter that is set to -1.

一般に、第2図に示すように関数型とは、その
プログラム構造や実行形態が呼ぶべき関数すなわ
ち実行するべき関数f=λ〔〔X、Y〕;XY+YX
の仮引数(X、Y)へ実引数(2、3)を結合す
なわち束縛(バインド)し、呼ばれた(起動され
た)関数は、渡されたすなわち代入された実引数
や大域変数を参照して所定の手続きを実行し、そ
の関数の値23+32を呼び側へ返し、それ以外の副
作用(環境を変更すること)はないものを言う。
副作用については、本発明の要旨からみて、説明
を省略する。
Generally, as shown in Figure 2, a functional type is a function that the program structure or execution form should call, that is, a function that should be executed f = λ [[X, Y]; X Y + Y X ]
Binds the actual arguments (2, 3) to the formal arguments (X, Y), and the called (invoked) function refers to the passed or assigned actual arguments and global variables. The function executes the specified procedure, returns the value 2 3 + 3 2 of the function to the caller, and has no other side effects (changes to the environment).
In view of the gist of the present invention, description of side effects will be omitted.

関数を呼び出す(call)場合、その仮引数への
実引数の束縛の方法には、デイープバインド法と
シヤローバインド(Shallow Bind)法がある。
When calling a function, there are two methods for binding actual arguments to formal arguments: deep binding and shallow binding.

デイープバインド法は前述したように、束縛さ
れた変数名(X、Y)と値(2、3)の対(ペ
ア、すなわち、Xは2、Yは3の対)を線型リス
トとしてのスタツク構造に格納し、変数値を参照
する場合には、最後に束縛された方向からシーケ
ンシヤルにたどり、最初に発見したその変数の値
を使うという環境の構成である。
As mentioned above, the deep binding method creates a stack structure in which pairs of bound variable names (X, Y) and values (2, 3) (i.e. pairs of X for 2 and Y for 3) are stored as a linear list. When referring to a variable value, the environment is structured so that the value of the variable is sequentially traced from the last bound direction and the value of the variable found first is used.

すなわち、デイープバインド法は、第3図aに
示すように、主記憶装置の記憶単位である語の構
成が左、右2つの部分に分かれ、1つのセルにな
つていて、左部に変数名を格納し、右部はそのセ
ルが接続する次のセルのアドレスを格納すること
によつて次のセルのその変数の値を知ることがで
き、沢山の変数がある場合は、第3図aのように
連結し、等価的に第3図bのようなFILO型のス
タツクを構成するものである。
In other words, in the deep binding method, as shown in Figure 3a, the structure of a word, which is a storage unit in the main memory, is divided into two parts, left and right, forming one cell, and the variable name is written in the left part. By storing the address of the next cell to which that cell is connected on the right side, you can know the value of that variable in the next cell. They are connected as shown in FIG. 3 to equivalently constitute a FILO type stack as shown in FIG. 3b.

関数コール(call)の時に、引数変数に値をバ
インドするときには、環境リスト(または環境ス
タツク)の検索出発点の方向から、その名前と値
の対をつなげ、検索出発点ポインタを新たに付加
した項目の先頭へ更新する。すなわち、第3図a
の主記憶装置上では、先頭に1つのセルn+1を
設けることに対応し、そのセルがつながる次のセ
ルがnであることに対応する。これは、第3図b
においては、スタツクのプツシユ(push)動作
Aに対応し、その変数名がn+1であつて、その
値が(n+1)であるセルをスタツクの最下段に
プツシユして入れることに対応する。関数のリタ
ーン(Return)時には、その関数がコールされ
たときの状態に検索出発点ポインタを戻す。すな
わち、第3図aの主記憶回路上では、先頭のセル
n+1を1つとつて、セルnを先頭にすることに
対応し、第3図bでは、n+1とその値(n+
1)をポツプ動作Bで外に出すことを意味する。
デイープバインド法の長所は、スタツクのプツシ
ユポツプ動作が簡単であるので関数コール時の引
数変数のバインド処理、関数リターン時の引数変
数のアンバインド(Unbind)処理のオーバーヘ
ツドが比較的少ないことであり、短所は、大域変
数(自由変数とも呼ぶ)のように、かなり以前に
バインドされた変数すなわちスタツクの奥の方に
ある変数の参照に時間がかかることである。
When binding a value to an argument variable during a function call, connect the name and value pairs from the direction of the search starting point in the environment list (or environment stack) and add a new search starting point pointer. Update to the beginning of the item. That is, Figure 3a
On the main memory device of , this corresponds to providing one cell n+1 at the beginning, and corresponds to the fact that the next cell to which that cell is connected is n. This is shown in Figure 3b
corresponds to the stack push operation A, which corresponds to pushing a cell whose variable name is n+1 and whose value is (n+1) to the bottom of the stack. When a function returns, the search starting point pointer is returned to the state it was in when the function was called. That is, on the main memory circuit in FIG. 3a, the first cell n+1 is set as one cell, and cell n is set as the first cell, and in FIG. 3b, n+1 and its value (n+
1) means to take it out with pop action B.
The advantage of the deep binding method is that the push and pop operation of the stack is simple, so there is relatively little overhead for binding argument variables when a function is called and unbinding processing for argument variables when the function returns. The disadvantage is that it takes time to reference variables that were bound long ago, or are located deep in the stack, such as global variables (also called free variables).

シヤローバインド法は、各変数毎に、その値を
保持するランダムアクセス域(Value Cellと呼
ぶ)を設け、関数コール時には引数変数のバリユ
ーセルへその実引数を格納し、バリユーセルに以
前から存在した値を、線形リスト(またはスタツ
ク)へ名前と旧値の対として格納し、変数参照は
対応するバリユーセルを読むだけでよく、関数リ
ターン時には、その引数変数のバリユーセルへ線
形リスト(またはスタツク)へ格納してあつた旧
値を戻す。シヤローバインド法の長所は、引数参
照時間が短かいことであり、短所は関数コール時
の引数変数のバインド処理、関数のリターン時の
アンバインド処理のオーバーヘツドが大きいこと
である。
In the shallow binding method, a random access area (called a value cell) is created for each variable to hold its value, and when a function is called, the actual argument is stored in the value cell of the argument variable, and the value that previously existed in the value cell is stored. , stored in a linear list (or stack) as a pair of name and old value, and variable references only need to read the corresponding value cell, and when the function returns, store the argument variable's value cell in the linear list (or stack). Return the old value. The advantage of the shallow binding method is that the argument reference time is short, and the disadvantage is that the overhead of binding argument variables when a function is called and unbinding when the function returns is large.

以上のようにデイープバインド法はシヤローバ
インド法に比べて、引数のバインド/アンバイン
ド処理については高速であるが、変数の参照とく
に大域変数の参照が遅い。すなわち、従来は変数
の参照をポインタを1つづつ減らす逐次方式で行
なつていたので、非常に処理が遅かつた。この点
を改良するのが本発明の方式である。
As described above, the deep binding method is faster in the binding/unbinding processing of arguments than the shallow binding method, but it is slower in referencing variables, especially global variables. That is, in the past, variables were referenced in a sequential manner in which the pointer was decremented one by one, resulting in very slow processing. The method of the present invention improves this point.

本発明の目的は、上述したような関数型情報処
理装置において、データ間のつながりを表わすリ
ストをデイープバインド方式に従つてスタツクメ
モリ内に格納される変数を参照するアクセスタイ
ムを短縮するために主記憶装置の外部に連想バツ
フアおよび関数のコール時とリターン時にそれぞ
れ+1、−1するカウンタを設けた関数型情報処
理装置を提供することにある。
SUMMARY OF THE INVENTION An object of the present invention is to provide a functional information processing device as described above, in which a list representing connections between data is stored in a main memory in order to shorten the access time of referring to variables stored in a stack memory according to a deep binding method. It is an object of the present invention to provide a functional information processing device provided with an associative buffer and a counter that increments +1 and -1 when a function is called and returned, respectively, outside the device.

本発明の特徴とするところは、プログラムの構
造及び実行形態が仮引数としての変数名と実引数
としての変数値の対として環境リストである
First−In−Last−Out型のスタツクメモリへ格納
することによつて、呼ぶべき関数の仮引数変数へ
実引数を束縛し、呼ばれた関数は変数の値を参照
する場合、上記環境リストの最近の束縛値を使つ
て処理を行ない、その関数の値が得られれば、関
数の仮引数変数を上記環境リストから削除して上
記関数値をリターンするという一連の処理を繰返
す関数型情報処理装置において、関数をコール及
び関数がリターンする毎にそそれぞれ+1、−1
されるカウンタと、変数名、変数の環境リストの
位置情報、変数が参照されて登録されるときの前
記カウンタ値から各ワードが構成される連想バツ
フアメモリを有し、変数の参照は、変数名をキー
としてまず前記連想バツフアメモリをアクセスし
て存在すれば対応する変数の環境リスト上の位置
より変数値を求め、存在しなければ、前記環境リ
ストを関数フレーム毎にカウンタFCTRをデクレ
メントしながらさかのぼつて検索して、最初に見
つかる変数の値を使い、その変数名、FCTR値、
環境リスト(又はスタツク)上のアドレスを対と
してバツフアに格納し、関数がリターンする時に
は、その関数の前記カウンタ値と一致する前記連
想バツフアのワードを削除する関数型情報処理装
置を提供することである。
The feature of the present invention is that the program structure and execution form is an environment list as a pair of variable names as formal arguments and variable values as actual arguments.
By storing in the First-In-Last-Out type stack memory, the actual argument is bound to the formal parameter variable of the function to be called, and when the called function refers to the value of the variable, the most recent In a functional information processing device that performs a process using the bound value of , and when the value of the function is obtained, the process of deleting the formal parameter variable of the function from the environment list and returning the function value is repeated. , +1 and -1 each time the function is called and the function returns, respectively.
It has an associative buffer memory in which each word is made up of a counter, a variable name, position information of the variable's environment list, and the counter value when the variable is referenced and registered. First, the associative buffer memory is accessed as a key, and if it exists, the variable value is found from the position of the corresponding variable on the environment list. If it does not exist, the environment list is traced back while decrementing the counter FCTR for each function frame. Search and use the value of the first variable found, its variable name, FCTR value,
By providing a functional information processing device that stores addresses on an environment list (or stack) in a buffer as a pair, and deletes words in the associative buffer that match the counter value of the function when the function returns. be.

以下図面を参照して本発明の一実施例を説明す
る。
An embodiment of the present invention will be described below with reference to the drawings.

まず、スタツク上のデイープバインド方式では
次のような処理が行なわれる。関数呼び出しが起
こる手前で実引数がそろうとスタツクは第4図a
のようになる。ここでSTPはスタツクトツプポ
インタである。関数が呼び出されると呼び出され
た関数側で第4図bのような形になる。
First, in the deep binding method on the stack, the following processing is performed. When the actual arguments are ready before the function call occurs, the stack is as shown in Figure 4a.
become that way. Here, STP is a stack top pointer. When a function is called, the called function looks like the one shown in Figure 4b.

以上のような処理によつて第4図cのようにス
タツク中の関数毎の情報間は、旧FPによつてリ
ンクされる。ここでFPはフレームポインタすな
わち現在実行している関数の制御情報の先頭を指
すものである。このリンクによつて変数の参照が
あつたときそれをたどつて変数名をサーチするこ
とによつてその値を得ることができる。
Through the above processing, information for each function in the stack is linked by the old FP as shown in Figure 4c. Here, FP is a frame pointer, that is, it points to the beginning of the control information of the function currently being executed. When a variable is referenced through this link, its value can be obtained by following it and searching for the variable name.

たとえば F1(z)=z2+F2(10) F2(x)=x2+x+F3(7) F3(x)=x5+1+z という関係にある3つの関数において、F1(3)の
値を求める場合を説明する。関数F1(z)をコー
ルする時点で仮引数zは3に束縛されて、環境リ
スト上にその束縛関係が格納される。しかし、
F1(z)の計数には関数F2(x)の値F2(10)が必要
であるので、関数F2(x)をコールする。このコ
ール時において、仮引数xは10に束縛されて環境
リスト上にその束縛関係が格納される。しかし、
また、F2(10)の計算には関数F3(x)の値F3(7)が必
要であるので、関数F3(x)をコールする。この
コール時において、仮引数xは7に束縛されて環
境リスト上にその束縛関係が格納される。しか
し、F3(x)の値F3(7)を求めるのにF3(x)=x5
1+zのzは大域変数、すなわち、その時点で束
縛されない変数であるが、zはF1(z)をコール
する時点でz=3に束縛されているので、環境リ
スト上をさかのぼつてzが3であることをサーチ
するわけである。そしてはじめてF3(7)=75+1+
3が求まり、F2(x)にリターンしてF2(10)=102
10+F3(7)が求まり、F1(z)にリターンして、F1
(3)=32+F2(10)となり、F1(3)という値が求まるので
ある。
For example, for three functions in the relationship F 1 (z)=z 2 +F 2 (10) F 2 (x)=x 2 +x+F 3 (7) F 3 (x)=x 5 +1+z, F 1 (3) The case of finding the value of will be explained. When the function F 1 (z) is called, the formal argument z is bound to 3, and the binding relationship is stored on the environment list. but,
Since the value F 2 (10) of the function F 2 (x) is required to count F 1 (z), the function F 2 (x) is called. At the time of this call, the formal argument x is bound to 10, and the binding relationship is stored on the environment list. but,
Also, since the value F 3 (7) of the function F 3 (x) is required to calculate F 2 (10), the function F 3 (x) is called. At the time of this call, the formal argument x is bound to 7, and the binding relationship is stored on the environment list. However, to find the value F 3 (7) of F 3 (x), F 3 (x) = x 5 +
z in 1+z is a global variable, that is, a variable that is not bound at that point, but z is bound to z=3 at the time of calling F 1 (z), so if you go back on the environment list and find that z is 3. This is what we search for. And for the first time F 3 (7)=7 5 +1+
3 is found, return to F 2 (x) and get F 2 (10)=10 2 +
10+F 3 (7) is found, return to F 1 (z), and F 1
(3)=3 2 +F 2 (10), and the value F 1 (3) can be found.

一般に関数型情報処理装置において、大域変数
は束縛された局所変数(または仮引数)に比べそ
の数は少いが少数の大域変数が多数回参照される
場合が多い。そこで本発明の関数型情報処理装置
においては新しく連想バツフアおよび関数のコー
ル時とリターン時と、変数を環境リスト(又はス
タツク)上で検索する時にそれぞれ+1、−1す
るカウンタを設け、ある関数が大域変数を参照し
た場合、前記バツフアにその変数がない場合は、
環境リスト(またはスタツク)をシーケンシヤル
に検索し、変数名が格納してある前記スタツクの
位置情報たとえばアドレスをその変数名と対にし
てさらに変数が見つかつた環境ブロツクに対応す
るカウンタの内容をも対にして1ワードとして前
記高速な連想バツフアメモリに各ワードごとに格
納しておき、以後その変数が参照された場合に
は、変数名でバツフアを連想アクセスしてアクセ
ス時間の大幅な短縮をすることができると同時
に、関数リターン時において前記カウンタの内容
をキーとして前記連想バツフア内の対応するワー
ドを高速に削除することができる。
Generally, in a functional information processing device, the number of global variables is smaller than that of bound local variables (or formal arguments), but a small number of global variables are often referenced many times. Therefore, in the functional information processing device of the present invention, an associative buffer and a counter that is incremented by 1 and -1 when a function is called and returned, respectively, and when a variable is searched on the environment list (or stack) are provided. When a global variable is referenced, if the variable does not exist in the buffer,
The environment list (or stack) is searched sequentially, and the position information of the stack where the variable name is stored, for example, the address is paired with the variable name, and the contents of the counter corresponding to the environment block where the variable is found are also retrieved. Each word is stored as one word in the high-speed associative buffer memory, and when that variable is referenced from now on, the buffer can be accessed associatively using the variable name, greatly shortening the access time. At the same time, when the function returns, the corresponding word in the associative buffer can be deleted at high speed using the contents of the counter as a key.

第5図の環境リストにおいて、関数F1はF2を、
F2はF3を、F3はF4を、F4はF5を、そしてF5はF6
をコールするようになつているとする。このとき
関数F6を F6(N)=N2+x+z+z2 であると仮定する。すなわち、Nは局所変数で、
xとzは大域変数である。大域変数であるxは関
数F2(x、y)をコールする時点でx=5である
ように束縛されており、zは関数F3(z)をコー
ルする時点でz=8であるように束縛されてい
る。F6(N)の値を計算するために、Nとxそし
てzの各変数を参照するため、まず環境リスト上
をサーチするが、局所変数Nに対しては即座にそ
の値(例えばN=10)をみつけることができる
が、xやzは最初は環境リスト上をさかのぼつて
サーチする必要がありx=5、z=8であること
がわかる。しかし、もし、この最初のサーチにお
いて、見つけたx=5、z=8を第5図bのよう
に連想バツフアに対として格納しておけば、2度
目の同じ変数名の参照は連想バツフアをまずアク
セスすることによつてなされ高速化されることに
なる。すなわち、F6(N)=N2+x+z+z2の最
後の項z2は連想バツフアにz=8という対が格納
されていて変数zをキーとして連想検索すればz
=8であることがただちに決まりz2に代入すれば
よいことになる。さらに後述するようなコール時
およびリターン時にそれぞれ+1、−1するカウ
ンタを設けて前記バツフア内のいらなくなつたワ
ードを高速に削除するようにしている。
In the environment list in Figure 5, the function F 1 calls F 2 ,
F 2 is F 3 , F 3 is F 4 , F 4 is F 5 , and F 5 is F 6.
Suppose you are learning to call . At this time, it is assumed that the function F 6 is F 6 (N)=N 2 +x+z+z 2 . That is, N is a local variable,
x and z are global variables. The global variable x is bound so that x = 5 when calling the function F 2 (x, y), and z is bound so that z = 8 when calling the function F 3 (z). is bound by. In order to calculate the value of F 6 (N), the environment list is first searched in order to refer to the variables N, x, and z. However, for the local variable N, the value (for example, N= 10), but for x and z, it is necessary to search backwards on the environment list, and it turns out that x=5 and z=8. However, if, in this first search, we store x=5 and z=8 found as a pair in the association buffer as shown in Figure 5b, the second reference to the same variable name will cause the association buffer to be stored. This can be done faster by accessing the information first. In other words , the last term z 2 of F 6 (N) = N 2 + x + z + z 2 has the pair z = 8 stored in the associative buffer, and if an associative search is performed using the variable z as a key, z
It is immediately determined that =8, and it is sufficient to substitute it for z 2 . Furthermore, counters that are incremented by +1 and -1 at the time of a call and a return, respectively, as will be described later, are provided to quickly delete words that are no longer needed in the buffer.

次に、バツフアメモリの持つべき機能は以下の
ものがある。なお、バツフアメモリの具体的構成
は第7図を参照して後述する。
Next, the functions that buffer memory should have are as follows. The specific structure of the buffer memory will be described later with reference to FIG.

(1) ある大域変数を初めてアクセスした場合、そ
の変数をバツフアへ登録しておき、以後のアク
セスの高速化をはかる。この場合、変数名とそ
のバインド値の環境リスト(又はスタツク)上
での位置情報(スタツク内アドレス)も同時に
格納して、変数値はスタツク内アドレスを参照
してランダムアクセス的にスタツクから引き出
す。
(1) When accessing a global variable for the first time, register the variable in the buffer to speed up subsequent accesses. In this case, position information (address in the stack) of the variable name and its bind value on the environment list (or stack) is also stored, and the variable value is extracted from the stack in a random access manner by referring to the address in the stack.

同時に、第6図にバツフアエントリ(ワー
ド)のフオーマツトを示すように外部に設けた
カウンタFCTR(Function Counter)は関数の
コール、リターンに応じてカウントアツプ、カ
ウントダウン、及び変数を環境リスト(又はス
タツク)上をさかのぼつて検索する時、環境ブ
ロツク毎にカウントダウンを行ない、変数をバ
ツフアへ登録するとき、その環境ブロツクに対
応するFCTRの値をバツフアのFNO域へ書き
込みまた関数がリターンするとき、そのFCTR
値と一致するFNO域を有するバツフアエント
リを削除するのに用いるためFNO域を対とし
て設ける。なお、変数名すなわちネーム域は変
数を参照する際のキーおよび関数コールの時に
変数バインドする際に、その変数を削除するの
に用いる。また、FNO域はその対応する変数
がどの関数の引数であるかを区別するのに用い
る。さらに、ポインタ域は変数の他が格納され
ている環境リストすなわちスタツク上のアドレ
スを指すもので、変数をアクセスする時、変数
名が一致するエントリのポインタ域で環境リス
ト(又はスタツク)をアクセスする。なお、第
6図において、Vは有効表示ビツトを示すもの
である。
At the same time, an externally provided counter FCTR (Function Counter), whose buffer entry (word) format is shown in FIG. ) When searching backwards, perform a countdown for each environment block, and when registering a variable to the buffer, write the FCTR value corresponding to that environment block to the buffer's FNO area, and when the function returns, the FCTR value
Pairs of FNO areas are provided for use in deleting buffer entries with FNO areas that match the value. Note that the variable name, that is, the name area, is used as a key when referencing a variable, and is used to delete the variable when binding the variable during a function call. Additionally, the FNO area is used to distinguish which function's argument the corresponding variable is. Furthermore, the pointer area points to an address on the environment list or stack where other variables are stored, and when accessing a variable, the environment list (or stack) is accessed using the pointer area of the entry with the matching variable name. . In FIG. 6, V indicates a valid display bit.

(2) 与えられた変数名が内部格納変数名と一致す
るかどうかをハード的に行ない、一致がとれれ
ばその変数名に対応するスタツクアドレスを読
むこと、すなわち、変数名をキーとしてバツフ
アを連想検索して、アタツクアドレスをリード
機能をもつことである。これは、変数名を参照
する場合に必要である。
(2) Check whether the given variable name matches the internally stored variable name or not, and if there is a match, read the stack address corresponding to that variable name. In other words, use the variable name as a key to create a buffer. It has the ability to perform associative searches and read attack addresses. This is necessary when referencing variable names.

(3) 変数名をキーとしてバツフアメモリ上でその
変数と同一名の変数の有効表示ビツトVをリセ
ツトする機能を持つことである。これは参照さ
れてバツフアに存在する大域変数と同一名の仮
引数名をもつ関数をコールする場合、バツフア
上のその大域変数を削除するため、必要であ
る。この情報をおこたると同一変数名の参照の
場合に、大域変数より局所変数を優先するスコ
ーピングの原則がくずれる。
(3) It has a function of using a variable name as a key to reset the valid display bit V of a variable with the same name as that variable on the buffer memory. This is necessary because when calling a function that has the same formal argument name as a referenced global variable that exists in the buffer, that global variable on the buffer is deleted. If this information occurs, the scoping principle that gives priority to local variables over global variables when referencing the same variable name breaks down.

(4) リスト上の位置情報(FCTR)をキーとし
て、それが一致するすべての項目の有効表示ビ
ツトVをリセツトする機能を有する。これは関
数が呼び側の関数へリターンする時に、そのリ
ターンする関数の引数変数を全てバツフアから
除去するものに必要である。この処理をおこた
ると、もしこの関数の仮引数変数と同一名の変
数がこの関数以前にバインドされており、その
変数を参照すると、既に環境から除去されたは
ずの値が誤まつて使われることになる。
(4) It has a function of using position information (FCTR) on the list as a key to reset the valid display bits V of all items that match the position information (FCTR). This is necessary to remove all argument variables of the returning function from the buffer when the function returns to the calling function. If this process occurs, if a variable with the same name as a formal argument variable of this function was bound before this function, and that variable is referenced, a value that should have already been removed from the environment may be mistakenly used. become.

上述したように、各変数を環境上での関数フレ
ーム位置に対応するFCTR値付でバツフアに格納
していないと、リターンする関数の各仮引数名を
キーとして、それぞれバツフアを検索して除去す
るか、バツフアのオールクリアを行なう必要があ
る。前者では、時間がかかり、後者では大域変数
のバツフア内での寿命は、初めて参照した関数が
リターンするまでとなり、バツフアの効果はほと
んどなくなる。
As mentioned above, if each variable is not stored in a buffer with an FCTR value corresponding to the function frame position in the environment, each buffer will be searched and removed using each formal argument name of the returning function as a key. Or you need to clear all of the battles. In the former case, it takes time, and in the latter case, the lifetime of the global variable in the buffer is until the function that references it for the first time returns, and the effect of the buffer is almost negated.

以下にバツフアの動作を説明する。まず、変数
参照は次のように行なう。バツフアをその変数名
をキーとして検索し、存在すればそのポインタ域
でスタツク上の値をアクセスする。存在しなけれ
ば、環境リスト(スタツク)を変数名をキーとし
て検索する。この時、関数フレームを1つさかの
ぼることにFCTRをカウントダウンし、最初にみ
つかつたその変数値を使うことになる。そして、
バツフアへ変数名、FNO域(みつけた関数フレ
ームに対応するFCTR)、ポインタ域を登録して、
以後の参照に備えるものである。
The operation of the buffer will be explained below. First, refer to variables as follows. Search the buffer using the variable name as a key, and if it exists, access the value on the stack using the pointer area. If it does not exist, search the environment list (stack) using the variable name as a key. At this time, FCTR is counted down by going back one function frame, and the first variable value found is used. and,
Register the variable name, FNO area (FCTR corresponding to the found function frame), and pointer area to the buffer,
It is provided for future reference.

関数コールは次のように行なう。コールする関
数に引数が存在すればバツフア中の同一名の変数
を誤まつてアクセスしないように、仮引数変数と
ネーム域が一致するバツフアエントリーを削除す
る。
Function calls are made as follows. If the function to be called has an argument, delete the buffer entry whose name area matches the formal argument variable to avoid accidentally accessing a variable with the same name in the buffer.

そして、関数リターンは次のように行なわれ
る。リターンする関数に引数が存在すれば、その
関数フレームに対応する現在のFCTRとFNO域
が一致するバツフアエントリを削除する。これに
より、バツフア中にこの引数変数の旧バインド値
が残るのを防ぐ。そして、FCTRをカウントダウ
ンして、戻り先の関数フレームに対応するFCTR
値にする。
Then, the function return is performed as follows. If the returning function has an argument, delete the buffer entry whose FNO area matches the current FCTR corresponding to the function frame. This prevents the old bind value of this argument variable from remaining in the buffer. Then count down the FCTR and set the FCTR corresponding to the function frame to return to.
value.

以上のように、FCTRの役目は、関数リターン
の際の引数変数のアンバインド処理の時に、複数
個の引数が存在しても、FCTR値をキーとして
FNO域がそれと一致するバツフアエントリを一
度にクリアすることである。
As mentioned above, the role of FCTR is to use the FCTR value as a key when unbinding the argument variables upon function return, even if there are multiple arguments.
The purpose is to clear all buffer entries whose FNO area matches it at once.

第7図は、本発明の連想バツフアメモリおよび
関数コール時およびリターン時にそれぞれ+1、
−1するカウンタの具体的構成図である。すなわ
ち、プログラムの構造及び実行形態が変数名と変
数値の対として、環境リストへ格納することによ
つて、呼ぶべき関数の仮引数変数に実引数を束縛
し、呼ばれた関数は変数の値を参照する場合、上
記環境リストの最近の束縛値を使かつて処理を行
ない、関数の値が得られれば、関数の仮引数変数
を上記環境リストから削除して、上記関数値をリ
ターンするという一連の処理を繰り返す関数型情
報処理装置の内部に連想バツフアメモリ及び関数
コール時およびリターン時にそれぞれ+1、−1
するカウンタを新たに加えてなる構成図である。
前記連想バツフアメモリの持つべき機能は、前記
(1)、(2)、(3)である。
FIG. 7 shows the associative buffer memory of the present invention and +1 at function call and return, respectively.
It is a concrete block diagram of the counter which carries out -1. In other words, by storing the structure and execution form of the program in the environment list as pairs of variable names and variable values, the actual arguments are bound to the formal argument variables of the function to be called, and the called function stores the values of the variables. When referring to , the most recent binding value in the environment list is used to perform the process, and if the function value is obtained, the function's formal argument variable is deleted from the environment list, and the function value is returned. There is an associative buffer memory inside the functional information processing device that repeats the process, and +1 and -1 at function call and return, respectively.
FIG. 2 is a configuration diagram in which a new counter is added.
The functions that the associative buffer memory should have are as follows.
(1), (2), and (3).

上記実施例には、まずメモリ10,30が設け
られ、それぞれが1〜mのレジスタで構成され
る。メモリ10は変数名ネームを格納する変数名
域メモリであり、前記変数名がメモリ10に格納
されるとき、メモリ20は関数フレームを1つさ
かのぼるごとにカウントアツプするカウンタ21
のそのときの値を格納するFNO域メモリであり、
メモリ30はスタツク内アドレスを格納するポイ
ンタ域メモリである。前記メモリ10,30のi
番目(i=1、2、…n)のレジスタはそれぞれ
が対応し、1つのワードを形成している。関数型
情報処理装置の環境リスト内のある変数をはじめ
てアクセスした場合、その変数のFCTRカウンタ
210の内容とスタツク内アドレスを前記連想バ
ツフアの前記メモリ10,30にそれぞれ登録し
ていき、以後のアクセスの高速化を図る。連想バ
ツフアへの登録は変数名に対しては入力線10
1,103を介して変数名iのセルに書き込みパ
ルス信号WEi(図示せず)を活性化して書き込む。
このとき同時に、FCTRカウンタ210の内容を
入力線201,203を通して、RNO域のi番
目のセルに前記同じ書き込み信号WEiを活性化し
て書き込む、同様にスタツク内アドレスは入力線
301からポインタ域のi番号のセルに前記書き
込み信号WEiを活性化して書き込む。連想バツフ
アは与えられた変数名が、あらかじめ内部メモリ
10と一致回路40で一致するかどうかを検出
し、一致がとれれば出力線401のn本のうちの
どれか一本が活性化されて選択回路60を制御し
て、対応するセル30の内容、すなわちスタツク
内アドレスを出力線601に出力する。すなわ
ち、変数名をキーとして、連想検索を行いスタツ
ク内アドレスを読み出すことができる。しかも、
スタツク内アドレスを格納するメモリ30は、書
き込みも行えるもので、変数名に対応するアドレ
スを読み出したり、書き込んだりすることができ
る。これは、アドレスを参照したり変更したりす
るときに必要である。
In the above embodiment, first, memories 10 and 30 are provided, each of which is composed of 1 to m registers. The memory 10 is a variable name area memory that stores variable names, and when the variable name is stored in the memory 10, the memory 20 has a counter 21 that counts up each function frame.
This is FNO area memory that stores the current value of
Memory 30 is a pointer area memory that stores addresses within the stack. i of the memories 10 and 30
The th (i=1, 2, . . . n) registers correspond to each other and form one word. When a certain variable in the environment list of a functional information processing device is accessed for the first time, the contents of the FCTR counter 210 and the stack address of that variable are registered in the memories 10 and 30 of the associative buffer, respectively, and subsequent accesses are performed. Aim to speed up the process. To register in the associative buffer, use input line 10 for variable names.
1, 103 to activate a write pulse signal WE i (not shown) and write to the cell with variable name i.
At the same time, the contents of the FCTR counter 210 are written to the i-th cell in the RNO area through the input lines 201 and 203 by activating the same write signal WE i.Similarly, the address in the stack is written from the input line 301 to the pointer area. The write signal WE i is activated and written to the i-numbered cell. The associative buffer detects in advance whether a given variable name matches in the internal memory 10 and the matching circuit 40, and if a match is found, one of the n output lines 401 is activated and selected. The circuit 60 is controlled to output the contents of the corresponding cell 30, ie, the address in the stack, to the output line 601. That is, an address in the stack can be read by performing an associative search using the variable name as a key. Moreover,
The memory 30 that stores addresses in the stack is also writable, and addresses corresponding to variable names can be read and written. This is necessary when referencing or changing addresses.

また、カウンタFCTR210の内容をキーとし
て連想バツフアから同一パターンのFNO域の有
効表示ビツトVをリセツトする機能を実現するた
めに、本実施例には、有効表示ビツト格納セル群
80およびヴアリツド(Valid)更新回路90が
含まれる。有効表示ビツトVを格納するセル群8
0のうちViセルは、ヴアリツド更新回路90によ
つて、変数名i、アドレスiを書き込むときの前
記書き込み信号WEi(図示せず)によつてセツト
される。
In addition, in order to realize the function of resetting the valid display bits V of the FNO area of the same pattern from the associative buffer using the contents of the counter FCTR 210 as a key, this embodiment includes a group of valid display bit storage cells 80 and a valid display bit V. An update circuit 90 is included. Cell group 8 storing valid display bits V
0, the Vi cell is set by the variable update circuit 90 by the write signal WE i (not shown) when writing variable name i and address i.

一致回路50の出力501を選択すれば、入力
のカウンタ内容出力201とメモリ20に格納さ
れているFNO域パターンの一致がとれたとき、
対応する有効表示ビツトがリセツトされ、FCTR
値をキーとしてFNO域がそれと一致するバツフ
アエントリを一度にクリアすることができる。
If the output 501 of the matching circuit 50 is selected, when the input counter content output 201 matches the FNO area pattern stored in the memory 20,
The corresponding valid display bit is reset and the FCTR
Using a value as a key, buffer entries whose FNO area matches that value can be cleared all at once.

なお変数名はn−wayリプレースロジツク10
0にも加えられ、その出力がメモリ10,20,
30の入力に接続されていることも付言する。
The variable name is n-way Replace Logic 10.
0, and its output is stored in memories 10, 20,
It should also be added that it is connected to 30 inputs.

以上説明したように、本発明によれば、デープ
バインド方式に従つて実行していく関数型情報処
理装置において、変数の値を検索するアクセス
を、前記連想バツフアおよび関数コール時および
リターン時にそれぞれ+1、−1するカウンタを
用いることによつて高速に行なうことができる。
As described above, according to the present invention, in a functional information processing apparatus that executes execution according to the deep binding method, access for searching the value of a variable is increased by +1 at each of the associative buffer, function call, and return. , -1 can be used to speed up the process.

【図面の簡単な説明】[Brief explanation of drawings]

第1図はa,b,cは2進木リストを説明する
図、第2図は関数型情報処理を説明する図、第3
図a,bはデイープバインド法を説明する図、第
4図a,b,cはスタツク上のデイープバイド法
を説明する図、第5図はスタツク上で具体的にデ
イープバインド法を説明する図、第6図はバツフ
アエントリのフオーマツトを示す図、第7図は本
発明に用いられるバツフアの一実施例のブロツク
図である。 10……変数名域メモリ、20……FNO域メ
モリ、21……カウンタ、30……ポインタ域メ
モリ、210……FCTRカウンタ、40,50…
…一致回路、60……選択回路、80……有効表
示ビツト格納セル群、90……ヴアリツド更新回
路。
In Figure 1, a, b, and c are diagrams explaining a binary tree list, Figure 2 is a diagram explaining functional information processing, and Figure 3 is a diagram explaining a binary tree list.
Figures a and b are diagrams explaining the deep binding method, Figures 4 a, b, and c are diagrams explaining the deep binding method on the stack, and Figure 5 is a diagram specifically explaining the deep binding method on the stack. FIG. 6 is a diagram showing the format of a buffer entry, and FIG. 7 is a block diagram of an embodiment of the buffer used in the present invention. 10... Variable name area memory, 20... FNO area memory, 21... Counter, 30... Pointer area memory, 210... FCTR counter, 40, 50...
. . . matching circuit, 60 . . . selection circuit, 80 . . . valid display bit storage cell group, 90 . . . valid update circuit.

Claims (1)

【特許請求の範囲】[Claims] 1 プログラムの構造及び実行形態が仮引数とし
ての変数名と実引数としての変数値の対として環
境リストであるFirst−In−Last−Out型のスタツ
クメモリへ格納することによつて呼ぶベき関数の
仮引数変数へ実引数を束縛し、呼ばれた関数は変
数の値を参照する場合、前記環境リストの最近の
束縛値を使つて処理を行ない、その関数の値が得
られれば関数の仮引数変数を前記環境リストから
削除して前記関数値をリターンするという一連の
処理を繰返す関数型情報処理装置において、関数
をコール及び関数がリターンする毎にそれぞれ+
1、−1されるカウンタと、変数名、変数の環境
リストの位置情報、変数が参照されて登録される
ときの前記カウンタ値から各ワードが構成される
連想バツフアメモリを有し、変数の参照は、変数
名をキーとしてまず前記連想バツフアメモリをア
クセスして、存在すれば、対応する変数の環境リ
スト上の位置より変数値を求め、存在しなけれ
ば、前記環境リストから変数名を検索して最初に
見つかる変数の値を使い、関数がリターンする時
には、その関数の前記カウンタ値と一致する前記
連想バツフアのワードを削除することを特徴とす
る関数型情報処理装置。
1 The structure and execution form of the program determines the function to be called by storing pairs of variable names as formal arguments and variable values as actual arguments in a First-In-Last-Out type stack memory, which is an environment list. When an actual argument is bound to a formal argument variable and the called function refers to the value of the variable, the most recent bound value in the environment list is used for processing, and if the value of the function is obtained, the function's formal argument is In a functional information processing device that repeats a series of processes of deleting a variable from the environment list and returning the function value, each time a function is called and the function returns, +
1. It has an associative buffer memory in which each word is made up of a counter that is decremented by 1, a variable name, position information in the environment list of the variable, and the counter value when the variable is referenced and registered. , first access the associative buffer memory using the variable name as a key, and if it exists, find the variable value from the position of the corresponding variable on the environment list; if it does not exist, search for the variable name from the environment list and first 2. A functional information processing apparatus, characterized in that when a function returns, a word of the associative buffer that matches the counter value of the function is deleted.
JP56104020A 1981-06-30 1981-07-03 Function type information processing unit Granted JPS585853A (en)

Priority Applications (4)

Application Number Priority Date Filing Date Title
JP56104020A JPS585853A (en) 1981-07-03 1981-07-03 Function type information processing unit
DE8282303394T DE3270597D1 (en) 1981-06-30 1982-06-29 Data processing system
EP82303394A EP0069525B1 (en) 1981-06-30 1982-06-29 Data processing system
US06/393,533 US4517640A (en) 1981-06-30 1982-06-30 Stack machine with improved cache memory for variables

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
JP56104020A JPS585853A (en) 1981-07-03 1981-07-03 Function type information processing unit

Publications (2)

Publication Number Publication Date
JPS585853A JPS585853A (en) 1983-01-13
JPS6367691B2 true JPS6367691B2 (en) 1988-12-27

Family

ID=14369571

Family Applications (1)

Application Number Title Priority Date Filing Date
JP56104020A Granted JPS585853A (en) 1981-06-30 1981-07-03 Function type information processing unit

Country Status (1)

Country Link
JP (1) JPS585853A (en)

Also Published As

Publication number Publication date
JPS585853A (en) 1983-01-13

Similar Documents

Publication Publication Date Title
JP2596658B2 (en) How to process hierarchical BOM data files
US4086629A (en) Hierarchical data store with look-ahead action
US4517640A (en) Stack machine with improved cache memory for variables
JPH03266039A (en) Free format data link processing system
KR20130018597A (en) Memory system including key-value store
Buchsbaum et al. Confluently persistent deques via data-structural bootstrapping
US5502832A (en) Associative memory architecture
US5905977A (en) Method for automatic demonstration
JPS6367691B2 (en)
KR950012304B1 (en) Method and apparatus for improved current window cache with switchable address in, out, and local cache registers
JPH0126092B2 (en)
Benamram et al. On the power of the shift instruction
JP2702943B2 (en) Semiconductor storage device
Robinson The pattern addressable memory: Hardware for associative processing
JPS585852A (en) Function type information processing unit
JP2705166B2 (en) Data processing device
Bible et al. Linked Lists
JPH0315772B2 (en)
JPS6214919B2 (en)
JPH046984B2 (en)
JPS584451A (en) Function type information processor
JPS63118943A (en) Data processor
JPS585851A (en) Function type information processing unit
Davie Variable Access in Languages with Higher Order Procedures
JPS62115531A (en) Rule processing system