J(프로그래밍 언어)

J (programming language)
J
J (programming language) icon.png
설계자케네스 E. 아이버슨, 로저 후이
개발자JSoftware
처음 등장한1990년; 32년 전(1990년)
안정된 릴리스
J903 / 2021년 12월 16일, 7개월 전(2021-12-16)[1]
타이핑 분야역학
OS크로스 플랫폼: Windows, Linux, macOS, Android, iOS, Rasberry[2] Pi
면허증.GPLv3
웹 사이트www.jsoftware.com
주요 구현
J
영향을 받다
APL
영향받은
NumPy,[3] SuperCollider[4]

J 프로그래밍 언어는 Kenneth E에 의해 1990년대 초에 개발되었습니다. Iverson과 Roger [5][6]Hui는 주로 APL(Iverson도)을 기반으로 하는 배열 프로그래밍 언어입니다.

APL 특수문자 문제가 반복되지 않도록 J는 기본 ASCII 문자 집합만 사용하며, 닷과 콜론을 굴절[7] 사용하여 디그래프와 유사한 짧은 단어를 형성합니다.이러한 기본(또는 원시) J 단어는 대부분 수학 기호 역할을 하며 점이나 콜론이 기본 문자의 의미를 확장합니다.또, 다른 언어에서는 많은 문자를 페어링 할 필요가 있습니다(예:[] {} "" ``또는<>)는 J에 의해 독립형 단어로 취급되거나 굴절된 경우 복수 문자 단어의 단일 문자 루트로 취급됩니다.

J는 매우 간결한 배열 프로그래밍 언어이며, 특히 행렬 연산을 수행할 때 수학 및 통계 프로그래밍에 가장 적합합니다.또한 극한 프로그래밍[8]네트워크 성능 [9]분석에도 사용되고 있습니다.

John Backus언어 FP FL과 마찬가지로 J는 암묵적인 프로그래밍 기능을 통해 함수 수준의 프로그래밍을 지원합니다.

객체 지향 프로그래밍을 지원하는 대부분의 언어와 달리, J의 유연한 계층적 네임스페이스 스킴(모든 이름이 특정 로케일에 존재하는 경우)은 클래스 기반 및 프로토타입 기반 객체 지향 프로그래밍을 위한 프레임워크로 효과적으로 사용될 수 있습니다.

2011년 3월부터 J는 GNU General Public License 버전 3(GPLv3)[10][11][12]따라 무료 오픈 소스 소프트웨어입니다.협상된 [13]라이센스로 소스를 구입할 수도 있습니다.

J는 포인트 없는 스타일과 기능 구성을 허용합니다.따라서, 그 프로그램은 매우 간결할 수 있고 일부 프로그래머들에 의해 읽기 어렵다고 여겨진다.

J의 "Hello, World!" 프로그램은 다음과 같습니다.

안녕, 세상아! 

이 hello world의 실장은 J의 종래의 용도를 반영하고 있습니다.프로그램이 J 인터프리터 세션에 들어가 식 결과가 표시됩니다.J 스크립트를 스탠드아론 프로그램으로 실행하도록 설정할 수도 있습니다.Unix 시스템에서는 다음과 같이 표시됩니다.

#!/bin/jc 메아리치다 안녕, 세상아! 퇴장 '' 

(현재 j 실장은 다음 중 하나를 설치합니다).jconsole또는 (jconsole은 java에서 사용되므로),ijconsole이것을 /usr/bin 또는 다른 디렉토리(아마도 OSX의 Application 디렉토리)에 인스톨 합니다.따라서 사용자가 해결해야 할 시스템 의존성이 있습니다.)

이전에는 APL이 사용되었습니다./주름을 표시하다+/1 2 3와 동등했다.1+2+3한편, 나눗셈은 수학적 나눗셈 기호로 표현되었다.÷).

ASCII에는 분할 기호 자체가 포함되어 있지 않기 때문에 J는 시각적 근사 또는 주의사항으로 %를 사용하여 분할을 나타냅니다.(이는 J의 토큰의 니모닉 문자와 ASCII 사용에 의해 부과되는 몇 가지 궁지에 대해 설명하고 있습니다).

J 함수의 정의:avg수율 목록의 평균을 계산합니다.

  avg=: +/ % # 
  • +/ 배열 항목의 합계입니다.
  • # 는 배열 내의 항목 수를 카운트합니다.
  • % 합계를 항목 수로 나눕니다.

다음은 함수의 테스트 실행입니다.

  avg 1 2 3 4 2.5 

위에서 avg는 3개의 동사열을 사용하여 정의된다.+/,%,그리고.#)는 포크로 명명되었다.구체적으로는(V0 V1 V2) Ny와 같다(V0(Ny)) V1 (V2(Ny))이는 J의 힘을 보여준다(여기서 V0, V1, V2는 동사, Ny는 명사이다).

의 사용 예avg:

  v=: ?. 20 $100     NB. 랜덤 벡터   v 46 55 79 52 54 39 60 57 60 94 46 78 13 18 51 92 78 60 90 62   avg v 59.2 
  4 avg\ v            크기 4 기간의 NB 이동 평균 58 60 56 51.25 52.5 54 67.75 64.25 69.5 57.75 38.75 40 43.5 59.75 70.25 80 72.5 
  m=: ?. 4 5 $50     NB다. 무작위 행렬   m 46  5 29  2  4 39 10  7 10 44 46 28 13 18  1 42 28 10 40 12 
  avg"1 m             NB다.avg m의 각 계급 1배열(각 줄)에 적용되 17.2 22 21.2 26.4 

J.에 랭크 중요한 개념J에 있는 그것의 중요성의 중요성과 비슷하다.selectSQL로while주식회사.

, J사전 수익률:quicksort 구현.

   sel=: 부사. . 그렇지만 'u #는 경우에는 '        quicksort=: verb을 정의하는     한다면. 1 >: #y 한다. y     또 다른.      (quicksort y < >sel e),(y = e),퀵소트 y > e=.y{~?#y     끝.    ) 

다음은 암묵적인 프로그래밍을 보여주는 퀵소트의 구현입니다.후자는 함수를 함께 구성하며 변수를 명시적으로 참조하지 않습니다.J의 포크 후크에 대한 지원은 이 함수에 적용되는 인수가 컴포넌트 함수에 적용되는 방법에 대한 규칙을 지정합니다.

   퀵소트=: (($:@(<#[), (=#[), $:@(>#[)) ({~ ?@#)) ^: (1<#>) 

J의 정렬은 보통 기본 동사를 사용하여 수행됩니다./:(갱신) 및\:(축소)위의 quicksort와 같은 사용자 정의 정렬은 일반적으로 설명용입니다.

다음 예시는 자기 참조 동사의 사용을 보여줍니다.$:fibonacci 번호를 재귀적으로 계산하려면:

1:`($:@-&2+$:@<:)@.(>&2) 

이 재귀는 동사를 이름으로 참조함으로써도 달성할 수 있지만, 물론 동사의 이름이 다음과 같은 경우에만 가능합니다.

파이보나치=:1:`(파이보나치@-&2+파이보나치@<:)@.(>&2) 

다음 식은 n자리의 pi를 나타내며 J의 확장된 정밀도를 나타냅니다.

  n=: 50                      NB. n을 필요한 자릿수로 설정합니다.   <.@o. 10x^n                 NB. 정밀도 10 ~ N번째 * pi 314159265358979323846264338327950288419716939937510 

동사와 수식어

프로그램 또는 루틴 - 데이터를 입력으로 받아들이고 출력으로 데이터를 생성하는 것을 동사라고 합니다.J에는 사전 정의된 동사 세트가 풍부하며, 이 동사들 모두 여러 데이터 유형에 대해 자동으로 작동합니다. 예를 들어, 동사i. 모든 크기의 어레이 내에서 검색하여 일치하는 항목을 찾습니다.

   3 1 4 1 5 9 i. 3 1  NB. 3과 1의 첫 번째 발생 지수를 구한다. 0 1    3 1 4 1 5 9 i: 3 1  NB. 마지막 3과 1의 지수를 찾습니다. 0 3 

사용자 프로그램의 이름은 기본이 허용되는 모든 위치에서 지정 및 사용할 수 있습니다.

J의 힘은 주로 명사와 동사를 피연산자로 삼고 피연산자를 특정 방식으로 적용하는 기호라는 수식어에서 나온다.예를 들어 / 수식어는 하나의 피연산자(왼쪽의 동사)를 가져와서 그 인수의 각 항목 사이에 그 동사를 적용하는 동사를 생성합니다.+/는 동사이고, '주제의 항목 사이에 + 적용'으로 정의되어 있습니다. 따라서 문장은,

   +/ 1 2 3 4 5 

효과를 낳다

   1 + 2 + 3 + 4 + 5     +/ 1 2 3 4 5 15 

J에는 이러한 수식어가 약 24개 있습니다.모두 임의의 동사, 심지어 사용자가 작성한 동사에도 적용할 수 있으며, 사용자는 자신만의 수식어를 쓸 수 있습니다.수식어는 개별적으로 강력하지만

  • 반복 실행, 즉 실행
  • 조건부 실행, :
  • 규칙적이거나 불규칙한 논의의 하위 집합 실행

일부 수식자는 컴포넌트가 실행되는 순서를 제어하며, 수식자를 임의의 순서로 조합하여 실용적인 프로그래밍에 필요한 무제한의 다양한 연산을 생성할 수 있습니다.

데이터 유형 및 구조

J는 다음 세 가지 간단한 유형을 지원합니다.

  • 숫자
  • 리터럴(문자)
  • 박스판

이 중에서 숫자가 가장 많은 변형을 가지고 있습니다.

J의 숫자 유형 중 하나는 비트입니다.0과 1의 2개비트값이 있습니다.또, 비트를 리스트로 할 수도 있습니다.예를들면, 1 0 1 0 1 1 0 0 는 8비트의 리스트입니다.구문론적으로 J 파서는 그것을 1개의 단어로 취급합니다.(스페이스 문자는 숫자 단어 사이의 단어 형성 문자로 인식됩니다.)임의의 길이의 리스트가 지원됩니다.

또, J는, 이러한 리스트상의 모든 통상의 바이너리 연산을 서포트합니다.를 들면, 및 배타적 또는 회전, 시프트, 비등입니다.예를들면,

1 0 0 1 0 1 0 + . 0 1 0 1 1 1 0 NB . or 1 1 0 1 1 0 0
3. 1 0 1 1 0 1 1 1 1 1 NB. 회전 1 0 0 1 1 1 1 1 0 1

J는 고차 비트 배열도 지원합니다.그것들은 2차원, 3차원 등의 배열로 형성될 수 있다.위의 조작은 이들 어레이에서도 동일하게 양호한 성능을 발휘합니다.

기타 수치 유형으로는 정수(예: 3, 42), 부동소수점(3.14, 8.8e22), 복소수(0j1, 2.5j3e88), 확장 정밀도 정수(12345678901234567890x) 및 (확장 정밀도) 유리분수(1r2, 3r4)가 있습니다.비트와 마찬가지로 이들은 목록 또는 임의 차원 배열로 형성될 수 있습니다.비트와 마찬가지로 배열 내의 모든 번호에 대해 연산이 수행됩니다.

비트 리스트를 정수로 변환할 수 있습니다.#.동사. 정수는 비트의 목록으로 변환할 수 있습니다.#:동사(J를 해석할 때,.(기간) 및:(마이너스)는 단어를 형성하는 문자입니다.공백 문자가 선행되지 않는 한 토큰만 아닙니다).

J는 리터럴(문자) 유형도 지원합니다.예를 들어, 리터럴은 따옴표로 묶습니다.'a'또는'b'. 여러 문자를 따옴표로 묶는 일반적인 규칙을 사용하여 리터럴 목록도 지원됩니다.'abcdefg'일반적으로 개개의 리터럴은 8비트 와이드(ASCII)이지만 J는 다른 리터럴(Unicode)도 지원합니다.숫자 및 부울 연산은 리터럴에서는 지원되지 않지만 (회전 등) 수집 지향 연산이 지원됩니다.

마지막으로 박스형 데이터 타입이 있습니다.일반적으로 데이터는 다음과 같은 방법으로 상자에 저장됩니다.<operation(왼쪽 인수가 없는 경우 왼쪽 인수가 있는 경우 less than operation이 됩니다).이것은 C의 경우와 유사하다.&operation(왼쪽 인수 없음)단, C의 결과는&J의 결과인 참조 의미론을 가지고 있다.<에는 값의 의미가 있습니다.바꿔 말하면<함수가 되고 결과를 낳습니다.포함된 데이터의 구조에 관계없이 결과는 0차원이 됩니다.J프로그래머의 관점에서 보면< 는, 데이터를 박스에 격납해, 일련의 박스로 작업할 수 있습니다(다른 박스와 조합할 수도 있고, 박스의 카피를 더 작성할 수도 있습니다).

<1 0 0 1 0 +---------+ 1 0 0 1 +---+

J에서 제공하는 유일한 수집 유형은 임의 차원 배열입니다.대부분의 알고리즘은 이러한 배열에 대한 연산을 사용하여 매우 간결하게 표현할 수 있습니다.

J의 배열은 예를 들어 목록과 같이 균일한 유형입니다. 1 2 3 에도 불구하고 1 조금.대부분의 경우, 이러한 유형의 문제는 프로그래머에게 투명합니다.특정 전문 작업만 유형의 차이를 드러냅니다.예를 들어 리스트는 1.0 0.0 1.0 0.0 대부분의 작업에서 목록과 동일하게 취급됩니다. 1 0 1 0 .

J는 0이 아닌 값이 인덱스와 함께 저장되는 희박한 숫자 배열도 지원합니다.이는 비교적 소수의 값이 0이 아닌 효율적인 메커니즘입니다.

J는 개체와 [14]클래스도 지원하지만 이러한 개체는 이름이 지정된 방식의 아티팩트이며 데이터 유형이 아닙니다.대신 박스 리터럴을 사용하여 객체(및 클래스)를 참조합니다.J 데이터에는 값 의미론이 있지만 개체 및 클래스에는 참조 [citation needed]의미론이 필요합니다.

값이 아닌 이름과 관련된 다른 의사 타입은 메모리 맵파일입니다.

디버깅

6부터 Collatz 시퀀스 해부

J는 동사 내에서 오류 또는 지정된 위치에 멈추는 일반적인 기능을 가지고 있습니다.그것은 또한 해부라고 불리는 독특한 시각적 디버거를 가지고 있는데, 이것은 단일 J 문장의 실행을 2-D 대화식으로 보여준다.J의 한 문장은 하위 언어에서 전체 서브루틴과 같은 양의 계산을 수행하므로 시각적 표시가 매우 유용합니다.

문서

J의 문서에는 J의 단어가 명사, 동사, 수식어 으로 식별되는 사전이 포함되어 있습니다.주요 단어는 어휘에 나열되며, 각 언어 부분은 마크업을 사용하여 표시됩니다.동사에는 모나디치(오른쪽에만 있는 인수)와 다이애디치(왼쪽과 오른쪽에 있는 인수)의 두 가지 형식이 있습니다.예를 들면, 「」의 경우입니다.-1하이픈은 단수 동사이며, 에서는3-2하이픈은 쌍동사이다.단수 정의는 동사가 원시 동사인지 파생 동사인지에 관계없이 대부분 쌍수 정의와 독립적이다.

제어 구조

J는 다른 절차 언어와 유사한 제어 구조(자세한 내용은 여기에 있음)를 제공합니다.각 카테고리의 주요 제어 단어는 다음과 같습니다.

  • assert.
  • break.
  • continue.
  • for.
  • goto_label.
  • if. else. elseif.
  • return.
  • select. case.
  • throw.
  • try. catch.
  • while. whilst.

「 」를 참조해 주세요.

  • K(프로그래밍 언어) – 또 다른 APL 영향 언어
  • Q: KDB+의 언어와 K와 KSQL의 새로운 통합 버전.

레퍼런스

  1. ^ "J903 release 16 December 2021".
  2. ^ "Jsoftware".
  3. ^ Wes McKinney, Python for Data Analysis와 2012년 미팅
  4. ^ SuperCollider 문서, 이진 연산자용 부사
  5. ^ APL의 개인적 견해, 1991년 K.E.의 에세이.Iverson(아카이브 링크)
  6. ^ Roger Hui의 J역사의 개요(2002년 3월 19일)
  7. ^ J NuVoc 워드
  8. ^ Bussell, Brian; Taylor, Stephen (2006), "Software Development as a Collaborative Writing Project", Extreme programming and agile processes in software engineering, Oulu, Finland: Springer, pp. 21–31, ISBN 978-3-540-35094-1 {{citation}}:누락 또는 비어 있음 title=(도움말)
  9. ^ Holt, Alan (2007), Network Performance Analysis: Using the J Programming Language, Springer, ISBN 978-1-84628-822-7
  10. ^ Jsoftware 소스 다운로드 페이지
  11. ^ Eric Iverson (1 March 2011). "J Source GPL". J programming mailing list.
  12. ^ GitHub에서 openj를 열다
  13. ^ Jsoftware의 소싱 정책
  14. ^ 25장: 객체 지향 프로그래밍

외부 링크

  • 공식 웹사이트 – JSoftware, J의 크리에이터
  • jsource on GitHub – 소스 저장소
  • J Wiki
  • 학습 J – Roger Stokes의 J 프로그래밍 언어 소개