שפת תכנות Low-level

מתוך המכלול, האנציקלופדיה היהודית
קפיצה לניווט קפיצה לחיפוש
ערך מחפש מקורות
רובו של ערך זה אינו כולל מקורות או הערות שוליים, וככל הנראה, הקיימים אינם מספקים.

אנא עזרו לשפר את אמינות הערך באמצעות הבאת מקורות לדברים ושילובם בגוף הערך בצורת קישורים חיצוניים והערות שוליים.
אם אתם סבורים כי ניתן להסיר את התבנית, ניתן לציין זאת בדף השיחה.

ערך מחפש מקורות
רובו של ערך זה אינו כולל מקורות או הערות שוליים, וככל הנראה, הקיימים אינם מספקים.

אנא עזרו לשפר את אמינות הערך באמצעות הבאת מקורות לדברים ושילובם בגוף הערך בצורת קישורים חיצוניים והערות שוליים.
אם אתם סבורים כי ניתן להסיר את התבנית, ניתן לציין זאת בדף השיחה.

במדעי המחשב, שפת תכנות low-level (שפת תכנות "נמוכה") היא שפת תכנות המספקת אבסטרקציה מעטה מארכיטקטורת סט הפקודות של המחשב, או כלל לא. בדרך כלל המונח מתייחס לשפת מכונה או לשפת סף. המילה "low" (נמוך) בהקשר זה מתייחסת לכמות הקטנה או לאי הקיום כלל של שכבות אבסטרקציה בין שפת התכנות לשפת המכונה. מסיבה זו, לעיתים שפות low-level מתוארות כ"קרובות לחומרה".

שפות תכנות low-level ניתנות להמרה לשפת מכונה מבלי להשתמש במהדר או במפרש, והקוד שנוצר רץ ישירות על גבי המעבד. ניתן לגרום לתוכנית הכתובה בשפה low-level לרוץ במהירות גבוהה ביותר, ועם צריכת זיכרון מעטה. תוכנית שקולה בשפה עילית (high-level) תהיה "כבדה" יותר. שפות low-level הן פשוטות, אך נחשבות קשות לשימוש בגלל הפרטים הטכניים הרבים שיש לזכור.

בהשוואה לשפות תכנות low-level, שפות תכנות עיליות מקלות על פיתוח התוכנה על ידי ניתוק הסמנטיקה של ארכיטקטורת המחשב מהמפרט של התוכנה.

לעיתים מחלקים שפות תכנות low-level לשתי קטגוריות: "דור ראשון" ו"דור שני".[דרושה הבהרה]

שפת מכונה

ערך מורחב – שפת מכונה

שפת מכונה היא השפה היחידה שמיקרו-מעבד יכול לעבד ישירות בלי הצורך לבצע טרנספורמציה קודמת כלשהי. כיום, מתכנתים כמעט אף פעם לא כותבים תוכניות באופן ישיר בשפת מכונה, מכיוון שהיא דורשת תשומת לב לפרטים רבים ששפה עילית יכולה לטפל בהם באופן אוטומטי, ומשום שכתיבה בשפת מכונה נעשית בקודים נומריים וקשה לזכור אותם. מסיבה זו פותחו שפות תכנות מהדור השני המספקות רמת אבסטרקציה אחת מעל שפת המכונה.

דוגמה: פונקציה בשפת מכונה של ארכיטקטורת x86, לחישוב האיבר ה-n בסדרת פיבונאצ'י:

8B542408 83FA0077 06B80000 0000C383
FA027706 B8010000 00C353BB 01000000
B9010000 008D0419 83FA0376 078BD98B
C84AEBF1 5BC3

שפת סף

ערך מורחב – שפת סף

שפת סף (אסמבלי) אינה נחשבת לשפת תכנות משום שלא קיים עבורה דקדוק או מפרט רשמי. שפה זו משמשת כמיפוי בלבד בין אסימונים (tokens) קריאים על ידי בני אדם, לבין הוראות בשפת מכונה (opcodes). האסימונים הקריאים על ידי בני אדם עוברים הרכבה ישירה לשפת מכונה, בדרך כלל בהתאמה של אחד-לאחד בין אסימון להוראה בשפת מכונה. ניתן ליצור שכבת אבסטרקציה נוספת מעל קוד אסמבלי, באופן דומה לדרך שבה שפת מכונה עוברת אבסטרקציה לשפת סף.

דוגמה: אותו מחשבון מספרי פיבונאצ'י מהדוגמה למעלה, הפעם כתוב בשפת אסמבלי x86, המשתמשת בתחביר של Microsoft Macro Assembler:

fib:
    mov edx, [esp+8]
    cmp edx, 0
    ja @f
    mov eax, 0
    ret
    
    @@:
    cmp edx, 2
    ja @f
    mov eax, 1
    ret
    
    @@:
    push ebx
    mov ebx, 1
    mov ecx, 1
    
    @@:
        lea eax, [ebx+ecx]
        cmp edx, 3
        jbe @f
        mov ebx, ecx
        mov ecx, eax
        dec edx
    jmp @b
    
    @@:
    pop ebx
    ret

תכנות low-level בשפות תכנות עיליות

בשנות ה-60 המאוחרות, ניסיונות לפתח שפות תכנות עיליות (high-level) התומכות בתכנות מערכת (system programming – פיתוח תוכנה לשליטה בחומרה וליצירת תשתיות להרצת יישומי מחשב), הובילו לפיתוח שפות כגון Forth ,BCPL ,BLISS ,PL/S, ולהרחבת שפת ALGOL לתמיכה בתכנות low-level. עם זאת, השפה שהפכה לשפה השלטת בפיתוח תוכנות מערכת (system software) היא שפת C.

שפת C

ערך מורחב – שפת C

שפת C היא שפת תכנות עילית הנחשבת לשפה מהדור השלישי (third generation), מאחר שהיא תומכת בתכנות מובנה (structured programming) והיא מספקת אבסטרקציה מעל שפת המכונה. (מבחינה היסטורית, אף אחת משפות התכנות מהדור השני לא התאימה במיוחד לתכנות low-level). עם זאת, כיום מתכנתים רבים מתייחסים לשפת C כשפה low-level, מאחר שהיא לא כוללת מערכת סביבת הרצה (run-time system) גדולה (למשל, אין מנגנון איסוף זבל), היא תומכת רק בפעולות סקלריות, והיא מאפשרת גישה ישירה לזיכרון המחשב. לפיכך, שפת C משתלבת ללא קושי עם שפות סף ועם מעבדים ומיקרו-בקרים ברמת המכונה. היכולת של שפת C ליצור אבסטרקציה מעל רמת המכונה מאפשרת לאותו קוד להיות מהודר עבור פלטפורמות חומרה שונות; עם זאת, שליטה עדינה ברמת המערכת תתאפשר רק במידה ומערכת היעד כוללת כמה מאפיינים כלליים כגון מודל זיכרון שטוח (flat memory model), וזיכרון המחולק לבתים. ייתכן שתוכניות בשפת C ידרשו "כיוונון" (tweaking) מסוים, הממומש בדרך כלל על ידי הידור מותנה (conditional compilation), המיועד עבור פלטפורמות יעד שונות. תהליך ההתאמה של תוכנית עבור פלטפורמה שונה נקרא porting.

דוגמה: פונקציה בשפת C לחישוב האיבר ה-n בסדרת פיבונאצ'י, תוך חישוב ברקורסיה של כל האיברים הקודמים לו:

#include <stdio.h>

long fib (int n)
{
       if ((n == 0) || (n ==1))
      	 return 1;
   	else
      	 return (fib (n-1) + fib (n-2));
}

void main()
{
   	int n,i ;
       scanf("%d", &i);
   	for ( n=0 ; n <= i; n++)
      	 printf ("Fibunachi (%d): %ld\n\r", n, fib(n));
}

משמעות יחסית

המושגים "high-level" ו-"low-level" הם מושגים יחסיים מטבעם. לדוגמה, לפני כמה עשורים, שפת C ודומותיה נחשבו high-level. לעומת זאת, כיום, מתכנתים רבים מתייחסים לשפת C כ-low-level.

ניתן לחשוב על שפת סף כייצוג "גבוה" יותר של שפת מכונה, מכיוון שהיא כוללת רעיונות כגון מבנים (constructs), ביטויים מוגבלים, ולפעמים אפילו משתנים, פרוצדורות ומבני נתונים. (עם זאת, שפת סף בכל זאת מהווה ייצוג ביחס של אחד-לאחד לשפת המכונה, אלא אם נעשה שימוש במאקרו).

שפת המכונה בתורה נמצאת ברמה מעט יותר גבוהה מאשר ה-microcode ו-micro-operations המשמשים בתוך מעבדים רבים.

ראו גם

עיינו גם בפורטל

פורטל התוכנה הוא שער לערכים הקשורים לעולם התוכנה. הפורטל סוקר את היסטורית התכנות, התוכנות, המתכנתים, וכיוצא בכך.