Plaster
New
List
Login
text
apl
aspx
asterisk
brainfuck
c
c++hdr
c++src
cassandra
ceylon
clojure
clojurescript
cmake
cobol
coffeescript
common-lisp
crystal
csharp
css
cypher-query
cython
d
dart
diff
django
dockerfile
dylan
ebnf
ecl
ecmascript
edn
eiffel
ejs
elm
erb
erlang
ez80
factor
fcl
feature
forth
fortran
fragment
gfm
go
gql
groovy
gss
haml
handlebars-template
haskell
haxe
hive
html
http
httpd-php
httpd-php-open
hxml
ini
java
javascript
json
jsp
jsx
julia
kotlin
latex
less
literate-haskell
lua
mariadb
markdown
mbox
mirc
mscgen
msgenny
mssql
mumps
mysql
n-triples
nesc
nginx-conf
nsis
objectivec
octave
oz
pascal
perl
pgp
pgp-keys
pgp-signature
pgsql
php
pig
plsql
properties
protobuf
puppet
python
q
rpm-changes
rpm-spec
rsrc
ruby
rustsrc
sas
sass
scala
scheme
scss
sieve
slim
smarty
solr
soy
sparql-query
spreadsheet
sql
squirrel
stex
styl
swift
systemverilog
tcl
textile
tiddlywiki
tiki
tlv
tornado
ttcn-asn
ttcn-cfg
turtle
twig
typescript
typescript-jsx
vb
vbscript
velocity
verilog
vertex
vhdl
vue
webidl
xml
xml-dtd
xquery
xu
yaml
z80
default
Visibility:
public
unlisted
private
<Josh_2> Hi hi [14:18] <Josh_2> beach: you here? *** wacki (~wacki@i59F5E438.versanet.de) has quit: Quit: My iMac has gone to sleep. ZZZzzz… [14:20] <beach> Yes. *** rgherdt (~rgherdt@2a02:2454:466:d800:5683:fe0e:fb0:fb3a) has joined channel #commonlisp [14:24] <Josh_2> beach: What is the origin of 'protocol oriented programming' [14:25] *** ymir (~ymir___@192.211.30.152) has quit: Ping timeout: 256 seconds <Josh_2> the term [14:26] <beach> Where did you see the term used? <Josh_2> hmm <beach> I don't think I have used it. <Josh_2> hmmmm <Josh_2> one minuteeee *** chomwitt (~chomwitt@2a02:587:7a18:fc00:1ac0:4dff:fedb:a3f1) has quit: Ping timeout: 246 seconds [14:31] <Josh_2> Hmm [14:32] <Josh_2> perhaps I just came up with it :thinking: <Josh_2> I dont know why I thought you wrote it in the SICL Specification [14:33] <Josh_2> 32.14 Extensible Libraries <Josh_2> Using *client* as an extension of a library written in a 'protocol oriented' way is very cool [14:34] <beach> I don't see it. [14:35] <Josh_2> You didn't write it <Josh_2> I was mistaken but its okay :thumbsup: <beach> Oh, I see. [14:36] <Josh_2> I wrote an OpenTelemetry library 6 months ago that uses a similar technique to the one described in 32.14 <aeth> is CLIM protocol-oriented programming? <Josh_2> I would say so [14:37] <beach> There is nothing new or particularly special about protocols. They are just generalizations of interfaces that Common Lisp allows, like multiple dispatch and such. <beach> And interfaces have been around for half a century or more. [14:38] <Josh_2> Yes <Josh_2> :thinking: <beach> So just like an interface, a protocol is merely a way to specify what part of a module is visible externally. [14:39] *** ymir (~ymir___@192.211.30.152) has joined channel #commonlisp <Josh_2> Was it a 'thing' before AMOP? [14:40] <Josh_2> or MOP at least <beach> As such, it contains types (usually classes) and operations (usually generic functions). <beach> I don't know. The concept of a protocol doesn't require CLOS. It could have ordinary functions and types, but it would be a bit limited then. [14:42] <Josh_2> The term 'protocol oriented programming' seems fitting to me <Josh_2> I dont know what I'm thinking but I'm thinking something :thinking: [14:43] <beach> As I recall, one of the examples in my chapter on protocols is a protocol with the operations CONS, CAR, CDR, and the type CONS. Nothing CLOS-y here. [14:44] *** ymir (~ymir___@192.211.30.152) has quit: Ping timeout: 264 seconds <beach> In fact, since an interface is a restricted version of a protocol, every interface is a protocol, so protocols have been around for as long as interfaces, but perhaps not with that name [14:45] <Josh_2> Perpaps but much of the examples of 'Protocol' in the SICL spec do in fact use GF's <beach> Sure. <Josh_2> hmmmm <beach> But I think the dependency is the other way around. Since it used generic functions, classes, and multiple dispatch, it can't be an interface, so we have to call it a protocol. [14:46] <Josh_2> Perhaps I mistakenly assumed the terminology was taken from Meta Object Protocol rather than something else <beach> Oh, I don't think so. Meta Object Protocol is just a protocol that works on metaobjects. [14:47] <Josh_2> Right <beach> So the "types" are classes of metaobjects. <Josh_2> The essence being a set of GF's that a client can specialize in order to customize the behaviour. If a designer of a different system sat down and wrote their system in a way that utilizes GF's so that a user of their system can customize the behaviour through specialization of GF's, I would call this 'protocol oriented programming' [14:48] <Josh_2> although they may be the client of their own system :thinking: [14:49] <beach> Customization is not a required part of a protocol though. <Josh_2> Okay perhaps I should rephrase [14:50] <beach> It just so happens that CLOS allows for such customization by subclassing and auxiliary methods. *** amb007 (~a_bakic@2a02-8440-331a-7690-243b-a8c1-5ce2-c684.rev.sfr.net) has quit: Ping timeout: 260 seconds <Josh_2> Okay :thinking: [14:51] *** danza (~francesco@151.47.186.224) has joined channel #commonlisp <beach> Maybe you need a new term for a protocol that allows customization. *** amb007 (~a_bakic@2a02-8440-b148-869b-6f79-1b96-683e-58fa.rev.sfr.net) has joined channel #commonlisp <ebrasca> Good morning! [14:52] <Josh_2> As far as I can tell if you are writing a protocol using GF's then customization is implied <beach> Hello ebrasca. <Josh_2> it might not be desired but it is implied. <ebrasca> beach: Hi [14:53] <Josh_2> I think that is besides the point though. <beach> Josh_2: Not quite. If the protocol uses only "primitive" types like INTEGER, CONS, HASH-TABLE, you can't create a subclass. And you can't create auxiliary methods either, because they would be applicable when given only specified types, and that is not allowed. [14:54] <Josh_2> True :thinking: <Josh_2> Perhaps the tipping point would be introducing an auxiliary variable like your *client* idea [14:55] <Josh_2> which I have done unintentionally <beach> But, of course, if it uses only primitive types, there is no particular reason to use generic functions. <Josh_2> But there are times when you want a generic interface even if it accepts primitive types, like #'describe [14:57] <Josh_2> idk <Josh_2> :thinking: <Josh_2> maybe 'generic protocol programming' :thinking: [14:58] <beach> Yes, but I said "only primitive types". <Josh_2> I know i know <pve> beach: Hi, could you expand on "an interface is a restricted version of a protocol"? When is a protocol not an interface? <beach> pve: When it uses multiple dispatch. The usual definition of an interface defines a single type and operations on it. But I am sure there are other definitions of "interface". [14:59] <pve> beach: oh ok, thanks <beach> I tried to formalize the concept a bit here: http://metamodular.com/protocol.pdf [15:01] *** waleee (~waleee@h-176-10-144-38.NA.cust.bahnhof.se) has quit: Ping timeout: 240 seconds *** danza (~francesco@151.47.186.224) has quit: Ping timeout: 264 seconds <beach> I am not sure it is complete or entirely correct, but I haven't heard any objections so far. <Josh_2> :O [15:02] <Josh_2> Where is that from? [15:03] *** philipp_ (~philipp_@2003:a:d4d:e700:ca5b:76ff:fea6:aae2) has joined channel #commonlisp <Josh_2> its 'chapter 5' <beach> From an incomplete book that I wrote. [15:04] *** amb007 (~a_bakic@2a02-8440-b148-869b-6f79-1b96-683e-58fa.rev.sfr.net) has quit: Ping timeout: 246 seconds *** waleee (~waleee@h-176-10-144-38.NA.cust.bahnhof.se) has joined channel #commonlisp [15:05] *** amb007 (~a_bakic@2a02:8440:b138:a482:8a17:ac3c:bf:16dc) has joined channel #commonlisp <Josh_2> What was it about? [15:06] <Josh_2> 'generic protocol' is a more specific term that implies the use of generic functions :thinking: [15:07] <Josh_2> what you describe is more general and not what I was thinking <Josh_2> 'Maybe you need a new term for a protocol that allows customization' Yes I do [15:08] <beach> I think the title is "Programming with Generic Functions" <Josh_2> :O [15:09] <Josh_2> How complete is it?? <beach> It has 116 pages apparently. <Josh_2> Can I see it? <beach> Nah, not worthwhile. It is quite incomplete. [15:10] <beach> And it very likely will remain incomplete. <Josh_2> :( [15:11] <Josh_2> What are the chapter titles? <beach> All my book projects are abandoned, or at least suspended. I can't write books by myself, and my favorite coauthor quit being interested in writing books. [15:12] <splittist> give it a few months and you'll be able to generate the whole book with a fully animated video presentation from a set of notes via your favourite LLM (: <beach> That might work. <beach> Josh_2: I haven't even decided on all the chapter titles. I don't work like that. <Josh_2> :( [15:13] <Josh_2> I really want to see it now :( [15:15] <splittist> Josh_2: create the future you want to see! [15:17] <Josh_2> I'm trying!! [15:18] <Josh_2> Maybe beach and I write book on 'Programming with Generic Functions' :) <Josh_2> Seems fitting [15:19] <Josh_2> Im already good at LaTeX and I recently formatted a 200+ page book full of speeches :sunglasses: Thats being published now [15:21] *** chomwitt (~chomwitt@2a02:587:7a18:fc00:1ac0:4dff:fedb:a3f1) has joined channel #commonlisp [15:31] <Josh_2> beach: can I see :) [15:36] *** dino_tutter (~dino@2a00:23c7:2b23:e501:264b:71b7:b9b1:fd3e) has joined