התפתחותה של רשת האינטרנט הביאה ליצירה של "מחשבי-על וירטואליים". אין אלה מחשבי-על במשמעות הפשוטה של מושג זה, אך הם מהווים תחליף מסוים למחשבי־על. הכוונה לרתימת הזמן הפנוי של אלפי מחשבים אישיים, במסגרת פרויקט של חישוב מבוזר קהילתי, לשם ביצוע משימות עתירות חישוב. דוגמה לכך היא המשימה של חיפוש מספרים ראשוניים ענקיים. עד לשנת 1996 התגלו מספרים כאלה על ידי מחשבי־על (בעיקר מתוצרת CDC או Cray), והחל משנה זו התגלו מספרים כאלה על ידי מחשבי פנטיום ביתיים שהופעלו באלפיהם באמצעות האינטרנט.
דוגמה נוספת למחשוב על מבוסס שיתוף אינטרנטי הוא פרויקט Seti@home שבאמצעות עשרות אלפי משתמשים בו זמניים מפענח קרינת רדיו אסטרונומית בניסיון למצוא תבניות תבוניות.
מחשבים מרכזיים מול מחשבי-על.
מחשבים מרכזיים גדולים מתאפיינים אף הם בעוצמת חישוב גבוהה, ולמעשה קודם ליצירתם של מחשבי-על מובהקים שימשו מחשבים מרכזיים מהירים במיוחד למשימות שמאוחר יותר ניתנו למחשבי-על. לפיכך ההבחנה בין מחשבי-על ובין מחשבים מרכזיים אינה פשטנית, אך כללית ניתן לומר שמחשבי-על מתמקדים בפתרון בעיות המוגבלות במהירות החישוב של המחשב בעוד שמחשבים מרכזיים מתמקדים בפתרון בעיות המוגבלות בקצב פעולות הקריאה/כתיבה ואמינות. עקב כך:
מחשבי על בישראל.
מכיוון שישראל אינה חתומה על האמנה למניעת הפצת נשק גרעיני, במשך שנים רבות הטילה ארצות הברית הגבלות קשות על יצוא מחשבי-על לישראל, מחשש שאלה ישמשו לפיתוח נשק גרעיני.
במסגרת צה"ל פועלים מספר מחשבים עתירי עיבוד, שנרכשו בכספי הסיוע האמריקאי ופעילותם מפוקחת על ידי נציגי ארצות הברית.
במסגרת מחב"א, מרכז החישוב הבינאוניברסיטאי, פעלה יחידה לחישובים עתירי עיבוד, שהפעילה מחשבי־על אחדים לשימושם של החוקרים בישראל.
ברשימת טופ500 מחשבי־על המהירים ביותר לשנת 2005 הופיעו תשעה מחשבים הנמצאים בישראל, כולם בתעשיית המוליכים למחצה. בשנת 2007 לא הופיעו ברשימה זו מחשבי־על בישראל. בשנת 2009 הופיע מחשב אחד, תוצרת IBM, ובשנת 2011 הופיעו שלושה מחשבים מתוצרת IBM.
שפת מחשב
שפת מחשב היא שפה שבאמצעותה האדם נותן הנחיות פעולה למחשב. לכל שפת מחשב יש אוצר מילים משלה, בדומה למאפיין של השפה הטבעית. אך בניגוד לשפות טבעיות, לשפות מחשב יש לרוב מבנה נוקשה ומוגדרת בהן משמעות יחידה לכל ביטוי.
בשימוש הנפוץ במושג "שפת מחשב", לעיתים הכוונה היא לשפת תכנות או לשפת מכונה. במשמעות הרחבה יותר, מושג זה כולל בנוסף לשפות תכנות, גם שפות כגון HTML ,XML או CSS, שאינן בגדר שפות תכנות, אף שהן שפות בעלות אוצר מילים המשמשות למתן הנחיות למחשב. ההבדל הוא שבשפת תכנות יש לוגיקה שבדרך כלל מתבטאת בקיומן של פקודות לבקרת זרימה, כגון פקודת if, או כלים אחרים ליצירת לוגיקה. כלים ליצירת לוגיקה אינם קיימים בשפת תגיות (markup language) כגון HTML ו-XML.
סוגים של שפות מחשב.
ישנם מספר סוגים מובחנים או "משפחות" של שפות מחשב, לפי מטרותיהן:
שפת תכנות
המונח שפת תכנות אוגד בתוכו מספר שפות מחשב שהן תמיד לוגיות, ומשמשות לבניית תוכנה. זאת להבדיל מסידור או עיצוב תוכנה - מה שנעשה עם שפות מחשב אחרות שאינן מוגדרות באופן מסורתי, כ"שפות תכנות", ואלה יהיו למשל שפות תגיות או שפות עיצוב.
בניסוח אחר, שפת תכנות היא אוסף של חוקים תחביריים (Syntax) וסמנטיים (Semantic) המגדירים שפה פורמלית. תוכנית הנכתבת בשפת תכנות מגדירה ביצוע תהליך אלגוריתמי. שפת התכנות קובעת את הכלים העומדים לרשות מחבר התוכנית כדי לבצע הגדרות כאלו.
נהוג (וכחלק ממחווה) שהדבר הראשון שלומדים לתכנת, כאשר לומדים שפת תיכנות חדשה, היא תוכנית שתדפיס כפלט על המסך את המסר "hello world".
מאפייני שפות התכנות.
שפת תכנות מנסה להגשים בד בבד שלוש תכליות: ראשית, גישור בין התקן מתוכנת (לרוב, מחשב), ש"שפתו", הקרויה לעיתים שפת מכונה, מורכבת מרצפי סיביות, ואשר כל פקודה שבה מבצעת חישוב פשוט ביותר, לבין המתכנת המעדיף להגדיר את התהליך החישובי באורח מילולי, תוך הסתמכות על פקודות בסיסיות חזקות יותר מאלו המצויות בשפת מכונה. שנית, רמת ההפשטה הגבוהה יותר שמציעה שפת תכנות, מסייעת לתקשורת טובה בין מתכנתים. שלישית, שפת תכנות מסייעת למתכנת לארגן ולבטא את הגדרת התהליך החישובי, באופן הנתפס כרצוי על ידי מתכנן שפת התכנות.
השימוש בשפת תכנות לשם כתיבת תוכנית מחשב קרוי תכנות. שפות התכנות מציעות מבחר כלים המשמשים להגדרה נכונה של מטרת הקוד וארגונו, כגון מבני בקרה (לולאות, תנאים, מתגים וכדומה), פרוצדורות, עצמים, ומחלקות. זאת במטרה להקל ככל הניתן על עיצוב הקוד, התכנון, הכתיבה, הקריאה, התחזוקה, ההרחבה והשימוש העתידי שלו.
לכל שפת תכנות, בדומה לשפה טבעית, יש אוצר מילים משלה וכללי תחביר ייחודיים. בכל זאת, הדמיון בין שפות תכנות ושפות טבעיות הוא מוגבל, בעיקר בגלל הדרישה הקריטית לחד משמעיות משפות תכנות. אוצר המילים של שפת תכנות מצומצם ביותר, והוא נע בין עשרות בודדות למאות אחדות של מילים. לכל שפה ישנם כללי תחביר נוקשים שכל חריגה מהם עשויה להתפרש כשגיאה, או לגרום בעיות בהפעלת המערכת כולה. מאפייניה של שפת תכנות כוללים את הרכיבים הבאים:
שפות תכנות נוצרו על-מנת להגדיר פעולות של מחשבים, אבל הן יכולות לשמש גם על-מנת לתאר אלגוריתמים, בדומה לתרשימי זרימה, או להגדיר מבני נתונים (data structures) מורכבים. בכך מהוות שפות אלו גם צורת תקשורת. מתכנתים שואפים לשמור על הקוד שלהם קריא, כלומר פשוט להבנה על ידי אדם, כדי שיהיה קל לנפות ולתחזק אותו.
שפת תכנות נקראת שלמה טיורינג אם ניתן להשתמש בה לדימוי מכונת טיורינג. שפה שלמה-טיורינג מאפשרת לבצע כל חישוב שניתן לבצע באמצעות מחשב. מרבית שפות התכנות הן שלמות טיורינג, ולכן שקולות זו לזו מבחינת האלגוריתמים שביכולתן לממש, אם כי ישנם הבדלים במידת היעילות האפשרית למימוש, במידת הקריאות של התוכניות, וכדומה.
שפת התכנות הבסיסית ביותר, והקרובה ביותר לשפת מכונה, קרויה שפת סף או אסמבלי (Assembly). הוראות שפת הסף פועלות באופן ישיר על תאי הזיכרון של המחשב, האוגרים הפנימיים של המעבד והתקני הקלט/פלט של המחשב, ובפרטנות רבה. בצורתה הבסיסית של שפת הסף, כל הוראת אסמבלי יחידה שכותב המתכנת, מתורגמת להוראה אחת בשפת מכונה. מכאן, ששפת הסף נקבעת על פי המעבד עליו התוכנה אמורה להיות מופעלת, כאשר שפת הסף עשויה להיות שונה מאוד בין משפחת מעבדים אחת למשנתה, וניתן אף למצוא גם שינויים קלים בשפה בין מעבדים המשתייכים לאותה המשפחה.
מרבית שפות התכנות הן שפות עיליות, אשר מעניקות רמה גבוהה יחסית של הפשטת מאפייני פלטפורמת המטרה של התוכנה הנכתבת, ובכך פוטרות את המתכנת במידה רבה מהתייחסות לתשתית החומרה (ובפרט, המעבד) ותשתיות התוכנה שעל בסיסן תפעל התוכנה.
מעבר משפת תכנות לביצוע בתוכנית.
שפת התכנות עצמה אינה מובנת ישירות על ידי המעבד, ולכן יש צורך בתיווך בין התוכנית הכתובה בשפת תכנות ובין המעבד, על מנת שיהיה ניתן להפעיל את התוכנה. מטרה זו ניתן להשיג באחת משלוש דרכים:
יש שפות שלהן ניב שנועד למהדר וניב שנועד למפרש. כמו כן, ישנן שפות סינתטיות, שהפיתוח בהן נעשה במוד של פירוש, ולאחר סיום הפיתוח הן עוברות הידור לשפת מכונה.
ריבוי שפות התכנות.
במהלך השנים פותחו מאות שפות תכנות, שלכל אחת מהן יתרונות וחסרונות משלה, וכל אחת מהן מתאימה באופן מיטבי למשימות מסוימות. יש שפות קלות ללימוד, שנועדו לחובבים או למתחילים, ויש שפות מורכבות שנועדו למומחים. יש שמתאימות במיוחד לתוכניות מדעיות, ואחרות טובות יותר לפיתוח מערכות מידע. יש שנועדו ליצירת ממשקי משתמשים ויש שנועדו לכתוב אלגוריתם מופשט. יש שנועדו למחשב האישי ויש שנועדו במיוחד להרצה על שרתי אינטרנט. יש שנועדו למשימות בתחום מצומצם, ויש שנועדו לתת מענה לטווח רחב של משימות. לפיכך, קודם לתחילת כתיבתה של תוכנית חדשה, יש לבחור את שפת התכנות שבאמצעותה תיכתב התוכנית.
אחד היעדים של מעצביה של שפת תכנות חדשה, הוא שלא להיות תלויים במכונה מסוימת או במערכת הפעלה מסוימת, כך שניתן יהיה להעביר בקלות את התוכנית לכל סביבה רצויה. יעד זה נמצא בסתירה ליעד של יצרני מחשבים ומערכות הפעלה קנייניות, שלהם עניין לקשור את הלקוח דווקא למוצר שלהם. כתוצאה מכך נוצרות לשפת תכנות פופולרית גרסאות שונות. ניסיון לעצור את ההתפצלות הזו נעשה על ידי גופי תקינה, כגון ANSI או ISO, המגדירים גרסה תקנית של השפה.
הבחירה באיזו שפה להשתמש תלויה בטבע המשימה שיש לבצע, כישורי המתכנתים, הכלים המצויים, המערכת לה מיועדת התוכנה ולעיתים אף דרישות מצדו של הלקוח (צבא ארצות הברית, למשל, דרש לעיתים קרובות שהתוכניות שביקש יתוכנתו בשפת עדה). התפיסה המקובלת גורסת כי ככל ששפת תכנות קרובה יותר לשפת המכונה, כך היא קרובה יותר למערכת המסוימת עליה עובדים, יודעת לנצל יותר טוב את יתרונותיה והמבנה הייחודי שלה, וכן המתכנת יכול לשלוט בדיוק יתר על התהליכים ולהתאים אותם לצרכיו האישיים ולכן השימוש בשפה שכזו יניב מהירות רבה יותר. מסיבה זו, משתמשים לעיתים קרובות בשפת סף וב-C לתוכניות שבהן זמן הוא גורם מכריע, למשל מערכות הפעלה, מערכות זמן אמת, או שיש בהן צורך בנגיעה בפרטי מערכת מסוימים מאוד, למשל מערכות משובצות מחשב.