GithubHelp home page GithubHelp logo

Comments (6)

shym avatar shym commented on September 6, 2024 1

There is no non-determinism in the gospel tool. Maybe the command gospel check is misleading there: it performs type-checking. Actually checking the specifications is left for other tools.
Said another way, encountering an object type (or any other unsupported type) will trigger the assert false reported in the error message.

from gospel.

shubhamkumar13 avatar shubhamkumar13 commented on September 6, 2024

I was trying to re-create this issue : reproducible repo.
And I was getting no errors with it, what am I doing wrong here 😺 ?

I got an error, wasn't using the gospel cli 🀦

test_gospel on ξ‚  main via 🐫 v4.13.1 (4.13.1+options) on ☁  (ap-southeast-2)
❯ gospel check bin/main.mli
gospel: internal error, uncaught exception:
        File "src/typing.ml", line 108, characters 9-15: Assertion failed

main.ml

class test_obj =
  object (_self)
    val mutable i = 1
    method bob = i
end

let ret_obj () = 
object
  val mutable i = 0
  method bob = i
end 

and respective .mli file

class test_obj :
    object
        val mutable i : int
        method bob : int
    end

val ret_obj : unit -> <bob:int>
(*@ o = ret_obj () *)

output

test_gospel on ξ‚  main via 🐫 v4.13.1 (4.13.1+options) on ☁  (ap-southeast-2) took 3s
❯ dune build bin/main.exe

test_gospel on ξ‚  main via 🐫 v4.13.1 (4.13.1+options) on ☁  (ap-southeast-2)
❯ dune exec bin/main.exe

Thanks!

from gospel.

shubhamkumar13 avatar shubhamkumar13 commented on September 6, 2024

I might not be well versed in what the exact error should look like but I imagine this kind of error is an non-deterministic error, right?

The output can never depend on input, very similar to any function which has side effects we cannot determine what kind implementation is performed by the user and the int value returned can be anything similar to a read_line function

I am afraid I might be conceptually wrong about this, please let me know

from gospel.

shubhamkumar13 avatar shubhamkumar13 commented on September 6, 2024

Thanks for the correction, I am not well versed with model checking but I am interested in it.

So according to your explanation the type checking matching leads to classify objects as an unsupported type which leads to pattern matching the error with _ -> assert false

The solution to this off the top of my head would be address the object type as a valid type in the typechecker and then add another error type constructor in warnings.ml -> type kind.

This would lead to a clearer type error. Am I on the right track here.

Btw thanks for the quick reply @shym πŸ˜„

from gospel.

shym avatar shym commented on September 6, 2024

The solution to this off the top of my head would be address the object type as a valid type in the typechecker and then add another error type constructor in warnings.ml -> type kind.

It depends on what you mean by β€œvalid type”: we don’t want to bring support for objects in Gospel (that would be quite some work!), but just end up with a new error indeed.

from gospel.

n-osborne avatar n-osborne commented on September 6, 2024

Fixed by #406

from gospel.

Related Issues (20)

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    πŸ–– Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. πŸ“ŠπŸ“ˆπŸŽ‰

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❀️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.