اکشن!

**اکشن!** (Action!) یک زبان برنامه‌نویسی، با ویرایشگر، اشکال زدا و کامپایلر ۶۵۰۲ مجتمع است که برای ریزرایانه‌های خانواده آماری ۸ بیتی طراحی شده‌است. ACTION توسط clinton parker ساخته و توسط optimized systems software در سال ۱۹۸۳ روی کارتریج عرضه شد و گرامر ان شبیه به گرامر Algol۶۸ است.
Action به خاطر کارایی بالا یش که امکان نوشتن بازی‌ها و هوهای گرافیکی را در یک زبان سطح بالا بدون استفاده از کدهای نوشته شده توسط انسان زبان اسمبلی را می‌دهد، قابل توجه است. ساختارهای زبان ACTION به گونه‌ای طراحی شده بودند که با شفافیت ۶۵۰۲ کد عملیات را نگاشت کنند .
یک کتابخانه توسعه به عنوان یک محصول جداگانه با نام ACTION TOOLKIT در دسترس بود .
Action!برای توسعه حداقل دو محصول تجاری استفاده شد:
مجموعه بهره‌وری Homepak و برنامه اجرای بازی‌های رایانه‌ای. این زبان هرگز به سیستم‌های دیگر منتقل نشد .
در سال ۲۰۰۷ این زبان الهام بخش Effectus یک کامپایلر متقابل که اکنون روی پنجره‌هایی که هدفشان آتار ی ۸ بیتی است اجرا می‌شود، شد. Effectus گرامر Action را شبیه‌سازی می‌کند و به گونه ساخت یافته که تا حد ممکن با ACTION سازگار باشد .

## انواع دادهای
ACTION : سه نوع داده ای پایه‌ای دارد که همه آن‌ها عددی هستند .
### Byte
به‌طور داخلی معادل یک عدد صحیح بدون علامت ۸ بیتی با بازه مقداری ۰ تا ۲۵۵ است. کلمه کلیدی char نیز می‌تواند برای توصیف متغیرهای byte استفاده شود .

 BYTE age=[۲۱]      ; declare age and initialize it to the value 21
 BYTE leftMargin=۸۲ ; declare leftMargin and store it at address 82

### CARDinal
معادل با عدد صحیح بدون علامت ۱۶ بیتی است با بازه مقداری ۰ تا ۶۵٫۵۳۵

 CARD population=$۶۰۰             ; declare population and store it at address 1536 and 1537
 CARD prevYear, curYear, nextYear ; use commas to declare multiple variables

### Integer
معادل با عدد صحیح دارای علامت ۱۶ بیتی با بازه مقداری ۳۲۷۶۸ – تا ۳۲۷۶۷ + می‌باشد .

 INT veryCold = [-۱۰]
 INT profitsQ1, profitsQ2,  ; declaring multiple variables can 
     profitsQ3, profitsQ۴   ; span across multiple lines

ACTION همچنین ارایه‌ها، اشاره گر‌ها و انواع داده‌ای تعریف شده توسط کاربر را دارد .اما هیچ پشتیبانی از ممیز شناور ارائه نشده است.
یک مثال از یک نوع تعریفی کاربر :

 TYPE CORD=[CARD x,y]
 CORD point
 point.x=۴۲
 point.y=۲۳

## کلمات کلیدی
کلمه کلیدی هر کلمه یا نمادی است که کامپایلر ACTION به عنوان یک چیز خاص می‌شناسد . که می‌تواند یک عملگر، یک نام نوع داده‌ای یک عبارت یا یک رهنمود کامپایلر باشد .

 AND       FI         OR         UNTIL    =     (
 ARRAY     FOR        POINTER    WHILE        )
 BYTE      FUNC       PROC       XOR      #     .
 CARD      IF         RETURN     +  >     [
 CHAR      INCLUDE    RSH        -  >=    ]
 DEFINE    INT        SET        *        <"
 DO        LSH        STEP       /        <=    '
 ELSE      MOD        THEN       &        $     ;
 ELSEIF    MODULE     TO         %        ^
 EXIT      OD         TYPE       !        @

## برنامه‌نویسی
برنامه‌نویسی در ACTION نیازمند کار با ویرایشگر و کامپایل یا اشکال زدایی روی نماشگر است. ویرایشگر شامل یک نمایش تمام صفحه با قابلیت پیمایش با امکان نمایش دو پنجره است. ویرایشگر همچنین شامل عملگرهای بلاکی و عمومی جستجو و جایگزینی می‌شود . کامپایل نمایشگر، هر حالتی که اجازه کامپایل و اشکال زدایی را می‌دهد انجام می‌شود .
ACTION یک کامپایلر یک راهه است که کل کد برنامه در حافظه یا در یک فایل را یکجا کامپایل می‌کند که یک سرعت عالی را ارائه می‌دهد ولی میزان کد قابل کامپایل را محدود می‌کند .
متغیرهای محلی دارای ادرس‌ها ی ثابت در حافظه هستند به جای آن که در پشته قرار بگیرند . این کار امکان ایجاد کدهای بسته در ۶۵۰۲ را می‌دهد و استفاده از بازگشتی را تحت تأثیر قرار می‌دهد .
## کد مثال
کد زیر یک مثال برای الگوریتم برای یافتن اعداد اول است که در Action نوشته شده‌است برای افزایش کارایی این پردازش گر همرمان گرافیکی ANTCC را غیرفعال می‌کند که باعث جلوگیری از دزدیده شدن سیکل‌های cpu توسط موتور dma آن در زمان محاسبه می‌شود.
  BYTE RTCLOK=۲۰, ; addr of sys timer
      SDMCTL=559 ; DMA control

 BYTE ARRAY FLAGS(8190)

 CARD COUNT,I,K,PRIME,TIME

 PROC SIEVE()

   SDMCTL=۰ ; shut off Antic
   RTCLOK=۰ ; only one timer needed

   COUNT=۰         ; init count
   FOR I=۰ TO ۸۱۹۰ ; and flags
     DO
     FLAGS(I)='T ; "'T" is a compiler-provided constant for True
     OD

   FOR I=۰ TO ۸۱۹۰ ; and flags
     DO
     IF FLAGS(I)='T THEN
       PRIME=I+I+۳
       K=I+PRIME
       WHILE K<=۸۱۹۰
         DO
         FLAGS(K)='F ; "'F" is a compiler-provided constant for False
         K==+PRIME
         OD
       COUNT==+۱
     FI
     OD
   TIME=RTCLOK ; get timer reading
   SDMCTL=۳۴   ; restore screen

   PRINTF("%E %U PRIMES IN",COUNT)
   PRINTF("%E %U JIFFIES",TIME)
 RETURN

## منابع
Wikipedia contributors, "Action!," Wikipedia, The Free Encyclopedia, http://en.wikipedia.org/w/index.php?title=Action!&oldid=367911134 (accessed December 29, 2010).

رده:زبان‌های برنامه‌نویسی ایستا
رده:زبان‌های برنامه‌نویسی رویه‌ای
رده:زبان‌های برنامه‌نویسی ساخته‌شده در ۱۹۸۳ (میلادی)
رده:نرم‌افزار آزاد و متن‌باز
رده:نرم‌افزارهای مالکیتی پیشین
رده:زبان‌های برنامه‌نویسی سیستمی