Re: [racket-dev] Questions about the GC code

2014-07-14 Thread Matthew Flatt
The "gc" directory is Boehm's GC. We've modified it a little (grep for
"PLTSCHEME"), but we try not to maintain the GC itself, except to
upgrade every once in a while.

See

  http://www.hboehm.info/gc/

for the latest version, the mailing list, etc.

I should look again at making Racket work with a stock build of Boehm's
GC, so we can get out of the business of upgrading and modifying it. So
far, it has been easier to upgrade occasionally than to sort that out.

Meanwhile, Racket includes a slower and more portable "SGC" for
building the conservative-GC variant of Racket. You can enable it with
`--enable-sgc` as a flag to `configure`. Probably we should switch to
SGC as the default, since RacketCGC is now mainly used just to build
normal Racket.

At Tue, 15 Jul 2014 04:37:45 +0200, Juan Francisco Cantero Hurtado wrote:
> I've been reading the code of the files gc/os_dep.c and 
> gc/include/private/gcconfig.h. I've some questions related to OpenBSD.
> 
> ---
> 
> In the X86_64 config, the file defines STACKBOTTOM and HEURISTIC2 
> (unused because racket picks STACKBOTTOM). What's the preferred?. I'm 
> asking because I don't know if the adding of HEURISTIC2 was an error or 
> really there a good reason to select one or other.
> 
> ---
> 
> There is some recommended benchmark to test the performance of MMAP vs 
> sbrk? I've tried both with generic code and I don't see the difference.
> 
> ---
> 
> OpenBSD only supports MIPS64. Should I add ELFCLASS64 to the MIPS block 
> within gcconfig.h?
> 
> 
> _
>   Racket Developers list:
>   http://lists.racket-lang.org/dev
_
  Racket Developers list:
  http://lists.racket-lang.org/dev


[racket-dev] Questions about the GC code

2014-07-14 Thread Juan Francisco Cantero Hurtado
I've been reading the code of the files gc/os_dep.c and 
gc/include/private/gcconfig.h. I've some questions related to OpenBSD.


---

In the X86_64 config, the file defines STACKBOTTOM and HEURISTIC2 
(unused because racket picks STACKBOTTOM). What's the preferred?. I'm 
asking because I don't know if the adding of HEURISTIC2 was an error or 
really there a good reason to select one or other.


---

There is some recommended benchmark to test the performance of MMAP vs 
sbrk? I've tried both with generic code and I don't see the difference.


---

OpenBSD only supports MIPS64. Should I add ELFCLASS64 to the MIPS block 
within gcconfig.h?



_
 Racket Developers list:
 http://lists.racket-lang.org/dev


[racket-dev] FOOL 2014 Call for Papers

2014-07-14 Thread Asumu Takikawa
Call For Papers

  21th International Workshop on
  Foundations of Object-Oriented Languages
   (FOOL 2014)
A Workshop of SPLASH (OOPSLA) 2014
   Portland, Oregon, United States.

http://homepages.ecs.vuw.ac.nz/~servetto/Fool2014/

Important dates:
- August 15, 2014 Abstract submission
- August 23, 2014 Full paper submission
- September 26, 2014 Notification
- October 10, 2014 Paper due for informal proceedings
- October 20-24, 2014 Workshop
  (the day is still to be decided)

The search for sound principles for object-oriented languages has
given rise to much work during the past two decades, leading to a
better understanding of the key concepts of object-oriented languages
and to important developments in type theory, semantics, program
verification, and program development.

Submissions for this event are invited in the general area of
foundations of object-oriented languages. Topics of interest include
language semantics, type systems, type modifiers, memory models,
program verification, object capabilities, formal calculi, concurrent
and distributed languages, database languages, and language-based
security issues.

Papers are welcome to include formal descriptions and proofs, but
these are not required; the key consideration is that papers should
present novel and valuable ideas or experiences. The main focus in
selecting workshop contributions will be the intrinsic interest and
timeliness of the work, so authors are encouraged to submit polished
descriptions of work in progress as well as papers describing
completed projects.

We solicit submissions on original research not previously published
or currently submitted for publication elsewhere. The program chair
should be informed of any related submissions; see the ACM SIGPLAN
Republication Policy. Submissions should be PDF in standard SIGPLAN
10pt conference format for a US-letter size page. While submissions
can be up to 12 pages, shorter papers describing promising preliminary
work are also encouraged. Papers must be submitted electronically via
EasyChair.


***NEW: Future of Object-Oriented Foundations session at FOOL 2014***

Over the past 20 years, research presented at FOOL has lead to a more
solid understanding of the foundations of today's object-oriented
programming languages.  At the same time, new object-oriented
languages and concepts are constantly being proposed, and there remain
core topics that have not yet been fully explored.  This year at FOOL
2014, we will hold a special session on the Future of Object-Oriented
Foundations (FOOF).  For this session, we solicit short papers as well
as brief position statements regarding future research in
object-oriented foundations:
- A short paper will have the same format as regular submissions to
FOOL, and will be reviewed in a similar way, but will be limited to 4
pages.
 - A position statement includes a title, authors, and 2-3 paragraphs
of text summarizing the position.  These will be lightly evaluated to
ensure the position is of interest to the community.

Authors of short papers will be given short presentation slots to
present them in the FOOF session.  One author of each position
statement will be invited to participate in an panel related to the
position statement's topic.  Possible topics include, but are not
limited to: brands, tags, and pattern matching; module systems and
modularity; protocols, typestate, and sessions; ownership,
permissions, and immutability; concurrent and distributed object
models; OO logics and reasoning; and gradual/hybrid types and
verification.

An informal proceedings will be made publicly available on the web
page. However, presentation at FOOL does not count as prior
publication, and many of the results presented at FOOL have later been
published at ECOOP, OOPSLA, POPL, and other main conferences.

Program Committee

Ferruccio Damiani
  (University of Turin)
Sophia Drossopoulou
  (Imperial College London)
Truong Anh Hoang
  (Vietnam National University Hanoi)
Hidehiko Masuhara
  (Tokyo Institute of Technology)
Rosemary Monahan
  (National University of Ireland, Maynooth)
Alex Potanin
  (Victoria University of Wellington)
Sukyoung Ryu
  (Korea Advanced Institute of Science and Technology)
Marco Servetto
  (Victoria University of Wellington)
Asumu Takikawa
  (Northeastern University)
Thomas Wies
  (New York Univeristy)
Tobias Wrigstad
  (Uppsala University)
 Elena Zucca
  (University of Genova)

--
Organizers
Marco Servetto (PC Chair)
(Victoria University of Wellington)
James Noble
  (Victoria University of Wellington)
Jonathan Aldrich
  (Carnegie Mellon University )

-
Steering Committee
Jeremy Siek
  (Indiana University Bloomington)
John Boyland
  (University of Wisconsin-Milwaukee)
Atsushi Igarashi
  (Kyoto University)
Shriram Krishnamurthi
  (Brown University)
James Noble
  (Victoria University of

Re: [racket-dev] [plt] Push #29023: master branch updated

2014-07-14 Thread Sam Tobin-Hochstadt
On Mon, Jul 14, 2014 at 10:57 AM, Matthias Felleisen
 wrote:
>
> Unfortunately, it is impossible to distinguish the two kinds of
> contracts. Even if we introduced two different linguistic mechanisms,
> we would simply confuse programmers more.

I certainly agree with that.

I just don't think the additional line in that error message is very
helpful, and it's already a long and scary error message.

Sam

> Let's try this experiment for a while and see what happens.
>
>
>
>
> On Jul 14, 2014, at 9:46 AM, Sam Tobin-Hochstadt  wrote:
>
>> I think the vast majority of contract errors that Racket programmers
>> see will be from contracts that the particular programmer didn't
>> write. For example: standard library contracts, or contracts from
>> packages they install, or contracts generated by Typed Racket, or
>> other such.
>>
>> For example, here's a simple contract error:
>>
>> -> (require scribble/core)
>> -> (part-parts 7)
>> ; part-parts: contract violation
>> ;   expected: part?
>> ;   given: 7
>> ;   in: the 1st argument of
>> ;   (-> part? (listof part?))
>> ;   contract from:
>> ;   /scribble-lib/scribble/core.rkt
>> ;   blaming: top-level
>> ;(assuming the contract is correct)
>> ;   at: /scribble-lib/scribble/core.rkt:164.2
>>
>> What does the "assuming the contract is correct" mean to the
>> programmer here? They can't change the contract, and it's not obvious
>> in what sense the contract being incorrect would change anything.
>>
>> In general, I think that your new message makes a lot of sense if
>> programmers mostly experience contracts as strong invariants
>> protecting complex components specified publicly -- the sort of thing
>> you've talked about as a "marketplace of components". But I don't
>> think that's how Racket programmers typically experience contracts --
>> instead, they're more like the example above: simple specifications
>> protecting small functions implemented privately and used as
>> error-checking.
>>
>> Sam
>>
>> On Mon, Jul 14, 2014 at 9:30 AM, Robby Findler
>>  wrote:
>>> I do not buy this argument: the user didn't write the compiler but they
>>> wrote the contract.
>>>
>>> Robby
>>>
>>>
>>> On Monday, July 14, 2014, Sam Tobin-Hochstadt  wrote:

 This seems like a situation where the new error message is potentially
 more confusing, even though it's technically more correct. There are
 lots of other caveats we could add ("assuming there isn't a compiler
 bug", etc) but I think adding them would make Racket harder to use.

 Sam

 On Mon, Jul 14, 2014 at 9:11 AM,   wrote:
> robby has updated `master' from 737330deb6 to 1dda800ca2.
>  http://git.racket-lang.org/plt/737330deb6..1dda800ca2
>
> =[ One Commit ]=
> Directory summary:
> 100.0% racket/collects/racket/contract/private/
>
> ~~
>
> 1dda800 Robby Findler  2014-07-14 08:09
> :
> | add contract-correct caveat to contract violation error messages
> :
>  M racket/collects/racket/contract/private/blame.rkt | 1 +
>
> =[ Overall Diff ]===
>
> racket/collects/racket/contract/private/blame.rkt
> ~
> --- OLD/racket/collects/racket/contract/private/blame.rkt
> +++ NEW/racket/collects/racket/contract/private/blame.rkt
> @@ -320,6 +320,7 @@
>from-line
>on-line
>blaming-line
> +   "   (assuming the contract is correct)"
>at-line))
>
> ;; combine-lines : (->* #:rest (listof (or/c string? #f))) string?)
>> _
>>  Racket Developers list:
>>  http://lists.racket-lang.org/dev
>
_
  Racket Developers list:
  http://lists.racket-lang.org/dev


Re: [racket-dev] [plt] Push #29023: master branch updated

2014-07-14 Thread Matthias Felleisen

Unfortunately, it is impossible to distinguish the two kinds of 
contracts. Even if we introduced two different linguistic mechanisms, 
we would simply confuse programmers more. 

Let's try this experiment for a while and see what happens. 




On Jul 14, 2014, at 9:46 AM, Sam Tobin-Hochstadt  wrote:

> I think the vast majority of contract errors that Racket programmers
> see will be from contracts that the particular programmer didn't
> write. For example: standard library contracts, or contracts from
> packages they install, or contracts generated by Typed Racket, or
> other such.
> 
> For example, here's a simple contract error:
> 
> -> (require scribble/core)
> -> (part-parts 7)
> ; part-parts: contract violation
> ;   expected: part?
> ;   given: 7
> ;   in: the 1st argument of
> ;   (-> part? (listof part?))
> ;   contract from:
> ;   /scribble-lib/scribble/core.rkt
> ;   blaming: top-level
> ;(assuming the contract is correct)
> ;   at: /scribble-lib/scribble/core.rkt:164.2
> 
> What does the "assuming the contract is correct" mean to the
> programmer here? They can't change the contract, and it's not obvious
> in what sense the contract being incorrect would change anything.
> 
> In general, I think that your new message makes a lot of sense if
> programmers mostly experience contracts as strong invariants
> protecting complex components specified publicly -- the sort of thing
> you've talked about as a "marketplace of components". But I don't
> think that's how Racket programmers typically experience contracts --
> instead, they're more like the example above: simple specifications
> protecting small functions implemented privately and used as
> error-checking.
> 
> Sam
> 
> On Mon, Jul 14, 2014 at 9:30 AM, Robby Findler
>  wrote:
>> I do not buy this argument: the user didn't write the compiler but they
>> wrote the contract.
>> 
>> Robby
>> 
>> 
>> On Monday, July 14, 2014, Sam Tobin-Hochstadt  wrote:
>>> 
>>> This seems like a situation where the new error message is potentially
>>> more confusing, even though it's technically more correct. There are
>>> lots of other caveats we could add ("assuming there isn't a compiler
>>> bug", etc) but I think adding them would make Racket harder to use.
>>> 
>>> Sam
>>> 
>>> On Mon, Jul 14, 2014 at 9:11 AM,   wrote:
 robby has updated `master' from 737330deb6 to 1dda800ca2.
  http://git.racket-lang.org/plt/737330deb6..1dda800ca2
 
 =[ One Commit ]=
 Directory summary:
 100.0% racket/collects/racket/contract/private/
 
 ~~
 
 1dda800 Robby Findler  2014-07-14 08:09
 :
 | add contract-correct caveat to contract violation error messages
 :
  M racket/collects/racket/contract/private/blame.rkt | 1 +
 
 =[ Overall Diff ]===
 
 racket/collects/racket/contract/private/blame.rkt
 ~
 --- OLD/racket/collects/racket/contract/private/blame.rkt
 +++ NEW/racket/collects/racket/contract/private/blame.rkt
 @@ -320,6 +320,7 @@
from-line
on-line
blaming-line
 +   "   (assuming the contract is correct)"
at-line))
 
 ;; combine-lines : (->* #:rest (listof (or/c string? #f))) string?)
> _
>  Racket Developers list:
>  http://lists.racket-lang.org/dev


_
  Racket Developers list:
  http://lists.racket-lang.org/dev


Re: [racket-dev] [plt] Push #29023: master branch updated

2014-07-14 Thread Sam Tobin-Hochstadt
I think the vast majority of contract errors that Racket programmers
see will be from contracts that the particular programmer didn't
write. For example: standard library contracts, or contracts from
packages they install, or contracts generated by Typed Racket, or
other such.

For example, here's a simple contract error:

-> (require scribble/core)
-> (part-parts 7)
; part-parts: contract violation
;   expected: part?
;   given: 7
;   in: the 1st argument of
;   (-> part? (listof part?))
;   contract from:
;   /scribble-lib/scribble/core.rkt
;   blaming: top-level
;(assuming the contract is correct)
;   at: /scribble-lib/scribble/core.rkt:164.2

What does the "assuming the contract is correct" mean to the
programmer here? They can't change the contract, and it's not obvious
in what sense the contract being incorrect would change anything.

In general, I think that your new message makes a lot of sense if
programmers mostly experience contracts as strong invariants
protecting complex components specified publicly -- the sort of thing
you've talked about as a "marketplace of components". But I don't
think that's how Racket programmers typically experience contracts --
instead, they're more like the example above: simple specifications
protecting small functions implemented privately and used as
error-checking.

Sam

On Mon, Jul 14, 2014 at 9:30 AM, Robby Findler
 wrote:
> I do not buy this argument: the user didn't write the compiler but they
> wrote the contract.
>
> Robby
>
>
> On Monday, July 14, 2014, Sam Tobin-Hochstadt  wrote:
>>
>> This seems like a situation where the new error message is potentially
>> more confusing, even though it's technically more correct. There are
>> lots of other caveats we could add ("assuming there isn't a compiler
>> bug", etc) but I think adding them would make Racket harder to use.
>>
>> Sam
>>
>> On Mon, Jul 14, 2014 at 9:11 AM,   wrote:
>> > robby has updated `master' from 737330deb6 to 1dda800ca2.
>> >   http://git.racket-lang.org/plt/737330deb6..1dda800ca2
>> >
>> > =[ One Commit ]=
>> > Directory summary:
>> >  100.0% racket/collects/racket/contract/private/
>> >
>> > ~~
>> >
>> > 1dda800 Robby Findler  2014-07-14 08:09
>> > :
>> > | add contract-correct caveat to contract violation error messages
>> > :
>> >   M racket/collects/racket/contract/private/blame.rkt | 1 +
>> >
>> > =[ Overall Diff ]===
>> >
>> > racket/collects/racket/contract/private/blame.rkt
>> > ~
>> > --- OLD/racket/collects/racket/contract/private/blame.rkt
>> > +++ NEW/racket/collects/racket/contract/private/blame.rkt
>> > @@ -320,6 +320,7 @@
>> > from-line
>> > on-line
>> > blaming-line
>> > +   "   (assuming the contract is correct)"
>> > at-line))
>> >
>> >  ;; combine-lines : (->* #:rest (listof (or/c string? #f))) string?)
_
  Racket Developers list:
  http://lists.racket-lang.org/dev


Re: [racket-dev] [plt] Push #29023: master branch updated

2014-07-14 Thread Robby Findler
Sorry-- I replied on my phone and too tersely the first time.

What I'm trying to say is that I do not agree that compiler bugs or
ffi bugs that corrupt memory or things along these lines are
analogous. I do agree that those things do not deserve lines in our
contract error messages.

Contracts are different because the error message is really saying
only "I detected an inconsistency between the contract and the
program". The messages in previous releases were 100% one-sided. I
lean towards keeping the emphasis on the "code is wrong" side and not
the "contract is wrong" side, since that seems to make more intuitive
sense to people, but I would not mind a change that moves us more
towards an error message that is more balanced (proposals welcome!).

Not even admitting the second possibility seems unwise, however.

Robby



On Mon, Jul 14, 2014 at 8:30 AM, Robby Findler
 wrote:
> I do not buy this argument: the user didn't write the compiler but they
> wrote the contract.
>
> Robby
>
>
> On Monday, July 14, 2014, Sam Tobin-Hochstadt  wrote:
>>
>> This seems like a situation where the new error message is potentially
>> more confusing, even though it's technically more correct. There are
>> lots of other caveats we could add ("assuming there isn't a compiler
>> bug", etc) but I think adding them would make Racket harder to use.
>>
>> Sam
>>
>> On Mon, Jul 14, 2014 at 9:11 AM,   wrote:
>> > robby has updated `master' from 737330deb6 to 1dda800ca2.
>> >   http://git.racket-lang.org/plt/737330deb6..1dda800ca2
>> >
>> > =[ One Commit ]=
>> > Directory summary:
>> >  100.0% racket/collects/racket/contract/private/
>> >
>> > ~~
>> >
>> > 1dda800 Robby Findler  2014-07-14 08:09
>> > :
>> > | add contract-correct caveat to contract violation error messages
>> > :
>> >   M racket/collects/racket/contract/private/blame.rkt | 1 +
>> >
>> > =[ Overall Diff ]===
>> >
>> > racket/collects/racket/contract/private/blame.rkt
>> > ~
>> > --- OLD/racket/collects/racket/contract/private/blame.rkt
>> > +++ NEW/racket/collects/racket/contract/private/blame.rkt
>> > @@ -320,6 +320,7 @@
>> > from-line
>> > on-line
>> > blaming-line
>> > +   "   (assuming the contract is correct)"
>> > at-line))
>> >
>> >  ;; combine-lines : (->* #:rest (listof (or/c string? #f))) string?)
_
  Racket Developers list:
  http://lists.racket-lang.org/dev


Re: [racket-dev] [plt] Push #29023: master branch updated

2014-07-14 Thread Robby Findler
I do not buy this argument: the user didn't write the compiler but they
wrote the contract.

Robby

On Monday, July 14, 2014, Sam Tobin-Hochstadt  wrote:

> This seems like a situation where the new error message is potentially
> more confusing, even though it's technically more correct. There are
> lots of other caveats we could add ("assuming there isn't a compiler
> bug", etc) but I think adding them would make Racket harder to use.
>
> Sam
>
> On Mon, Jul 14, 2014 at 9:11 AM,  >
> wrote:
> > robby has updated `master' from 737330deb6 to 1dda800ca2.
> >   http://git.racket-lang.org/plt/737330deb6..1dda800ca2
> >
> > =[ One Commit ]=
> > Directory summary:
> >  100.0% racket/collects/racket/contract/private/
> >
> > ~~
> >
> > 1dda800 Robby Findler > 2014-07-14
> 08:09
> > :
> > | add contract-correct caveat to contract violation error messages
> > :
> >   M racket/collects/racket/contract/private/blame.rkt | 1 +
> >
> > =[ Overall Diff ]===
> >
> > racket/collects/racket/contract/private/blame.rkt
> > ~
> > --- OLD/racket/collects/racket/contract/private/blame.rkt
> > +++ NEW/racket/collects/racket/contract/private/blame.rkt
> > @@ -320,6 +320,7 @@
> > from-line
> > on-line
> > blaming-line
> > +   "   (assuming the contract is correct)"
> > at-line))
> >
> >  ;; combine-lines : (->* #:rest (listof (or/c string? #f))) string?)
>
_
  Racket Developers list:
  http://lists.racket-lang.org/dev


Re: [racket-dev] [plt] Push #29023: master branch updated

2014-07-14 Thread Sam Tobin-Hochstadt
This seems like a situation where the new error message is potentially
more confusing, even though it's technically more correct. There are
lots of other caveats we could add ("assuming there isn't a compiler
bug", etc) but I think adding them would make Racket harder to use.

Sam

On Mon, Jul 14, 2014 at 9:11 AM,   wrote:
> robby has updated `master' from 737330deb6 to 1dda800ca2.
>   http://git.racket-lang.org/plt/737330deb6..1dda800ca2
>
> =[ One Commit ]=
> Directory summary:
>  100.0% racket/collects/racket/contract/private/
>
> ~~
>
> 1dda800 Robby Findler  2014-07-14 08:09
> :
> | add contract-correct caveat to contract violation error messages
> :
>   M racket/collects/racket/contract/private/blame.rkt | 1 +
>
> =[ Overall Diff ]===
>
> racket/collects/racket/contract/private/blame.rkt
> ~
> --- OLD/racket/collects/racket/contract/private/blame.rkt
> +++ NEW/racket/collects/racket/contract/private/blame.rkt
> @@ -320,6 +320,7 @@
> from-line
> on-line
> blaming-line
> +   "   (assuming the contract is correct)"
> at-line))
>
>  ;; combine-lines : (->* #:rest (listof (or/c string? #f))) string?)
_
  Racket Developers list:
  http://lists.racket-lang.org/dev