Application Processing Language

BACKGWA (토론 | 기여)님의 2022년 9월 7일 (수) 20:09 판
파룸의달.png+
파룸  마테소인 뤼미에르 공화국 라네쥬교  피네트어

빠른 것을 더 빠르게 정확한 것을 더욱 정확하게

 
— 아프엘의 1법칙 중 일부

개요

해당 문서에선 Application Processing Language를 줄여 '아프엘'이라고 부르겠다. 아프엘은 이전 뤼미에르 공화국파룸RIMAYA에서 만들어진 프로그래밍 언어이다. 참고로 대부분의 함수나 예악어는 영어이다.

아프엘 명칭

아프엘은 전체 언어 이름의 이니셜 'APL'을 뤼미에르어의 발음을 기반으로 부르는 명칭이다. 참고로 뤼미에르어로 해석하면 AivPixto`Lan이다 실제론 프로그래밍 언어가 가지고있는 정식 명칭은 없고 Application Processing Language이라고 불리던걸 여러 프로그래머들이 '아프엘'이라고 줄여부르는 것이다.

장점

다른 프로그래밍 언어에 비해서 빠르고 엄청 가볍다. 프로그램의 규모가 커지더라도 빠른 처리를 보장한다. 그리고 언어가 가볍기 때문에 적은 리소스를 가지고 있는 하드웨어에선 프로그램 자체가 무겁더라도 대부분의 경우 원할한 작동이 가능하다. 이렇게 빠른 처리가 가능하고 가볍다보니 대부분의 내장 프로그램들은 아프엘로 제작된다. 이러한 것이 가능한 이유는 2진법 개념을 버리고 4진법 개념을 도입했기 때문이다.

단점

4진법을 지원하는 하드웨어이어야 한다. 물론 2진수를 사용하는 하드웨어 시스템에서도 사용은 가능하지만, 무척 빠른 성능을 보장하진 않는다. 게다가 2진법 하드웨어에서 돌아가게 만들려면 개발자가 프로그램을 '유니버셜 가이드라인'에 맞게 코드를 작성해야한다.. 또한, 언어도 되게 어려운데 디버거까지 되게 불친절하다. 진짜 그냥 버그가 있다면, 알려주는 정보라곤 버그가 난 라인만 알려준다. 사실 이 경우는 아프엘의 구조적 문제이기도하다.. 또한, 아프엘은 시스템 내에서 알아서 처리하는 것이 극히 적다. 메모리 관리 등 여러 요소들은 개발자가 알아서 해야한다.

유니버셜 가이드라인

전처리기에 다음과 같이 적어야한다. 다만, 이로인해 일반 4진법 하드웨어에서의 약간 성능 저하가 발생할 수 있으며 2진법 환경에서 완벽한 성능을 보장하지 못한다.

  • 유니버셜 진수
BAY::TYPE > COUNT > 2 / 4 > BAY
  • 유니버셜 비트
BIT::TYPE > GET::BAY::TYPE > IF { 2 } | 32 / 64 > ELSE { 4 } | FREE > BIT

아프엘의 법칙

  • 제1법칙 : 아프엘을 현재의 어떠한 것보다 빠른 것을 더 빠르게 정확한 것을 더욱 정확하게 만들어줄 것이다.
  • 제2법칙 : 아프엘은 어떠한 프로그램을 만들어도 신경쓰지 않는다. 아프엘은 프로그래머를 믿는다.[3]
  • 제3법칙 : 아프엘은 혼자선 어설프고 부족하다.[4] 그래서 부모님[5] 필요하다.


다이렉트 엑세스

아프엘은 변수를 제작하지도 않고도 다이렉트로 메모리에 값을 저장하고 접근할 수 있다. 변수의 타입은 아프엘에서 스스로 정한다. [6] 메모리의 값을 저장하기 위해선 무조건 매계 전달자를 사용해서 저장해야한다. 최대 저장 할 수 있는 값은 0 ~ 31[7]이다

  • 올바른 예시
asked.number("값을 이 곳에 입력해주세요. : ") >> mem.sav[0]
mem.sav[1] << asked.number("값을 이 곳에 입력해주세요. : ")
  • 틀린 예시
mem.sav[0] = asked.number("값을 이 곳에 입력해주세요. : ")
mem.sav[1] >> asked.number("값을 이 곳에 입력해주세요. : ")

메모리에서 값을 가져올 땐 일반 변수에서 가져오듯이 가져오면 된다.

아프엘 v2

아프엘의 첫 공식 업데이트이다. 기존에 매우 시인성이 떨어졌던 매계 전달자[8]를 대폭 변경하였다.

예시

아프엘 v1

  • Hello, World! 출력
BAY::TYPE > 4 > BAY

program start >> none <<
{

    out.string >> "Hello, World!" <<

}
  • 변수 생성해서 두 값을 입력받아서 더하기
BAY::TYPE > 4 > BAY

program start >> none <<
{

    A = asked.number >> "첫 번째 값을 입력하세요: " <<
    B = asked.number >> "두 번째 값을 입력하세요: " <<
    C = A + B
    out.freetype >> "결과 값은 : {C}입니다." <<
    
}
  • 변수 생성 없이 두 값을 입력받아서 더하기
BAY::TYPE > 4 > BAY

program start >> none <<
{
    
    asked.number >> "첫 번째 값을 입력하세요: " >> mem.sav >> 0 << <<
    asked.number >> "두 번째 값을 입력하세요: " >> mem.sav >> 1 << <<
    mem.load >> 0 << + mem.load >> 1 << take.value >> mem.sav >> 2 <<
    out.freetype >> "결과 값은 : {mem.load >> 2 <<}입니다." <<
    
}

아프엘 v2

  • Hello, World! 출력
BAY::TYPE > 4 > BAY

program start(none)
{

    out.string("Hello, World!")

}
  • 변수 생성해서 두 값을 입력받아서 더하기
BAY::TYPE > 4 > BAY

program start(none)
{

    A = asked.number("첫 번째 값을 입력하세요: ")
    B = asked.number("두 번째 값을 입력하세요: ")
    C = A + B
    out.freetype("결과 값은 : {C}입니다.")
    
}
  • 변수 생성 없이 두 값을 입력받아서 더하기
BAY::TYPE > 4 > BAY

program start(none)
{
    
    asked.number("첫 번째 값을 입력하세요: ") >> mem.sav[0]
    asked.number("두 번째 값을 입력하세요: ") >> mem.sav[1]
    mem.load[0] + mem.load[1] >> mem.sav[2]
    out.freetype("결과 값은 : {mem.load[2]}입니다.")
    
}

각주

  1. 2024년 6월 26일 21시 28분 28초 기준. 미디어위키 표현식의 한계에 의해서 이 값은 정확하게 나타나기 힘들다. 정확한 값을 얻기 위해서는 사트/표준#Python 구현에서 설명하는 방법을 통하는 것이 바람직하다.
  2. 디스코드 서버에는 차단된 사람이 아니라면 누구나 들어올 수 있습니다.
  3. 아프엘은 구조적으로 컴파일만 되면 뭐든지 OK!라는 마인드다..
  4. 이는 차라리 어딘가 나사빠진 메모리 관리 적용할 바에 아예 메모리 관리를 없애서 아예 어설프게 만든 것에 대한 의미다.
  5. 여기서 칭하는 부모님은 프로그래머를 말한다. 그래서, 프로그래머가 직접 메모리 관리를 해줘야한다. 다행인건 메모리 관리 함수가 있긴하다..
  6. 대부분 4형식 [int, float, string, TYPE+Array]
  7. 총 32개
  8. 아프엘에선 >> 매개 << | >> 매개 >> 와 같이 사용하는 것을 매개 전달자라고 한다.