Bevezetés
Sziasztok! Üdv a decemberben. Remélem, jól vagytok.
Nagyon sűrű októberünk volt. Nemrég indítottunk egy nagy fejlesztést a közösségi megoldásokhoz. Mostantól kiszűrjük az ismétlődőket, így a hasonló megoldások csak egyszer jelennek meg, új rendezési lehetőségeket és kód szerinti keresést adtunk hozzá, és ha megnézed a C#-ot, láthatod, hogy a különböző programozási fogalmak szerinti szűrést is bevezettük. Így olyan megoldásokat kereshetsz, amelyek biteltolást, rekurziót vagy bármi mást használnak, amihez csak kedved van. Ezt a közösségi héten további kurzusokra is kiterjesztjük.
De most koncentráljunk a #12in23-ra. A november érdekes hónap volt, az assembly nyelveket fedeztük fel, de ebben a hónapban egy nagyon sokszínű nyelvcsoportot veszünk célba, konkrétan a ColdFusion, Groovy, Lua, VimScript és Wren nyelveket. Ahogy szokásos, Erik vezet végig minket azon, mi teszi ezeket a nyelveket érdekessé és egyedivé.
A jelvények
Ahogy mindig, most is megszerezheted a Decemberi kalandozások jelvényt, ha bármelyik 5 feladatot teljesíted ezeken a nyelveken. Ott van még az Egész éves jelvény is, amelyről tudom, hogy sokan dolgoztok érte. Ehhez 5 kiemelt feladatot kell teljesítened. Ezek pedig:
- Minden bázis a tiéd: alakíts át egy számot, amelyet számjegyek sorozata reprezentál, egy másik számrendszerbe.
- Tömb kilapítása: végy egy egymásba ágyazott gyűjteményt, és adj vissza egyetlen, nem egymásba ágyazott gyűjteményt.
- Királynőtámadás: állapítsd meg, hogy egy sakktáblán két királynő tudja-e támadni egymást.
- D&D-karakter: generálj véletlenszerűen Dungeons & Dragons-karaktereket.
- Futamhosszkódolás: valósítsd meg a futamhossz-kódolást és a -dekódolást.
Áttekintések
ColdFusion
- 1995-ben hozta létre az Allaire Corporation, amelyet 2001-ben felvásárolt a Macromedia, azt pedig 2005-ben az Adobe.
- Gyors webfejlesztési platformnak tervezték
- A Java virtuális gépen (JVM) fut
- Két külön szintaxisa van, amelyek másképp néznek ki, de szemantikailag azonosak:
- A régebbi, címkéken alapuló jelölőnyelvi szintaxis, amely kiterjeszti a HTML-t dinamikus tartalom megjelenítéséhez.
- Az újabb, ECMAScript-szerű szintaxis ott használható, ahol a címkealapú, de különálló szkriptfájlokban is. A cél az volt, hogy az üzleti logika a jelölőnyelvből egy külön szkriptfájlba kerüljön
- A CFScript egy JVM-en futó általános célú nyelv, és az Exercism ezt használja. A gyakorlatban soha nem szakadt el igazán a webkiszolgálós gyökereitől.
- A ColdFusion fizetős termék, de a Lucee Foundation (egy svájci székhelyű nonprofit szervezet) továbbra is aktívan fejleszti a nyílt forráskódú ColdFusion-kiszolgálóját, amelynek Lucee Serverét az Exercism ColdFusion-kurzusához használjuk.
- Továbbra is aktívan fejlesztik
- Elsősorban vállalati szoftverekben használják; ügyfelei közé tartozik az Apple, az Adobe, a General Motors és még sokan mások
Groovy
- 2003-tól James Strachan fejlesztette. A projektet 2015-ben vette át az Apache.
- A cél egy dinamikusan típusos nyelv létrehozása volt a JVM-en (ellentétben a statikusan típusos Java-val), amely a sablonkódot is csökkenti
- Bár a legtöbb Java-kód érvényes Groovy-kód is, sok a különbség (például a Groovy engedi a dinamikus típust és a fejlett metaprogramozást). A nyelvre a Python és a Ruby is nagy hatással volt.
- Szkriptelésre, buildeszközökre (Gradle), CI-re (Jenkins), webalkalmazásokra (Grails), tesztelésre (Spock) használják. Az Atlassian-eszközök egy népszerű, harmadik féltől származó kiegészítője lehetővé teszi a Groovy-szkriptelést.
Lua
- A Lua-t 1993-ban hozta létre Roberto Lerusalimschy, Luiz Henrique de Figueiredo és Waldemar Celes a Rio de Janeiró-i Pápai Katolikus Egyetemen, Brazíliában.
- A nevet LOO-ah-nak ejtik, ami portugálul holdat jelent, és utalás a Sol nyelvre, amely részben ihlette, és amely portugálul napot jelent
- Elsősorban beágyazásra tervezték, a sebességre, a hordozhatóságra, a bővíthetőségre és a fejlesztés egyszerűségére helyezve a hangsúlyt.
- A Modula, a CLU, a C++, a SNOBOL és az AWK hatott rá. Hasonlóan ahhoz, hogy a LISP és a Scheme egyetlen, mindenütt jelen lévő adatszerkezettel rendelkezett (a listával), a Luának is megvan ez a maga táblájával.
- Bytekódon keresztül értelmezik, általában futásidőben, de előre is elvégezhető.
- Elsősorban szkriptelésre használják, például olyan játékokban, mint a World of Warcraft, a Dota 2 és a Crysis, vagy olyan alkalmazásokban, mint az Adobe Lightroom és egyes FreeBSD rendszerszoftverek. Sokat használják bővíthetőség hozzáadására is, például a Redisben, a Neovimban és az Nginxben.
VimScript
- A VimScript (Vim Script szóközzel, vagy VimL, azaz Vim Language) a Vim szövegszerkesztő szkriptnyelve.
- Az ex-ből származik, abból a sororientált vizuális szerkesztőből, amely megelőzte a Vi-t
- Nem általános célú nyelv, hanem egy speciális, amely hatékony és optimalizált szkriptkörnyezetet nyújt a Vim funkcióinak bővítéséhez és testreszabásához bővítményeken, konfigurációkon, makrókon és függvényeken keresztül.
- Bár a Vim elsősorban C-ben íródott, a Vimscript segítségével a felhasználók egy magas szintű szkriptnyelven szabhatják testre és bővíthetik a Vimet.
- Használják a Vimben, hát persze, de a Neovimban is, amely a Vim egyik forkja
Wren
- 2016-ban írta Bob Nystrom, a Crafting Interpreters könyv szerzője
- Célok: kicsi, egyszerű, gyors.
- Úgy tervezték, hogy más alkalmazásokba ágyazzák. A szerző hiányosnak találta a meglévő lehetőségeket (mint a Lua és a TCL), és egy egyszerű, beágyazható nyelvet akart, amely természetesnek hat az objektumorientált háttérrel rendelkezők számára
- Használják:
- TIC-80: fantasy számítógép apró játékok készítésére, játszására és megosztására (hasonló a PICO8-hoz)
- DOME: többplatformos keretrendszer játékok készítéséhez.
- luxe: többplatformos, gyors fejlesztésű játékmotor játékok készítéséhez.
- Wren Console: Wren REPL és CLI, amelyet nagyrészt magában Wrenben írt az Exercism régi közreműködője, Josh Goebel; ezt használjuk a Wren kurzushoz
És programozási szempontból miben térnek el egymástól?
ColdFusion
- Dinamikusan típusos
- Többparadigmás, elsősorban objektumorientált, de egyre inkább funkcionális.
Groovy
- Általában dinamikusan típusos, de lehet statikusan (és fokozatosan) típusos is
- Értelmezhető és fordítható is (a 2-es verziótól). Ezért használják gyakran szkriptekben
- Többparadigmás: elsősorban objektumorientált, de imperatív, funkcionális és deklaratív is
Lua
- Dinamikusan típusos és általában értelmezett, de előre lefordítható
- Többparadigmás: procedurális, objektumorientált (bár kicsit másképp), funkcionális és adatvezérelt
VimScript
- Dinamikusan típusos és értelmezett
- Többparadigmás: imperatív, funkcionális és az objektumorientált programozás egy egyszerű formája
Wren
- Dinamikusan típusos, de statikusan definiált; ez teszi lehetővé, hogy a fordító nagyon gyors legyen.
- Elsősorban objektumorientált nyelv, de imperatív és egy kicsit funkcionális is
Mi teszi nagyszerűvé ezeket a nyelveket?
ColdFusion
- Kiváló elkülönítés a szerverkezelés és az alkalmazáskészítés között. Az adminisztrációs konzol állítja be az adatbázis-kapcsolatokat és a szerverfigyelést (és bármi mást), az alkalmazáskészítőknek csak egy adatforrás nevére van szükségük (egy CF-objektumra a szükséges metódusokkal, előre csatlakoztatva az adatbázis-kezelő megfelelő részeihez), valamint írási jogra egy könyvtárhoz az alkalmazásfájlok számára.
- Kihasználja a JVM és a Java-ökoszisztéma erejét, ami magában foglalja azt is, hogy bármely Java-könyvtárat importálhatsz és használhatsz a CF-en belül
Groovy
- Általános célú: szinte bármilyen munkaterheléshez használható, beleértve az alkalmazásokat és weboldalakat.
- Mivel a JVM-en fut, minden előnye érvényesül: kiforrott, nagyon nagy teljesítményű VM és rengeteg elérhető könyvtár. Jól együttműködik a Java-val
- Enyhíti a Java sok problémáját, például az ellenőrzött kivételeket,
- a null-biztonságot, a bőbeszédűséget és a fejlett metaprogramozás hiányát
- Modern nyelv: fejlett típuskövetkeztetés, closure-ök, beépített szintaxis reguláris kifejezésekhez, automatikusan generált getterek és setterek
- Nagy támogatás a funkcionális programozáshoz: closure-ök (mint a Ruby blokkjai), currying (részleges alkalmazás), lusta kiértékelés, megváltoztathatatlanság és még sok más
Lua
- Általános célú: beágyazott rendszerekben, prototípus-készítéshez, szkripteléshez, játék-, web- és backend-fejlesztéshez használják.
- Egyszerű: viszonylag kevés szintaxis, ami könnyen tanulhatóvá teszi a nyelvet. Csupán néhány atomi adattípusa és egyetlen beépített összetett adattípusa van: a tábla. A memóriát a szemétgyűjtő kezeli
- Hordozható: az értelmező ANSI C-ben íródott, amelyhez szinte minden platformon létezik fordító
VimScript
- Egyszerű: könnyűsúlyú szintaxis, amelyet könnyű megtanulni és használni.
- Együttműködés: könnyen elérsz fájlokat, héjakat és más programokat. A külső eszközök minden ereje anélkül, hogy elhagynád a Vimet.
- Kifejező: kevéssel sokat érsz el. Tömör, mégis jól olvasható szkripteket írhatsz.
- Erőteljes regexmotor: a Vimscript regexmegvalósítása az Emacs Lisp-étől ihletett, így erőteljes eszközt kínál a szövegkezeléshez.
Wren
- Kicsi: a VM kevesebb mint 4000 sornyi kódban van megvalósítva
- Példaértékű: a VM megvalósítása szeretettel kommentelt, C-ben íródott, és nem is olyan nehéz olvasni. Kiváló módja annak, hogy megtanuld, hogyan épül fel egy nyelv. A szabványos függvénytár nagy része Wrenben van megvalósítva, így azt is megnézheted, hogyan készült.
- Ismerős: a szintaxis gyorsan felkészít. Ha ismered a Java-t vagy a C++-t, otthonosan fogod érezni magad. Az argumentumok száma szerinti metódustúlterhelést is lehetővé teszi
- Nagyon jó dokumentáció: a nyelvi és a szabványos függvénytári dokumentáció könnyen olvasható, kiterjedt és rengeteg példát tartalmaz.
- Kicsi, de meglepően teljes szabványos függvénytár.
Kiemelkedő tulajdonságok
ColdFusion
- Beépített minden: rengeteg dolog alapból elérhető: PDF, ZIP, Excel, XML, JSON, API-készítés, e-mail, S3-integráció, rengeteg különböző adatbázis… extra csomagok telepítése nélkül. Kiváló a verzió-összeférhetetlenségek csökkentésére
- Skálázható és biztonságos, kiváló vállalati szoftverekhez
- Egyszerű, intuitív programozás, amivel a kezdők nagyon gyorsan összetett, adatvezérelt weboldalakat hozhatnak működésbe. A DreamWeaver integrációja kiváló.
Groovy
- Rugalmas szintaxis: a pontok és a zárójelek elhagyhatók, ami nagyon szép domain-specifikus nyelvek létrehozását teszi lehetővé
- Metaprogramozás: támogatja a futásidejű és a fordításidejű metaprogramozást is. Például egy @ToString annotáció fordításidejű ToString-implementációt generál, egy objektum metaclass-ának futásidejű módosítása pedig lehetővé teszi a monkey-patchinget.
- Builderek: gyorsan kezelhetsz és építhetsz JSON-t, XML-t, HTML-t szépen kinéző kód segítségével. Építs Swinggel a gyors grafikus felület-fejlesztéshez.
- Traitek: a Groovy traitek lehetővé teszik viselkedések és tulajdonságok újrahasznosítható egységekbe rendezését. Hasonló a Ruby mixinjéhez.
Lua
- Beágyazható: úgy tervezték, hogy könnyen beágyazható legyen. Viszonylag egyszerű C API-val rendelkezik, ami megkönnyíti a beágyazást. A méret nem jelent problémát: a teljes referenciaértelmező mindössze 247 kB!
- Bővíthető: az alapszintaxist szándékosan viszonylag kicsiben tartották, de lehetővé teszi a nyelv könnyű bővítését. Ez egyszerűbbé teszi a nyelv megtanulását, könnyedebbé a beágyazást, és nagyon rugalmassá tesz
- Gyors: a Lua gyakran az egyik leggyorsabb dinamikus nyelv, különösen a LuaJit értelmezővel
VimScript
- Bővíthetőség: a Vimscript lehetővé teszi, hogy új funkciókkal bővítsd a szerkesztődet
- Testreszabhatóság: úgy szabhatod testre a szerkesztődet, ahogy neked tetszik (magukat a Vimscript-bővítményeket is nagyrészt Vimscriptben írják)
- Eseményvezérelt: automatikus kódfuttatás bizonyos események vagy feltételek alapján, például fájlmegnyitáskor vagy puffermentéskor.
- Használd a Vim erejét: beépített hozzáférés a Vim funkcióihoz és API-jaihoz, amivel a szkriptek szöveget, puffereket, ablakokat és még sok mást kezelhetnek.
Wren
- Gyors: kiváló teljesítmény egy dinamikus nyelvhez képest
- Beágyazható: könnyen beágyazható más szoftverekbe. A nyelv készítője korábban játékfejlesztő volt: szkriptelési lehetőségeket akart adni a játékokhoz. A C API meglehetősen tiszta és egyszerű.
- Párhuzamos: könnyű párhuzamosság és korutinok fiberekkel, amelyek nagyon könnyűsúlyú konstrukciók (mint a gorutinok vagy az Erlang-folyamatok), és könnyen kommunikálnak egymással
Melyiket válaszd?
- Ha webalkalmazásokat szeretnél építeni, a ColdFusion és a Groovy jó választás
- Ha olyan nyelv érdekel, amely beágyazható, a Lua és a Wren a fő lehetőség, de a Groovy is megérhet egy pillantást
- Ugyanez a három nyelv, a Lua, a Wren és a Groovy, akkor is jó választás, ha általános célú szkripteket szeretnél írni
- Ha a JVM-mel dolgozol, a ColdFusion és a Groovy kézenfekvő választás
- Ha fontos a teljesítmény, a Lua és a Wren valószínűleg a legjobb lehetőség
- Ha az elsődleges szerkesztőd a Vim vagy a NeoVim, a VimScript nyilvánvalóan kiváló választás
- Ha érdekel a fordítók és virtuális gépek tanulmányozása vagy építése, a Wren tökéletes neked
- Ha objektumorientált hátterrel rendelkezel, a Wren valószínűleg a legkönnyebben megtanulható nyelv
- Ha tetszett a LISP egyetlen, mindenütt jelen lévő adatszerkezet-tervezése, próbáld ki a Luát
- Ha ki szeretnéd próbálni az eseményvezérelt programozást, nézd meg a VimScriptet