virgil VS ocaml

Compare virgil vs ocaml and see what are their differences.

ocaml

The core OCaml system: compilers, runtime system, base libraries (by ocaml)
InfluxDB - Power Real-Time Data Analytics at Scale
Get real-time insights from all types of time series data with InfluxDB. Ingest, query, and analyze billions of data points in real-time with unbounded cardinality.
www.influxdata.com
featured
SaaSHub - Software Alternatives and Reviews
SaaSHub helps you find the best software and product alternatives
www.saashub.com
featured
virgil ocaml
29 119
897 5,162
- 0.7%
9.3 9.9
9 days ago 4 days ago
Shell OCaml
- GNU General Public License v3.0 or later
The number of mentions indicates the total number of mentions that we've tracked plus the number of user suggested alternatives.
Stars - the number of stars that a project has on GitHub. Growth - month over month growth in stars.
Activity is a relative number indicating how actively a project is being developed. Recent commits have higher weight than older ones.
For example, an activity of 9.0 indicates that a project is amongst the top 10% of the most actively developed projects that we are tracking.

virgil

Posts with mentions or reviews of virgil. We have used some of these posts to build our list of alternatives and similar projects. The last one was on 2024-03-30.
  • Garbage Collection for Systems Programmers
    7 projects | news.ycombinator.com | 30 Mar 2024
    For (2) Virgil has several features that allow you to layout memory with various levels of control. I assume you meaning "array of structs", and you can do that with arrays of tuples, which will naturally be flattened and normalized based on the target (i.e. will be array-of-structs on native targets). You can define byte-exact layouts[1] (mostly for interfacing with other software and parsing binary formats), unbox ADTs, and soon you can even control the exact encoding of ADTs.

    Virgil is GC'd.

    [1] https://github.com/titzer/virgil/blob/master/doc/tutorial/La...

  • The Return of the Frame Pointers
    6 projects | news.ycombinator.com | 17 Mar 2024
    Virgil doesn't use frame pointers. If you don't have dynamic stack allocation, the frame of a given function has a fixed size can be found with a simple (binary-search) table lookup. Virgil's technique uses an additional page-indexed range that further restricts the lookup to be a few comparisons on average (O(log(# retpoints per page)). It combines the unwind info with stackmaps for GC. It takes very little space.

    The main driver is in (https://github.com/titzer/virgil/blob/master/rt/native/Nativ... the rest of the code in the directory implements the decoding of metadata.

    I think frame pointers only make sense if frames are dynamically-sized (i.e. have stack allocation of data). Otherwise it seems weird to me that a dynamic mechanism is used when a static mechanism would suffice; mostly because no one agreed on an ABI for the metadata encoding, or an unwind routine.

    I believe the 1-2% measurement number. That's in the same ballpark as pervasive checks for array bounds checks. It's weird that the odd debugging and profiling task gets special pleading for a 1% cost but adding a layer of security gets the finger. Very bizarre priorities.

  • Whose baseline (compiler) is it anyway?
    1 project | news.ycombinator.com | 27 May 2023
    This paper is the first time I seen mention of the Virgil programming language, from the same author:

    https://github.com/titzer/virgil

  • JEP 450: Compact Object Headers
    2 projects | news.ycombinator.com | 4 May 2023
    JavaScript handles the "no identity hash" with WeakMap and WeakSet, which are language built-ins. For Virgil, I chose to leave out identity hashes and don't really regret it. It keeps the language simple and the separation clear. HashMap (entirely library code, not a language wormhole) takes the hash function and equality function as arguments to the constructor.

    [1] https://github.com/titzer/virgil/blob/master/lib/util/Map.v3

    This is partly my style too; I try to avoid using maps for things unless they are really far flung, and the things that end up serving as keys in one place usually end up serving as keys in lots of other places too.

  • Retrofitting null-safety onto Java at Meta
    4 projects | news.ycombinator.com | 22 Nov 2022
    Whoa, interesting. I didn't know Kotlin had all those constructs.

    In Virgil, a method on an object (or ADT) can declare its return type as "this". Then the method implicitly returns the receiver object. That trick is very useful to allow a chain of calls such as object.foo().bar().baz(). I find it readable and easy to explain:

    https://github.com/titzer/virgil/blob/master/doc/tutorial/Re...

  • A Ruby program that generates itself (through a 128-language quine loop)
    9 projects | news.ycombinator.com | 6 Oct 2022
    I hadn't written one until ~30 mins ago [1]. I cheated and looked at a Java quine (not particularly elegant, but easy to see what is going on.), but I wrote one for Virgil. Just think string substitution; a string with a hole in it and you substitute a copy of the string, quoted into the hole. Just one substitution suffices.

    [1] https://github.com/titzer/virgil/blob/master/apps/Quine/Quin...

  • Integer Conversions and Safe Comparisons in C++20
    1 project | news.ycombinator.com | 13 Sep 2022
    Virgil has a family of completely well-defined (i.e. no UB) fixed-size integer types with some hard-fought rules that I eventually got around to documenting here:

    https://github.com/titzer/virgil/blob/master/doc/tutorial/Fi...

    One of the key things is that values are never silently truncated (other than 2's-complement wrap-around) or values changed; only promotions. The only sane semantics for over-shifts (shifts larger than the size of the type) is to shift the bits out, like a window.

    The upshot of all that is that Virgil has a pretty sane semantics for fixed-size integers, IMHO.

  • Show HN: We are trying to (finally) get tail-calls into the WebAssembly standard
    11 projects | news.ycombinator.com | 12 Jul 2022
    LLVM and other compilers that use SSA but target a stack machine can run a stackification phase. Even without reordering instructions, it seems to work well in practice.

    In Virgil I implemented this for both the JVM and Wasm. Here's the algorithm used for Wasm:

    https://github.com/titzer/virgil/blob/master/aeneas/src/mach...

  • Hacker News top posts: Jul 2, 2022
    2 projects | /r/hackerdigest | 2 Jul 2022
    Virgil: A fast and lightweight programming language that compiles to WASM\ (54 comments)
  • Virgil: A fast and lightweight programming language that compiles to WASM
    1 project | /r/hypeurls | 1 Jul 2022

ocaml

Posts with mentions or reviews of ocaml. We have used some of these posts to build our list of alternatives and similar projects. The last one was on 2024-04-03.
  • Autoconf makes me think we stopped evolving too soon
    8 projects | news.ycombinator.com | 3 Apr 2024
    > OCaml’s configure script is also “normal”

    If that’s this OCaml, it has a configure.ac file in the root directory, which looks suspicious for an Autotools-free package: https://github.com/ocaml/ocaml

  • The Return of the Frame Pointers
    6 projects | news.ycombinator.com | 17 Mar 2024
    You probably already know, but with OCaml 5 the only way to get flamegraphs working is to either:

    * use framepointers [1]

    * use LBR (but LBR has a limited depth, and may not work on on all CPUs, I'm assuming due to bugs in perf)

    * implement some deep changes in how perf works to handle the 2 stacks in OCaml (I don't even know if this would be possible), or write/adapt some eBPF code to do it

    OCaml 5 has a separate stack for OCaml code and C code, and although GDB can link them based on DWARF info, perf DWARF call-graphs cannot (https://github.com/ocaml/ocaml/issues/12563#issuecomment-193...)

    If you need more evidence to keep it enabled in future releases, you can use OCaml 5 as an example (unfortunately there aren't many OCaml applications, so that may not carry too much weight on its own).

    [1]: I haven't actually realised that Fedora39 has already enabled FP by default, nice! (I still do most of my day-to-day profiling on an ~CentOS 7 system with 'perf --call-graph dwarf', I was aware that there was a discussion to enable FP by default, but haven't noticed it has actually been done already)

  • Top Paying Programming Technologies 2024
    19 projects | dev.to | 6 Mar 2024
    11. OCaml - $91,026
  • OCaml: a Rust developer's first impressions
    4 projects | news.ycombinator.com | 12 Nov 2023
    > It partially helps since it forces you to have types where they matters most: exported functions

    But the problém the OP has is not knowing the types when reading the source (in the .ml file).

    > How would it feels like to use list if only https://github.com/ocaml/ocaml/blob/trunk/stdlib/list.ml was available,

    If the signature where in the source file (which you can do in OCaml too), there would be no problem - which is what all the other (for some definition of "other") languages except C and C++ (even Fortran) do.

    No, really, I can't see a single advantage of separate .mli files at all. The real problém is that the documentation is often worse too, as the .mli is autogenerated and documented afterwards - and now changes made later in the sources need to be documented in the mli too, so anything that doesn't change the type often gets lost. The same happens in C and C++ with header files.

  • Bringing more sweetness to ruby with sorbet types 🍦
    5 projects | dev.to | 18 Sep 2023
    If you have been in the Ruby community for the past couple of years, it's possible that you're not a super fan of types or that this concept never passed through your mind, and that's totally cool. I myself love the dynamic and meta-programming nature of Ruby, and honestly, by the time of this article's writing, we aren't on the level of OCaml for type checking and inference, but still, there are a couple of nice things that types with sorbet bring to the table:
  • What is gained and lost with 63-bit integers? (2014)
    2 projects | news.ycombinator.com | 12 Aug 2023
    Looks like there have been proposals to eliminate use of 3 operand lea in OCaml code (not accepted sadly):

    https://github.com/ocaml/ocaml/pull/8531

  • Notes about the ongoing Perl logo discussion
    1 project | dev.to | 9 Jul 2023
    An amazing example is Ocaml lang logo / mascot. It might be useful to talk with them to know what was the process behind this work. The About page camel head on Perl dot org header is also a pretty good example of simplification, but it's not a logo, just a friendly illustration, as the O'Reilly camel is. Another notable logo for this animal is the well known tobacco industry company, but don't get me started on that (“good” logo, though, if we look at the effectiveness of their marketing).
  • What can Category Theory do?
    2 projects | /r/askmath | 22 Jun 2023
    Haskell and Agda are probably the most obvious examples. Ocaml too, but it is much older, so its type system is not as categorical. There is also Idris, which is not as well-known but is very cool.
  • Playing Atari Games in OCaml
    2 projects | news.ycombinator.com | 15 Jun 2023
  • Bloat
    4 projects | /r/ProgrammingLanguages | 22 May 2023
    That does sound problematic, but without the code it is hard to tell what is the issue. Typically, compiling a 6kLoc file like https://github.com/ocaml/ocaml/blob/trunk/typing/typecore.ml takes 0.8 s on my machine.

What are some alternatives?

When comparing virgil and ocaml you can also consider the following projects:

vigil - Vigil, the eternal morally vigilant programming language

Alpaca-API - The Alpaca API is a developer interface for trading operations and market data reception through the Alpaca platform.

libratbag - A DBus daemon to configure input devices, mainly high-end and gaming mice

VisualFSharp - The F# compiler, F# core library, F# language service, and F# tooling integration for Visual Studio

rust-asn1 - A Rust ASN.1 (DER) serializer.

dune - A composable build system for OCaml.

kcachegrind - GUI to profilers such as Valgrind

TradeAlgo - Stock trading algorithm written in Python for TD Ameritrade.

v86 - x86 PC emulator and x86-to-wasm JIT, running in the browser

melange - A mixture of tooling combined to produce JavaScript from OCaml & Reason

Solaar - Linux device manager for Logitech devices

rust - Rust for the xtensa architecture. Built in targets for the ESP32 and ESP8266