Tsoding
Tsoding
  • 39
  • 1 377 506
Will Ada Replace C/C++?
Links:
- Download the Game: tsoding.itch.io/eepers
- Source Code of the Game: github.com/tsoding/eepers
- Twitch: www.twitch.tv/tsoding
- The NSA joke tweet: tsoding/status/1764595562291024333
- The NSA list of memory-safe programming languages: readwrite.com/the-nsa-list-of-memory-safe-programming-languages-has-been-updated/
- Type 42 (Author of the Soundtrack): soundcloud.com/type42
- Raylib: www.raylib.com/
- Old Ada Mode for Emacs: github.com/tkurtbond/old-ada-mode
- Learn Ada: learn.adacore.com/
Chapters:
- 0:00:00 - Intro
- 0:01:44 - Eepers
- 0:04:45 - Hello World
- 0:09:41 - "Advanced" Build Systems
- 0:10:51 - Text Editors
- 0:12:29 - Raylib
- 0:16:15 - Biggest Secret in Tech
- 0:18:37 - Interfacing with C
- 0:25:02 - Library Bindings
- 0:27:16 - Windows
- 0:30:14 - Documentation
- 0:32:59 - Best Feature of Ada
- 0:43:02 - Conclusion
Переглядів: 90 379

Відео

AoC 2020 - Day 10 - I lost my hair solving this problem in Haskell
Переглядів 39 тис.3 роки тому
Support: www.patreon.com/tsoding Problem: adventofcode.com/2020/day/10
Making Music with Haskell From Scratch
Переглядів 99 тис.4 роки тому
Source Code: github.com/tsoding/haskell-music Note Frequency Math: pages.mtu.edu/~suits/NoteFreqCalcs.html Chapters: 0:00 Producing First Sounds 19:03 Frequency in Hertz 28:06 Semitones 34:10 Attack-Release 43:32 Tempo 46:06 Making Music
Secret Haskell Composition Technique
Переглядів 23 тис.4 роки тому
MONADS DO NOT COMPOSE Support: patreon.com/tsoding
I programmed in TypeScript like in Haskell (Lazy Evaluation)
Переглядів 51 тис.4 роки тому
Hey! In today's video I tried to explain Lazy Evaluation using TypeScript for all of the examples instead of Haskell. TypeScript is a superset of JavaScript which adds static typing on top of it. The combination of functional background of JavaScript and the strong static typing makes TypeScript a perfect environment for exploration of Haskell concepts but with a more familiar for mainstream de...
Why Linux Has This Syscall?!
Переглядів 51 тис.4 роки тому
Source Code: github.com/tsoding/mmap Here is another lecture style video similar to the previous one. I'm not sure if these kinda videos are watchable, but they liberate me from the chore of video editing which I can't stand anymore, I really apologize for that! The need of editing the video was probably one of the main reasons that demotivated me from uploading here too often. I'm gonna keep d...
JSON Parser 100% From Scratch in Haskell (only 111 lines)
Переглядів 144 тис.4 роки тому
Twitch: www.twitch.tv/tsoding GitHub Repo: github.com/tsoding/haskell-json My Haskell Setup: ua-cam.com/video/5p2Aq3bRuL0/v-deo.html Unusual video this time. This is a slightly edited recording of my Twitch stream. Initially I planned to make a regular video on this topic, but quickly realized that it's just way too much material for a single regular 10 minutes video. So I decided to make a Liv...
K-d Tree in Python #4
Переглядів 8 тис.4 роки тому
Source Code: github.com/tsoding/kdtree-in-python Previous Videos: ua-cam.com/play/PLguYJK7ydFE7R7KqRRVXw23kOrn6jiwqi.html Patreon: www.patreon.com/tsoding
How Monoids are useful in Programming?
Переглядів 47 тис.5 років тому
Support: www.patreon.com/tsoding
My Haskell Setup
Переглядів 53 тис.5 років тому
General Haskell Setup: - Emacs (Editor): www.gnu.org/software/emacs/ - haskell-mode (Extension for Emacs): github.com/haskell/haskell-mode - GHC (Haskell Compiler): www.haskell.org/ghc/ - My dotfiles: github.com/rexim/dotfiles Tools for "Real World" Apps: - Cabal (Build Tool): www.haskell.org/cabal/ - ghcid (GHCi Auto-Reloader): github.com/ndmitchell/ghcid - hlint (Smart Linter): github.com/ndm...
CodeWars Strikes Again - HaskellRank Ep.13
Переглядів 12 тис.5 років тому
Decode the Morse code: www.codewars.com/kata/54b724efac3d5402db00065e Support: www.patreon.com/tsoding
Bubble Sort in Python 5
Переглядів 14 тис.5 років тому
Please support I need tea www.patreon.com/tsoding
Brute-forcing all Magic Squares - HaskellRank Ep.12.1
Переглядів 9 тис.5 років тому
In the previous HaskellRank episode ua-cam.com/video/_uQCgss-aB4/v-deo.html I mentioned that we could brute-force all of the possible Magic Square, but I decided not to do that because I didn't want to make the video too long. Here is a follow-up to the Ep.12 where we actually brute-force all of the possible 3x3 Magic Squares. Forming a Magic Square: www.hackerrank.com/challenges/magic-square-f...
Solving Magic Square using Functional Programming -- HaskellRank Ep.12
Переглядів 19 тис.5 років тому
Forming a Magic Square: www.hackerrank.com/challenges/magic-square-forming/problem Support: www.patreon.com/tsoding Magic Square Party Trick - Numberphile: ua-cam.com/video/aQxCnmhqZko/v-deo.html
Treating Lists as Monads - HaskellRank Ep.11
Переглядів 14 тис.5 років тому
Electronics Shop: www.hackerrank.com/challenges/electronics-shop/problem Support: www.patreon.com/tsoding
Tracking Hikes with Haskell - HaskellRank Ep.10
Переглядів 11 тис.5 років тому
Tracking Hikes with Haskell - HaskellRank Ep.10
The Usefulness of Maybe monad - HaskellRank Ep.09
Переглядів 15 тис.5 років тому
The Usefulness of Maybe monad - HaskellRank Ep.09
What is IO monad?
Переглядів 69 тис.5 років тому
What is IO monad?
Solving Russian Calendar Problems in Haskell -- HaskellRank Ep.08
Переглядів 15 тис.5 років тому
Solving Russian Calendar Problems in Haskell HaskellRank Ep.08
Reusable Code - Relationship between Applicative and Monoid.
Переглядів 25 тис.5 років тому
Reusable Code - Relationship between Applicative and Monoid.
Purely Functional Solutions to Imperative Problems -- HaskellRank Ep.07
Переглядів 29 тис.6 років тому
Purely Functional Solutions to Imperative Problems HaskellRank Ep.07
HaskellRank Ep.06 -- Playing Basketball with Kangaroo
Переглядів 13 тис.6 років тому
HaskellRank Ep.06 Playing Basketball with Kangaroo
Fold -- HaskellRank Ep.05.1
Переглядів 15 тис.6 років тому
Fold HaskellRank Ep.05.1
Between Two Sets -- HaskellRank #05
Переглядів 22 тис.6 років тому
Between Two Sets HaskellRank #05
Code Warrior -- HaskellRank #04
Переглядів 17 тис.6 років тому
Code Warrior HaskellRank #04
Apples and Oranges -- HaskellRank #03
Переглядів 21 тис.6 років тому
Apples and Oranges HaskellRank #03
Grading Students -- HaskellRank #02
Переглядів 27 тис.6 років тому
Grading Students HaskellRank #02
HackerRank in Haskell -- HaskellRank #01
Переглядів 85 тис.6 років тому
HackerRank in Haskell HaskellRank #01
PHP Tutorial #01 - Introduction (april fools joke)
Переглядів 7 тис.6 років тому
PHP Tutorial #01 - Introduction (april fools joke)
Haskell for JavaScript programmers
Переглядів 58 тис.6 років тому
Haskell for JavaScript programmers

КОМЕНТАРІ

  • @Az181
    @Az181 5 днів тому

    why not isForbidden x = and $ map ($ x) [the list of predicates]

  • @MatthewPherigo
    @MatthewPherigo 9 днів тому

    Every time he scrolls down and we see a brief glimpse of the default solution, my jaw drops. I'm glad I don't have to work on a codebase like that.

  • @Turalcar
    @Turalcar 10 днів тому

    mmap is versatile in the same way read and write are, i.e. perfectly fine

  • @rahantr1
    @rahantr1 10 днів тому

    mmap is a posix system call. It's not supposed to be user friendly. It's supposed to be an interface all posix compliant OSes provide as standard. Old and low level code can't be judged by SOLID principles or design patterns. Those are luxuries that system engineers don't have or need.

  • @thatstupiddoll
    @thatstupiddoll 11 днів тому

    As a rust developer, I can confirm, I did go ballistic

  • @jony1710
    @jony1710 11 днів тому

    Pretty much nothing using morecore (a.k.a the sbrk syscall) on linux. I think plan9 still uses that approach. It's all mmap as far as I know these days.

  • @bhavyakukkar
    @bhavyakukkar 13 днів тому

    I rewrote this in rust

  • @nathaaaaaa
    @nathaaaaaa 15 днів тому

    It was an honor to penetrate parsers with you for one hour and 50 minutes

  • @fennecbesixdouze1794
    @fennecbesixdouze1794 15 днів тому

    Legendary video. Worth noting that this approach can also be followed in imperative languages (Javascript, anyone?) and leads to an incredibly succinct way of implementing parsers.

  • @luigidabro
    @luigidabro 15 днів тому

    Why is he no longer so rotund?

    • @sadhlife
      @sadhlife 9 днів тому

      started exercising :D

  • @shikanokonokokoshitantan
    @shikanokonokokoshitantan 16 днів тому

    2020 Tsoding: Linus Torvalds 2024 Tsoding: Mark Succerburg

  • @halfsourlizard9319
    @halfsourlizard9319 17 днів тому

    1:11:30 Yesssss, I was *hoping* that the punchline was going to be Sieve of Eratosthenes ... Such a classic / nice example ... So satisfying!

  • @halfsourlizard9319
    @halfsourlizard9319 17 днів тому

    54:00 Re: Haskell fanatics: You're absolutely right. Trying to 'debug' performance problems in a lazy language is mind-bendingly difficult -- anything that you do to investigate, while it won't change input -> output mapping, *may* change what gets evaluated and when. If you want to checkmate a Haskell fanatic's 'silver-bullet' arguments, ask them why `seq` exists.

  • @halfsourlizard9319
    @halfsourlizard9319 17 днів тому

    42:30 It's almost unreasonable how many good ideas there have been in functional languages that have been 'soaked up' by normie languages ... Wonder if dysfunctional (?) / nonfunctional (?) people will ever 'do the induction' and realise that we ought to replace all of the derpy OO / procedural languages with functional ones ...

    • @halfsourlizard9319
      @halfsourlizard9319 17 днів тому

      The largest benefit of functional languages is equational reasoning / referential transparency. You can't 'soak [that] up' incrementally; it's a fundamental property of purity that cannot be added to a language with effects.

  • @halfsourlizard9319
    @halfsourlizard9319 17 днів тому

    So, this is really call-by-name, rather than lazy evaluation -- things are evaluated only when needed ... but may be evaluated repeatedly. Also, your intuition that thunks are not used to implement this is generally right; traditionally, graph reduction has been used ... afaik, modern GHC uses some more-sophisticated abstract machine (It was STG at some point, but I'm not sure what's being used now.).

  • @halfsourlizard9319
    @halfsourlizard9319 17 днів тому

    17:20 Wait ... are there still people who believe that static typing isn't the obvious / only choice!?

  • @halfsourlizard9319
    @halfsourlizard9319 17 днів тому

    Why do people who come from Java / OO use `T` as the first type parameter? In functional languages (Haskell, SML, etc.) we start with `A` ... which seems like the obvious place to start.

  • @andreffrosa
    @andreffrosa 17 днів тому

    I think it would be cool to now explain monads but instead using an imperative language, like C.

  • @10Dima01
    @10Dima01 19 днів тому

    Tsoding was right when he said it's a nice (probably best) video on his channel.

  • @Sinthoras155
    @Sinthoras155 24 дні тому

    I really want to add Haskell to my repository of languages I know really good

  • @kumarjitdas1999
    @kumarjitdas1999 Місяць тому

    I am a JetBrains user. Am I invited?

  • @user-kn4wt
    @user-kn4wt Місяць тому

    8:26 woah that multi-cursor 🤯

  • @TheCyberBully420
    @TheCyberBully420 Місяць тому

    ADA 95? from 1995?

  • @xlcoldj
    @xlcoldj Місяць тому

    Still "Yes"🧠

  • @FrankBudino
    @FrankBudino Місяць тому

    AYO!

  • @user-su7cg3rh3x
    @user-su7cg3rh3x Місяць тому

    Awesome explanation, very helpful, thank you!

  • @AK-vx4dy
    @AK-vx4dy Місяць тому

    Respect... you really understad Monads and solid chunk of Haskell 🤯

  • @SecondShiftPleb
    @SecondShiftPleb Місяць тому

    As I was going to college for CS, Ada was replaced by Java in the curriculum. The general thought was that Ada was a great language, but it was out-of-fashion and too difficult to teach. After a few decades of thinking about it, I think Ada got most everything right in the first place, and most modern languages that followed were just superficial re-writes. I think it's time for Ada to make a comeback. I suppose a lot of people don't like the English-oriented syntax of BASIC/Pascal/Ada, but there's really no reason a more internationally neutral syntax layer couldn't be developed.

  • @potatopassingby
    @potatopassingby Місяць тому

    you seemed so nice and soft 6 years ago lmao

  • @rusi6219
    @rusi6219 Місяць тому

    going through all that pain with the GUI when you could just emacs -nw

  • @nincako
    @nincako Місяць тому

    What is side effect? Since it is not stated, I am stopping this explanation. downvote!

  • @JackHoffmanRN
    @JackHoffmanRN Місяць тому

    We have too many people in government talking about things they don't know about. I cringed every time they used the word "algorithm" when questioning that tiktok guy. Like that was their big word for the month.

  • @dooptydoo90x
    @dooptydoo90x Місяць тому

    I'm not a programmer by trade, just a hobbyist. I looked into Ada and found it really interesting, but really did get lost in build system goop. I think I may look into it again with this more minimalist, simple mentality and hopefully get more out of it. Good video, thanks.

  • @valenciawalker6498
    @valenciawalker6498 Місяць тому

    Thank youu

  • @stintaa
    @stintaa 2 місяці тому

    Rewatching your old videos, and this intro hit as hard as it did 4 years ago :D

  • @mishaerementchouk
    @mishaerementchouk 2 місяці тому

    24:23 with “Hello from AdaglBlendFunc”. I like the casual example of an out of bounds read achieved in an approved “safe” language. PS Thanks for an interesting overview of Ada. It’s turned out to be quite a curious creature.

  • @0LoneTech
    @0LoneTech 2 місяці тому

    I prefer avoiding unneeded indices. divisibleSumPairs k ar = length [x | (h:xs) <- init (Data.List.tails ar), x<-xs, 0==(h+x)`mod`k]

  • @0LoneTech
    @0LoneTech 2 місяці тому

    There is a meaning to having templates, in isolating what your task is. The task wasn't to parse input streams into numbers, but to fill in the body of one function. Unfortunately, the scaffolding was indeed ridiculous. E.g. compare: arTemp <- getLine let ar = Data.List.map (read :: String -> Int) . words $ arTemp ar :: [Int] <- map read . words <$> getLine readMultipleLinesAsStringArray = sequence . flip replicate getLine

  • @cheshy2289
    @cheshy2289 2 місяці тому

    We all know the answer is Rust

  • @kreaweb-be
    @kreaweb-be 2 місяці тому

    I learned Ada in the early nineties. I loved it.

  • @eliseulucenabarros3920
    @eliseulucenabarros3920 2 місяці тому

    bro basically speedrun the accession of ADA for the rest of the world with a ready template for games, LMAO

  • @bordeux
    @bordeux 2 місяці тому

    nope.

  • @honkhonk8009
    @honkhonk8009 2 місяці тому

    hoily fuck this nigga was WIDE before he started cutting. Thats actually insane bro

  • @MisterFanwank
    @MisterFanwank 2 місяці тому

    hasn't yet

  • @NoOne-ev3jn
    @NoOne-ev3jn 2 місяці тому

    Tsoding is just underrated

  • @AeroSW
    @AeroSW 2 місяці тому

    Combination of Snake and Pascal cases (Pascal_Snake case). (camelCase for having humps in the middle of the name like a camel.)

  • @sealsharp
    @sealsharp 2 місяці тому

    Today in the category "Video titles that could have existed in the 80ies"...

  • @Walter-Montalvo
    @Walter-Montalvo 2 місяці тому

    Oracle PL/SQL was designed from ADA, including the .pls and .plb analog file extensions

  • @5555S5
    @5555S5 2 місяці тому

    If anything ever is going to replace c/c++ it's almost 100% going to be rust.

  • @T1Oracle
    @T1Oracle 2 місяці тому

    Ada is a beautiful language, but Rust does most of the same thing while being modern. It would make more sense to improve Rust than use Ada.