habrahabr

Некоторым языкам программирования десятки лет — и они ещё в ходу. 5 старых, но актуальных ЯП

  • четверг, 22 февраля 2024 г. в 00:00:17
https://habr.com/ru/companies/ru_mts/articles/794300/

Не так давно мы писали про язык COBOL, которому уже больше 60 лет. Он до сих пор актуален, поскольку на нём держится немало систем финансовых и банковских организаций. Но есть и другие старые ЯП, всё ещё применяемые в некоторых отраслях. О них сегодня и говорим, не обойдя и COBOL, который не собирается уходить с рынка. Подробности — под катом.

Fortran

В начале 2024 года этот язык оказался на 12 месте в списке TIOBE. И ведь ему 67 лет, вдумайтесь. В прошлом году он находился на 27 позиции и всего за год вышел почти что в первую десятку. Позади неожиданно оказались Rust, Ruby и Kotlin.

Конечно, не стоит думать, что он до сих пор такой же, каким был в момент своего появления (первую версию выпустила IBM в 1957 году). В 2023 г., например, появился новый стандарт. Вот достоинства языка:

  • высокая производительность

  • статическая и сильная типизация

  • относительная простота для изучения и использования

  • универсальность

  • встроенный параллелизм

  • комплексные числа как встроенный тип данных — это крайне важно для расчётов в области радиофизики

  • большое количество библиотек для различных расчётов, например NAG

Пример кода на этом языке:
! Print matrix A to screen
subroutine print_matrix(n,m,A)
  implicit none
  integer, intent(in) :: n
  integer, intent(in) :: m
  real, intent(in) :: A(n, m)
 
  integer :: i
 
  do i = 1, n
	print *, A(i, 1:m)
  end do
 
end subroutine print_matrix

До сих пор используется в области высокопроизводительных вычислений, в физике, астрономии и климатологии.

На нём написаны программы моделирования погоды и климата, если брать последний пример. Это модели Межправительственной группы экспертов по изменению климата (IPCC). Также язык применяется для выполнения вычислений, которые связаны с химическими и физическими свойствами молекул. Кроме того, он используется для создания пакетов моделирования в химии и биоинформатике. Пример — GROMACS для молекулярной динамики.

ADA

Этот язык разработан в конце 1970-х, причём не просто так, а по заказу Министерства обороны США. Ведомству он понадобился для создания различного ПО, предназначенного для военных и аэрокосмических систем. Также он применялся для написания медицинских приложений, да и всего, где требовались надёжность и безопасность.

Его достоинство в поддержке как объектно-ориентированного, так и не объектно-ориентированного программирования. Он подходит как для использования в комплексных системах, так и для низкоуровневой разработки. Язык позволяет обнаруживать ошибки ещё во время компиляции, а не уже непосредственного выполнения программы. Кроме того, в Ada преимущественно используются слова, а не символы. В целом это снижает риск ошибок при кодинге.

Пример кода на ADA:
h Interfaces; use Interfaces;
with System.Machine_Code; use System.Machine_Code;
with Ada.Text_IO;
 
procedure Asm_Test is
	Left, Right : Unsigned_32;
begin
	Left := 1; Right := 2;
 
	Asm("addl %1, %2",
    	Inputs => (Unsigned_32'Asm_Input ("a", Left),
                       Unsigned_32'Asm_Input ("b", Right)),
    	Outputs => Unsigned_32'Asm_Output ("=b", Right));
 
	Ada.Text_IO.Put_Line (Unsigned_32'Image (Right));
end Asm_Test;

Не сказать, чтобы сейчас язык был крайне популярным, но кое-где его ещё используют. Например, всё в той же аэрокосмической отрасли — для систем управления полётами и спутниками. Кроме того, на нём до сих пор работают некоторые медицинские платформы, а также системы управления железными дорогами.

К слову, современная версия языка (в отличие от первоначальной) фактически является объектно-ориентированной. Как и предтеча, она надёжна и отличается простым синтаксисом.

COBOL

Языку программирования COBOL более 60 лет. Несмотря на это, он до сих пор активно используется. Конечно, в подавляющем большинстве сфер его заменили современные языки программирования. Но дело в том, что в ряде стран до сих пор работают аппаратные системы с ПО на базе этого ЯП. Особенно много их в США.

В августе 2023 года язык вышел на 15 место по популярности среди ЯП. Год назад он находился на 31 позиции. Впечатляющий рост.

Пример кода на COBOL:
5738CB1 V2R1M0  910524	
AS/400 COBOL Source  SGAFP/CBLLBL  RCHASA12  10/24/91 10:18:16  Page  3
STMT SEQNBR -A 1 B..+....2....+....3....+....4....+....5....+....6....+....7..
IDENTFCN  S  COPYNAME                                                        CHG DATE
  42  002300 	88  END-OF-FILE              	VALUE "1".             	10/23/91
  	002400                                                                 10/23/91
  43  002500 PROCEDURE DIVISION.                                             10/23/91
  	002600 MAIN-PARA.                                                      10/23/91
  44  002700 	OPEN INPUT VENDOR-FILE                                      10/23/91
  	002800      	OUTPUT PRINTER-FILE.                               	10/23/91
  45  002900 	PERFORM PRINT-LABELS UNTIL END-OF-FILE.                     10/23/91
  46  003000 	CLOSE VENDOR-FILE, PRINTER-FILE.                            10/23/91
  	003100     GOBACK.                                                     10/23/91
  	003200                                                                 10/23/91
  47  003300 PRINT-LABELS.                                                   10/23/91
  48  003400 	READ VENDOR-FILE                                            10/23/91
  49  003500     	AT END SET END-OF-FILE TO TRUE.                         10/23/91
  50  003600 	IF NOT-END-OF-FILE                                          10/23/91
  51  003700     	MOVE CORRESPONDING VNDMSTR TO LABEL-O                   10/23/91
        	*   	** CORRESPONDING items for statement 51:
        	*   	**     NAME
        	*   	**     ADDR1
        	*   	**     CITY
        	*   	**     STATE
        	*   	**     ZIPCD
        	*   	** End of CORRESPONDING items for statement 51
  52  003800     	WRITE PRINT-REC FORMAT IS "LABEL".                  	10/23/91
* * * * *   E N D   O F   S O U R C E   * * * * *

Кстати, в 2020 году язык фактически переживал свой ренессанс. Дело в том, что американская система занятости в 2020 г. всё ещё зависела от COBOL (сейчас ситуация несколько поменялась). И после того как из-за пандемии выросло количество безработных, инфраструктура не выдержала возросшей нагрузки. В итоге всё пришлось спешно чинить, приглашая существующих специалистов по COBOL и подготавливая новых.

Благодаря стараниям IBM и других компаний количество строк кода, написанных на COBOL, в 2022 году составило уже 800 млрд. Правда, вполне возможно, что в 2017 году просто посчитали не всё, но факт остаётся фактом — количество строк кода, написанных на COBOL, огромно.

Вероятно, через некоторое время системы всё же перепишут на современных языках программирования, но пока что COBOL остаётся на плаву.

APL

Это аббревиатура от A Programming Language. Язык создан в 60-х годах для работы с массивами, а также для обработки больших блоков чисел. Он хорошо подходил под решение математических, статистических и логических задач, а код APL достаточно короткий.

Вот пример:
L←(Lι':')↓L←,L   	⍝ drop To:
 L←LJUST VTOM',',L	⍝ mat with one entry per row
 S←¯1++/∧\L≠'('   	⍝ length of address
 X←0⌈⌈/S
 L←S⌽(−(⍴L)+0,X)↑L	⍝ align the (names)
 A←((1↑⍴L),X)↑L   	⍝ address
 N←0 1↓DLTB(0,X)↓L	⍝ names)
 N←,'⍺',N
 N[(N='_')/ι⍴N]←' '   ⍝ change _ to blank
 N←0 ¯1↓RJUST VTOM N  ⍝ names
 S←+/∧\' '≠⌽N     	⍝ length of last word in name

У языка весьма обширный набор встроенных функций для воздействия на скаляры, векторы, множества, многомерные объекты и их комбинации.

Вот что говорил о языке его автор: «Изначально я создавал APL как инструмент для написания и обучения. И хотя ЯП главным образом эксплуатировался в коммерческом программировании, я всё так же считаю, что его самое важное использование определяется как простая, точная и выполнимая запись (нотация) для изучения широкого спектра предметов».

У APL достаточно высокий порог входа, в частности потому, что он использует свой собственный набор символов. Для него даже создавалась специализированная клавиатура.

Сейчас он ещё жив, но применяется уже редко — в большинстве случаев для анализа массивов данных, для обработки финансовой информации в некоторых организациях. В научной отрасли — для обучения таким концепциям, как обработка массивов и функциональное программирование.

В целом, актуального софта на APL, который кто-то использует, становится всё меньше, но всё же он есть. Кстати, проводятся и конференции в рамках Association for Computer Machinery.

PL/I

Ещё один очень старый язык программирования, представленный корпорацией IBM в 1960-х годах. Он был создан как универсальный ЯП, который объединил Fortran и Comtran (последний применялся в бизнесе). Получился весьма специфический язык с большим количеством дополнительных функций.

Пример кода на PL/I:
***********************************************************************
*                                                                     *
*  	PL/I EXAMPLE                                                   *
*  	OBJECT IS TEMPORARY                                        	*
*                                                                     *
*                                                                     *
*                                                                     *
***********************************************************************
 CRTPLN3: PROCEDURE OPTIONS (MAIN);                                 	CSR00010
                                                                        CSR00020
 DCL                                                                    CSR00030
  (                                                                     CSR00040
  K INIT(1024),                    	/* ONE KILO-BYTE          	*/ CSR00050
  PAGESIZE INIT(4096),             	/* 4K PAGE BOUNDARY       	*/ CSR00060
  OFFSET INIT(0),                  	/* WINDOWS STARTS         	*/ CSR00070
  WINDOW_SIZE INIT(20),            	/* WINDOW SIZE IN PAGES   	*/ CSR00080
  NUM_WIN_ELEM INIT (20480),       	/* NUM OF 4-BYTE ELEMENTS 	*/ CSR00090
  OBJECT_SIZE INIT (60))           	/* CHOSEN OBJECT SIZE IN PGS  */ CSR00100
  FIXED BIN(31);                                                        CSR00110
                                                                        CSR00120
 DCL                                                                    CSR00130
 /* 32767 IS UPPER LIMIT FOR ARRAY BOUND.                        	*/ CSR00140
  S(32767) BIN(31) FIXED BASED(SP); 	/* DEFINE WORD ALIGNED SPACE */ CSR00150
                                                                        CSR00160
 DCL SP PTR;                                                            CSR00170
                                                                        CSR00180
 DCL                                                                    CSR00190
  (                                                                     CSR00200
  ORIG,                            	/* START ADDRESS OF WINDOW	*/ CSR00210
  AD, I,                           	/* TEMPORARY VARIABLES    	*/ CSR00220
  HIGH_OFFSET,                     	/* SIZE OF OBJECT IN PAGES	*/ CSR00230
  NEW_HI_OFFSET,                   	/* NEW MAX SIZE OF THE OBJECT */ CSR00240
  RETURN_CODE,                     	/* RETURN CODE            	*/ CSR00250
  REASON_CODE) FIXED BIN(31);      	/* REASON CODE            	*/ CSR00260
                                                                        CSR00270
 DCL                                                                    CSR00280
  OBJECT_ID CHAR(8);               	/* IDENTIFYING TOKEN      	*/ CSR00290
                                                                        CSR00300
 /********************************************************************/ CSR00310
                                                                        CSR00320
 DCL CSRIDAC ENTRY(CHAR(5),        	/* OP_TYPE                	*/ CSR00330
               	CHAR(9),        	/* OBJECT_TYPE            	*/ CSR00340
               	CHAR(44),       	/* OBJECT_NAME            	*/ CSR00350
               	CHAR(3),        	/* SCROLL_AREA            	*/ CSR00360
               	CHAR(3),        	/* OBJECT_STATE           	*/ CSR00370
               	CHAR(6),        	/* ACCESS_MODE            	*/ CSR00380
               	FIXED BIN(31),  	/* OBJECT_SIZE            	*/ CSR00390
               	CHAR(8),        	/* OBJECT_ID              	*/ CSR00400
               	FIXED BIN(31),  	/* HIGH_OFFSET            	*/ CSR00410
               	FIXED BIN(31),  	/* RETURN_CODE            	*/ CSR00420
               	FIXED BIN(31) ) 	/* REASON_CODE            	*/ CSR00430
               	OPTIONS(ASSEMBLER);                              	CSR00440
                                                                        CSR00450
                                                                        CSR00460
 DCL CSRVIEW ENTRY(CHAR(5),        	/* OP_TYPE                	*/ CSR00470
               	CHAR(8),        	/* OBJECT_ID              	*/ CSR00480
               	FIXED BIN(31),  	/* OFFSET                 	*/ CSR00490
               	FIXED BIN(31),  	/* WINDOW_SIZE            	*/ CSR00500
               	FIXED BIN(31),  	/* WINDOW_NAME            	*/ CSR00510
               	CHAR(6),        	/* USAGE                  	*/ CSR00520
               	CHAR(7),        	/* DISPOSITION            	*/ CSR00530
               	FIXED BIN(31),  	/* RETURN_CODE            	*/ CSR00540
               	FIXED BIN(31) ) 	/* REASON_CODE            	*/ CSR00550
               	OPTIONS(ASSEMBLER);                              	CSR00560
                                                                        CSR00570
                                                                        CSR00580
 DCL CSRSCOT ENTRY(CHAR(8),        	/* OBJECT_ID              	*/ CSR00590
               	FIXED BIN(31),  	/* OFFSET                 	*/ CSR00600
               	FIXED BIN(31),  	/* SPAN                   	*/ CSR00610
               	FIXED BIN(31),  	/* RETURN_CODE            	*/ CSR00620
               	FIXED BIN(31) ) 	/* REASON_CODE            	*/ CSR00630
               	OPTIONS(ASSEMBLER);                              	CSR00640
                                                                        CSR00650
                                                                        CSR00660
 DCL CSRSAVE ENTRY(CHAR(8),        	/* OBJECT_ID              	*/ CSR00670
               	FIXED BIN(31),  	/* OFFSET                 	*/ CSR00680
               	FIXED BIN(31),  	/* SPAN                   	*/ CSR00690
               	FIXED BIN(31),  	/* NEW_HI_OFFSET          	*/ CSR00700
               	FIXED BIN(31),  	/* RETURN_CODE            	*/ CSR00710
               	FIXED BIN(31) ) 	/* REASON_CODE            	*/ CSR00720
               	OPTIONS(ASSEMBLER);                              	CSR00730
                                                                        CSR00740
                                                                        CSR00750
 DCL CSRREFR ENTRY(CHAR(8),        	/* OBJECT_ID              	*/ CSR00760
               	FIXED BIN(31),  	/* OFFSET                 	*/ CSR00770
               	FIXED BIN(31),  	/* SPAN                   	*/ CSR00780
               	FIXED BIN(31),  	/* RETURN_CODE            	*/ CSR00790
               	FIXED BIN(31) ) 	/* REASON_CODE            	*/ CSR00800
               	OPTIONS(ASSEMBLER);                              	CSR00810
                                                                        CSR00820
 /********************************************************************/ CSR00830
                                                                        CSR00840
                                                                        CSR00850
  PUT SKIP LIST                                                         CSR00860
      	('<< BEGIN DATA WINDOWING SERVICES INTERFACE VALIDATION >>'); CSR00870
  PUT SKIP LIST (' ');                                                  CSR00880
                                                                        CSR00890
  CALL                                                                  CSR00900
  CSRIDAC ('BEGIN',                	/* SET UP ACCESS TO A HIPER-  */ CSR00910
       	'TEMPSPACE',            	/* SPACE OBJECT           	*/ CSR00920
       	'MY FIRST HIPERSPACE',                                   	CSR00930
       	'YES',                                                       CSR00940
       	'NEW',                                                       CSR00950
       	'UPDATE',                                                    CSR00960
       	OBJECT_SIZE,                                                 CSR00970
       	OBJECT_ID,                                                   CSR00980
       	HIGH_OFFSET,                                                 CSR00990
       	RETURN_CODE,                                                 CSR01000
       	REASON_CODE);                                                CSR01010
                                                                        CSR01020
  ALLOC S;                         	/* ALLOCATE SPACE         	*/ CSR01030
  AD = UNSPEC(SP);                 	/* GET ADDRESS OF SPACE   	*/ CSR01040
  ORIG = MOD(AD,PAGESIZE);         	/* SEE WHERE SPACE IS IN PAGE */ CSR01050
  IF ORIG ¬= 0 THEN                	/* IF NOT ON PAGE BOUNDARY	*/ CSR01060
	ORIG = (PAGESIZE-ORIG) / 4;    	/* THEN LOCATE PAGE BOUNDARY  */ CSR01070
  ORIG = ORIG + 1;                                                      CSR01080
                                                                        CSR01090
  DO  I = 1 TO NUM_WIN_ELEM;       	/* PUT SOME DATA INTO WINDOW  */ CSR01100
	S(I+ORIG-1) = 99;              	/* AREA                   	*/ CSR01110
  END;                                                                  CSR01120
                                                                        CSR01130
  CALL                                                                  CSR01140
  CSRVIEW ('BEGIN',                	/* NOW VIEW DATA IN FIRST 	*/ CSR01150
       	OBJECT_ID,              	/* WINDOW                 	*/ CSR01160
       	OFFSET,                                                      CSR01170
       	WINDOW_SIZE,                                                 CSR01180
       	S(ORIG),                                                     CSR01190
       	'RANDOM',                                                    CSR01200
       	'REPLACE',                                                   CSR01210
       	RETURN_CODE,                                                 CSR01220
       	REASON_CODE);                                                CSR01230
                                                                        CSR01240
  DO  I = 1 TO NUM_WIN_ELEM;       	/* CALCULATE VALUE IN 1ST 	*/ CSR01250
	S(I+ORIG-1) = I+1;             	/* WINDOW                 	*/ CSR01260
  END;                                                                  CSR01270
                                                                        CSR01280
  CALL                                                                  CSR01290
  CSRSCOT( OBJECT_ID,              	/* CAPTURE THE VIEW IN 1ST   */  CSR01300
       	OFFSET,                 	/* WINDOW                	*/  CSR01310
       	WINDOW_SIZE,                                                 CSR01320
       	RETURN_CODE,                                                 CSR01330
       	REASON_CODE);                                                CSR01340
                                                                        CSR01350
  CALL                                                                  CSR01360
  CSRVIEW ('END ',                 	/* END THE VIEW IN 1ST WINDOW */ CSR01370
       	OBJECT_ID,                                                   CSR01380
       	OFFSET,                                                      CSR01390
       	WINDOW_SIZE,                                                 CSR01400
       	S(ORIG),                                                     CSR01410
       	'RANDOM',                                                    CSR01420
       	'RETAIN ',                                                   CSR01430
       	RETURN_CODE,                                                 CSR01440
       	REASON_CODE);                                                CSR01450
                                                                        CSR01460
  CALL                                                                  CSR01470
  CSRVIEW ('BEGIN',                	/* NOW VIEW OTHER DATA IN 	*/ CSR01480
       	OBJECT_ID,              	/* 2ND WINDOW             	*/ CSR01490
       	OFFSET+WINDOW_SIZE,                                          CSR01500
       	WINDOW_SIZE,                                                 CSR01510
       	S(ORIG),                                                     CSR01520
       	'RANDOM',                                                    CSR01530
       	'REPLACE',                                                   CSR01540
       	RETURN_CODE,                                                 CSR01550
       	REASON_CODE);                                                CSR01560
                                                                        CSR01570
  DO  I = 1 TO NUM_WIN_ELEM;       	/* CALCULATE NEW VALUE IN 	*/ CSR01580
	S(I+ORIG-1) = I-101;           	/* WINDOW                 	*/ CSR01590
  END;                                                                  CSR01600
                                                                        CSR01610
  CALL                                                                  CSR01620
  CSRSCOT (OBJECT_ID,                                                   CSR01630
       	OFFSET+WINDOW_SIZE,                                          CSR01640
       	WINDOW_SIZE,                                                 CSR01650
       	RETURN_CODE,                                                 CSR01670
       	REASON_CODE);                                                CSR01680
                                                                        CSR01690
  CALL                                                                  CSR01700
  CSRVIEW ('END ',                 	/* END THE CURRENT VIEW IN	*/ CSR01710
       	OBJECT_ID,              	/* WINDOW                 	*/ CSR01720
       	OFFSET+WINDOW_SIZE,                                          CSR01730
       	WINDOW_SIZE,                                                 CSR01740
       	S(ORIG),                                                     CSR01750
       	'RANDOM',                                                    CSR01760
       	'RETAIN ',                                                   CSR01770
       	RETURN_CODE,                                                 CSR01780
       	REASON_CODE);                                                CSR01790
                                                                        CSR01800
  CALL                                                                  CSR01810
  CSRVIEW ('BEGIN',                	/* NOW GO BACK TO THE VIEW IN */ CSR01820
       	OBJECT_ID,              	/* THE 1ST WINDOW         	*/ CSR01830
       	OFFSET,                                                      CSR01840
       	WINDOW_SIZE,                                                 CSR01850
       	S(ORIG),                                                     CSR01860
       	'RANDOM',                                                    CSR01870
       	'REPLACE',                                                   CSR01880
       	RETURN_CODE,                                                 CSR01890
       	REASON_CODE);                                                CSR01900
                                                                        CSR01910
  CALL                                                                  CSR01920
  CSRREFR (OBJECT_ID,              	/* REFRESH THE DATA IN 1ST   */  CSR01930
       	OFFSET,                 	/* WINDOW                	*/  CSR01940
       	WINDOW_SIZE,                                                 CSR01950
       	RETURN_CODE,                                                 CSR01960
       	REASON_CODE);                                                CSR01970
                                                                        CSR01980
  CALL                                                                  CSR01990
  CSRVIEW ('END ',                 	/* END THE VIEW IN 1ST WINDOW */ CSR02000
       	OBJECT_ID,                                                   CSR02010
       	OFFSET,                                                      CSR02020
       	WINDOW_SIZE,                                                 CSR02030
       	S(ORIG),                                                     CSR02040
       	'RANDOM',                                                    CSR02050
       	'RETAIN ',                                                   CSR02060
       	RETURN_CODE,                                                 CSR02070
       	REASON_CODE);                                                CSR02080
                                                                        CSR02090
  CALL                                                                  CSR02100
  CSRIDAC ('END  ',                	/* TERMINATE ACCESS TO THE	*/ CSR02110
       	'TEMPSPACE',            	/* HIPERSPACE OBJECT      	*/ CSR02120
       	'MY FIRST HIPERSPACE ENDS HERE ',                        	CSR02130
       	'YES',                                                       CSR02140
       	'NEW',                                                       CSR02150
       	'UPDATE',                                                    CSR02160
       	WINDOW_SIZE,                                                 CSR02170
       	OBJECT_ID,                                                   CSR02180
       	HIGH_OFFSET,                                                 CSR02190
       	RETURN_CODE,                                                 CSR02200
       	REASON_CODE);                                                CSR02210
                                                                        CSR02220
  FREE S;                                                               CSR02230
 END CRTPLN3;                                                           CSR02260
***********************************************************************
*                                                                     *
*                                                                     *
*  	JCL TO COMPILE AND LINKEDIT PL/I PROGRAM.                  	*
*                                                                     *
*                                                                     *
*                                                                     *
***********************************************************************
//PLIJOB   JOB                                                          00010007
//*                                                                     00041001
//*  PL/I Compile and Linkedit                                          00042001
//*                                                                     00043001
//*  Change all CRTPLNx to CRTPLNy                                  	00044001
//*                                                                     00045001
//GO   	EXEC PLIXCL                                                  00050000
//PLI.SYSIN DD DSN=WINDOW.XAMPLE.LIB(CRTPLN3),DISP=SHR              	00060008
//LKED.SYSLMOD DD DSN=WINDOW.USER.LOAD,UNIT=3380,VOL=SER=VM2TSO,    	00070000
// DISP=SHR                                                             00080000
//LKED.SYSIN DD *                                                       00090000
  LIBRARY  IN(CSRSCOT,CSRSAVE,CSRREFR,CSRSAVE,CSRVIEW,CSRIDAC)      	00100001
  NAME CRTPLN3(R)                                                       00110008
/*                                                                      00120000
//*                                                                     00121001
//* 	SYS1.CSSLIB is source of CSR stubs                          	00130001
//*                                                                     00190000
//LKED.IN 	DD DSN=SYS1.CSSLIB,DISP=SHR                           	00200000
***********************************************************************
*                                                                     *
*                                                                     *
*  	JCL TO EXECUTE.                                                *
*                                                                     *
*                                                                     *
*                                                                     *
***********************************************************************
//PLIRUN   JOB MSGLEVEL=(1,1)                                           00010000
//*                                                                     00011001
//*   EXECUTE A PL/I TESTCASE                                           00012001
//*                                                                     00013001
//GO   	EXEC PGM=CRTPLN3                                             00020000
//STEPLIB  DD  DSN=WINDOW.USER.LOAD,DISP=SHR,                       	00030000
// UNIT=3380,VOL=SER=VM2TSO                                             00040000
//SYSLIB   DD  DSN=CEE.SCEERUN,DISP=SHR                             	00050000
//SYSABEND DD SYSOUT=*                                                  00070000
//SYSLOUT  DD  SYSOUT=*                                                 00080000
//SYSPRINT DD  SYSOUT=*                                                 00090000

На базе этого языка до сих пор работают системы из отрасли финансов, банкинга, страхования. Его также применяют и некоторые правительственные организации.

Только зарегистрированные пользователи могут участвовать в опросе. Войдите, пожалуйста.
Сталкивались ли вы с одним из этих ЯП за последние пять лет?
3.75% Да, причём с одним из них я работаю до сих пор. 22
19.93% Да, приходилось. 117
76.32% Нет, вообще никогда, наверное, и не столкнусь уже. 448
Проголосовали 587 пользователей. Воздержались 53 пользователя.