qingfro9님의 블로그 입니다.

에이다(ADA) 본문

개발언어

에이다(ADA)

qingfro9 2019. 7. 31. 00:00

음 미리알림에 키워드 등록하다가 "ADA 컴파일러 공부"라고 적어둔게 있어서 좀 간단히 알아보았다.

 

에이다는 뭐냐면 이거다.

Ada[에이다]는 파스칼과 다소 비슷한 프로그래밍 언어로서, 경쟁을 통해 미국 국방부 표준으로 선정되었다 (이 이름은 기계식 해석엔진 내에서 프로그램들이 어떻게 동작하는지를 이해한 찰스 바베지를 돕던 Augusta Ada Byron을 위해 지어졌다. 그녀는 종종 세계 최초의 컴퓨터 프로그래머라고 간주되고 있다). Ada는 원래 실시간 장착 시스템을 위해 의도된 것이다.

Ada는 지지자들은, Ada가 에러가 생기기 쉬운 표현형식을 피하는 프로그래밍 언어이며, 상대적으로 빠르게 구현할 수 있고, 재사용이나 팀 협조를 촉진하며, 다른 프로그래머들이 비교적 쉽게 이해할 수 있다고 주장한다. 가장 최신 버전인 Ada 95는 이전의 버전에 비해 외관상 현격한 개선이 있었다. 컴퓨터 전문가들 사이에 Ada는 예외처리와 프로세스간 통신 기능이 형편없는 언어로서 정평이 있다. 그러나, 전문가들이 아직도 그렇게 느끼고 있는지는 확실치 않다. Ada 홈페이지에는 "최초의 Ada 설계안은 언어설계 경쟁에서 우승자였다. 우승팀은 Jean Ichbiah가 대표를 맡았었다. Ada 95는 Tucker Taft가 이끄는 작은 팀에 의해 개발되었다. 두 가지 경우 모두에서, 설계자들이 공공의 비평에 답변하는 기간을 경험하였다."라고 밝히고 있다.

Ada 95는 객체지향 설계 방법론과 함께 사용될 수 있으며, 원시프로그램은 Ada 95 컴파일러에 의해 자바 클래스로 컴파일 될 수 있다. 이러한 클래스들은 자바 가상머신 상에서 자바 애플릿이나 응용프로그램처럼 실행될 수 있다. 1983년에 ANSI에 의해, 1987년에는 ISO에 의해 처음 표준화되었으며, 최신의 표준은 ANSI/ISO/IEC-8652:1995 Ada 95이다. 

ref) http://www.terms.co.kr/Ada.htm

요약
- 오래된 언어
- 객체지향
- 지금은 안쓰는 듯

 

 

아래 블로그를 보면, ADA는 시그윈(Cygwin)을 설치하면 컴파일러를 쉽게 사용할 수 있는 것으로 보이며, 간단한 예제코드가 있어서 아래 적어봤다.

 

//"Hello, Ada?" 코드

With Ada.Text_IO;

procedure Hello is
begin
  Ada.Text_IO.Put_Line("Hello, Ada?");
end Hello;


//컴파일 명령어
$ gnatmake Hello.ada

컴파일하게 되면 exe 파일이 생성되는 것으로 보인다. 흠.? 구조가 궁금하긴 하다.

아래 블로그에서 추천해주는 ADA95 튜토리얼 이 잘 작성되어 있는거 같으니, 공부할거면 이거 보고 하면 좋을거 같다.

 

Ada 컴파일러 사용법

윈도우에서 Ada 컴파일러를 사용하는 가장 간편한 방법은 Cygwin(http://cygwin.org/)을 설치하는 것이다. Cygwin 설치 과정에서 패키지를 선택할 수 있는데, 여기서 Devel 부류(category)의 gcc-ada를 선택하면..

woogyun.tistory.com

오래된 언어여서..뭐 쓰일까?

 

구조 궁금해서 컴파일 할려는데,gnatmake가 설치가 안되있어서, ada compiler를 검색하다가 AdaCore라는 사이트에서 받을 수 있는 것을 확인.!

 

https://www.adacore.com/download

 

Downloads - Adacore

Download GNAT Community Edition For free software developers, hobbyists, and students.

www.adacore.com

380MB...

 

 

아....잠깐.. 뭔가 커진다 일이.. 일단 VM에다가 설치해서 해바야겠다.

 

 

 

무슨문제인지 모르겠지만;; 잘 안되지만 가운대 버튼이 NEXT 겠찌해서 그냥 무조건 가운데 누르기(위에 보면 Installation Folder가 써있는걸 볼 수 있고, 이거 보면, 설치 준비 다됨.! 이라고 영어 나오면 한번 더 누르면 설치됨..! / 64bit win10에서는 잘되네)

 

 

아..64bit에서 해야하는구나.!(다행이도 전에 게임분석하면서 윈10 64bit가 있네)

 

GPS가 설치되어서, 뭔가 했는데 GNAT Programming Studio의 약어였다.  목적이 컴파일이니 컴파일 하고 파일만 업로드 하고 끝내자.

 

컴파일이 잘안되서 검색했는데, "C:\GNAT\2019\bin"에 gnatmake.exe 파일이 있길래 사용해봤다.

 

대강보니 resource data에 아래 처럼 ada관련 문자열들이 존재하는게 보이는구만!  나중에 보면 의심하고 그때 분석하는법 알아봐야징 오늘은 이만..

 

아래 첨부했으니 궁금한 분은 사용하세요.

 

wikipedia: https://ko.wikipedia.org/wiki/%EC%97%90%EC%9D%B4%EB%8B%A4_(%ED%94%84%EB%A1%9C%EA%B7%B8%EB%9E%98%EB%B0%8D_%EC%96%B8%EC%96%B4)

 

 

 

 

 

 

 

기타

 

hello.exe
1.10MB
gnatmake.exe
4.49MB

 

gnatmake help 결과

Usage: gnatmake  opts  name  {[-cargs opts] [-bargs opts] [-largs opts] [-margs opts]}

  name is one or more file name from which you can omit the .adb or .ads suffix

gnatmake switches:
  --version   Display version and exit
  --help      Display usage and exit

  -a       Consider all files, even readonly ali files
  -b       Bind only
  -B       Build, bind and link full project
  -c       Compile only
  -C       Cache source mappings: invoke compiler with temp mapping file
  -C=mapp  Cache source mappings: invoke compiler with mapping file mapp
  -d       Display compilation progress
  -D dir   Specify dir as the object directory
  -eI      Index of unit in multi-unit source file
  -eL      Follow symbolic links when processing project files
  -eS      Echo commands to stdout instead of stderr
  -f       Force recompilations of non predefined units
  -F       Full project path name in brief error messages
  -i       In place. Replace existing ali file, or put it with source
  -jnum    Use nnn processes to compile
  -k       Keep going after compilation errors
  -l       Link only
  -m       Minimal recompilation
  -M       List object file dependences for Makefile
  -n       Check objects up to date, output next file to compile if not
  -o name  Choose an alternate executable name
  -p       Create missing obj, lib and exec dirs
  -Pproj   Use GNAT Project File proj
  -q       Be quiet/terse
  -R       Do not use a run_path_option when linking
  -s       Recompile if compiler switches have changed
  -u       Unique compilation, only compile the given files
  -U       Unique compilation for all sources of all projects
  -v       Display reasons for all (re)compilations
  -vl      Verbose output (low verbosity)
  -vm      Verbose output (medium verbosity)
  -vh      Equivalent to -v (high verbosity)
  -vPx     Specify verbosity when parsing GNAT Project Files
  -we      Treat all warnings as errors
  -wn      Normal warning mode (cancels -we/-ws)
  -ws      Suppress all warnings
  -x       Allow compilation of needed units external to the projects
  -Xnm=val Specify an external reference for GNAT Project Files
  -z       No main subprogram (zero main)

  --create-map-file   Create map file mainprog.map
  --create-map-file=mapfile
                      Create map file mapfile
  --keep-temp-files   Keep temporary files
  --GCC=command       Use this gcc command
  --GNATBIND=command  Use this gnatbind command
  --GNATLINK=command  Use this gnatlink command

Project, Source and Library search path switches:
  -aPdir    Add directory dir to project search path
  -aLdir    Skip missing library sources if ali in dir
  -Adir     like -aLdir -aIdir
  -aOdir    Specify library/object files search path
  -aIdir    Specify source files search path
  -Idir     Like -aIdir -aOdir
  -I-       Don't look for sources & library files in the default directory
  -Ldir     Look for program libraries also in dir
  -nostdinc Don't look for sources in the system default directory
  -nostdlib Don't look for library files in the system default directory
  --RTS=dir specify the default source and object search path
  --subdirs=dir real obj/lib/exec dirs are subdirs
  --source-info=file specify a source info file
  --unchecked-shared-lib-imports
            Allow shared libraries to import static libraries

To pass an arbitrary switch to the Compiler, Binder or Linker:
  -cargs opts   opts are passed to the compiler
  -bargs opts   opts are passed to the binder
  -largs opts   opts are passed to the linker
  -margs opts   opts are passed to gnatmake

Compiler switches (passed to the compiler by gnatmake):

  -g            Generate debugging information
  -Idir         Specify source files search path
  -I-           Do not look for sources in current directory
  -O[0123]      Control the optimization level

  -gnata    Assertions enabled. Pragma Assert/Debug to be activated
  -gnatA    Avoid processing gnat.adc, if present file will be ignored
  -gnatb    Generate brief messages to stderr even if verbose mode set
  -gnatB    Assume no bad (invalid) values except in 'Valid attribute
  -gnatc    Check syntax and semantics only (no code generation)
  -gnatC    Generate CodePeer intermediate format (no code generation)
  -gnatd?   Compiler debug option ? ([.]a-z,A-Z,0-9), see debug.adb
  -gnatD    Debug expanded generated code (max line length = 72)
  -gnatDnn  Debug expanded generated code (max line length = nn)
  -gnateA   Aliasing checks on subprogram parameters
  -gnatec=? Specify configuration pragmas file, e.g. -gnatec=/x/f.adc
  -gnateC   Generate CodePeer messages (ignored without -gnatcC)
  -gnated   Disable synchronization of atomic variables
  -gnateD?  Define or redefine preprocessing symbol, e.g. -gnateDsym=val
  -gnateE   Generate extra information in exception messages
  -gnatef   Full source path in brief error messages
  -gnateF   Check overflow on predefined Float types
  -gnateG   Generate preprocessed source
  -gnateinn Set maximum number of instantiations to nn
  -gnateInn Index in multi-unit source, e.g. -gnateI2
  -gnatel   Turn on info messages on generated Elaborate[_All] pragmas
  -gnateL   Turn off info messages on generated Elaborate[_All] pragmas
  -gnatem=? Specify mapping file, e.g. -gnatem=mapping
  -gnatep=? Specify preprocessing data file, e.g. -gnatep=prep.data
  -gnateP   Pure/Prelaborate errors generate warnings rather than errors
  -gnateS   Generate SCO (Source Coverage Obligation) information
  -gnatet=? Write target dependent information file ?, e.g. gnatet=tdf
  -gnateT=? Read target dependent information file ?, e.g. gnateT=tdf
  -gnateu   Ignore unrecognized style/validity/warning switches
  -gnateV   Validity checks on subprogram parameters
  -gnateY   Ignore all Style_Checks pragmas in source
  -gnatE    Dynamic elaboration checking mode enabled
  -gnatf    Full errors. Verbose details, all undefined references
  -gnatF    Force all import/export external names to all uppercase
  -gnatg    GNAT implementation mode (used for compiling GNAT units)
  -gnatG    Output generated expanded code (max line length = 72)
  -gnatGnn  Output generated expanded code (max line length = nn)
  -gnath    Output this usage (help) information
  -gnatH    Legacy elaboration checking mode enabled
  -gnati?   Identifier char set (?=1/2/3/4/5/8/9/p/f/n/w)
  -gnatI    Ignore all representation clauses
  -gnatjnn  Format error and warning messages to fit nn character lines
  -gnatJ    Relaxed elaboration checking mode enabled
  -gnatk    Limit file names to nn characters (k = krunch)
  -gnatl    Output full source listing with embedded error messages
  -gnatl=f  Output full source listing to specified file
  -gnatL    List corresponding source text in -gnatG or -gnatD output
  -gnatmnn  Limit number of detected errors/warnings to nn (1-999999)
  -gnatn[?] Enable pragma Inline across units (?=1/2 for moderate/full)
  -gnato0   Disable overflow checking
  -gnato    Enable overflow checking in STRICT (-gnato1) mode (default)
  -gnato?   Enable overflow checks in STRICT/MINIMIZED/ELIMINATED (1/2/3) mode
  -gnato??  Set mode for general/assertion expressions separately
  -gnatp    Suppress all checks
  -gnatP    Generate periodic calls to System.Polling.Poll
  -gnatq    Don't quit, try semantics, even if parse errors
  -gnatQ    Don't quit, write ali/tree file even if compile errors
  -gnatr    Treat pragma Restrictions as Restriction_Warnings
  -gnatR?   List rep info (?=0/1/2/3/4/e/m for none/types/all/sym/cg/ext/mech)
  -gnatR?j  List rep info in the JSON data interchange format
  -gnatR?s  List rep info to file.rep instead of standard output
  -gnats    Syntax check only
  -gnatS    Print listing of package Standard
  -gnatt    Tree output file to be generated
  -gnatTnn  All compiler tables start at nn times usual starting size
  -gnatu    List units for this compilation
  -gnatU    Enable unique tag for error messages
  -gnatv    Verbose mode. Full error output with source lines to stdout
  -gnatVxx  Enable selected validity checking mode, xx = list of parameters:
        a    turn on all validity checking options
        c    turn on checking for copies
        C    turn off checking for copies
        d    turn on default (RM) checking
        D    turn off default (RM) checking
        e    turn on checking for elementary components
        E    turn off checking for elementary components
        f    turn on checking for floating-point
        F    turn off checking for floating-point
        i    turn on checking for in params
        I    turn off checking for in params
        m    turn on checking for in out params
        M    turn off checking for in out params
        n    turn off all validity checks (including RM)
        o    turn on checking for operators/attributes
        O    turn off checking for operators/attributes
        p    turn on checking for parameters
        P    turn off checking for parameters
        r    turn on checking for returns
        R    turn off checking for returns
        s    turn on checking for subscripts
        S    turn off checking for subscripts
        t    turn on checking for tests
        T    turn off checking for tests
  -gnatwxx  Enable selected warning modes, xx = list of parameters:
        *    indicates default setting
        +    indicates warning flag included in -gnatwa
        a    turn on all info/warnings marked below with +
        A    turn off all optional info/warnings
        .a*+ turn on warnings for failing assertion
        .A   turn off warnings for failing assertion
        _a*+ turn on warnings for anonymous allocators
        _A   turn off warnings for anonymous allocators
        b+   turn on warnings for bad fixed value (not multiple of small)
        B*   turn off warnings for bad fixed value (not multiple of small)
        .b*+ turn on warnings for biased representation
        .B   turn off warnings for biased representation
        c+   turn on warnings for constant conditional
        C*   turn off warnings for constant conditional
        .c+  turn on warnings for unrepped components
        .C*  turn off warnings for unrepped components
        d    turn on warnings for implicit dereference
        D*   turn off warnings for implicit dereference
        .d   turn on tagging of warnings with -gnatw switch
        .D*  turn off tagging of warnings with -gnatw switch
        e    treat all warnings (but not info) as errors
        .e   turn on every optional info/warning (no exceptions)
        E    treat all run-time warnings as errors
        f+   turn on warnings for unreferenced formal
        F*   turn off warnings for unreferenced formal
        .f   turn on warnings for suspicious Subp'Access
        .F*  turn off warnings for suspicious Subp'Access
        g*+  turn on warnings for unrecognized pragma
        G    turn off warnings for unrecognized pragma
        .g   turn on GNAT warnings
        h    turn on warnings for hiding declarations
        H*   turn off warnings for hiding declarations
        .h   turn on warnings for holes in records
        .H*  turn off warnings for holes in records
        i*+  turn on warnings for implementation unit
        I    turn off warnings for implementation unit
        .i*+ turn on warnings for overlapping actuals
        .I   turn off warnings for overlapping actuals
        j+   turn on warnings for obsolescent (annex J) feature
        J*   turn off warnings for obsolescent (annex J) feature
        .j+  turn on warnings for late dispatching primitives
        .J*  turn off warnings for late dispatching primitives
        k+   turn on warnings on constant variable
        K*   turn off warnings on constant variable
        .k   turn on warnings for standard redefinition
        .K*  turn off warnings for standard redefinition
        l    turn on warnings for elaboration problems
        L*   turn off warnings for elaboration problems
        .l   turn on info messages for inherited aspects
        .L*  turn off info messages for inherited aspects
        m+   turn on warnings for variable assigned but not read
        M*   turn off warnings for variable assigned but not read
        .m*+ turn on warnings for suspicious modulus value
        .M   turn off warnings for suspicious modulus value
        n*   normal warning mode (cancels -gnatws/-gnatwe)
        .n   turn on info messages for atomic synchronization
        .N*  turn off info messages for atomic synchronization
        o*   turn on warnings for address clause overlay
        O    turn off warnings for address clause overlay
        .o   turn on warnings for out parameters assigned but not read
        .O*  turn off warnings for out parameters assigned but not read
        p+   turn on warnings for ineffective pragma Inline in frontend
        P*   turn off warnings for ineffective pragma Inline in frontend
        .p+  turn on warnings for suspicious parameter order
        .P*  turn off warnings for suspicious parameter order
        q*+  turn on warnings for questionable missing parenthesis
        Q    turn off warnings for questionable missing parenthesis
        .q+  turn on warnings for questionable layout of record types
        .Q*  turn off warnings for questionable layout of record types
        r+   turn on warnings for redundant construct
        R*   turn off warnings for redundant construct
        .r+  turn on warnings for object renaming function
        .R*  turn off warnings for object renaming function
        s    suppress all info/warnings
        .s   turn on warnings for overridden size clause
        .S*  turn off warnings for overridden size clause
        t    turn on warnings for tracking deleted code
        T*   turn off warnings for tracking deleted code
        .t*+ turn on warnings for suspicious contract
        .T   turn off warnings for suspicious contract
        u+   turn on warnings for unused entity
        U*   turn off warnings for unused entity
        .u   turn on warnings for unordered enumeration
        .U*  turn off warnings for unordered enumeration
        v*+  turn on warnings for unassigned variable
        V    turn off warnings for unassigned variable
        .v*+ turn on info messages for reverse bit order
        .V   turn off info messages for reverse bit order
        w*+  turn on warnings for wrong low bound assumption
        W    turn off warnings for wrong low bound assumption
        .w   turn on warnings on pragma Warnings Off
        .W*  turn off warnings on pragma Warnings Off
        x*+  turn on warnings for export/import
        X    turn off warnings for export/import
        .x+  turn on warnings for non-local exception
        .X*  turn off warnings for non-local exception
        y*+  turn on warnings for Ada compatibility issues
        Y    turn off warnings for Ada compatibility issues
        .y   turn on info messages for why pkg body needed
        .Y*  turn off info messages for why pkg body needed
        z*+  turn on warnings for suspicious unchecked conversion
        Z    turn off warnings for suspicious unchecked conversion
        .z*+ turn on warnings for record size not a multiple of alignment
        .Z   turn off warnings for record size not a multiple of alignment
  -gnatW?   Wide character encoding method (?=h/u/s/e/8/b)
  -gnatx    Suppress output of cross-reference information
  -gnatX    Language extensions permitted
  -gnaty    Enable default style checks (same as -gnaty3abcefhiklmnprst)
  -gnatyxx  Enable selected style checks xx = list of parameters:
        1-9  check indentation
        a    check attribute casing
        A    check array attribute indexes
        b    check no blanks at end of lines
        B    check no use of AND/OR for boolean expressions
        c    check comment format (two spaces)
        C    check comment format (one space)
        d    check no DOS line terminators
        e    check end/exit labels present
        f    check no form feeds/vertical tabs in source
        g    check standard GNAT style rules, same as ydISux
        h    check no horizontal tabs in source
        i    check if-then layout
        I    check mode in
        k    check casing rules for keywords
        l    check reference manual layout
        Lnn  check max nest level < nn
        m    check line length <= 79 characters
        Mnn  check line length <= nn characters
        n    check casing of package Standard identifiers
        N    turn off all checks
        o    check subprogram bodies in alphabetical order
        O    check overriding indicators
        p    check pragma casing
        r    check casing for identifier references
        s    check separate subprogram specs present
        S    check separate lines after THEN or ELSE
        t    check token separation rules
        u    check no unnecessary blank lines
        x    check extra parentheses around conditionals
        y    turn on default style checks
        -    subtract (turn off) subsequent checks
        +    add (turn on) subsequent checks
  -gnatyN   Cancel all previously set style checks
  -gnatzc   Distribution stub generation for caller stubs
  -gnatzr   Distribution stub generation for receiver stubs
  -gnat2012 Ada 2012 mode (default)
  -gnat-p   Cancel effect of previous -gnatp switch

Report bugs to report@adacore.com

 

Comments