Writing an interpreter... in OCaml?!?

Поділитися
Вставка
  • Опубліковано 17 лис 2024

КОМЕНТАРІ •

  • @ameenkhieredeen6663
    @ameenkhieredeen6663 Рік тому +126

    I love OCaml, would be great if you made an OCaml course or tutorials would definitely watch them.

    • @teej_dv
      @teej_dv  Рік тому +30

      awesome! I'm considering how to do it. thanks for the feedback :)

    • @jsonkody
      @jsonkody Рік тому +1

      Me too

    • @tjfreak12
      @tjfreak12 10 місяців тому

      Here is a great playlist for learning ocaml.
      ua-cam.com/play/PLre5AT9JnKShBOPeuiD9b-I4XROIJhkIU.html&si=WbnPg2gbb8qZnCuo

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

      @@teej_dvhave you done it?

  • @tini_
    @tini_ Рік тому +152

    Tom is a genius!

    • @tapu_
      @tapu_ Рік тому +20

      JDSL is the best language ever.

    • @teej_dv
      @teej_dv  Рік тому +57

      oh no, the meme is spreading. it's broken containment from the degen army

    • @londospark7813
      @londospark7813 Рік тому +9

      @@tapu_ Aren't you supposed to JDeez Nuts?

    • @leonvolq6179
      @leonvolq6179 Рік тому +1

      Everyone in twitch programming knows the joke by now

    • @georgecop9538
      @georgecop9538 Рік тому +1

      ​@@tapu_ until you add code comments, but yeah, genius.

  • @JakobKenda
    @JakobKenda Рік тому +48

    Yes, definitely do more of this.
    I don't think we need a full OCaml course, just learning alongside you explaining code is enough I think.

    • @teej_dv
      @teej_dv  Рік тому +14

      cool :) we'll at least start with just "learn ocaml through seeing this code" i think

  • @bayrock1337
    @bayrock1337 Рік тому +11

    Keep these coming, OCaml has been my language of choice recently and deserves attention.

  • @industry_std
    @industry_std Рік тому +9

    When I discovered pattern matching with Elixir my mind was blown... and yet this looks even 'cuter'

  • @gokukakarot6323
    @gokukakarot6323 12 днів тому

    Thank god for your existence, I was looking for any project to do with ocaml, I was just getting bummed out. Hoping this is going to become neorust.

  • @pharmajoe990
    @pharmajoe990 Рік тому +7

    This is great, I’ve only ever heard of ocaml previously. Will have to have a play around, cheers

    • @teej_dv
      @teej_dv  Рік тому

      sweet :) I hope you enjoy it! I'm having a lot of fun

  • @lillyschwarz5295
    @lillyschwarz5295 7 місяців тому +1

    you're literally saving me and my bachelor thesis xD

  • @maleldil1
    @maleldil1 Рік тому +1

    Please keep these coming! I've done the book in Go, so seeing a different way will be interesting. I can already see how much better pattern matching is compared to type switching on interfaces in the original.
    OCaml is a language that I used to be interested in (as a middle ground between Rust and Haskell), but I got put off by how inconsistent the community is. I can see it being useful for cases like this, where you likely don't need much outside of the core language.

  • @imhassane
    @imhassane Рік тому +2

    Learnt it in my second year of university, couldn’t understand this language at the time but this code looks beautiful

  • @rahuldevstech
    @rahuldevstech Рік тому +2

    OCaml, my Caml!
    But, seriously: even more OCaml curious now. Thanks for sharing!

    • @teej_dv
      @teej_dv  Рік тому +2

      well hopefully next few videos will convince you even more!

  • @orbital1337
    @orbital1337 Рік тому +2

    OCaml is pretty nice - especially for this kind of stuff! I've used it a bit in the past for automated reasoning & formal verification type work.

  • @Honken
    @Honken Рік тому +2

    Subscribing for OCaml content! One of the nicest programming languages in existence.

  • @tyrox9
    @tyrox9 Рік тому +1

    Really liked the video, what i would like to see is how to use dune/run tests or an explanation on how to use modules. I tried to read the documentation and i could not figure this things out.

  • @rickdg
    @rickdg Рік тому

    Nice to see your first ocaml my caml video. If you can find a way to have your green screen a little further back, you can probably prevent the green reflection that its casting on your head.

  • @pedrosaraiva1930
    @pedrosaraiva1930 Рік тому +1

    15 years ago at my university class we were assigned to build a interpreter in OCaml and Prolog

    • @mattinykanen4780
      @mattinykanen4780 10 місяців тому

      My own Master's final programming project was to implement a compiler whose
      (i) source language was Prolog extended with certain features which come in handy when you are writing compilers in Prolog
      (ii) object language was standard Prolog
      (iii) implementation language was... Prolog, of course.

  • @tofuman9526
    @tofuman9526 Рік тому

    Yes yes, it’s fun to watch OCaml lang used to make something interesting like this. Would love to see an API development or something too

  • @draakisback
    @draakisback Рік тому

    I love Ocaml, glad you decided to make a video on it. I know you're pretty hot on the language also but obviously it's not as popular as say rust for example. I'm looking forward to the opam Windows release since I do most of my development on Windows. Fortunately in the meantime we have DKML which is pretty fantastic.

  • @charstringetje
    @charstringetje Рік тому +1

    Any curried ML language is nice, and Rok too (even though it doesn't curry functions by default). With OCaml I just had to get used to the French ordering of product types: `int list` instead of `List Int`. French acronyms can be confusing in the same way.

  • @fredericchopin255
    @fredericchopin255 Рік тому +1

    Wow! We do ocaml in france and i had a project for writing mini compiler of java using ocaml

  • @TerryDellino
    @TerryDellino Рік тому

    I’m enjoying these Ocaml videos! I have always loved functional programming languages, but never got into Ocaml. I need to give it another look. Pattern matching makes code really easy to reason about IMO

  • @nemartin1
    @nemartin1 Рік тому

    Subscribed just for the future OCaml videos.

  • @tavin136
    @tavin136 Рік тому +2

    I'll [[likely]] save this for later.

  • @alphabitserial
    @alphabitserial Рік тому

    Would love to see more OCaml videos!

  • @rac116
    @rac116 Рік тому +1

    Functional programming! 🎉

  • @pauloffborba
    @pauloffborba Рік тому

    This remember the Elixir code 👏🏻👏🏻 Great video!

  • @AlleBalle54
    @AlleBalle54 Рік тому

    great video, the mattern matching looks very intressting and think I would've loved it for a use case I had the other day

  • @The45DegreesProject
    @The45DegreesProject Рік тому +1

    This is cool. First time I see OCaml and sort of get what is going on :D

    • @The45DegreesProject
      @The45DegreesProject Рік тому

      I’d love to see more on OCamls type system and how modules/functors work

  • @TayTayChan
    @TayTayChan Рік тому

    Long overdue video, Teej! I knew you were doing some OCaml and got curious, but try as I might I'm not made for watching live streams.
    Interesting implementation, would love to see more. I did some ML back in the day, so it's not completely alien.

  • @arisweedler4703
    @arisweedler4703 Рік тому

    this is awesome. Would love to see more of this

  • @AndreiDim
    @AndreiDim Рік тому +4

    keep it up with ocaml videos 👍

  • @Danielo515
    @Danielo515 Рік тому

    By the way, if you want to keep people hooked and understanding the syntax easier, you could consider using reason syntax. It is the same, but with a more C-style looking

  • @AXYGaming
    @AXYGaming Рік тому

    Ocaml has built in support for lexing and parsing with .mll and .mly extensions with ocamllex and ocamlyacc respectivly

  • @diegolikescode
    @diegolikescode Рік тому

    waiting for the playlist, babie!

  • @lpanebr
    @lpanebr 11 місяців тому

    10:13 oh I see it! I see the angstrom pattern matching there! Right? Interesting!

  • @goosechaser
    @goosechaser Рік тому

    Bought this book months ago and was unironically going to write it in OCaml too! Lmao. Learned OCaml for functional class in school

  • @Blure
    @Blure Рік тому +1

    Thanks for the video TJ. Could you please share your ocaml setup for neovim? Mine is not showing type hints like yours. Thanks :)

  • @WillEhrendreich
    @WillEhrendreich Рік тому +1

    Great stuff, love it.

  • @xtsxo9872
    @xtsxo9872 Рік тому

    great video! really interested to see more ocaml

  • @kylestubblefield3404
    @kylestubblefield3404 Рік тому

    We need all the OCamls!

  • @mustafazakiassagaf1757
    @mustafazakiassagaf1757 Рік тому

    i love this video. Maybe having a little bit live coding explaining how to solve something in ocaml would be nice

    • @teej_dv
      @teej_dv  Рік тому +1

      come watch on twitch :) twitch.tv/teej_dv

    • @mustafazakiassagaf1757
      @mustafazakiassagaf1757 Рік тому

      ​@@teej_dvahh I did not know that you also stream it. gonna watch the vod

  • @mumk
    @mumk Рік тому

    The syntax of OCaml and F# bears a striking resemblance

    • @mattinykanen4780
      @mattinykanen4780 10 місяців тому

      ...because F# began essentially as "Microsoft OCaml"...

    • @benfaerber4956
      @benfaerber4956 6 місяців тому

      Java is to C# what OCaml is to F#. Same with Pascal and AL

  • @jackevansevo
    @jackevansevo Рік тому +3

    This code looks so elegant compared to the Go implementation.

  • @un9286
    @un9286 Рік тому +1

    I would actually like some tutorial in how to make the Ocaml lsp work in nvim

  • @sultanaldihani3296
    @sultanaldihani3296 Рік тому

    You did an amazing video, the idea is interesting I’m doing the same but with rust to learn it 🌚 continue the great work plz

  • @sgwong513
    @sgwong513 Рік тому

    never lean OCaml before, although you try to explain it but still couldn't get how it works(I also haven't read the book for how it implement the lexer). Might see the code offline again. but it seems fresh and interesting to look at functional program with OCaml. had been doing imperative programming for so long time.

  • @RoccoGhielmini
    @RoccoGhielmini Рік тому

    Love it love it!! Keep going

  • @marcusrehn6915
    @marcusrehn6915 Рік тому

    Seems really cool, would love to see other examples!
    A bit curious about the performance, but mostly really curious about the ecosystem. Is there a package manager that people actually use and are there implementations for graphl and grpc as well as the most common databases?

  • @shivisuper91
    @shivisuper91 Рік тому +1

    More functional programming please! Also, did you create your own plugin to show type hints for each function or there's an existing plugin for it?

  • @mattinykanen4780
    @mattinykanen4780 10 місяців тому

    And now the scary part: the name is originally an acronym for
    Objective (as in OO)
    Categorical (as in Category theory in math - yes, monads & c.)
    Abstract (as in device independent meaning for its programs)
    Machine (as in reduction rules which implement that meaning)
    Language (as in a notation for the C and A above).
    It's really a clever decoy which tempts you from the bountiful fruits of Real Programming into the arid wasteland of Computer Science - with the tacit goal to make you unemployable...

  • @ersstuff
    @ersstuff Рік тому +2

    The C A M L, with an O at the front
    It’s not imperative scaring ya, and we ain’t tryna stunt
    Just tryna process every single type to keep it in check
    And having higher-order fun with it is just a side effect
    (c) rangersbeats

    • @teej_dv
      @teej_dv  Рік тому +1

      very nice lyrics

  • @Tala2n
    @Tala2n Рік тому

    Ocamllex is included with Ocaml package. So I use it for the lexer. I refuse to use ocamlyacc, that adds dependency and Ocaml is sufficiently cool to implement a parser.

  • @hyto
    @hyto Рік тому

    Awesome video, keep them coming.

  • @rohithsuresh1877
    @rohithsuresh1877 Рік тому

    Banger of a video teej!! How do you have an end of line marked in neovim(the return symbol at the end of each line), is it some plugin?

    • @Mankepanke
      @Mankepanke Рік тому

      Native. See :help list and listchars

  • @ercpereda
    @ercpereda Рік тому +2

    That was awesome! Can you share the resources do you use to learn OCaml?

    • @teej_dv
      @teej_dv  Рік тому +3

      Mostly:
      1. Reading the official docs from ocaml.org
      2. Starting to build things :)
      also, asking friends in discord / twitch / etc.

  • @dacam29
    @dacam29 Рік тому

    I studied OCaml at university in 2007.... crazy

  • @jakeshoemaker1483
    @jakeshoemaker1483 Рік тому

    This was really cool.

  • @nickskywalker2568
    @nickskywalker2568 Рік тому +1

    thanks for the ocaml love

    • @teej_dv
      @teej_dv  Рік тому +1

      my pleasure, more coming soon!

    • @nickskywalker2568
      @nickskywalker2568 Рік тому

      @@teej_dv nice! Let's get ocaml some momentum in the industry!

  • @viktorhabchak470
    @viktorhabchak470 Рік тому

    More OCaml!

  • @dandogamer
    @dandogamer Рік тому

    Functional languages seem great for writing parsers

  • @kaioneal6160
    @kaioneal6160 11 місяців тому

    Ah I finally found your channel
    At last the algorithm is working as it should

  • @mazinabdallah5241
    @mazinabdallah5241 Рік тому

    I’m curious to know why you chose OCaml specifically out of all the FP langs.
    Like why not Haskell, for example?

    • @mattinykanen4780
      @mattinykanen4780 10 місяців тому

      Apart from being able to use monadic parsing expressions - which is admittedly a _huge_ win! - laziness does not really buy you much in compiler writing. In contrast, say, Prolog-style logical variables with unification make backpatching semi-generated code much simpler.

  • @felgenh399
    @felgenh399 Рік тому

    keep it comin'

  • @matthewrossee
    @matthewrossee Рік тому +1

    Great video, ocaml seems pretty cool. I have kinda mixed feelings about immutability though. I love the idea behind pure functions, but how do the performance and memory consumption compare to mutable solutions? It seems like the lexer is allocated for every token. Does ocaml perform some kind of optimization behind the scenes?

    • @teej_dv
      @teej_dv  Рік тому +5

      ocaml's compiler and garbage collector are optimized for lots of small, immutable allocations! In some cases, making many small objects (that are all declared mutable) is actually faster than creating mutable ones (because the compiler can make more optimizations).
      It's not like trying to write immutable code in javascript.

    • @teej_dv
      @teej_dv  Рік тому +2

      but that's a great question and concern!

    • @anarchymatt
      @anarchymatt Рік тому +2

      Persistent data structures can be used to minimize copying!

    • @anderdrache8504
      @anderdrache8504 Рік тому +2

      In general, immutable functional languages are mostly slower than something like C or Rust but they are often faster than mutable and garbage-collected languages. Immutability provides a bunch more possibility for optimization!

    • @matthewrossee
      @matthewrossee Рік тому +1

      @@anderdrache8504 Do you know some good articles or something like that about such optimizations? I'm really interested how it works under the hood.

  • @--------------------.
    @--------------------. Рік тому

    OCaml seems really nice! I wish i started my fp journey with it instead of Haskell!

    • @mattinykanen4780
      @mattinykanen4780 10 місяців тому

      I did it the other way around: First Standard ML and Caml - because it was and still is the only ML with a pulse - but then turning to Haskell because some features of Caml were not quite orthogonal,
      Whenever you add later a totally different programming or data model into an existing language, you are bound to see the stitches which keep that Frankenstein's monster together. As proof, compare
      (i) the Java generics, which added parametric polymorphism into what had been so far a purely object-oriented language with ad hoc and subtype polymorphism
      (ii) the "O" which added objects into Caml which had been so far purely parametrically polymorphic
      (iii) Haskell which developed instead the fresh idea of classifying types and not values. In OO terms, they did introduce ad hoc polymorphism, but for interfaces only. Values stayed intact, and hence parametric polymorphism continue working as before.

  • @coptan99
    @coptan99 Рік тому +1

    Which theme do you use?

  • @RoryIsNotACabbage
    @RoryIsNotACabbage Рік тому +2

    Hey teej is back 😀

    • @teej_dv
      @teej_dv  Рік тому +1

      haha finally :) hoping to get back into making some new videos more regularly

    • @RoryIsNotACabbage
      @RoryIsNotACabbage Рік тому

      @TJ DeVries I look forward to it. ngl was sad there was no 0.9 launch party

  • @talhaakram
    @talhaakram Рік тому +1

    love this.

    • @teej_dv
      @teej_dv  Рік тому

      love this comment :)

  • @thomasfrans1185
    @thomasfrans1185 Рік тому

    This was very interesting!

  • @kylegaijin
    @kylegaijin Рік тому +1

    I'm beginning to love Ocaml. It's the language that would be born if Rust and Go had a baby. By the way you went through the code really fast, so it was difficult to grasp a lot of what you were saying. Do you have this code posted on github? I looked, but I didn't find it.

  • @Danielo515
    @Danielo515 Рік тому

    You’re officially hooked in Ocaml, nuahahaha

  • @piotrjaga6929
    @piotrjaga6929 Рік тому

    do you mean like PiterDeVries in diune?

  • @vaishnavmhetre9061
    @vaishnavmhetre9061 Рік тому

    Tom spelled Immuntable in comments ❤️

  • @CrazyLuke11
    @CrazyLuke11 11 місяців тому

    I love neovim!! ❤

  • @dezorted2834
    @dezorted2834 Рік тому

    thevimteejen came back!

  • @slowjocrow6451
    @slowjocrow6451 Рік тому

    Hey teej, can you explain c# yield to a noob? I'm really struggling to understand

    • @teej_dv
      @teej_dv  Рік тому +2

      c# yield is like "return" but it keeps the state of the function call, so you can resume it later ( I think)

    • @_idiot
      @_idiot Рік тому

      could google and read 100 explanations instead of wait for him to answer a youtube comment

    • @slowjocrow6451
      @slowjocrow6451 Рік тому

      @@teej_dv Thank you. I saw it in a video with you and Prime recently. You two look like you have so much fun streaming together. Thanks for being so inspiring ❤️

  • @MENTOKz
    @MENTOKz Рік тому

    does ocaml have easy concurrency like in golang? but yeah i like the video

    • @noname78520
      @noname78520 Рік тому

      they just added multicore support in the last version 5.0

  • @aftalavera
    @aftalavera 9 місяців тому

    Is Ocaml Rust daddy! If so, whats the big deal?

  • @NathanHedglin
    @NathanHedglin Рік тому

    Ocaml os amazing for interpreters

  • @JohnWasinger
    @JohnWasinger Рік тому

    Is Ocaml easier than writing with flex and yacc?

    • @teej_dv
      @teej_dv  Рік тому +1

      Hmm... I think flex/yacc can often be "easier"... until they're not. Once you want to try and do something non-standard, you'll have a hard time. The point of the series isn't to pick the easiest way to write an interpreter, but instead to understand what is happening under the hood.

    • @havocindustries3078
      @havocindustries3078 Рік тому +2

      Flex and yacc are code generators. They open a can of worms beyond imagination. Code generation is pure evil. Stay away from those and use a language that allows you to express ideas in a concise way. Haskell, OCaml, F#, Scala, Rust are good examples.

    • @anderdrache8504
      @anderdrache8504 Рік тому

      Lexers and parsers are in my opinion not hard enough problems to justify parser generators. Of course use what you like but parsing is so simple that you can just do it yourself and be more flexible!

  • @ebukaezike9308
    @ebukaezike9308 Рік тому

    What Font is this ?

  • @Vanna1321
    @Vanna1321 Рік тому +1

    chad

    • @teej_dv
      @teej_dv  Рік тому

      actually, the name's teej ;)

  • @maman14141414
    @maman14141414 Рік тому

    i know nothing about ocamel but i have for sure seen you using your superior typing speed to make an appearance on AsmonGold stream

    • @teej_dv
      @teej_dv  Рік тому +2

      Whilst the older games certainly had a lot of multiplayer, they were absolutely viable single player games. Do you feel this element will be lost with the ever increasing push towards seasons and battle passes in diablo 4?

    • @maman14141414
      @maman14141414 Рік тому

      @@teej_dv now a days everything has a battle passe,and most of the time it doesn't serve any purpose beside making money, you should take a look at the video about abusive monetisation strategies that asmongold reacted to very informative

  • @desuburinga
    @desuburinga Рік тому

    Ocaml my caml with FEM maybe???

    • @teej_dv
      @teej_dv  Рік тому +1

      Maybe if they get tweeted at a bunch about it :)

  • @twenty-fifth420
    @twenty-fifth420 Рік тому

    Looks like my comment got flagged somehow, I just think OCaml looks pretty is the primary takeaway I got from here 😂.
    I want to make it work with Godot somehow. ⭐️

    • @teej_dv
      @teej_dv  Рік тому

      haha, i'm sure it's possible.... given enough time haha

  • @timjames4306
    @timjames4306 Рік тому +1

    Require a NeoVim installation and setup guide Video for Windows User also.🙌✌

  • @marcobuess
    @marcobuess Рік тому

    seeing ocaml makes me miss f#. 😢