Upgrade to Pro — share decks privately, control downloads, hide ads and more …

2. Yaşına Girerken Deno

2. Yaşına Girerken Deno

JSTANBUL 2021 için yapmış olduğum sunum

Eser Ozvataf

June 12, 2021
Tweet

More Decks by Eser Ozvataf

Other Decks in Technology

Transcript

  1. JSTANBUL

    12.06.2021
    2. Yaşına Girerken Deno
    Eser Özvataf

    View Slide

  2. HAKKIMDA
    ESER ÖZVATAF
    ▸ Direktör @ Açık Yazılım


    ▸ Alaylı ve Mektepli


    ▸ Topluluk Katılımcısı


    ▸ İçerik Üreticisi
    /eserozvataf
    /eserozvataf /laroux
    /EserOzvataf

    View Slide

  3. JSTANBUL’da Daha Önce…
    19 Mayıs 2020 - youtube.com/EserOzvataf

    View Slide

  4. ‣ 1. ÖNBİLGİLER


    ‣ 2. SÜRÜM 1.0’DAN SONRA


    ‣ 3. NASIL BAŞLANIR?
    Bugün bahsedeceklerim:

    View Slide

  5. 1. ÖNBİLGİLER

    View Slide

  6. 1. ÖNBİLGİLER
    JAVASCRIPT İÇİN ÖNEMLİ TARİHLER
    ▸ 1995 – JavaScript: Netscape’in web’e dinamizm katma çabasıyla ortaya çıkmıştı.


    ▸ 1996 – Backend JS: Netscape Enterprise Server üzerinde Netscape LiveWire Pro (
    tagleri)


    ▸ 2009 – ES5: JSON, strict mode, array metotları, vs.


    ▸ 2009 – node.js: Event-loop, non-blocking, JavaScript runtime


    ▸ 2010 – NPM: paket yönetimi için npm tanıtıldı


    ▸ 2015 – ES6 / ES2015: Classlar, promiseler, arrow functionlar, let/const, vs.


    ▸ ES2016+ – ECMAScript’e her yıl güncelleme geleceği duyuruldu.


    ▸ 2018 – Deno üzerine çalışılmaya başlandı.


    ▸ 2020 – 13 Mayıs 2020’de Deno 1.0’a ulaştı.

    View Slide

  7. 1. ÖNBİLGİLER
    NODE.JS
    ▸ Uygulama Paketlenirken Modül Sistemi:
    CommonJS + NPM


    ▸ Formatter, linter, test, paketleme ve
    doküman araçları 3. parti npm paketleri


    ▸ Kendi standard kütüphanesi


    ▸ Browser API’ından biraz farklılaşan
    API’lar


    ▸ Örnek: fetch API yok, request


    ▸ Native Uzantılar: GYP
    ▸ Uygulama Çalışırken Modül Sistemi: ES
    Modules + deno.land


    ▸ Araç Desteği: Formatter, linter, test,
    paketleme ve doküman araçları içinde


    ▸ Go’dan esinlenilen modern bir standard
    kütüphane


    ▸ Promise’ler veya yeni JavaScript
    standartlarının özellikleri ilk günden
    düşünülmüş


    ▸ Browser API’ı ile uyumlu kalmaya
    çalışmak proje hedeflerinden biri


    ▸ Native Uzantılar: GN + Rust’ın cargo sistemi
    DENO

    View Slide

  8. 1. ÖNBİLGİLER
    NODE.JS’DE TATSIZ DENEYİMLER: “DESIGN MISTAKES IN NODE”
    ▸ API tasarımı nedeniyle Callback Hell


    ▸ Paket sürümleme hataları nedeniyle lock dosyaları


    ▸ Paketler nedeniyle devasa node_modules klasörleri


    ▸ Modül çözümleme algoritması araçlar için sorun teşkil ediyordu


    ▸ ES2015 ve/veya TypeScript için Transpilation


    ▸ io.js ile birleşene kadar Promise’ler veya ES2015 özellikleri yoktu

    View Slide

  9. 1. ÖNBİLGİLER
    DENO 1.0 NE UMUT VAAD ETMİŞTİ?
    ▸ Dahili TypeScript desteği


    ▸ “Fundamental Araçlar”: Bundler, dependency info, linter, formatter, documentor dahili


    ▸ Güvenli runtime


    ▸ Tek binary sayesinde ekstra taşınabilirlik ve DevOps avantajları


    ▸ ECMAScript ve Browser ortamı arasında uyumluluk


    ▸ Streamler, Eventler


    ▸ URL, Blob, File, FormData, Headers, Request, Response


    ▸ TextEncoder, TextDecoder


    ▸ (Intl*, Web Storage APIs*, WebSockets*)

    View Slide

  10. 1. ÖNBİLGİLER
    GEÇEN YILDAN DENO YORUMLARI
    ▸ Üzücü haber: node.js ile uyumluluğu


    ▸ İyimserlik: bugün başlıyorsanız node.js’i komple unutup Deno ile başlayabilirsiniz


    ▸ İyimserlik: node.js API’larına bağımlı olmayan npm paketlerinizi Deno’da kullanabilirsiniz


    ▸ Yalnız require()’a dikkat etmek gerekli


    ▸ Benchmarklarda henüz node.js’le arasında çok ufak farklar bulunuyor


    ▸ Deno’da profesyonel anlamda çalışmak için; yeterli ekosistem oluşmadan giriş yapmak
    tehlikeli


    ▸ Örnek: veritabanı v.b. aktif soket bağlantılı kütüphaneler

    View Slide

  11. 2. SÜRÜM 1.0’DAN SONRA

    View Slide

  12. 2. SÜRÜM 1.0’DAN SONRA
    2020 GELİŞTİRMELERİ
    ▸ WebSocket API (Client)


    ▸ alert, confirm, prompt Web APIs


    ▸ Self-Contained, Stand-Alone Binaries


    ▸ Development Tools: Watch Mode, Test Coverage Tool, Compiler


    ▸ Language Server (Ex: VS Code)


    ▸ Arm64 - M1 Support

    View Slide

  13. 2. SÜRÜM 1.0’DAN SONRA
    2021 GELİŞTİRMELERİ
    ▸ Markdown and JSON formatter


    ▸ Web Streams


    ▸ ICU (Intl) support


    ▸ WebGPU APIs


    ▸ Import Maps


    ▸ Private Modules (w/ auth tokens)


    ▸ Native HTTP/2 Web Server*
    ▸ Official Docker Images


    ▸ Abortable Fetch


    ▸ Crypto APIs

    View Slide

  14. 2. SÜRÜM 1.0’DAN SONRA
    STANDARD LIBRARY (SÜRÜM 0.98)
    ▸ archive: tar, untar


    ▸ async: delay (setTimeout’a gerek yok)


    ▸ bytes: indexOf, lastIndexOf, equals, startsWith, endsWith,
    repeat, concat, contains, copy


    ▸ datetime: parse, format, dayOfYear, weekOfYear, isLeap,
    difference


    ▸ encoding: binary, CSV, TOML, YAML, base32, base64,
    ascii85/base85


    ▸ flags: (minimist, yargs-parser gibi)


    ▸ fmt: printf, colors


    ▸ fs: emptyDir, ensureDir, ensureFile, exists, move, copy,
    walk, glob


    ▸ hash: mdX, ripemdX, shaX, shaXXX, sha3-XXX, keccakXXX
    ▸ http: http module


    ▸ io: Buffers, Readers, Writers, Streams


    ▸ log: Console Logger, File Logger, Rotating File Logger


    ▸ mime: Mime parser


    ▸ node: ???*


    ▸ path: basename, dirname, extname, format, fromFileUrl,
    isAbsolute, join, normalize, parse, relative. resolve,
    toFileUrl, globToRegExp


    ▸ signal: signal, onSignal


    ▸ testing: asserts, benching


    ▸ uuid: v1, v4, v5


    ▸ wasi: WebAssembly System Interface


    ▸ ws: WebSocket Server

    View Slide

  15. 2. SÜRÜM 1.0’DAN SONRA
    ÜÇÜNCÜ PARTİ KÜTÜPHANELER
    ▸ lodash: lodash


    ▸ dayjs: moment.js alternative


    ▸ xstate: state manager


    ▸ oak: koa, express.js replacement


    ▸ denon: nodemon


    ▸ denodb: ORM for relational dbs +
    mongo


    ▸ redis: Redis client


    ▸ gql: GraphQL destegi
    ▸ monads: Typesafe Option, Result v.b.
    yapilar


    ▸ djwt: JSON web tokens


    ▸ dotenv: .ENV file support


    ▸ dejs: EJS templating


    ▸ computed_types: Typesafe JOI
    alternative


    ▸ autopilot: automation framework


    dahası için deno.land/x adresi

    View Slide

  16. 2. SÜRÜM 1.0’DAN SONRA
    DENO EKOSİSTEMİ
    ▸ Deno Company (29 Mayıs 2021)


    ▸ 4.9 million dollars of seed capital


    ▸ “This investment means we will have a staff of full-time expert engineers working to
    improving Deno. We will ensure that issues are addressed, bugs are fixed, timely releases
    are made; we will ensure Deno is a platform others can build on with trust.”


    ▸ Deno Deploy (https://deno.com/deploy)


    ▸ “Deno Deploy is a distributed system that runs JavaScript, TypeScript, and WebAssembly
    at the edge, worldwide. The service deeply integrates the V8 JavaScript runtime with a
    high performance asynchronous web server to provide optimal performance without
    unnecessary intermediate abstractions.”

    View Slide

  17. 2. SÜRÜM 1.0’DAN SONRA
    DENO EKOSİSTEMİ NEDEN ÖNEMLİ? (1/3)
    ▸ Deno’nun iddiası Web API’lar ile uyumlu yeni nesil bir “runtime” geliştirmek,


    ▸ Deno bugün bir JavaScript Runtime gibi görünse de,


    ▸ TypeScript gibi transpiler’ları devreye sokabiliyor,


    ▸ WebAssembly ile daha fazla dile taban olabiliyor,


    ▸ Bugün en büyük engel: Node ekosisteminin kanıksanmışlığı


    ▸ Çözüm: yeni araçlar


    ▸ Çözüm: std/node*

    View Slide

  18. 2. SÜRÜM 1.0’DAN SONRA
    DENO EKOSİSTEMİ NEDEN ÖNEMLİ? (2/3)

    View Slide

  19. 2. SÜRÜM 1.0’DAN SONRA
    DENO EKOSİSTEMİ NEDEN ÖNEMLİ? (3/3)
    ▸ Deno’nun std/node’un geleceğine ilişkin iddiası:


    ▸ “Although Deno has taken a hardline approach to simplifying the module system,
    ultimately Deno and Node are pretty similar systems with similar goals. Over time,
    we expect Deno to be able to run more and more Node programs out-of-the-box”


    ▸ Topluluk:


    ▸ Ryan Dahl halen projede


    ▸ Deno Company yatırımlarına ek olarak GitHub’da 127 sponsor var


    ▸ GitHub’da yalnızca core projede 605 katılımcı bulunuyor

    View Slide

  20. 3. NASIL BAŞLANIR?

    View Slide

  21. 3. NASIL BAŞLANIR?
    DENO İLE NE YAZMALI?
    ▸ Araçlar


    ▸ PoC


    ▸ Çok fazla trafik almayan,

    bir mimarinin göbeğinde olmayan,

    hata toleransı olan,

    sorun olduğunda benzerini hızlıca node.js ile ayağa kaldırabileceğiniz,

    API ve/veya mikroservisler


    ▸ Tek kişinin yönettiği, kişisel işler


    ▸ KÜTÜPHANELER (ES Modules)


    ▸ Topluluk desteği ihtiyacınız varsa biraz bekleyebilirsiniz

    View Slide

  22. 3. NASIL BAŞLANIR?
    DENO İLE GELİŞTİRMEYE BAŞLAMAK

    View Slide

  23. 3. NASIL BAŞLANIR?
    BAŞLAMAK İÇİN
    ▸ Resmi Sitesi

    https://deno.land/


    ▸ Ücretsiz Crash Course

    https://denobeginner.com/

    View Slide

  24. 3. NASIL BAŞLANIR?
    BENİM DENO PROJELERİM
    ▸ HEX Function Abstraction Framework

    https://github.com/eserozvataf/hex


    ▸ Backend API Service Boilerplate

    https://github.com/eserozvataf/hex-service

    View Slide

  25. KAPANIŞ
    İLETİŞİMDE KALALIM
    ▸ Twitch: Canlı Yayın

    https://twitch.tv/laroux


    ▸ YouTube: Yayın Tekrarları

    https://youtube.com/EserOzvataf


    ▸ Twitter: Mikroblogging

    https://twitter.com/eserozvataf


    ▸ Sunumlar: Speakerdeck

    https://speakerdeck.com/eser


    ▸ GitHub: Üretim

    https://github.com/eserozvataf

    View Slide

  26. TEŞEKKÜRLER,


    SORULAR?
    /eserozvataf
    /eserozvataf /laroux
    /EserOzvataf

    View Slide