Uploaded avatar of iHiD

Decemberi kalandozások

@iHiD
Majdnem 3 éve ezelőtt
Videó

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?

  1. Ha webalkalmazásokat szeretnél építeni, a ColdFusion és a Groovy jó választás
  2. 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
  3. 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
  4. Ha a JVM-mel dolgozol, a ColdFusion és a Groovy kézenfekvő választás
  5. Ha fontos a teljesítmény, a Lua és a Wren valószínűleg a legjobb lehetőség
  6. Ha az elsődleges szerkesztőd a Vim vagy a NeoVim, a VimScript nyilvánvalóan kiváló választás
  7. Ha érdekel a fordítók és virtuális gépek tanulmányozása vagy építése, a Wren tökéletes neked
  8. Ha objektumorientált hátterrel rendelkezel, a Wren valószínűleg a legkönnyebben megtanulható nyelv
  9. Ha tetszett a LISP egyetlen, mindenütt jelen lévő adatszerkezet-tervezése, próbáld ki a Luát
  10. Ha ki szeretnéd próbálni az eseményvezérelt programozást, nézd meg a VimScriptet
1. Dec 2023 · Hasznosnak találtad?