From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: X-Original-To: caml-list@sympa.inria.fr Delivered-To: caml-list@sympa.inria.fr Received: from mail3-relais-sop.national.inria.fr (mail3-relais-sop.national.inria.fr [192.134.164.104]) by sympa.inria.fr (Postfix) with ESMTPS id 01EA97EE9C for ; Wed, 30 Nov 2016 20:22:47 +0100 (CET) Authentication-Results: mail3-smtp-sop.national.inria.fr; spf=None smtp.pra=yminsky@janestreet.com; spf=Pass smtp.mailfrom=yminsky@janestreet.com; spf=None smtp.helo=postmaster@mxout3.mail.janestreet.com Received-SPF: None (mail3-smtp-sop.national.inria.fr: no sender authenticity information available from domain of yminsky@janestreet.com) identity=pra; client-ip=38.105.200.229; receiver=mail3-smtp-sop.national.inria.fr; envelope-from="yminsky@janestreet.com"; x-sender="yminsky@janestreet.com"; x-conformance=sidf_compatible Received-SPF: Pass (mail3-smtp-sop.national.inria.fr: domain of yminsky@janestreet.com designates 38.105.200.229 as permitted sender) identity=mailfrom; client-ip=38.105.200.229; receiver=mail3-smtp-sop.national.inria.fr; envelope-from="yminsky@janestreet.com"; x-sender="yminsky@janestreet.com"; x-conformance=sidf_compatible; x-record-type="v=spf1" Received-SPF: None (mail3-smtp-sop.national.inria.fr: no sender authenticity information available from domain of postmaster@mxout3.mail.janestreet.com) identity=helo; client-ip=38.105.200.229; receiver=mail3-smtp-sop.national.inria.fr; envelope-from="yminsky@janestreet.com"; x-sender="postmaster@mxout3.mail.janestreet.com"; x-conformance=sidf_compatible IronPort-PHdr: =?us-ascii?q?9a23=3AFXESjhxeRKEMnWzXCy+O+j09IxM/srCxBDY+r6Qd?= =?us-ascii?q?2ugfIJqq85mqBkHD//Il1AaPBtSArakVwLWH+4nbGkU4qa6bt34DdJEeHzQksu?= =?us-ascii?q?4x2zIaPcieFEfgJ+TrZSFpVO5LVVti4m3peRMNQJW2aFLduGC94iAPERvjKwV1?= =?us-ascii?q?Ov71GonPhMiryuy+4ZPebgFGiTanb75/KBq6oAfVu8ILnYZsN6E9xwfTrHBVYe?= =?us-ascii?q?pW32RoJVySnxb4+Mi9+YNo/jpTtfw86cNOSL32cKskQ7NWCjQmKH0169bwtRbf?= =?us-ascii?q?VwuP52ATXXsQnxFVHgXK9hD6XpP2sivnqupw3TSRMMPqQbwoXzmp8rxmQwH0hi?= =?us-ascii?q?gZKzE58XnXis1ug6JdvBKhvAF0z4rNbI2IKPZyYqbRcNUdSmRcQ8ZRTDRBDZ2g?= =?us-ascii?q?YIsTAeQBOuNYoJP8p1sIsBCyAQahCefqxjJOm3T437A10/45HA7E0gwuH9wAvn?= =?us-ascii?q?fJotvrKKgfSvy1wLXSwDnfc/9axTXw5Y7VeR4hu/GMWrdwfNLTxkY1DQPFiVOQ?= =?us-ascii?q?opHiMTOU0OQNqGub7up9Xu+oi28nrgBxoj60xscviojEnYAVxUrC9Spn24Y1Oc?= =?us-ascii?q?e4R1Blbt64CpdfqyaaN45vT84kXmpmtiE6yrgctp66eigH0JUnxxjFa/yGaYeE?= =?us-ascii?q?+BzjVPyJLTd3hXJlZLK/hwup/kS61uL8Ucy03E5KryVfktnMsXcN2wbP5ciAT/?= =?us-ascii?q?tw+Fqq1zWX1w3L5OxJIlo4mbfHJ5Mh2LI8iIYfvVjZEiPohkn7iLeaels49uWs?= =?us-ascii?q?8ejqYbXrqoWCO4NpiAzyKLkil8i9DOk+LwMARXKU+f6m273m5UD5QKtFjvkxkq?= =?us-ascii?q?TBtZDbKsMbprOlAwJbyIoj7gywDzai0NgCn3kINlRFdwycj4j1IVHBPu73Deul?= =?us-ascii?q?j1uwlzdrwujKPrznAprTMnjOiLnscLVn50JB1AY+zcpT64xIBr0dOv7/RFH9ud?= =?us-ascii?q?jAAh88KQO0wuLnCNtn1oMZXGKCGq+YMKbTsV+O/eIvIOmNaZQXuDnnLfgq+eXu?= =?us-ascii?q?jWMjmVADY6apwYEbZ2y/HvRjO0mZe2bjgs8dEWcWuQozVPDlh0eHUT5XfnqyW6?= =?us-ascii?q?M85ionCI+9FofCRoWtgKSb0yuhH51WYHpGClGWHnvyeYWEQaREVCXHC8tokzpM?= =?us-ascii?q?e6KgUIQhnUWnsAb7zfxpNOvP8S0wsZ/z1dZ0oebUkEdh2yZzCpGs2nuKSSlRn2?= =?us-ascii?q?UTRC5+iLF6oEpmyUar06F+judED9Fe+7VCVQJsZs2U9PBzF92nAlGJRdyOUlvz?= =?us-ascii?q?B4j/DA=3D=3D?= X-IronPort-Anti-Spam-Filtered: true X-IronPort-Anti-Spam-Result: =?us-ascii?q?A0BAAAAUJj9YfeXIaSZdHAEBBAEBCgEBF?= =?us-ascii?q?wEBBAEBCgEBgw0BAQEBAXeBAweNPpcJgjeSP4IIKYV5AoF1Bz8UAQEBAQEBAQE?= =?us-ascii?q?BAQESAQEJFglNgjMaghwBAQQSER0BASwLAQ8LCwcGAgIJHQICIhIBBQEKBA4GE?= =?us-ascii?q?xICDogxAxcDC551gTI/MoppZ4IpgwwBAQWEKgOECAEBAQEBAQEDAQEBAQEBAQE?= =?us-ascii?q?BFggSeYUzhFuHTYJdhw8MiFmKaIZLikSBck+NcYdZhhqCSBMegRMegS8TDCIRA?= =?us-ascii?q?oMVDxyBe1SIKgEBAQ?= X-IPAS-Result: =?us-ascii?q?A0BAAAAUJj9YfeXIaSZdHAEBBAEBCgEBFwEBBAEBCgEBgw0?= =?us-ascii?q?BAQEBAXeBAweNPpcJgjeSP4IIKYV5AoF1Bz8UAQEBAQEBAQEBAQESAQEJFglNg?= =?us-ascii?q?jMaghwBAQQSER0BASwLAQ8LCwcGAgIJHQICIhIBBQEKBA4GExICDogxAxcDC55?= =?us-ascii?q?1gTI/MoppZ4IpgwwBAQWEKgOECAEBAQEBAQEDAQEBAQEBAQEBFggSeYUzhFuHT?= =?us-ascii?q?YJdhw8MiFmKaIZLikSBck+NcYdZhhqCSBMegRMegS8TDCIRAoMVDxyBe1SIKgE?= =?us-ascii?q?BAQ?= X-IronPort-AV: E=Sophos;i="5.31,574,1473112800"; d="scan'208";a="202373258" Received: from mxout3.mail.janestreet.com ([38.105.200.229]) by mail3-smtp-sop.national.inria.fr with ESMTP/TLS/DHE-RSA-AES256-GCM-SHA384; 30 Nov 2016 20:22:46 +0100 Received: from tot-qpr-mailcore1.delacy.com ([172.27.56.68] helo=tot-qpr-mailcore1) by mxout3.mail.janestreet.com with esmtps (UNKNOWN:DHE-RSA-AES256-GCM-SHA384:256) (Exim 4.82) (envelope-from ) id 1cCASr-00053J-D5 for caml-list@inria.fr; Wed, 30 Nov 2016 14:22:45 -0500 X-JS-Flow: external X-JS-Scanner-attachment: (ok) No attachments Received: by tot-qpr-mailcore1 with JS-mailcore (0.1) (envelope-from ) id BYPycF-AAADFr-Lh; 2016-11-30 14:22:45.370135-05:00 Received: from mail-ua0-f197.google.com ([209.85.217.197]) by mxgoog1.mail.janestreet.com with esmtps (UNKNOWN:AES128-GCM-SHA256:128) (Exim 4.72) (envelope-from ) id 1cCASr-0007kX-AA for caml-list@inria.fr; Wed, 30 Nov 2016 14:22:45 -0500 Received: by mail-ua0-f197.google.com with SMTP id d33so214333202uad.2 for ; Wed, 30 Nov 2016 11:22:45 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=janestreet.com; s=google; h=mime-version:in-reply-to:references:from:date:message-id:subject:to :cc; bh=OS3A0e5uZbegTqPLpWbvHVVrBS5PxohZT+Tv7ycrieI=; b=OO3yPxwb43Drl/MpPJA1yNbsw+uuksi90r01MMc3/T5gSbHoQtFJ1lRC3z9F3cPcy+ 0tLCUdF8+GR8/iUJ8KcxcsD5883k5GjfeaBL1TpDsf1Q/IlgyuKm8nbkZGVvAbEMiu+F hrSbPzoEcsN7xyMndzP0dSm4Qk2fQ9A5/GHnQ= X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20130820; h=x-gm-message-state:mime-version:in-reply-to:references:from:date :message-id:subject:to:cc; bh=OS3A0e5uZbegTqPLpWbvHVVrBS5PxohZT+Tv7ycrieI=; b=cxEMYTLw8tt70RtypzKlZbxTloaanrZ6aUILNOK6YumqA5hrHHLDgb3uifWHawUGZ5 ALeMHLI2HNeATX3v1lbCoTOznuhNSVIzxDc671uqYN2sj90BD74vKQYnkMbpVvZ+Vnz8 ip5dqbACpx5HMo3SndwNF/PzhLzZhVXYKqZ7i+PfdFrd/nEmy4wKuGBm8m2KqBralLGV 1HsPCcW+I7YFlhyavArrWlmKVjs8m/ASQQ3Pk+V8t8b19nDtDxSshEH/7N71VoBzH/+x q2cPJnn6Nfb7VqZGqzIQwy/zxf5Asg0TfvY/aClzOBIeBz/lxDCKqbQeD4RBe8vm8MqC DCGg== X-Gm-Message-State: AKaTC00Z9l48kNX6D9hi+cbpPRqVR8w3JCZanEAGNE7xaJmMnkzXS8FjKSG8jU9Gh0O7ip1hYQctgJaPypZ/Rnvr8fKDZOjwYJERlrx7jeuW6yWNsFBM1UqnTby1Bw7ScvgGbhcI1Xy5gItzKIe5 X-Received: by 10.176.81.56 with SMTP id e53mr27095406uaa.100.1480533765003; Wed, 30 Nov 2016 11:22:45 -0800 (PST) X-Received: by 10.176.81.56 with SMTP id e53mr27095396uaa.100.1480533764834; Wed, 30 Nov 2016 11:22:44 -0800 (PST) MIME-Version: 1.0 Received: by 10.31.229.193 with HTTP; Wed, 30 Nov 2016 11:22:24 -0800 (PST) In-Reply-To: <96757896-e79c-f940-fc3a-090fc1419df2@lexifi.com> References: <96757896-e79c-f940-fc3a-090fc1419df2@lexifi.com> From:Yaron Minsky Date: Wed, 30 Nov 2016 14:22:24 -0500 Message-ID: To:Alain Frisch Cc:ocsigen@inria.fr, OCaml Mailing List Content-Type: text/plain; charset=UTF-8 X-JS-Processed-by: mailcore Subject: Re: [Caml-list] Announce: ocaml-vdom (pre-release) Alain, this looks awesome! We'll take a look at this and maybe use it instead of the javascript library we're currently depending on here: https://github.com/janestreet/virtual_dom I'm curious if you have any story for making the recomputation of the virtual-dom itself more efficient. Right now, we're using incremental for this part of the story, as reflected here: https://github.com/janestreet/incr_dom That said, for small UIs, this kind of incrementality is less important, so whether this is worth doing may depend on your applications. y On Wed, Nov 30, 2016 at 11:52 AM, Alain Frisch wrote: > Dear all, > > You might be interested in the ocaml-vdom project which has been used by > LexiFi for some time and open-sourced recently. It contains two components > which we use to create our browser-side UIs with js_of_ocaml and which might > be useful to the community: > > - Bindings to the DOM and other browser APIs, implemented with > gen_js_api. (Partial bindings, expanded on demand.) > > - An implementation of a "virtual DOM" and the "Elm architecture", i.e. a > programming model where the UI is specified by a state type, a view function > (producing a functional version of the DOM), and an update function that > modifies the state based on messages (generated by UI events or external > interactions). > > > Project page: > > https://github.com/LexiFi/ocaml-vdom > > > -- Alain > > -- > Caml-list mailing list. Subscription management and archives: > https://sympa.inria.fr/sympa/arc/caml-list > Beginner's list: http://groups.yahoo.com/group/ocaml_beginners > Bug reports: http://caml.inria.fr/bin/caml-bugs