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. HAKKIMDA ESER ÖZVATAF ▸ Direktör @ Açık Yazılım ▸ Alaylı

    ve Mektepli ▸ Topluluk Katılımcısı ▸ İçerik Üreticisi /eserozvataf /eserozvataf /laroux /EserOzvataf
  2. ‣ 1. ÖNBİLGİLER ‣ 2. SÜRÜM 1.0’DAN SONRA ‣ 3.

    NASIL BAŞLANIR? Bugün bahsedeceklerim:
  3. 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 (<server> 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ı.
  4. 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
  5. 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
  6. 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*)
  7. 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
  8. 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
  9. 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
  10. 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
  11. 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
  12. 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.”
  13. 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*
  14. 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
  15. 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
  16. 3. NASIL BAŞLANIR? BAŞLAMAK İÇİN ▸ Resmi Sitesi 
 https://deno.land/

    ▸ Ücretsiz Crash Course 
 https://denobeginner.com/
  17. 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
  18. 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