tomron87/hebrew-wikipedia-sentences-corpus huggingface dataset:
איירין פפרברג השתמשה במודאליות קולית להפקת שפה והבנה אצל תוכי אפור בשם אלכס, וסו סאבאג'-רמבו ממשיכה לחקור קופי בונובו כמו קאנזי ופנבנישה.
ר' שוסטרמן אישש תוצאות רבות בחקר הדולפינים עם אריות הים שלו בקליפורניה ("רוקי"), והוא נקט שיטה התנהגותית יותר לעומת הגישה הקוגניטיבית של הרמן.
הדגש של שוסטרמן הוא על החשיבות של מבני למידה המכונים מחלקות שקילות.
עם זאת, לרוב לא התקיים דיאלוג משמעותי בין תחומי הבלשנות והשפה אצל בעלי חיים.
התחום ההולך וצומח של אבולוציה של שפה הוא מקור נוסף להשפעה הדדית בין דיסציפלינות אלו.
רוב חוקרי קופי האדם טוענים שקיימת יכולת קדם-לשונית משותפת אצל בני אדם ושימפנזים, שמקורה באב קדמון משותף.
חוקרי דולפינים ותוכים מדגישים את העקרונות הקוגניטיביים הכלליים העומדים בבסיס יכולות אלו.
תחומי מחקר אחרים המתמקדים ביכולות תקשורת אצל בעלי חיים כוללים את תאוריית הנפש, חיקוי, תרבות אצל בעלי חיים ואבולוציה של שפה.
לאחרונה קמו חוקרים שערערו על הרעיון שתקשורת בין בעלי חיים מתוחכמת פחות מתקשורת אנושית.
דניס הרזינג ערכה מחקר על דולפינים באיי בהאמה, שבו קיימה שיחה דו כיוונית באמצעות מקלדת שקועה.
המקלדת איפשרה לצוללנים לתקשר עם דולפינים פראיים.
באמצעות צלילים וסמלים על כל מקש יכלו הדולפינים ללחוץ על המקש עם האף או לחקות את צליל השריקה שנפלט כדי לבקש מבני אדם אביזר ספציפי.
ניסוי מתמשך זה הראה שאצל יצורים לא לשוניים אכן מתרחשת חשיבה מתוחכמת ומהירה.
מחקר נוסף שנעשה עם קאנזי באמצעות לקסיקרמות חיזק את הרעיון שתקשורת עם בעלי חיים היא מורכבת הרבה יותר מכפי שחשבו בעבר.
במחקר עדכני התגלה כי קופי בונובו מסוגלים להרכיב צלילים קוליים לשילובים הדומים למבני משפטים בשפה האנושית.
החוקרים מצאו את המשמעות של קריאות בודדות, וכיצד המשמעות של קריאה מסוימת משתנה כאשר היא משולבת עם קריאות נוספות, בדיוק כמו בשפה אנושית.
במחקר דומה שנערך באוניברסיטה העברית בירושלים התגלו ממצאים דומים לגבי שירת הלווייתנים.
שפת מכונה היא אוסף של הוראות המובן בצורה ישירה (ללא כל תרגום) על ידי המעבד של המחשב, ומבוצע על ידיו בעת פעולת המחשב.
הוראות (פקודות) שפת המכונה הן רצף של סיביות.
לסיבית שני מצבים אפשריים ועל כן ערכה מיוצג באמצעות הספרות אפס ואחת.
בשל הקושי של בני אדם לפענח ולזכור את משמעותם של רצפים ארוכים של סיביות, יצירת תוכניות שימושיות בשפת מכונה כמעט ואינה מעשית.
לצורך כך נוצר ייצוג של כל פקודה בשפת מכונה בעזרת רצף תווים נהיר יותר, בדרך כלל רצף אותיות היוצר מילה שמשמעותה מרמזת על הפקודה בשפת מכונה שאותה היא מייצגת.
ייצוג כזה נקרא שפת סף (Assembly) והוא הקרוב ביותר לשפת המכונה.
אסמבלר הוא מהדר המתרגם פקודות משפת סף אל שפת מכונה על מנת שיהיה ניתן להריצן על ידי מעבד.
תכנות בשפת מכונה או בשפת סף נקרא תכנות low-level ובראשית ימי המחשוב התכנות נעשה בצורה זו.
החל משנות ה-50 של המאה ה-20 החלו ליצור שפות תכנות היוצרות הפשטה גבוהה יותר, זאת באמצעות פקודות הדומות יותר לשפת בני אדם וניתוק הקשר בין פקודה יחידה בשפת מכונה לפקודה יחידה בשפת התכנות, כך שפקודה אחת בשפת התכנות עשויה להיות מתורגמת בזמן ההידור לרצף פקודות בשפת מכונה.
שפות כאלו נקראות שפות תכנות עיליות ועיקר התכנות כיום מתבצע בעזרתן.
מעבדים מדגמים שונים נבדלים בפקודות שכל אחד מהם יכול לבצע.
הפקודות שיודע לבצע מעבד מושפעות בין היתר מאופן מימושו הפיזי, למשל מכמות האוגרים שהוא מכיל ומגודלם.
אוסף ההוראות בשפת מכונה שמעבד מסוים מסוגל לבצע ואופן ייצוגן הבינארי נקרא סט פקודות.
גם אם שני מעבדים יודעים לבצע פקודה מסוימת, רצף הסיביות המייצג את הפקודה עשוי להיות שונה בסט הפקודות של כל אחד מהם.
שני מעבדים שקולים זה לזה מבחינה פונקציונלית כאשר יש להם אותה שפת מכונה, ללא תלות באופן המימוש האלקטרוני של שפה זו.
בשל השוני בסט פקודות של מעבדים שונים, תוכנית מחשב בשפת מכונה של מעבד אחד לא יכולה להיות מבוצעת על ידי מעבד עם שפת מכונה שונה.
תכנות בשפת תכנות עילית מצמצם קושי זה: אין צורך לכתוב את התוכנית לכל מעבד בנפרד בשפת המכונה שלו, אך יש צורך בהידור הקוד מהשפה העילית לשפת המכונה של כל מעבד.
בעת יצירת דור חדש של מעבד, משתדל היצרן שסט הפקודות של המעבד החדש יכיל את כל סט הפקודות של המעבד הקודם ("תאימות לאחור"), כדי לאפשר הפעלה של תוכנות שפותחו או הודרו עבור המעבד הקודם גם באמצעות המעבד החדש.
בעשרות השנים הראשונות לקיום המחשב המגמה הייתה להרחיב את אוצר ההוראות של המעבד, כך שניתן יהיה לבצע פעולות מורכבות יותר באמצעות הוראה בודדת.
מעבדים בעלי אוצר הוראות מורחב מכונים מעבדי CISC (כלומר: Complex Instruction Set Computer).
למגמה זו היה יתרון בולט בעת תכנות בשפת סף, אך בעת המעבר לתכנות בשפות עיליות יתרון זה מתגמד.
מניתוח כמותי של התפלגות הפקודות הנוצרות על ידי המהדרים, בין אם בשל מבנה המהדר ובין אם בשל נוהגי כתיבת התוכנה, נמצא כי מגוון הפקודות של המעבד אינו מנוצל, וכי במרבית המקרים (כ־80 אחוז) מנוצל רק מעט (כ־20 אחוז) ממגוון הפקודות של המעבד.
כתוצאה מכך חל מהפך מחשבתי בכל הנוגע לעיצוב ארכיטקטורת המעבד הרצויה, אשר הוביל לפיתוח מעבד בעל מספר הוראות מצומצם (RISC - Reduced Instruction Set Computer).
מספר ההוראות המצומצם, הביא להקטנת שטח הפיסה, להגברת יעילות המיתוג הפנימי ולמהירות ביצוע גבוהה מאוד של כל הוראה, כך שבמבחני השוואת ביצועים, ובעיקר במבחני יחס תועלת, עשויים ביצועיו של מעבד זה להיות טובים מאלה של מעבד בעל מספר הוראות רב.
כיום הבדל זה זניח כי מצד אחד גם מעבדי CISC ממירים את הפקודות לפקודות מיקרוקוד פשוטות ומצד שני התגלה כי היתרון מבחינת התכנון של המעבד של RISC איננו משמעותי (את רוב התוצאות החיוביות ניתן לממש גם ב־CISC), כתוצאה מכך ההבדל המעשי בין שני הסוגים נעלם כמעט לחלוטין.
במעבדי RISC לכל ההוראות בשפת המכונה אורך אחיד, ואילו במעבדי CISC קיימות הוראות באורכים אחדים (לפי קוד ההוראה יודע המעבד את אורכה).
שפת מחשב היא שפה שבאמצעותה האדם נותן הנחיות פעולה למחשב.
לכל שפת מחשב יש אוצר מילים משלה, בדומה למאפיין של השפה הטבעית.
אך בניגוד לשפות טבעיות, לשפות מחשב יש לרוב מבנה נוקשה ומוגדרת בהן משמעות יחידה לכל ביטוי.
בשימוש הנפוץ במושג "שפת מחשב", לעיתים הכוונה היא לשפת תכנות או לשפת מכונה.
במשמעות הרחבה יותר, מושג זה כולל בנוסף לשפות תכנות, גם שפות כגון HTML, XML או CSS, שאינן בגדר שפות תכנות, אף שהן שפות בעלות אוצר מילים המשמשות למתן הנחיות למחשב.
ההבדל הוא שבשפת תכנות יש לוגיקה שבדרך כלל מתבטאת בקיומן של פקודות לבקרת זרימה, כגון פקודת if, או כלים אחרים ליצירת לוגיקה.
כלים ליצירת לוגיקה אינם קיימים בשפת תגיות (markup language) כגון HTML ו-XML.
ישנם מספר סוגים מובחנים או "משפחות" של שפות מחשב, לפי מטרותיהן:
שפות מכונה (machine languages): שפת מחשב בסיסית ביותר אשר אליה מותמרות בסופו של דבר, כל שפות המחשב האחרות לאחר הרצה של הקוד שלהן בשכבה נתונה.
שפות סף (assembly): שפת תכנות הקרובה ביותר לשפת מכונה.
שפות תפעול (operating languages): שפות המשמשות לתפעל ממחשב בממשק שורת פקודה, דרך קונסולת הפקודות של מערכת ההפעלה הנתונה (אם המערכת כוללת ממשק משתמש גרפי הרי שניתן להשתמש בשפה זו גם דרך "מדמה מסוף" – terminal emulator).
שפות תכנות (programming languages): כל שפת תכנות שאיננה מוגדרת כ"שפת סף".
עם שפה זו מגדירים לרוב את ההתנהגות של תוכנה ובפרט של פרטי מבנה שלה .
שפות תשאול (querying languages): שפה המשמשת להגיש שאילתאות (בקשות מידע) מבסיס נתונים.
אם לבסיס הנתונים המידע, ככלל הוא ישיב למשתמש את המידע כ"תשובה חיובית" לשאילתא.
שפות ביטויים רגולריים (Regex languages) שפות המשמשות ליצירת תבניות חיפוש (search pattern) המורכבות מביטויים רגולריים ותווי מטא.
מטרת תבניות אלה היא להתאים (match) לסטרים מסוים של מידע (אוסף כללי של תווים).
ניתן להשתמש בתבנית חיפוש באופן מלא או חלקי (במקרה של שימוש חלקי, נאחזר רק חלק מתוך ההתאמה, אבל רק בהתאם להתאמה המדויקת, זה נעשה למטרת נוחות).
שפות ייצוג אובייקטים (data serialization languages): שפות כמו JSON או YAML המשמשות לייצג מידע (לרוב בזוגות של תכונה-ערך).
מידע מאוחזר לעיתים בשפות אלה לאחר שנוצר אוטומטית בהתאם לשאילתא שהוגשה אל בסיס הנתונים של תוכנה מסוימת.
שפות סימון ממשק (markup languages): שפות המשמשות לפיתוח קווי המתאר של ממשק ("סימון") חלקים אלה.
דוגמאות לכך הן השפות HTML ו-שפת Wiki.
שפות עיצוב ממשק (stylesheet languages): שפות המשמשות לתת עיצוב גרפי לממשק – שאינו תמונה.
דוגמה לכך היא שפת CSS.
שפות תיבנות (theming languages): מעין שילוב בין שפת סימון ממשק (markup) ושפת תכנות המשמשת ליצירת תבניות כלליות של חלקים ברורים (כגון סוגי עמודים או סוגים של דפי אינטרנט באתר אינטרנט).
שפות סימון רכיבי מסמך (markdown languages): שפות כגון השפה Markdown המשמשת לתבנת מסמך המיועד לקריאה ואינטראקציה מינימלית (לרוב מדובר על קובצי חוברת לתוכנות מסוימות).
המונח שפת תכנות אוגד בתוכו מספר שפות מחשב שהן תמיד לוגיות, ומשמשות לבניית תוכנה.
זאת להבדיל מסידור או עיצוב תוכנה – מה שנעשה עם שפות מחשב אחרות שאינן מוגדרות באופן מסורתי, כ"שפות תכנות", ואלה יהיו למשל שפות תגיות או שפות עיצוב.
בניסוח אחר, שפת תכנות היא אוסף של חוקים תחביריים (Syntax) וסמנטיים (Semantic) המגדירים שפה פורמלית.
תוכנית הנכתבת בשפת תכנות מגדירה ביצוע תהליך אלגוריתמי.
שפת התכנות קובעת את הכלים העומדים לרשות מחבר התוכנית כדי לבצע הגדרות כאלו.
נהוג (וכחלק ממחווה) שהדבר הראשון שלומדים לתכנת, כאשר לומדים שפת תיכנות חדשה, היא תוכנית שתדפיס כפלט על המסך את המסר "hello world".
שנית, רמת ההפשטה הגבוהה יותר שמציעה שפת תכנות, מסייעת לתקשורת טובה בין מתכנתים.
שלישית, שפת תכנות מסייעת למתכנת לארגן ולבטא את הגדרת התהליך החישובי, באופן הנתפס כרצוי על ידי מתכנן שפת התכנות.
השימוש בשפת תכנות לשם כתיבת תוכנית מחשב קרוי תכנות.
שפות התכנות מציעות מבחר כלים המשמשים להגדרה נכונה של מטרת הקוד וארגונו, כגון מבני בקרה (לולאות, תנאים, מתגים וכדומה), פרוצדורות, עצמים, ומחלקות.
זאת במטרה להקל ככל הניתן על עיצוב הקוד, התכנון, הכתיבה, הקריאה, התחזוקה, ההרחבה והשימוש העתידי שלו.
לכל שפת תכנות, בדומה לשפה טבעית, יש אוצר מילים משלה וכללי תחביר ייחודיים.
בכל זאת, הדמיון בין שפות תכנות ושפות טבעיות הוא מוגבל, בעיקר בגלל הדרישה הקריטית לחד משמעיות משפות תכנות.
אוצר המילים של שפת תכנות מצומצם ביותר, והוא נע בין עשרות בודדות למאות אחדות של מילים.
לכל שפה ישנם כללי תחביר נוקשים שכל חריגה מהם עשויה להתפרש כשגיאה, או לגרום בעיות בהפעלת המערכת כולה.
מאפייניה של שפת תכנות כוללים את הרכיבים הבאים:
נתונים ומבני נתונים, כגון סוגי המספרים שהשפה יודעת לטפל בהם, ומבנים מורכבים יותר המוכרים על ידי השפה, כגון מערכים, רשימות, מבנים, אובייקטים ופונקציות.
פקודות ומבני בקרה שהשפה יודעת לבצע – הצהרה על משתנים, פעולות אריתמטיות, לולאות וכדומה.
עקרונות העיצוב של השפה ותפישת העולם שמאחוריה, בין אלה ניתן למנות פרדיגמות כגון תכנות אימפרטיבי (הכולל תכנות מבני ורוב הגרסאות של תכנות מונחה עצמים) לעומת תכנות הצהרתי (כולל תכנות פונקציונלי, תכנות לוגי ותכנות אילוצים), תכנות גנרי ועוד.
שפות רבות הן מרובות-פרדיגמות, למשל פייתון ו-#C.
שפות עשויות להיות בעלות טיפוסיות חזקה, חלשה, או לא קיימת (למשל ב-Pawn ו-Forth).
בנוסף ניתן לשאול מתי מתבצעת הבדיקה של תקינות הטיפוסים – דינמית (בזמן ריצה) או סטטית (בזמן הידור).
כן ניתן לשאול מי אחראי להצהיר על הטיפוס: המתכנת או המהדר.
שפות תכנות נוצרו על-מנת להגדיר פעולות של מחשבים, אבל הן יכולות לשמש גם על-מנת לתאר אלגוריתמים, בדומה לתרשימי זרימה, או להגדיר מבני נתונים (data structures) מורכבים.
בכך מהוות שפות אלו גם צורת תקשורת.
מתכנתים שואפים לשמור על הקוד שלהם קריא, כלומר פשוט להבנה על ידי אדם, כדי שיהיה קל לנפות ולתחזק אותו.
שפת תכנות נקראת שלמה טיורינג אם ניתן להשתמש בה לדימוי מכונת טיורינג.
שפה שלמה-טיורינג מאפשרת לבצע כל חישוב שניתן לבצע באמצעות מחשב.
מרבית שפות התכנות הן שלמות טיורינג, ולכן שקולות זו לזו מבחינת האלגוריתמים שביכולתן לממש, אם כי ישנם הבדלים במידת היעילות האפשרית למימוש, במידת הקריאות של התוכניות, וכדומה.
שפת התכנות הבסיסית ביותר, והקרובה ביותר לשפת מכונה, קרויה שפת סף או אסמבלי (Assembly).
הוראות שפת הסף פועלות באופן ישיר על תאי הזיכרון של המחשב, האוגרים הפנימיים של המעבד והתקני הקלט/פלט של המחשב, ובפרטנות רבה.
בצורתה הבסיסית של שפת הסף, כל הוראת אסמבלי יחידה שכותב המתכנת, מתורגמת להוראה אחת בשפת מכונה.
מכאן, ששפת הסף נקבעת על פי המעבד עליו התוכנה אמורה להיות מופעלת, כאשר שפת הסף עשויה להיות שונה מאוד בין משפחת מעבדים אחת למשנתה, וניתן אף למצוא גם שינויים קלים בשפה בין מעבדים המשתייכים לאותה המשפחה.
מרבית שפות התכנות הן שפות עיליות, אשר מעניקות רמה גבוהה יחסית של הפשטת מאפייני פלטפורמת המטרה של התוכנה הנכתבת, ובכך פוטרות את המתכנת במידה רבה מהתייחסות לתשתית החומרה (ובפרט, המעבד) ותשתיות התוכנה שעל בסיסן תפעל התוכנה.
מעבר משפת תכנות לביצוע בתוכנית
שפת התכנות עצמה אינה מובנת ישירות על ידי המעבד, ולכן יש צורך בתיווך בין התוכנית הכתובה בשפת תכנות ובין המעבד, על מנת שיהיה ניתן להפעיל את התוכנה.
מטרה זו ניתן להשיג באחת משלוש דרכים:
שימוש במהדרים (Compilers) שמקבלים את קוד המקור של התוכנה שכתוב בשפת התכנות ומתרגמים אותו אל קובץ שפת מכונה, שמוכן לביצוע על ידי המעבד.
שפה כזו קרויה גם שפה סטטית.
בשיטה זו מתקבלים על פי רוב הביצועים הטובים ביותר, אך על פי רוב קשה לנייד תוכניות הכתובות בשפות אלו בין מערכות שונות, ותהליך הפיתוח הוא הפחות ידידותי.
דוגמאות לשפות בקטגוריה זו הן: פסקל, C, ++C וגם שפות הוותיקות כגון Cobol, ו-PL/I.
שימוש במפרשים (Interpreters), הקוראים את התוכנית בשפת תכנות, ומפרשים ומבצעים באופן מיידי את הכתוב בה שורה אחר שורה.
שיטה זו ידידותית לפיתוח ונוחה יותר לביצוע שינויים וקלה יותר לניוד בין מערכות, אך מביאה על פי רוב לביצועים נחותים באופן משמעותי מהידור, כיוון שלפני ביצוע כל פעולה קיימת פעולת תרגום.
דוגמאות לשפות בקטגוריה הזו הן: בייסיק, PHP, פייתון, Perl, Ruby, VBScript, C Shell, JavaScript.
עבודה בשיטת שפת ביניים, כלומר הידור אל שפת ביניים (דמוית שפת מכונה), ובזמן ריצה הידור (או פירוש) לשפת מכונה באמצעות "מכונה וירטואלית".
שיטה זאת מאפשרת מזעור של התלות בסביבת ההפעלה של התוכנית, וכן מיטוב אלגוריתמים תוך כדי ריצה.
הביצועים של שיטה זו זאת טובים מאלה של שפות מפורשות, אך ירודות לעומת שפות מקומפלות כמו C++, בשל השימוש בקוד מנוהל ומכונה וירטואלית.
בשיטה זו משתמשות שפת Java שמהודרת ל-bytecode ומפורשת על ידי JVM, וכל שפות סביבת NET.
(ביניהן #C), שמהודרות לשפת הביניים CIL.
יש שפות שלהן ניב שנועד למהדר וניב שנועד למפרש.
כמו כן, ישנן שפות סינתטיות, שהפיתוח בהן נעשה במוד של פירוש, ולאחר סיום הפיתוח הן עוברות הידור לשפת מכונה.
במהלך השנים פותחו מאות שפות תכנות, שלכל אחת מהן יתרונות וחסרונות משלה, וכל אחת מהן מתאימה באופן מיטבי למשימות מסוימות.
יש שפות קלות ללימוד, שנועדו לחובבים או למתחילים, ויש שפות מורכבות שנועדו למומחים.
יש שמתאימות במיוחד לתוכניות מדעיות, ואחרות טובות יותר לפיתוח מערכות מידע.
יש שנועדו ליצירת ממשקי משתמשים ויש שנועדו לכתוב אלגוריתם מופשט.
יש שנועדו למחשב האישי ויש שנועדו במיוחד להרצה על שרתי אינטרנט.
יש שנועדו למשימות בתחום מצומצם, ויש שנועדו לתת מענה לטווח רחב של משימות.
לפיכך, קודם לתחילת כתיבתה של תוכנית חדשה, יש לבחור את שפת התכנות שבאמצעותה תיכתב התוכנית.
אחד היעדים של מעצביה של שפת תכנות חדשה, הוא שלא להיות תלויים במכונה מסוימת או במערכת הפעלה מסוימת, כך שניתן יהיה להעביר בקלות את התוכנית לכל סביבה רצויה.
יעד זה נמצא בסתירה ליעד של יצרני מחשבים ומערכות הפעלה קנייניות, שלהם עניין לקשור את הלקוח דווקא למוצר שלהם.
כתוצאה מכך נוצרות לשפת תכנות פופולרית גרסאות שונות.
ניסיון לעצור את ההתפצלות הזו נעשה על ידי גופי תקינה, כגון ANSI או ISO, המגדירים גרסה תקנית של השפה.
הבחירה באיזו שפה להשתמש תלויה בטבע המשימה שיש לבצע, כישורי המתכנתים, הכלים המצויים, המערכת לה מיועדת התוכנה ולעיתים אף דרישות מצדו של הלקוח (צבא ארצות הברית, למשל, דרש לעיתים קרובות שהתוכניות שביקש יתוכנתו בשפת עדה).
התפיסה המקובלת גורסת כי ככל ששפת תכנות קרובה יותר לשפת המכונה, כך היא קרובה יותר למערכת המסוימת עליה עובדים, יודעת לנצל יותר טוב את יתרונותיה והמבנה הייחודי שלה, וכן המתכנת יכול לשלוט בדיוק יתר על התהליכים ולהתאים אותם לצרכיו האישיים ולכן השימוש בשפה שכזו יניב מהירות רבה יותר.
מסיבה זו, משתמשים לעיתים קרובות בשפת סף וב-C לתוכניות שבהן זמן הוא גורם מכריע, למשל מערכות הפעלה, מערכות זמן אמת, או שיש בהן צורך בנגיעה בפרטי מערכת מסוימים מאוד, למשל מערכות משובצות מחשב.
אך אליה וקוץ בה, התאמת התוכנית למערכת מסוימת תוך ניצול תכונותיה המסוימות והייחודיות משמעה שלא ניתן אחר-כך, או לפחות קשה, להעביר את התוכנית למערכת אחרת.
בנוסף, בשל הסירבול ואי-הקריאות של שפות אלו, תחזוקת הקוד ושינויו בזמן מאוחר יותר הן מטלות מסובכות והסיכוי שתיווצר שגיאה גדול.
לכן, לתכנות מערכות גדולות נוטים להשתמש בשפות עיליות כמו C++, Java, או #C.
התכנות בשפות אלה עלול ליצור תוכניות איטיות יותר, אך הוא בטוח יותר, ברור יותר, אמין יותר וקל בהרבה לשינוי בזמן מאוחר יותר.
שפת תכנות איננה סטטית – מתקיימת בה התפתחות בהתאם לחידושים במדעי המחשב ולצורכי המשתמשים.
התפתחות זו מתבטאת ביצירת גרסה חדשה לשפת התכנות.
בעת יצירת גרסה חדשה נשמרת בדרך כלל תאימות לאחור, כלומר תוכניות שהיו תקינות בגרסה הקודמת ממשיכות להיות תקינות גם בגרסה החדשה, אך לעיתים העברתה של תוכנית לגרסה החדשה מחייבת עריכת התאמות בה.
גם לגרסה מסוימת של שפת תכנות ייתכנו ניבים אחדים, כלומר וריאציות שונות של שפה זו אצל יצרני מהדרים שונים.
לעיתים מתקיימים ניבים אחדים לשפה מסוימת אצל אותו יצרן (למשל במערכות הפעלה שונות שלו).
ניבים יוצרים קושי מבחינת ניידות התוכנה – תוכנה שנכתבה בניב מסוים אינה עוברת הידור במחשב המשתמש בניב אחר.
להתמודדות עם בעיה זו נהוג לקבוע תקן לשפה.
גם כאשר התקן אינו מחייב, כתיבת תוכנית תוך היצמדות לתקן זה מבטיחה את ניידותה בין כל המהדרים התומכים בתקן.
התוכנית המופיעה להלן כתובה בשפת פייתון, והיא בודקת האם מספר שהועבר אליה הוא מספר ראשוני.
התוכנית כוללת פונקציה שמקבלת כפרמטר מספר שלם ומחזירה את המחלק הגבוה ביותר שלו.
גוף התוכנית מקבל קלט מהמשתמש ובודק האם המחלק הגבוה ביותר שלו הוא אחד.
אם כן, זהו מספר ראשוני.
אם לא, המספר איננו ראשוני.
הטקסט האפור הוא הערות עבור הקורא, ואיננו חלק מהתוכנית.
from math import sqrt # מייבאים" פונקציה שתחשב שורש ריבועי של מספר"
def getHigherDivisor(num): # נגדיר פונקציה שמוצאת את המספר השלם הגדול ביותר המחלק ללא שארית
for d in range(round(sqrt(num)),0,-1): # עבור כל המספרים מהשורש עד 1, נבדוק את השארית בחלוקה
if num % d == 0: # אם השארית (%) היא 0, סימן שמצאנו את המחלק הגבוה ביותר
return d # אנו "מחזירים" את המחלק אל התוכנית הראשית
num = int(input("Enter positive integer:")) # פקודה זו מקבלת את הקלט מהמשתמש אל תוך משתנה מסוג מספר
if num < 1: # בדיקת שגיאות: הקלט חייב להיות מספר הגדול מאפס
higherDivisor = getHigherDivisor(num) # בדוק מהו המחלק הגבוה ביותר של המספר שהתקבל כקלט
if higherDivisor == 1: # אם המחלק הגבוה ביותר הוא 1, המספר ראשוני
else: # אחרת, המספר איננו ראשוני
צעד ראשון להתנתקות מהכורח לכתוב תוכניות בשפת מכונה נעשה עם יצירת האסמבלי.
מרבית שפות התכנות הן שפות עיליות, שבהן לפקודות דמיון מסוים לשפה טבעית.
בשפת אסמבלי, לעומתן, כל פקודת אסמבלי מתורגמת לפקודה אחת בשפת מכונה (אך למען נוחות הקריאה, לעיתים מתאימות לפקודת מכונה אחת פקודות אסמבלר שונות, המייצגות פונקציות שונות של אותה פקודת מכונה).
בתחילת שנות ה-50 נעשו צעדים ראשונים ביצירת מהדרים, כלומר כלים שיאפשרו כתיבת תוכניות בשפה קרובה יותר לשפת אנוש.
בשנת 1952 יצרה גרייס הופר את המהדר הראשון, שנקרא A.
בשנת 1953 החל צוות בראשותו של ג'ון באקוס מחברת IBM לפתח את שפת FORTRAN, וצעד זה הושלם בשנת 1957. FORTRAN (ושפת ALGOL שפותחה בעקבותיה בשנת 1958) התאימו במיוחד למשימות מדעיות (שהן תוכניות בתחומי הפיזיקה, המתמטיקה וכדומה) אך התאימו פחות למשימות של עיבוד נתונים.
למטרה זו באה לעולם בשנת 1960 שפת COBOL, השונה מ-FORTRAN במידה רבה, ובעלת תחביר המזכיר את השפה האנגלית.
היוזמה לפיתוח COBOL באה ממשרד ההגנה האמריקני, ובפרויקט השתתפו נציגים של הממשל האמריקני ויצרני המחשבים.
שתי שפות אלה, FORTRAN ו-COBOL, זכו לתפוצה רחבה, והן בשימוש עד עצם היום הזה.
בתחילת שנות ה-60 פותחה שפת LISP, על ידי ג'ון מקארתי מאוניברסיטת MIT.
שפה זו יעילה במיוחד בטיפול בטקסטים הכתובים בשפת אנוש, ולכן זכתה להצלחה בקרב חוקרי בינה מלאכותית.
מספר שנים לאחר מכן פיתחה חברת IBM את שפת PL/I, שנועדה לשלב את התכונות של FORTRAN ו-COBOL גם יחד, כך שתתאים למשימות תכנות עסקיות ומדעיות כאחד.
השפה שפותחה הגשימה יעד זה, וכללה מאפיינים נוספים שנבעו מהניסיון שנצבר בפיתוח שפות תכנות, אך לא זכתה להצלחה שלה זכו שתי קודמותיה.
בשנות השישים פיתח קנת' אייברסון את שפת התכנות APL, זאת בחברת IBM.
השפה איפשרה ביצוע פעולות מתמטיות מורכבות (כגון מתמטיקה של וקטורים, מטריצות ומספרים מרוכבים) על ידי אופרטורים יחידים.
לצורך תכנות בשפה זו נדרשה מקלדת מותאמת שאיפשרה הקשת האופרטורים הייחודיים של השפה.
בסוף שנות ה-60 פיתח סימור פאפרט את שפת לוגו (LOGO).
שפה זו התפתחה משפת LISP, אך התחביר שלה פשוט יותר, כך שתתאים לשימושם של ילדים.
שפת BASIC, שפותחה באמצע שנות ה-60 בדארטמות' קולג', נועדה במיוחד לשימושם של תלמידים הכותבים תוכניות באמצעות מסופים.
בסוף שנות ה-70 זכתה שפה זו להצלחה רבה על ראשוני המחשבים האישיים, והפכה לכלי פיתוח מקובל למחשבים אישיים.
בשנת 1968 התפרסם מאמרו של א.
דייקסטרה, שיצר תפנית בתחביר של שפות תכנות, בהסבו את תשומת הלב לקושי שגורם השימוש בפקודת goto לקריאותן של תוכניות.
בעקבות מאמר זה נוצר התכנות המובנה, שבו יש מבני בקרה המאפשרים קריאות גבוהה.
שפות קיימות, כגון PL/I, הורחבו כך שיטפלו גם במבני בקרה אלה.
בשנות ה-70 פותחה שפת Prolog, שהיא השפה המובילה בתחום של תכנות לוגי, שבו מתמקדות התוכניות ביחסים בין עצמים.
שפה זו משמשת לפיתוח תוכנה בתחומים של לוגיקה מתמטית ובינה מלאכותית: פתרון בעיות מופשטות, פתרון משוואות, הבנת שפות טבעיות וכדומה.
בתחילת שנות ה-70 יצר ניקלאוס וירת, במטרה להקל על לימוד תכנות את שפת Pascal, שמימשה היטב את העקרונות של התכנות המובנה, וזכתה לפופולריות רבה באוניברסיטאות.
גרסה מסחרית שלה, Turbo Pascal של חברת בורלנד, זכתה להצלחה רבה ככלי לפיתוח תוכנה למחשבים אישיים.
השפה נחשבת קלה יחסית ללמידה, אך יש לה חסרונות הנוגעים ליכולת לכתוב באמצעותה מערכות-תוכנה בקנה מידה גדול.
זמן מה לאחר מכן פיתח דניס ריצ'י ממעבדות בל את שפת C, והשתמש בה לפיתוח מערכת ההפעלה UNIX.
שפה זו פופולרית לתכנות מערכות הפעלה ולפיתוח יישומים והפכה לשפת תכנות נפוצה ביותר.
שפה זו השפיעה רבות על פיתוחן של שפות תכנות אחדות, שהבולטת בהן היא C++.
בשפת הסימולציה Simula 67, המתבססת על ALGOL, מומשו לראשונה רעיונות של תכנות מונחה עצמים, פרדיגמה שהבשילה בשפת Smalltalk, שפותחה בשנות ה־70 במעבדות זירוקס פארק.
לתפוצה רחבה זכתה מתודולוגיה זו החל משנות ה־90, תחילה בשפת התכנות C++ (שפותחה בשנות ה-80), ולאחריה בשפת Java.
שפת פייתון נוצרה על ידי גואידו ואן רוסום בתחילת שנות התשעים, פייתון פותחה מתוך רצון להגיע לשפה פשוטה ומובנת, נוחה לקריאה וקלה לתחזוקה.
שפת רובי נוצרה בשנת 1993 בידי יוקיהירו מאטסומוטו שניסה ליצור שפה חדשה שתאזן בין תכנות פונקציונלי ותכנות אימפרטיבי.
מאטסומוטו אמר "רציתי שפת סקריפטים עם יותר כוח מפרל ויותר מונחת עצמים מפייתון".
בתקופה זו פיתחה חברת מיקרוסופט את שפת Visual Basic שהייתה מבוססת על בייסיק ופסקל.
שפה זו שהכניסה לשימוש את התכנות החזותי הייתה ידידותית ונוחה לפיתוח והפכה להיות פופולרית מאוד.
במקביל לפיתוח שפות אלו חברת סאן מיקרוסיסטמס פיתחה את שפת Java, בין השנים 1991 ל-1995. מפתחי השפה הקפידו שלשפה זו לא יהיו ניבים, כך שתוכנית שנכתבה באמצעותה תוכל להתבצע על כל מחשב התומך בשפה, אפילו ללא צורך בהידור נפרד.
לתכונה זו חשיבות מיוחדת בסביבת האינטרנט, שבה תוכנה הנשלחת לדפדפן עשויה להתבצע על מחשבים מדגמים שונים.
בשנת 2000 פותחה השפה #C על ידי צוות מחברת מיקרוסופט שבראשו עמד אנדרס הלסברג.
שפה זו נבנתה עבור תפיסת .NET אשר ראתה אור בשנת 2002. שפה זו מבוססת על השפות Java ו-++C, ועוצבה במטרה ליצור שפה מונחית-עצמים פשוטה, מודרנית וכללית.
כאנטיתזה למורכבותן ועושרן ההולכים וגדלים של שפות התכנות, יצר אורבן מולר, בערך בשנת 1993, את שפת התכנות BF, שבה שמונה פקודות פשוטות בלבד, והיא למעשה מימוש של מכונת טיורינג.
רשת האינטרנט נתנה דחיפה לפיתוחן של שפות תכנות אחדות:
שפות לפיתוח יישומי אינטרנט בצד הלקוח.
השפה העיקרית בקטגוריה זו היא JavaScript, שפותחה על ידי חברת Netscape Communications כשפת תסריט שהדפדפן פועל כמפרש שלה.
שפה זו העניקה לדפדפן את היכולת לעבור מהצגה סטטית של מידע להצגת דפים דינמיים.
התקן לשפה זו קרוי EMCAScript.
שפה שהותאמה על ידי חברת מיקרוסופט למטרה זו היא VBScript, שהיא וריאציה פשוטה של Visual Basic.
שפות לפיתוח יישומי אינטרנט בצד השרת, ובהן PHP, שהיא השפה שבה כתובה התוכנה המשרתת את ויקיפדיה, למשל.
שפת תכנות אזוטרית (Esoteric programming language, לפעמים מקוצר ל-esolang) היא שפת תכנות שנועדה לבחון את גבולות עיצוב שפת תכנות המחשב, כהוכחה לתפיסה, כאומנות תוכנה, כממשק פריצה לשפה אחרת (במיוחד שפות תכנות פונקציונליות או שפות תכנות פרוצדורליות), או כבדיחה.
השימוש בשפות ה-esolang נבדל משפות תכנות בהן מפתחים משתמשים לכתיבת תוכנה.
אלו שפות תיכנות לכל דבר, עם כללים, דקדוק, ולעיתים תווים ומילים שמורות, אך כיוון שהתחביר הוא לרוב מינימילי, התכנות בהן לעיתים מאוד ארוך ו/או מסובך.
השפה האיזוטרית הראשונה היא INTERCAL שנוצרה בשנת 1972, ומאז שפות אלו מתפתחות במקביל להתפתחות השפות המקובלות, אך נעשות יותר ויותר לא קונבנציונליות.
מבנה של שפת תכנות קלאסית
רוב שפות יבנו בצורה של שפת תכנות דינמית וניתוח תוכנה דינמי והתכנות יורכבו מהמרכיבים הבאים:
הצהרות הן הוראות כלליות לתוכנה, כך למשל אפשר להצהיר על מיקומה של פונקציה בקובץ מסוים.
ואפשר להצהיר על דרך פעולתה של התוכנה, או על סוגי טיפוסים של משתנים.
הכרזות הן הוראות ליצירת קבועים ומשתנים בפועל.
בניגוד להצהרה, הכרזה יוצרת בפועל עותק של קבוע או משתנה בזיכרון.
הטיפוסים הם הסוגים המיוחדים של קבועים ומשתנים.
ישנם טיפוסי מערכת וישנם טיפוסי משתמש שאפשר להגדיר בתוכנה.
טיפוסי המשתמש יוגדרו כקבוצה של טיפוסי מערכת (אפשרי מכמה סוגים) שקיימים באופן מובנה בשפה.
הקבועים הם שטחים בזיכרון שמוגדרים בשם, מסוג של כל טיפוס, שערכם קבוע ואינו יכול להשתנות במהלך הרצת התוכנה.
השימוש בקבועים נועד להקל על ייצוג של מספרים ארוכים ידועים ונועד לרכז ערכים.
משתנים הם כשמם, שטחים בזיכרון שמוגדרים בשם ומכילים ערך בר שינוי, שהתוכנה אמורה לשנות במהלך הרצתה.
ישנם טיפוסי מערכת של המשתנים.
(טיפוסי המשתנים הנפוצים הם: מספר (באורכים שונים), נקודה צפה, בוליאני (כן ולא), אלפאנומרי (כל תו, משמש למחרוזות) ומצביע.
בשפות מתקדמות יש גם משתנים מסוג מטבע, תאריך, אובייקט, אוספים) וישנם גם מבנים מורכבים של משתנים, הכוללים מערכים ומבנים.
לפני השימוש במשתנה יש להכריז עליו.
לכל שפה יש סדרה של מילים בעלות משמעות לזיהוי ההוראות המוכרות לשפה.
כך למשל ל-include בשפת C יש משמעות שקובץ מקודד מסוים יהיה נכלל בתוכנה.
בחלק מהשפות אלה הן מילים שמורות, כלומר אסור להשתמש בהן כשמות של משתנים, ובאחרות אין הגבלה כזו.
בכל שפה קיימת קבוצה של אופרטורים, שהם פונקציות בינאריות המיוצגים בדרך כלל באמצעות תו או מילה המופיע בין שני המשתנים (האופרנדים) שעליהם פועל האופרטור.
חלק מהאופרטורים שווים בכל שפות התכנות, וחלקם משתנים משפה לשפה.
ישנן שפות בהן ניתן להוסיף או לשנות אופרטורים, במיוחד בהקשר של מחלקות חדשות.
מבני הבקרה הם פקודות המשמשות לבקרת הזרימה של התוכנית.
בין מבני הבקרה אפשר לציין תנאים ולולאות.
בתנאי אפשר לקבוע שקטע קוד יתקיים רק במקרה מסוים, בלולאה אפשר להורות למחשב לבצע קטע קוד מספר מסוים של פעמים, או רק כאשר תנאי מסוים מתבצע או לא מתבצע.
שגרה או פרוצדורה היא מקטע קוד שלם, שמבצע תהליך תכנותי, ושיש לו משמעות משלו.
יש שפות שאין בהן הבחנה ברורה בין שגרה לבין פונקציה.
כדי להפעיל את השגרה יש לקרוא לה באמצעות כתיבת שמה.
פונקציה היא מקטע קוד שלם, שמקבל פרמטרים מבצע תהליך ומחזיר ערך כל שהוא.
כדי להפעיל את הפונקציה יש לקרוא לה באמצעות כתיבת שמה.
אם קוראים לפונקציה מתוך עצמה מתקבלת רקורסיה.
המעבר לממשק משתמש גרפי, ובפרט הפיכתה של מערכת ההפעלה Windows לדומיננטית, יצר מגמה הולכת ומתפשטת להעניק לשפות התכנות ייצוג חזותי, שהחלה בסביבות פיתוח דוגמת ויז'ואל סטודיו, Asymetrix ToolBook, פאואר בילדר, אובג'קט ויז'ין (ObjectVision) ודלפי, ומחוללי יישומים כדוגמת Oracle JDeveloper ו-אקסס.
התכנות החזותי מקצר את תהליך הפיתוח, מקל על תחזוקת התוכנה, ופותח את עולם התכנות לשכבה נוספת של אוכלוסייה, שהייתה מתקשה לפתח בשפות כדוגמת שפת C.
בתכנות תווי רגיל יש לכתוב את הוראות התכנות באופן מילולי, לרוב בשפה דמוית אנגלית, שורה לאחר שורה, ואת התוצאה ניתן לראות בזמן ריצה רק לאחר הידור התוכנית.
בתכנות חזותי, הקוד התכנותי מיוצג באמצעות ציור של סמלים גרפיים שונים על טפסים, ומחולל אותו, ולכן הוא יותר אינטואיטיבי ופשוט.
כך למשל ב־VB ושפות דומות נוספות מודולי תוכנה הקרויים פקדים, והם למעשה מחלקות תכנותיות, מיוצגים באמצעות צלמיות.
ציורם על גבי משטח הטופס באמצעות עכבר, מקביל לפעולת הכרזה של משתנה, ומאפשר להשתמש בשיטות, במאפיינים ובאירועים הקיימים בקטעי תוכנה אלו.
באמצעות פעולות העכבר ניתן אף ליצור שגרות לוכדי אירועים שמתייחסים לפקדים אלו.
התכונות והאירועים של הפקד מתקבלים בגיליון טבלאי שמאפשר לסקור אותם ולשנותם, חלק מהתכונות כמו צבעים, גופנים, תמונות, וצורת סמן עכבר ניתן לשנות מתוך תיבות דיאלוג, שלעיתים יש בהן המחשה של מראה התכונות כפי שיראו בזמן ריצה.
ניתן למקם פקדים בטופס באמצעות גרירת עכבר.
לעיתים ניתן ליצור הקשר פונקציונלי תכנותי בין שני פקדים, באמצעות גרירת ייצוג גרפי של פקד והשלכתו על פקד שני.
צורת התכנות הזו מאפשרת התמצאות טובה בתוכנה, מפני שניתן לסקור במהירות את רכיבי התוכנה.
ניתן לנווט בקלות מפקד אל הסקריפט התכנותי שלו.
כמו כן, ניתן לראות פריסה של תכונותיהם והאופציות הקיימות בכל תכונה ואף כל הפונקציות השייכות להם, כל זאת בזמן התכנות עצמו, בניגוד לתכנות רגיל שבו צריך להדר את התוכנית כדי לראות את התוצאה הסופית.
בשפות התכנות החזותיות, ציור הפקדים על הטופס, הגדרת מאפיינים ודרך פעילות של הפקדים באמצעות בחירת ערכים מתיבות משולבות, יוצר את הקוד המתאים לטיפול בממשק המשתמש ובפונקציונליות כללית של התוכנה.
בשפות אלו גם העורכים הטקסטואליים עצמם תומכים בייצוג החזותי הזה, ונותנים רשימה של ערכים אפשריים תלויי הקשר בזמן כתיבת הקוד, שמקלים על איות הנכון ללא שגיאות ועל בחירה מדויקת של הפונקציה הרצויה.
הסביבה גם נותנת רשימות נפתחות של פונקציות ואירועים שקיימים במסגרת העבודה הנוכחית ואף תצוגות נוספות כמו תצוגת עץ היררכית שמקלה על הניווט בפונקציות שבתוכנה.
עם זאת בדרך כלל בשפות אלו הדרך הישנה לא התבטלה, וניתן גם ליצור את הקוד בכתיבה טקסטואלית.
המשך המגמה הזו הוא ביצירת אשפים שבהם בוחרים ומגדירים תכונות רצויות לרכיב כלשהו בתוכנה.
לאחר סיום הגדרת התכונות, האשפים יוצרים את הטפסים, יחד עם הפקדים והקוד הדרוש.
אשפים אלו מקלים ומזרזים היבטים מסוימים של תכנות, אך אינם משנים משמעותית את אופי תהליך התכנות.
היבטים של מגמה זו השפיעו גם על השפות הטקסטואליות #C ו־Java, באמצעות עורכי טפסים ואשפים ליצירת קוד.
ברוב מסדי הנתונים נכנסו דפוסים שונים לעיצוב חזותי ועבודה עם מסד הנתונים.
אחד המפורסמים שבהם הוא QBE – שהיא שיטה לתכנון ויצירת שאילתות SQL באמצעות עבודה על הייצוג הגרפי שלהן באמצעות העכבר.
ישנם כלים מיוחדים שמאפשרים לשרטט סכמה חזותית של ארכיטקטורת מסד הנתונים (ERD) שמומר לקוד ליצירת מסד נתונים.
שפת סף או אַסֶּמבּלי היא שפת התכנות הבסיסית והקרובה ביותר לשפת מכונה.
בשפת הסף, בצורתה הבסיסית, קיימת התאמה בין ההוראות שכותב המתכנת ובין ההוראות המופקות מהן בשפת מכונה, כלומר, כל הוראה יחידה באסמבלי מתורגמת להוראה אחת או יותר בשפת מכונה.
לכן, כמו שפת המכונה, גם שפת הסף פועלת באופן ישיר על תאי הזיכרון של המחשב, על האוגרים הפנימיים של המעבד ועל יציאות הקלט/פלט של המחשב, ובפרטנות רבה.
כתוצאה מכך, לכל סדרת מעבדים יש שפת סף משלה, כתלות בסט הפקודות של המעבד.
תכנות בשפת סף נחשב לקשה הרבה יותר מבשפות התכנות העיליות, בין היתר משום ששפת סף אינה אינטואיטיבית וקלה לקריאה כמו השפות העיליות.
תכנות בשפת סף, במיוחד כזה הנחשב ליעיל, מחייב להכיר היטב את חומרת המחשב, בעוד שבשפות עיליות המהדר דואג להתאימן לחומרה.
מעבר לכך, לשם ביצוע כל פעולה, ולו הפשוטה ביותר, עשויות להידרש הוראות שפת סף רבות.
לדוגמה, כדי להציב במשתנה A את סכומם של המשתנים B ו־C, מספיקה בשפה עילית פקודה יחידה מצורה דומה ל־ A := B + C.
באסמבלי, לעומת זאת, הפעולה תהיה ארוכה יותר, לדוגמה:
mov ax, B – העבר את הערך B אל אוגר ax
add ax, C – הוסף את הערך C לערך שנמצא באוגר ax
mov A, ax – העבר את הערך שנמצא באוגר ax אל הכתובת של המשתנה A
התכנות בשפת סף היה נפוץ למדי ואפילו דומיננטי, למרות הקושי שבו, עד לתחילת שנות ה־70 של המאה העשרים, וזאת בשל משאבי המחשב המוגבלים שעמדו לרשות המתכנתים ובשל היכולת ליצור קוד יעיל במהירות־הביצוע וחסכוני בזיכרון, יותר מקוד שנוצר בשפות עיליות.
בעקבות השתכללות המהדרים של השפות העיליות, לא נותר עוד הבדל משמעותי שיצדיק את הטרחה שבכתיבה בשפת סף, והשימוש בה נדיר כיום.
כיום היא משמשת בעיקר כותבי מערכות הפעלה, מפתחים של חלקי תוכנה שדרושים להם ביצועים מהירים במיוחד או תקשורת ישירה עם רכיבי חומרה (כמו מנהלי התקנים), וכן כותבי וירוסים מתוחכמים.
המהדר של שפת הסף, המתרגם את קובצי ההוראות לשפת מכונה, נקרא אסמבלר (Assembler).
בגלל ששפת סף תלויה בקוד המכונה שספציפי למערכות מחשוב שונות, כל שפת סף יכולה לשמש רק לארכיטקטורת מחשב מסוימת.
נכון לשנת 2020, חלק גדול מהמעבדים בשוק מבוססים על סדרת 8086 של אינטל, וגם שפת הסף שלהם מבוססת על שפת הסף של המעבד אינטל 8086.
היות ששפת אסמבלי עוסקת בגישה ישירה לזיכרון ולהתקנים חיצוניים (באמצעות out ו־in), רצוי להכיר מספר עקרונות מנחים בסיסיים:
ארכיטקטורת פון נוימן – על פי ארכיטקטורה זו, אשר פותחה על ידי מדען המחשב והמתמטיקאי ג'ון פון נוימן במאה ה־20, הנתונים וההוראות מאוחסנים באותו זיכרון.
המחשב עצמו מחולק ל־4 רכיבים מרכזיים:
זיכרון – מכיל נתונים, כתובות, והוראות
מעבד – מקבל, מפרש ומריץ את ההוראות מהזיכרון
התקנים חיצוניים (I/O – Input/Output) – כגון מקלדת, עכבר, רמקול, מיקרופון או דיסק און קי.
אפיקי נתונים (Busses) – פסים אלו אחראים להעברת נתונים, הוראות, ופקודות בקרה בין המעבד, הזיכרון, וההתקנים החיצוניים.
בעבר, רוחב של אפיק נתונים היה בגודל "מילה" (16 סיביות) או 32 סיביות ("מילה כפולה" – Double Word), אך ברוב המחשבים היום הוא 64 סיביות.
כתיבת הקוד בשפת סף מחולקת למספר שדות הנקראים מקטעים (segments).
במקטע אשר מיועד ליצירת משתנים, יש ליצור משתנים.
במקטע אשר נועד להגדרת , יש להגדיר מחסניות.
במקטע אשר מיועד לכתיבת קוד, יש לכתוב קוד, וכן הלאה.
המקטעים נקראים בשמות שונים בסביבות עבודה שונות.
טקסט זה יכיל את 3 המקטעים העיקריים:
מקטע המידע – data segment, נקרא לעיתים DATASEG
מקטע הקוד – Code Segment, אשר נקרא לעיתים CODESEG
אחת מסביבות העבודה הנוחות ביותר ללמידת שפת סף היא Emu8086 אשר פועלת במערכת ההפעלה Windows.
סביבה זו היא בעצם אמולציה של המעבד הישן 8086 של אינטל (אשר פתח את סדרת מעבדי x86).
אוגרים (Registers) הם יחידות זיכרון של המעבד שבאמצעותן מתבצעות פעולות שונות.
למעבד לוקח זמן מאוד קצר לגשת אליהם ולכן שימוש בהם הוא יעיל.
האוגרים בטבלה להלן נכונים לדור הבסיסי של מעבד 8086 – כיום נעשו שינויים – הוסיפו ושינו אוגרים בהתאם להתפתחות הטכנולוגיה.
למשל ax, שגודלו 16 סיביות הוא חלק מאוגר eax שגודלו 32 סיביות (Double Word).
עם זאת, האוגרים המצוינים בטבלה עדיין תקפים מפאת עקרון התאימות לאחור של מעבדי אינטל (קוד שנכתב למעבד ישן יותר יהיה ניתן להרצה על מעבד חדיש יותר).
כל אחד מארבעת האוגרים ax, bx, cx ו־dx מורכב מ־2 אוגרים של 8 ביט – h (high) ו־l (low).
שינוי של אחד מהאוגרים הקטנים יוביל לשינוי אוגר גדול, ולהפך – שינוי של אוגר גדול יוביל לשינוי של האוגרים הקטנים.
לדוגמה, אם נשנה את al, ערך ax ישתנה בהתאם, ולהפך.
+האוגרמספר סיביותתפקידax (Accumulator Register – צובר)
מורכב משני אוגרים של 8 ביט: al, ah16משמש לפעולות אריתמטיות ולוגיות.
ניתן לבצע זאת באוגרים אחרים, אך השימוש ב־ax בדרך כלל יעיל יותר.bx (Base Address Register – כתובת בסיס)
מורכב משני אוגרים של 8 ביט: bl, bh16משמש לשמירת כתובות בזיכרוןcx (Count Register – מונה)
מורכב משני אוגרים של 8 ביט: cl, ch16המונה מונה דברים, כגון כמות הפעמים שהלולאה בוצעה, או כמות תווים בקובץ או במחרוזת.dx (Data Register – מידע)
שינוי אוגר זה עלול לגרום לתקלות בתוכנית, ולכן אין לשנותו אלא אם המתכנת פועל בזהירות ומתוך ידיעת ההשפעות של הזזת מיקום המחסנית בזיכרון.ip – קיצור של Instruction Pointerמצביע על כתובת הזיכרון שתוכנה עומד לעיבוד.
לדוגמה, דגל האפס (zero flag) "יוּרם" (יהפוך מ־0 ל־1) כאשר תוצאה של פקודה כלשהי תהיה 0.
פקודות מובנות באסמבלי יכולות לקבל בין 0 ל־2 ערכים.
הן מבצעות פעולות לוגיות ואריתמטיות כגון השמה, חיבור, חיסור, כפל, חילוק, השוואה, קפיצות (jmp), קפיצות מותנות (je, jne, jb, ja וכו').
+הפקודהמספר האופרנדיםמה היא עושהדוגמאותmov a, b2 (פעולה בינארית)השמה
mov bx,axadd a, b2 (פעולה בינארית)חיבור
add ax,6sub a, b2 (פעולה בינארית)חיסור
dec dhneg a1 (פעולה אונארית)מינוס
neg axmul a1 (פעולה אונארית)כפל, ושמירה של התוצאה באוגר ax
ax = ax * aimul a1 (פעולה אונארית)כפל של מספרים לא מסומנים (unisigned)
את ערכו כל ריצה ב-1.
לסיקור מקיף יותר של שפת סף, ניתן לגשת למדריך בוויקיספר העברי.
שפת סימנים הוא כינוי לכל אחת מהשפות הטבעיות שמשתמשות בתנועות ידיים, מחוות גוף והבעות פנים כאמצעים העיקריים להעברת מסרים וליצירת תקשורת בין המתקשרים, בין אם הם אילמים ובין אם לא.
השימוש בשפת הסימנים מאפשר שמירה על השקט.
זאת בניגוד לשפה מדוברת, שבה האמצעי העיקרי הוא הקול המופק בחללי הפה, האף והגרון.
האוכלוסייה העיקרית שמשתמשת בשפת סימנים היא אוכלוסיית החירשים וכבדי-השמיעה, בעיקר אלה שנולדו כבדי-שמיעה או שלקו בשמיעתם בגיל צעיר.
קהילת החירשים קבעה כי שפת סימנים "כולית" היא שפה אותנטית ("ילידית"), ובישראל מסומנת שפה זו כ"פה" (FA).
לשפת הסימנים הישראלית אוצר מילים עשיר, שאינו חופף לחלוטין לזה של השפה המדוברת.
בכל אחת מהשפות ניתן למצוא מילים שאין להן תרגום בשפה השנייה.
במקומות שונים בעולם משמשות שפות סימנים שונות, ואין בהכרח יכולת לדובר שפת סימנים אחת להבין דובר בשפת סימנים אחרת.
הבחנה בין "שפת סימנים כולית" ל"שפה מסומנת"
שפת סימנים "כולית"/fa היא כזו בה פחות משתמשים באיות, ובעלת מבנה ודקדוק לשוני מורכב השונה מהשפה המדוברת.
במקומות רבים קיימת בצד שפת הסימנים "שפה מסומנת", בה יש יותר שימוש באותיות בסימנים שונים.
גם השפות המסומנות משתמשות במחוות במקום בקול, אולם הן מלאכותיות, ונוצרו כדי להקל על התקשורת בין דוברי שפות סימנים לדוברי שפות מדוברות.
השפה המסומנת מחקה את התחביר של השפה המדוברת העיקרית באזור, בעוד שלשפת הסימנים הכולית יש תחביר משלה, המצמצם שימוש במילות יחס וקובע סדר שונה של חלקי המשפט.
המבנה של שפות הסימנים השונות נחקר על ידי בלשנים רק בשנים האחרונות.
לכך מספר סיבות: ראשית, רוב שפות הסימנים נוצרו רק במאתיים השנים האחרונות, ורק ב-30–40 שנים האחרונות הכירה בהן קהילות הבלשנים והמחנכים כשפות לכל דבר.
בתקופות מסוימות אף ראו בשפות הסימנים מכשול לשילוב החירשים בחברה, ולפיכך מחנכים ומורים לחירשים ניסו למנוע מהם להשתמש בשפת סימנים, ולהכריח אותם להשתמש בשפה המדוברת או בקריאת שפתיים.
כיום מקובל לראות בחירשים קהילה דו-לשונית, ומיישמים לגביהם את המדיניות הנהוגה לגבי מיעוטים לשוניים.
שנית, בלשנים שומעים, שאינם דוברים ילידיים של שפת סימנים כלשהי, מתקשים לעמוד על כל צורות הביטוי של שפות אלו.
פריצת דרך נעשתה כשבלשנים החלו לשתף חירשים, דוברים ילידיים של שפות סימנים, במחקריהם, ובמיוחד כשהוכשרו בלשנים חירשים שהחלו לחקור את שפתם.
בנוסף לכך, התפתחות הבלשנות המודרנית ובייחוד התאוריה של נועם חומסקי הגורסת כי יש דקדוק אוניברסלי ויש מבנים מוחיים מולדים האחראים להפקת השפה, הביאו להתעניינות בשפות סימנים כשפות בעלות אמצעי ביטוי לא-שגרתיים.
ההנחה הייתה שאם יימצא דמיון בין שפות הסימנים לשפות המדוברות, יהיה בכך להוכיח את תאוריית הדקדוק האוניברסלי, ובעקיפין גם את תאוריית המולדות של השפה.
עד כה התגלה דמיון רב בין שפות הסימנים לשפות המדוברות, אולם גם שוני לא-מבוטל.
חלק גדול מהממצאים בסוגיה זו נתונים לפרשנויות שונות.
בכל שפות הסימנים שנחקרו נמצא כי מילה (כלומר, סימן) בנויה משלושה מרכיבים הכרחיים: צורת כף-היד, תנועת כף-היד ומיקום כף-היד ביחס לגוף.
שינוי בכל אחד מהמרכיבים האלה מביא לשינוי במשמעות.
פעמים רבות, שינוי קל באחד המרכיבים, למשל תנועה מקוטעת במקום תנועה רציפה, יוצר הבחנה מורפולוגית, למשל: שם עצם ופועל הנגזר ממנו.
רוב הסימנים מבוצעים באמצעות כף היד, ובחלל המקביל לפנים, לחזה ולבטן.
יש גם סימנים הכוללים תנועות כתפיים או איברי גוף אחרים אולם הם מעטים יחסית.
מחקרים הראו שבמהלך ההתפתחות ההיסטורית של שפות הסימנים, מוחלפים סימנים המערבים איברי גוף שונים בסימנים המבוצעים בכפות הידיים בלבד, ומול חלק הגוף העליון בלבד.
צירוף של סימנים יכול ליצור מילה חדשה, ולפעמים אף נוצר סימן משילוב מרכיבים של שני סימנים שונים.
מרכיב בסימן יכול להצביע על תכונה תחבירית שלו, למשל, כיוון התנועה יכול להצביע על יחסה (ואז שינוי כיוון התנועה מבטא שינוי ביחסה).
אינטונציה מובעת באמצעות הבעות פנים.
כך, לפי הבעת הפנים של המסמן אפשר להבין אם המשפט הוא משפט חיווי, משפט שאלה, קריאה וכיוצא בזה.
שפות סימנים, בייחוד שפות סימנים צעירות, נוטות להיות איקוניות הרבה יותר מאשר שפות מדוברות.
כלומר, פעמים רבות המסמן משרטט בידיו את האובייקט שהוא מתכוון אליו, או מבצע תנועה המזכירה את הפעולה שהוא מתכוון אליה.
עם זאת, קשה לנבא אילו תכונות של האובייקט או הפעולה יבואו לידי ביטוי בסימן, ואילו יוזנחו - בעניין זה יש חשיבות למוסכמות תרבותיות.
ככל ששפת סימנים מתפתחת במהלך הדורות, סימניה הופכים יותר שרירותיים ופחות אייקוניים.
בשפת הסימנים האמריקנית הסימן ל"בית" הוא גלגול של צירוף הסימנים "לאכול" ו"לישון".
בשפת הסימנים הישראלית, בית מסומן באמצעות יצירת זווית בין כפות הידיים, מעין חיקוי של צורת גג רעפים.
שני הסימנים אייקוניים, אולם כל סימן מבודד תכונה אחרת של העצם המתואר.
כמו כן, הסימן הישראלי לא היה יכול להיווצר במקומות שבהם אין גגות רעפים.
בשפת הסימנים האמריקנית קרתה התפתחות נוספת: הסימן "לאכול" הוא משיכה של היד לכיוון הפה מלמטה למעלה, מתוך חיקוי לתנועה של הרמת האוכל מהצלחת אל הפה.
הסימן "לישון" הוא הצמדת כפות הידיים לאוזן והטיה של הראש, כחיקוי לתנוחת הראש בזמן השינה.
צירוף הסימנים, שיוצר את הסימן ל"בית", היה תחילה ביצוע של שני הסימנים ברצף, אבל כיום הוא נראה כמו משיכה של כף היד מן הפה אל האוזן.
זוהי דוגמה לסימן שמלכתחילה היה אייקוני, אולם עם התפתחות השפה הוא הפך לשרירותי, כלומר אין עוד קשר שקוף בין הסימן למסומן.
תינוק שנחשף לשפת סימנים, רוכש אותה באופן טבעי כמעט כפי שנרכשת שפה מדוברת.
לפעמים אפילו נצפה "מלמול" בתנועות ידיים בדומה לשלב המלמול המקדים רכישת שפה מדוברת.
רוב התינוקות שנחשפו לשפת סימנים החלו לסמן בגיל צעיר יותר מהגיל הממוצע של תחילת הדיבור.
ההערכה היא כי הדבר נובע מהשליטה בידיים שמתפתחת מהר יותר מאשר השליטה באיברי הדיבור בחלל הפה והאף.
השלבים ברכישת שפת סימנים דומים מאוד לשלבים ברכישת שפה מדוברת, ואף נצפו טעויות דומות ברכישת שני סוגי השפות.
תינוקות שרכשו שפת סימנים מדווחים בבגרותם כי שפת הסימנים היא כשפת אם מבחינת יכולת השליטה שלהם בה ותחושת הנוחות והביטחון שהשימוש בה מקנה להם.
היווצרות ספונטנית של שפות סימנים
שפת סימנים נוצרת באופן טבעי במקומות שבהם אוכלוסיית כבדי השמיעה גדולה במיוחד .
יש עדויות כתובות לשפות סימנים בכמה כפרים באנגליה במאה ה-17. גם בארץ התגלתה לאחרונה שפת סימנים שנוצרה באופן ספונטני בקרב כבדי השמיעה בכפר הבדואי א-סייד שבנגב.
דוגמה מרתקת היא שפת הסימנים של ניקרגואה, שמקובל לראותה כדוגמה נדירה בימינו ליצירת שפה טבעית יש מאין.
יש המשווים בין היווצרות שפת הסימנים של ניקרגואה להיווצרות השפות הקריאוליות, אולם יש גם הבדלים משמעותיים בין המקרים.
ידועים רק מקרים ספורים שבהם יצרה אוכלוסייה של אנשים שומעים שפת סימנים באופן ספונטני, וגם במקרים כאלה השפות נוצרו בצד השפות המדוברות, כשיטת תקשורת למצבים מיוחדים שבהם אין אפשרות להשתמש בקול.
נראה שהשימוש בקול הוא בררת המחדל בהיווצרות שפות אנושיות טבעיות, ורק במקרים שבהם אפשרות זו נחסמת נעשה שימוש באמצעים אחרים.
עם זאת, ההיווצרות הספונטנית של שפות סימנים מעידה על כך שהיכולת הלשונית האנושית אינה קשורה בהכרח באיברי הדיבור והשמיעה, וכי בני אדם מוצאים באופן טבעי דרכים לממש את היכולת הזאת גם כשהערוצים הרגילים למימושה חסומים.
דוגמאות נדירות להיווצרות שפות סימנים בקרב שומעים הן שפות הסימנים שהתפתחו בקרב אבוריג'ינים באוסטרליה.
שפות אלה התפתחו עקב כללים של טאבו על דיבור במצבים חברתיים מסוימים כגון אבל או טקסי חניכה.
שפת הסימנים המפותחת ביותר מסוג זה היא שפת הסימנים של וורלפירי, שנוצרה בקרב נשים מבנות הקבוצה האבוריג'ינית, עקב האיסור החברתי על אלמנות לדבר במשך חודשים ולפעמים אף שנים אחרי מות הבעל.
כיוון שלעיתים קרובות נהגו אלמנות לפרוש מהקהילה ולחיות בחברת אלמנות אחרות או נשים רווקות בלבד, הפכה שפת הסימנים הזאת לאמצעי תקשורת נפוץ בין נשים.
בסופו של דבר גם גברים החלו להשתמש בה לתקשורת במצבים שבהם הדיבור בלתי אפשרי או מפריע, כמו בזמן ציד, בעת מחלה שמקשה על הדיבור, ולפעמים גם במצבים שבהם נדרש כובד-ראש, כשדיבור בקול נתפס כבלתי ראוי או כחוסר כבוד.
מבין השולטים בשפת הסימנים הזאת, יש המדברים ומסמנים בעת ובעונה אחת.
הבלשן הבריטי אדם קנדון שחקר שפות סימנים בפפואה ניו גיני ובאוסטרליה גורס ששפת הסימנים של וורלפירי, אף שהיא נראית כשפה טבעית, דומה יותר לשפות מסומנות.
לדעתו התחביר, המורפולוגיה והלקסיקון של שפת הסימנים הזו כמעט זהים לתחביר למורפולוגיה וללקסיקון של השפה המדוברת במקום, אלא שהמילים והיחידות המורפולוגיות מקודדות במחוות במקום בקול.
בתי ספר לחירשים והיווצרות שפות סימנים
עד המאה ה-18 נוצרו באופן טבעי מעט מאוד שפות סימנים.
בשנת 1760 הוקם בית הספר הראשון לחירשים בצרפת.
זה היה הניסיון הראשון לאסוף אנשים חירשים למקום אחד בצורה מכוונת, כדי להעניק להם חינוך שעונה על צורכיהם המיוחדים.
אַבֶּה דֶה-לֶפֶּה (Abbé de l'Épée), שהקים את בית הספר, גילה שיש לחלק מתלמידיו שפת סימנים, והוא השתמש בה כאמצעי לימוד.
הוא גם יצר שפה מסומנת שהתבססה על התחביר הצרפתי מחד ועל סימנים שלמד מתלמידיו מאידך, והשתמש בה ככלי להוראת צרפתית לחירשים.
בעקבות ההצלחה של אַבֶּה דֶה-לֶפֶּה הוקמו בתי ספר לחירשים ברחבי אירופה וארצות הברית.
בזכות היווצרות ריכוזים של אנשים כבדי שמיעה עקב הקמת בתי הספר האלה, התפתחו שפות הסימנים הקיימות ונוצרו שפות סימנים חדשות.
תופעה נוספת שנוצרה בבתי הספר לחירשים היא התלכדות של שפות סימנים מקומיות שונות לשפת סימנים ארצית אחת.
שפות סימנים ארציות כאלה הן עשירות יותר באוצר מילים, מתועדות היטב, ויכולות לפיכך לשמש את כבדי השמיעה במגעיהם עם הרשויות, למשל בעת מתן עדות בבית משפט.
שפת הסימנים האמריקנית היא שפת סימנים ארצית והמעניין לגביה הוא שעם התפתחות טכניקות וטכנולוגיות אחרות לסיוע ללקויי שמיעה נעשה ניסיון לדכא שפה זו מתוך מחשבה שאין בה יותר צורך ושהיא הפכה למכשול בפני שילוב בחברה השומעת.
הפעיל הבולט בניסיון דיכוי זה היה הממציא אלכסנדר גרהם בל.
למרות שנאסר שימוש בשפה זו בבתי הספר לחירשים למשך עשורים אחדים, בתי ספר אלה המשיכו להיות מרכזי הפצת השפה משום שהתלמידים למדו אותה זה מזה בהיחבא במהלך ההפסקות.
ב-1873 פתח מרכוס רייך בית ספר יהודי לחירשים בגרמניה.
בית ספר זה נחשב בזמנו לאחד הטובים בעולם בתחומו, ולפיכך הגיעו אליו תלמידים יהודים חירשים מכל רחבי העולם, ואף תלמידים לא-יהודים.
מורים מבית הספר הזה הקימו ב-1932 את בית הספר העברי הראשון לחירשים בירושלים.
בהדרגה החלה להתפתח שפת הסימנים הישראלית (שס"י), שהיא דומה למדי, גם היום, לשפת הסימנים הגרמנית.
בשנות ה-40 כבר הייתה בארץ קהילת חירשים יהודים מגובשת עם שפת סימנים משלה.
שפת הסימנים הישראלית היא היום אמצעי התקשורת המוכר והנלמד בקרב ישראלים כבדי שמיעה.
קיימת גם שפה מסומנת שמשמשת לתקשורת בין דוברי עברית שומעים לדוברי שפת סימנים ישראלית.
עברית משמשת לדוברי שפת הסימנים הישראלית כשפה שנייה, והם חווים קשיים דומים לאלה שיש למיעוטים לשוניים אחרים, כגון עולים חדשים או ערבים ישראלים.
בין היתר, הם זקוקים לשירותי מתורגמנות, לא רק בשל קשיי השמיעה, אלא גם משום שקל להם יותר להתבטא בשפת-אמם, שהיא שפת הסימנים הישראלית.
במגזר הערבי בישראל קיימות כמה שפות סימנים אחרות שמשמשות קהילות קטנות של כבדי שמיעה, אולם ערבים ישראלים רבים לומדים את שפת הסימנים הישראלית.
קשרים בין שפות סימנים לשפות מדוברות
קהילות של חירשים דוברי שפות סימנים הן כמעט תמיד דו-לשוניות.
זאת משום שהחירשים חייבים ללמוד את השפה המדוברת כדי להשתלב בחברת השומעים שסביבם.
לימוד השפה המדוברת נעשה באמצעות לימוד קריאת שפתיים, שימוש בשפה מסומנת או באמצעות קריאה וכתיבה.
לרוב שפות הסימנים יש מערכת של סימון אותיות האלפבית של השפה המדוברת המקומית.
פעמים רבות נשאלת מילה מן השפה המדוברת לשפת הסימנים באמצעות אימוץ האיות שלה כצירוף-סימנים בפני עצמו.
בנוסף, משתמשים חירשים רבים ב"הגייה" או תנועות שפתיים (באנגלית הדבר מכונה: mouthing).
"הגייה" היא הנעת השפתיים באופן הנראה כהגיית המילה בשפה המדוברת, תוך כדי סימון סימן בעל משמעות דומה בשפת הסימנים.
למשל, הגיית המילה "וילה" תוך כדי סימון "בית".
עם זאת, יש גם מקרים של הגייה שאין להם קשר לשפה המדוברת, והם משמשים כתכונה נוספת, שרירותית, של הסימן.
לפי אמונה שהייתה רווחת בעבר, שפת סימנים היא שפה דלה שאינה אלא פנטומימה והצגה חזותית ופשטנית של הדברים הנאמרים, ולא ניתן להביע באמצעותה רעיונות מופשטים ומורכבים.
אולם בעשורים האחרונים של המאה ה-20 בלשנים התחילו לחקור ביתר רצינות את שפת הסימנים והגיעו למסקנה כי מדובר בשפה לכל דבר, בעלת אוצר מילים עשיר ודקדוק מורכב - ממש כמו כל שפה טבעית אחרת.
עוד תפישה שגויה ונפוצה היא ששפת סימנים היא שפה בינלאומית.
כשם שיש מגוון גדול של שפות מדוברות, כך יש מגוון גדול של שפות סימנים שמשתנות ממדינה למדינה, מאזור לאזור ובמקרים מסוימים גם מעיר לעיר.
כך שונה שפת הסימנים הישראלית משפת הסימנים האמריקאית.
יחד עם זאת, בעבר היה ניסיון להמציא שפת סימנים בינלאומית, בדומה לאספרנטו בשפות מדוברות.
שפה זו נקראה ג'סטונו (Gestuno), אולם שפה זו הכילה כ-1,500 סימנים בלבד ולא היה לה דקדוק עקבי ואחיד.
כמו כן, שפת סימנים אינה תלויה בשפה המדוברת ואינה שואלת ממנה בהכרח את אוצר המילים ואת כללי הדקדוק והתחביר, כלומר - אינה תרגום מילה-במילה של השפה המדוברת (בניגוד ל"שפות המסומנות").
דוגמה בולטת לכך היא שפת הסימנים הבריטית ושפת הסימנים האמריקאית, שהן שפות שונות מאוד והדובר בשפה אחת לא יבין את הדובר בשפה השנייה - זאת למרות העובדה שגם בבריטניה וגם בארצות הברית מדברים באותה שפה, אנגלית.
שפת הסימנים של ניקרגואה היא שפת סימנים שהתפתחה באופן ספונטני בקרב ילדים חירשים בכמה בתי-ספר במערב ניקרגואה במהלך שנות ה-70 וה-80 של המאה ה-20. זוהי שפה המעוררת עניין מיוחד בקרב בלשנים, שכן היא מספקת הזדמנות נדירה לחקור מקרה של "לידת" שפה חדשה.
עד שנות ה-70 לא הייתה קהילת חירשים בניקרגואה.
החירשים היו מבודדים אלה מאלה, ורובם השתמשו ב"סימנים ביתיים" ובמימיקה כדי לתקשר עם בני משפחה וחברים שומעים.
התנאים ההכרחיים להיווצרות שפה טבעית באו בשנת 1977, משעה שמרכז לחינוך מיוחד פתח תוכנית שנועדה בתחילה ל-50 ילדים חירשים.
בית הספר שכן בשכונת סאן חודס בעיר מנגואה, ומספר התלמידים החירשים בו הגיע ל-100 בשנת 1979, כשפרצה המהפכה הסנדיניסטית.
ב-1980 נפתח בית ספר מקצועי לנוער חירש באזור "וילה ליברטאד" שבעיר מנגואה.
ב-1983 כבר נרשמו 400 בני נוער חירשים לשני בתי ספר ממין זה.
בתחילה שמה תוכנית הלימודים דגש על לימוד השפה הספרדית ועל קריאת שפתיים.
השימוש בסימנים הוגבל לאיות, כלומר שימוש בסימן עבור כל אות בספרדית, ושימוש בסימני הידיים האלה כדי לאיית מילים ושמות בספרדית.
הצלחת השיטה הזאת הייתה מוגבלת מאוד, ורוב התלמידים נכשלו בתפיסת משמעויותיהן של המילים.
בין התלמידים למורים שרר נתק לשוני, אך בין התלמידים לבין עצמם - במגרש המשחקים, בהסעות לבתי הספר ובחזרה, במסדרונות וכו' - נוצרה קרקע פורייה לתקשורת לשונית.
התלמידים השתמשו במחוות וב"סימנים הביתיים" כדי לתקשר, ויצרו שפת סימנים דמוית פידג'ין.
מאוחר יותר התפתח אמצעי התקשורת הזה לשפה דמוית שפות קראוליות.
אפשר לומר שהתלמידים המציאו לעצמם שפה.
הפידג'ין הראשוני נקרא בספרדית Lenguaje de Signos Nicaragüense ("דיאלקט הסימנים של ניקרגואה").
הוא עדיין משמש בקרב חירשים שהגיעו אל בית הספר בגילאי העשרה.
צוות המורים בבית הספר לא זיהה את השפה החדשה, והתייחס אליה כאל פנטומימה.
מבחינתם הייתה זו עדות לכישלון לימודי השפה הספרדית.
כיוון שלא הצליחו להבין את פשר הסימנים, הם ביקשו עזרה מבחוץ.
עזרה כזו הגיעה ב-1986 לפי בקשת משרד החינוך של ניקרגואה.
ג'ודי קגל (Judy Kegl) בלשנית אמריקנית המתמחה בשפות סימנים מאוניברסיטת נורת'איסטרן (Northeastern University) שבארצות הברית, החלה לחקור את שפת הסימנים שהתפתחה בקרב תלמידי בית הספר.
כשהיא, בעזרת חוקרים נוספים, ניתחה את השפה, הם הבחינו כי הילדים הצעירים הביאו את ה"פידג'ין" ששימש ילדים מבוגרים יותר, לדרגת מורכבות גבוהה יותר.
הם גילו למשל מערכת התאם בפועל (verb agreement) וחוקים דקדוקיים נוספים.
השפה המורכבת ידועה כיום כ- Idioma de Señas de Nicaragua ("שפת הסימנים של ניקרגואה").
מחקרים בנושא התפרסמו בכתב העת Science, ומשכו תשומת לב רב בקרב בלשנים, פסיכולוגים ואנתרופולוגים.
זאת כיוון שמדובר במקרה מתועד ראשון של יצירת שפה יש מאין.
אפשר להוכיח בקלות כי התלמידים של בית הספר לחירשים לא נחשפו לשפה טבעית כלשהי לפני הגעתם לבית הספר, וכי התפתחות השפה הייתה תלויה לחלוטין באינטראקציה שבין התלמידים החירשים לבין עצמם.
זאת בניגוד לדגם המוכר של רכישת שפה טבעית, שבה הילד נחשף לשפה טבעית קיימת, ומסגל לעצמו את כלליה.
שפת תכנות עילית היא שפת תכנות המיועדת לשימוש על ידי מתכנתים אנושיים, בניגוד לשפות המוכוונות לשימוש על ידי כלים אוטומטיים (שפות ביניים) או שפות תכנות low-level המוכוונות להרצה על ידי מכונה (שפות אסמבלי, בייטקוד, ושפות מכונה).
שפות תכנות עיליות משתמשות במבנים תחביריים שעשויים להזכיר אלמנטים של שפה טבעית, הן קלות יותר לכתיבה ולקריאה על ידי בן-אנוש, ויכולות לטפל באופן אוטומטי, או אפילו להסתיר לחלוטין, חלקים משמעותיים ממערכות מחשוב (לדוגמה, ניהול זיכרון).
בכך שפות תכנות עיליות הופכות את תהליך פיתוח התוכנה לפשוט ומובן יותר בהשוואה לשפות תכנות low-level.
רמת האבסטרקציה המסופקת על ידי השפה מגדירה עד כמה היא "high-level".
המונח high-level ("רמה גבוהה") מתייחס לרמת האבסטרקציה הגבוהה יותר משפת המכונה.
במקום לעבוד עם אוגרים, כתובות בזיכרון ומחסניות קריאה (call stacks), שפות תכנות עיליות עובדות עם אלמנטים כדוגמת משתנים, מערכים, אובייקטים, ביטויים אריתמטיים או בוליאניים מורכבים, שגרות, לולאות, תהליכונים, מנעולים, ורעיונות אבסטרקטיים אחרים של מדעי המחשב, תוך העדפת שמישות על פני יעילות התוכנה.
שלא כמו בשפות הסף הנמוכות, שפות עיליות כוללות אלמנטים מעטים המיתרגמים ישירות להוראות (opcodes) בשפת מכונה, או כלל לא.
שפות עילית יכולות לכלול גם שירותים נוספים כדוגמת טיפול במחרוזות, מאפיינים של תכנות מונחה-עצמים, ותמיכה בקלט/פלט של קבצים.