כולנו מכירים מהאקדמיה את השפות הפופולריות,
פייתון כי זו שפה גנרית פשוטה,
C כדי ללמוד מה הם פויינטרים,
ג’אווה סקריפט כי מישהו בעבר החליט שזה רעיון טוב (זה לא).
מה עם השפות הפחות מוכרות היום?
הנה כמה שפות שכדאי לכם להכיר על מנת לגוון את הארסנל שלכם, וללמוד פרדיגמות שאנחנו לא משתמשים בהם ביום יום:
Zig
שפת זיג בנויה על מנת להיות פשוטה ככל הניתן ללא פרשנויות שונות לקוד על סמך הקומפיילר או על פלטפורמת ההרצה.
אם זה לא כתוב - אז זה לא קורה.
ניתן להתנסות בשפה כאן:
https://zig-play.dev/
Hello World
1 | const std = @import("std"); |
קוד זיג נראה מסובך אך הוא די פשוט.
החסרון הוא הצורך לקבל את ה-writer
של הStandard output
.
אולם - עבור זיג זהו כוחה כי אין פה שום דבר שנסתר מהעין.
בניית הקוד
קיימים 4 דגלים לבניית הקוד.
- דיבאג - כולל בדיקות מקיפות לקוד ללא אופטימיזציות.
ReleaseSafe
- אופטימיזציות ובדיקות.ReleaseFast
- אופטימיזציות ללא הבדיקות.ReleaseSmall
- בניית הקוד הכי מהיר.
היחסים של Zig ושפת -C.
אם Rust
זה הנמסיס של שפת C++
אז זיג זהו האח החורג של שפת C
.
- השפה טוענת שהיא יותר מהירה, אכן היא מאפשרת אופטימיזציות על דברים שלא היו קיימים בשפת C.
- השפה מאפשרת להשתמש בהאדרים של שפת C.
אי אפשר להתעלם משגיאות
שגיאות בזיג הם ערכים שלא ניתן להתעלם מהם וצריך להתייחס אליהם.
זהו קונספט שלא תמיד קיים בשפות תכנות אחרות.
שפות דינאמיות מאפשרות התעלמות מוחלטת.
שפות גנריות בדרך כלל מאפשרות להניח שהקוד תקין - זיג לא מבצעת כאלו הנחות.
Bun
אחד האלטרנטיבות ל npm
הוא - bun
.
הוא כתוב ב-zig
!
והביצועים שלו מרשימים :)
Haskell
האסקל זוהי שפת תכנות פונקציונאלית בעלת ערכים דקרלטיביים.Type
ים מוצהרים, ניתן ליצור טייפים משלנו או להשתמש בקיימים.
כמו כן התחביר עובד מאחורי הקלעים בעזרת Lambda calculus
.
לכן השפה מתאימה לכל המתמטיקיים שנהנים מפונקציות :)
Hello World
1 | main :: IO () |
האסקל זו שפה הצהרתית - זאת אומרת שעל מנת להשתמש במשהו צריך להצהיר עליו.
כאן אנו מצהירים על השימוש בIO
ועל הפונקציה putStrLn
שמדפיסה החוצה את השורה.
Function applications
בניגוד לשפות OOP
, ללמוד האסקל עוזר בלהבין את מהות הפונקציות.
בהאסקל לוקחים את זה צעד קדימה - כמעט כל דבר זה פונקציה!
מה שמאוד מקל על התחביר לפונקציות.
1 | a b c d = |
כדי לקרוא לפונקציה ניתן לכתוב f a b
או (f a b)
.
אבל בהאסקל צריך לשכוח מהצהרות קלאסיות כאלו:f (a, b)
. <- זהו תחביר לא טוב!
Currying
קיורינג זהו קונספט המאפשר לפצל פונקציות ע”פ הפרמטרים שלו וליצור פונקציות חלקיות.
למשל בפסודו קוד:
1 | MyAddFunction(a,b) => a + b |
דוגמא בפייתון:
1 | def Add(a,b): |
אנחנו נרצה למשל לפצל את חיבור הארגומנטים כך שיהיה לנו רק פרמטר אחד בכל פעם:
1 | a = 5 |
אז נוכל להחזיר פונקציה על מנת לממש את זה:
1 | def Add(a): |
- למי שזה מזכיר דקורטור אז הוא צודק :)
כעת בהאסקל מגדירים קיורינג בעזרת חצים: [a] -> [a] -> [a]
זהו סוג משתנה המגדיר שני פונקציות, הראשון זהו רשימה שמחזיר [a] -> [a]
.
והשני מחזיר את התוצאה הסופית [a]
.
זהו ההגדרה לחיבור מחרוזות למשל, כי מחרוזת זה רשימה של תווים!
זה מה שקורה בעצם כאשר מבצעים חיבור מחרוזות:
1 | "A" ++ "B" |
ניתן לתאר זאת כך:"A" -> "B" -> "AB"
.
בהאסקל:
1 | greetCurried :: String -> String -> String |
ניתן לראות שבקלות יצרנו פונקציה חדשה עם פרמטר פחות!
Elixir
שפת תכנות פונקציונלית דינאמית עם יכולות Pipeline
.
השפה מתמחה במקביליות, פשטות, הרצה על Earlang VM
.
כמו המכונה הווירטואלית של C#
- ניתן להריץ כל קוד earlang
ביחד עם elixir
.
Hello World
1 | IO.puts "Hello World" |
כפי שרואים השפה מאוד פשוטה, על מנת להדפיס נשתמש ב-IO.puts
.
קונספט ה-Pipeline
חלקינו מכירים את הקונספט מפקודות לינקוס:cat result.txt | grep "Name"
הקונספט לוקח פלט מצד אחד ונותן אותו כקלט לצד השני.
בפקודת הלינוקס הזו למשל, אנו מדפיסים את הקובץ ואז מקבצים לפי שם.
באליקסיר הקונספט גם עובד כך:
1 | name = "Bob Alice The Great" |
ניתן לקרוא לזה ככה אך זה מגושם יותר:
1 | name = "Bob Alice The Great" |
Dart
קיימות שפות גנריות רבות לשימוש כללי.
אך עם עליית השפות הכלליות כך גם עלו שפות תכנות למטרות ספציפיות.
Dart
היא שפה כללית - אך שנבנתה למטרות בניית ממשקי משתמש.
בעזרת השפה ניתן לייצר אירועים ולתפקד בצורה אסינכרונית בקלות.
ממשקי משתמש נבנים ע”י אירועים, האסינכרוניות של דארט מאפשרת ליצור ולנהל את הממשק משתמש בקלות רבה.
אחד הכלים הפופולריים הוא Flutter
- המאפשרת לכם לבנות אפליקציות מאוד בקלות.
Hello World
1 | void main() { |
התחביר של השפה מאוד פשוט ודומה לשאר השפות.
Flutter
אחת הסיבות לפופולריות של השפה היא הספרייה Flutter
.
כלי עוצמית וקל לפיתוח אפליקציות!
אה כן, אמרתי כבר שזה Open source
?
ELM
זוהי גם שפה מיוחדת אשר לא בדיוק עובדת כפי שהייתם מצפים מכל שפת תכנות.
השפה הזו מתקמפלת ל-ג’אווה סקריפט ומאפשרת לכתוב ממשקי משתמש אינטרנטיים בקלות יתרה!
Hello World
1 | import Html exposing (text) |
התכנית פשוטה - מייצאת טקסט שכתוב בו Hello!
.
קיימות הרבה דוגמאות, ניתן למצוא את חלקן כאן:
https://elm-lang.org/try
ניתן לשלוח בקשות Http
:
1 | getRandomQuote = |
ככה שזו שפה פשוטה מאוד לממשקי משתמש, זה מה שהופך את זה לעוצמתי!
תכונות של פיתוח ווב
כמו כל פלטפורמה לפיתוח ווב גם elm
יודעת לעשות:
- ראוטינג
- ניווט
- טעינה עצלנית
- שליחת בקשות
http
- מודולים
Love - Game dev Engine
השפה הכי חמודה לפיתוח משחקי מחשב.
היא קלילה וכיפית, ניתן לפתח בה משחקי דו מימד ונבנו בה כמה משחקים שהם בסטים!
Hello World
1 | function love.draw() |
ציור:
1 | function love.load() |
שפות נוספות שכדאי להכיר
הקונספטים בשפות תכנות שונות יכולים לתת לכם ראייה מעט שונה על תכנות וכתיבת קוד.
הנה כמה שפות נוספות שהייתי ממליץ להכיר:
Rust
: שפה המתחרה ב-C++, מהירה ובטוחה.
הקונספט בראסט שהיא שפה בטוחה מבחינת שימוש בזיכרון אך ללא GC.Ruby
: רובי זו שפה כיפית!
במיוחד בשילובRuby on Rails
הפלטפורמה מעדיפה קונבנציות ע”פ קונפיגורציה.
הקונספט הזה חשוב מאוד כאשר בונים אפליקציות גדולות.TypeScript
: מימוש המייקרוסופטי לשפת טייפים במקום ג’אווה סקריפט.Racket
: שפת תכנות ל…שפות תכנות! משונה? כן גם אני חושב.
ארצה לכתוב עליה בעתיד אז לא אדבר עליה יותר מדי כרגע :)C++
: זו שפה שכולם מכירים אך לא כולם מפתחים בה.
יש שני קונספטים שהייתי רוצה שעולם הפיתוח יילמד ממנה, ולמה היא כזו עוצמתית.
הקונספט הראש הואCompile Time
.
ניתן לבצע הרבה מאוד חישובים ואפילו דברים כמוConditional Inheritance
בזמן הקומפילציה!
הקונספט השני הוא חופשיות - ניתן בשפה לתכנת כל דבר, זה מאפשר גמישות רבה, אך עם כל כך הרבה כח גם מגיעה הרבה אחריות :)
תודה על הקריאה!