APLNEWS 2006年9月号

 

1.      APL2外部関数について(On APL2 External Functions

 

 2006年4月にIBMよりリリースされたWorkstation APL2 V2 CSD8は前号でも述べたとおり、Unicodeの取り扱いに関して、日本語の環境における不具合がありその採用を保留せざるを得ませんでした。しかしその他の部分で即高い実用性を発揮する機能が追加されていることが判明してまいりました。(As described in the previous month APL News, we had to defer the adoption of CSD8, which was released from IBM in April, 2006, because of its minor problems handling Unicode in the Japanese Windows environment. However we have discovered that it had very useful functional additions in other areas.)

 

 そもそも外部関数とは本来APLになかった機能です。APLにはユーザー定義関数のようにロード(= LOAD )された状態のACTIVE WORKSPACE でユーザーが定義し、使用し、ライブラリーにセーブ(= SAVE )されるものと、システムで定義された原始関数やシステム関数だけでした。ご存知のとおり原始関数やシステム関数は定義関数と異なり中身を見たり変更することができませが、APLインタープリッターの一部で、どのACTIVE WORKSPACE にも存在するものです。(The concept of external functions did not exist in old APLs. In APL, there are user-defined functions, which are created by the users in the loaded active workspaces and used and saved in library workspaces, and primitive and system functions, which are part of the APL interpreter and exist natively in any active workspaces.)

 

 外部関数はAPLの使用者がさまざまな方法で日常的に比較的頻繁に使用するような機能をAPLのシステムに取り込んだもので、次のようなものがあります:(External functions are formed of various program tools frequently used by majority of APL users regardless of their origin. They can be conveniently grouped as follows:)

 

 − APL システム ライブラリーに存在した定義関数(Ones which came from APL system libraries 1 and 2)

 

   DISPLAY, DISPLAYC, DISPLAYG EDITOR2FILE, FSTAT, GRAPHPAK, IDIOMSMATHFNS, RF, SQL, TIME

 

 − Host OS環境の制御、情報の獲得などに関するもの(Ones which control, or get information from, Host OS)

 

   BEEP, COM, DIR, ERASE, GETENV, HOST, MKDIR, PIPE, RENAME, RMDIR, TCL, UNZIP, ZIP

 

 − ワークスペース・ライブラリーおよびAPLセッションに関するもの(Ones which relate to Workspaces and APL sessions)

 

     APL2LM, APL2PIA, COPY, LIB, LIBSOPTION, PCOPYPRINTWSGSIZEOF, UNZIPWS, ZIPWSWSCOMPWSCOMPANALYZE 

 

 − ネームスペースに関するもの(Ones which relate to Namespaces)

 

   CNS, EXP, QNS,

 

− コード変換などに関するもの(Ones which relate to Code conversions and the like)

 

   ATR, ATS, CTK, CTN, CTUTF, KTC, LTM, MD5, MTL, PFA, RTA, STA, UTFTC

 

 これらのうちAPL2LM (APL2 Library Manager)と APL2PIA APL2 Program Interface for APL2)がCSD8で新たに追加されました。(Of these above,   APL2LM and APL2PIA were added in CSD8.)

 

ここにあげた外部関数は原始関数やシステム関数と同じようにAPL言語で書かれていないので、中身を閲覧したり,編集したりすることはできません。APL2アソシエート・プロセサーにより管理されていて,システム関数NA(=Name association)を実行することにより使用できるようになります。その結果、関数名と機能はワークスペースの中に存在する状態になりますが,実態はワークスペース外のネームスペースに存在し,実行にあたってワークスペースのメモリーなどのシステム資源を使用しません。また他のユーザーと同時に使用することができます。(These external functions are not written in APL and their contents cannot be viewed nor edited as is true with primitive and system functions. They become usable in active workspaces by issuing system function NA. As a result, their names and functional properties reside in the workspaces, but their entities reside outside in name-spaces and do not consume workspace resources such as memories then they are executed. Besides they permit concurrent access by multiple users.)

 

 ネームスペースは現在ワークスペースをシステム外部関数CNS(Convert Namespace)で変換して設定することができますので,APL言語による外部関数も可能になりました。そのひとつの例としては,従来ワークスペースとして提供されていた“GRAPHPAKの全機能が外部関数としても提供されていることです。外部関数すなわちネームスペースに代表される機能は近年APLに革新的な設計上の変革をもたらしました。(Today, name-spaces can be created from regular APL workspaces by issuing another external function called CNS (=Convert Namespace), therefore APL-written external functions can exist. The external function GRAPHPAK is one of these examples. The concept of external functions (that is name spaces) has brought about major innovations to Todays APL.)  

 

 CSD8 で追加された外部関数APL2PIA はさらに新しいコンセプトをAPLにもたらしました。これは従来からある他言語からAPL2を起動させるAPLPI ( APL2 Program Interface )の機能をAPL言語に適用させたもので,APLからAPLセッションを起動させるものです。当初これの必要性をあまり理解することができませんでした。 なぜならば外部関数HOST又は補助プロセサー100によってバッチコマンドを実行すれば,いくつでもAPLセッションを立ち上げることができるからです。(APL2PIA which ahs been added by CSD8 is an adaptation of APL2PI (=APL2 Program Interface used by Non-APL languages to initiate APL2 sessions). At first, I couldnt comprehend the need for this function well, because we could initiate APL2 sessions by executing batch-commands via host interface.)

 

 現在私が着手している作業では約850個のIBMホストシステムTSO下のAPL2ワークスペースをWindows用に書き直しています。その過程で非常に多くのワークスペースを短時間で、交互に閲覧し、比較,分析しなければなりません。ワークスペースの分析用に追加されたAPL2LMはこの目的では十分には役に立ちません。このときにAPLPIA を使用することを思い立ちました。すなわちAPLPIAで立ち上げるAPL2セッションはメインセッションから見て完全に従属したスレーブセッションで,主人の言うことは何でも直ちに実行してくれることです。(I am currently involved in the project to convert some 850 IBM host TSO system APL2 workspaces to run in windows environments. In this process, I have to examine these workspaces in detail in relatively short period of time. APL2PLM (APL2 Library Manager) is a bit short of my requirements. Then I thought of using APL2PIA. APL2PIA creates slave sessions to behave according to the will of the master session.)  I   

 

 バッチコマンドで起動するセッションは独立セッションで,起動したセッションとは対等の立場にあります。したがって,そのやり取りはセッション間のシェアード・プロセサーを介しての間接的なものになり,処理も複雑で,効率の悪いものになります。それに対して,スレーブセッションのプログラムの実行はすべてマスターセッションでのみ指示することができ,スレーブセッション独自な行動はありません。(Sessions started by batch-commands are independent sessions and are on equal footing as the original sessions. They can communicate by way of shared processors, but both sessions must maintain synchronized communications well. This makes the whole process complicating and with undue performance overhead. Slave sessions, on the other hand, take orders from the master session and do not act independently.)

 

ひとつの例をとりますと、たとえばあるワークスペースを分析する場合,そのワークスペースを自分のワークスペースに全部コピーすると、自分のワークスペースが変更されたり,壊されたり,作業の後で,要らない余計なごみが残ったり,さまざまな弊害が予期されます。したがって分析に必要なサイズのスレーブセッションを立ち上げ,対象ワークスペースをそこにコピーし、その場で分析プログラムを起動させ,結果だけを取り込んだり、ファイルに書き出したりするには、この仕組みは非常に有効に利用することができます。(To take an example, suppose you want to analyze the contents of a given workspace, if you copy that workspace entirely into your active workspace, there are dangers of ruining your workspace and as a result of executing analysis programs you may end up getting the unwanted by-products of program executions, which are difficult to remove. You can now create a slave session and copy the target workspace contents into the slave workspace, and after the end of analysis, you may get only the final result or have them written into files.)

 

 同じ機能は新しく追加された補助プロセサー200でもほぼ同じ方式で利用することができます。基本的には“STARTコマンドで,セッションを立ち上げ,”EXECUTEコマンドでスレーブセッションでのプログラムのコピーや実行を指示し,“STOPコマンドでセッションを終了させるだけで,至って単純な操作で間に合います。必要に応じて複数個のセッションを立ち上げることもできます。またスレーブセッションで使用する変数や関数を名前の代わりにトークンを用いて、スレーブセッションの環境に影響を及ぼさないように実行させることもできます。(AP200, which has been added to APL2 by CSD8, achieve the same thing in similar ways. You use START command to create a slave session. EXECUTE command directs slave sessions to perform required jobs described in the APL statements passed from the master session. STOP command terminates the slave session. This whole thing is a very simple process. If required, EXECUTE command can use tokens instead of names for functions and variables, so that the slave session names are not disturbed.)

 

 ネームスペース同様,このスレーブセッションの考え方も、この新しいAPL2における変革の動きの重要な要素です。(The concept of the slave sessions will bring about another innovation, next to that of the namespaces.)

 

 

2.      APLは難しいか,易しいか(Is APL difficult, or easy?)

 

 APLが作られてから40年経つ今日、この問題を冷静に考えてみたいと思います。APLは非常に巾の広い言語で,社会のさまざまな要求にこたえてきました。私の知る限りAPLを現に使って人たちにとって、APLが習得しにくい、使い勝手の悪い、難しい道具であると言う意見を聞いたことは有りません。(Today, after 40 years since the first APL workspace was created, I would like to think of this question objectively. APL is a language with very wide-application coverage, and has satisfied various programming requirements of the society. I have never heard of people using APL to say APL is difficult to learn and use.)

 

 しかし一方、APLを本で学習したりする人(APLの本を著作した人も含めて)の多くは、APLが非常に難しい言語であるという印象を持っていらっしゃるようです。この方々はAPLを頭で理解しようとしています。APLに関するすべてのことを一人でセットアップして使用することを考えると、なかなか大変であるとも思います。APLは人に聞きながら一つ一つ自分に役に立つところだけを試行錯誤で体を使って覚え込んでいくことが肝心です。その点自動車の運転の習得などに似ていると思います。(On the other hand, however, people who have tried to learn APL by books (including those who have authored APL published books) seem to take APL difficult. These people use brains to understand APL. It will be certainly not easy to try to set up everything before using APL. The important thing about APL is to ask other more experienced people to teach when you have problems, and try them out yourself, using bodies (not brains). It is analogous to leaning driving automobile for the first time.)

 

 私が紹介するAPLのさまざまな新機能についても、いずれは必要になるかもしれないけれど、今は必要ないことであれば別に気にかける必要はありません。欲張ってすべてを知る必要はありません。APLは知識や教養のためのものでなく,使うものです。また直接そのような機能を自分でプログラムしなくても、私はこれらをできるだけ汎用ツールとして皆様に提供していきたいと思います。(You may not pay attention to what I describe about new features of APL2, if you think they are not relevant to your problems, at least at this moment. APL is not the language to be learned in whole at one time for whatever reasons. It is a thing to be used. If you want to use these functions, you dont have to program them all by yourself. I would like to provide them as utility tools to you as much as possible.)

 

 APLはあくまでも個人の道具に過ぎません。APLの世界は末端で使う人と,それを支える何階層かのしっかりとした体制を実現させてはじめて成り立ってきました。将来ともそれは変わることが無いと思います。企業の中でこのような体制を作ることは比較的容易です。しかしその環境は外に広がっていきにくいものです。私がこのインターネットサイトを立ち上げた理由の一つは個人のユーザーでも必要なサポートを得られる環境を育成し,いずれは独り立ちしてより多くのかたがたにAPLのメリットを享受していただく状況を作り出せたらと願っているからです。(APL is nothing but a personal tool. APL user community has been formed of end-users and many layers of those who support them. Such set-up is realizable in business firms relatively easily. However, this seldom has spread out into the outside world. One of the main reason why I have started this Web-site is that I have the desire to create such support set up for prospective individual APL users, so that some day they can help spread APL to the increased number of people.)    

 

 多くの時間はかけられませんが,それぞれの方が持っていらっしゃるAPLに関する問題があれば、遠慮なくメールしてくださいkyosuke.saigusa@nifty.com(Though I may not use too much time, please do not hesitate to send your questions to me.)

 

 

3. APL生誕40周年記念行事に関して,IBMから少し情報が入ってきました。IBM CorporationAPL Products and Services Groupが中心となり、ニューズレター、やインターネットに掲載する記事を集め始めています。私も私の知る限りの、日本におけるAPLのユーザーなどを紹介する記事を寄稿する予定です。IBMは一般のメディアに取り上げられるようにも検討しているようです。11月はCSD9のリリースが予定されている時期のはずですから,私も日本における将来のAPLの更なる普及に向けて,最大限の協力をしたいと思っています。(A small piece of information has arrived regarding the plans for the celebration events for the APL 40th anniversary. IBM APL Products and Services group has started collecting articles to carry on the IBM Internet site and APL newsletters, etc. I plan to contribute a summary of the current status of APL usage in Japan as far as I know. IBM also seems to be considering press involvements. November happens to the expected time for the release of CSD9, I am determined to cooperate with IBM as much as I can for the brighter future of APL usage in this country.)