< 1559952480 238350 :adu!~ajr@pool-173-73-86-145.washdc.fios.verizon.net JOIN :#esoteric < 1559952731 182118 :iconmaster!~iconmaste@2604:6000:b180:d800:956:426:4a93:b2ba QUIT :Ping timeout: 248 seconds < 1559953155 181842 :iconmaster!~iconmaste@2604:6000:b180:d800:956:426:4a93:b2ba JOIN :#esoteric < 1559953254 168336 :ais523!~ais523@unaffiliated/ais523 JOIN :#esoteric < 1559954363 173966 :iconmaster!~iconmaste@2604:6000:b180:d800:956:426:4a93:b2ba QUIT :Ping timeout: 248 seconds < 1559955700 253863 :iconmaster!~iconmaste@2604:6000:b180:d800:d450:721f:b158:3e78 JOIN :#esoteric < 1559955723 378588 :tswett[m]!tswettmatr@gateway/shell/matrix.org/x-zadsdxeddlqlkcxy QUIT :Changing host < 1559955723 378636 :tswett[m]!tswettmatr@unaffiliated/tswett JOIN :#esoteric < 1559955723 378644 :tswett[m]!tswettmatr@unaffiliated/tswett QUIT :Changing host < 1559955723 378651 :tswett[m]!tswettmatr@gateway/shell/matrix.org/x-zadsdxeddlqlkcxy JOIN :#esoteric < 1559955781 538563 :iconmaster!~iconmaste@2604:6000:b180:d800:d450:721f:b158:3e78 QUIT :Client Quit < 1559956160 279670 :Phantom_Hoover!~phantomho@unaffiliated/phantom-hoover QUIT :Ping timeout: 248 seconds < 1559957967 341333 :Sgeo__!~Sgeo@ool-18b98439.dyn.optonline.net PRIVMSG #esoteric :WebAssembly reminds me of NewSpeak: Immutable modules that need to have functions passed into them < 1559958597 378417 :ski!~ski@remote11.chalmers.se PRIVMSG #esoteric :passed, how ? < 1559959496 609240 :Sgeo__!~Sgeo@ool-18b98439.dyn.optonline.net PRIVMSG #esoteric :When you instantiate a WebAssembly module, you give it an object of imports. When the WebAssembly code wants to import something, it comes from that object. There's no other way for WebAssembly code to access host functionality < 1559959792 432239 :ski!~ski@remote11.chalmers.se PRIVMSG #esoteric :so you link imports to it, externally then ? < 1559959810 56637 :ski!~ski@remote11.chalmers.se PRIVMSG #esoteric :i assume Gilad Bracha might like that < 1559959884 64278 :shachaf!~shachaf@unaffiliated/shachaf PRIVMSG #esoteric :Is that different from an ELF file or whatever the regular computer equivalent is? < 1559959891 198081 :zzo38!~zzo38@24-207-15-213.eastlink.ca PRIVMSG #esoteric :I think thiat is good. But, I think there should be a implementation to use in C, rather than only JavaScript < 1559959937 751023 :Lord_of_Life!~Lord@unaffiliated/lord-of-life/x-0885362 QUIT :Ping timeout: 268 seconds < 1559959992 521957 :shachaf!~shachaf@unaffiliated/shachaf PRIVMSG #esoteric :I wrote some webassembly code by hand: http://slbkbs.org/tmp/webasm-by-hand.html < 1559960017 576373 :shachaf!~shachaf@unaffiliated/shachaf PRIVMSG #esoteric :I'll probably emit some at one point. < 1559960019 598791 :Lord_of_Life!~Lord@unaffiliated/lord-of-life/x-0885362 JOIN :#esoteric < 1559960295 448802 :ski!~ski@remote11.chalmers.se PRIVMSG #esoteric :ACTION . o O ( "A Ban on Imports" by Gilad Bracha in 2009-06-30 at ) < 1559960782 464337 :zzo38!~zzo38@24-207-15-213.eastlink.ca PRIVMSG #esoteric :Another way is you can import, but only the interface can be imported, and then you can substitute other implementations. In C you can use a #include command to load a header file, but the implementations of function in other file which is not part of the first one, and then link it together afterward. You can also modify the header file in case some macros may be different, too. < 1559960819 452321 :zzo38!~zzo38@24-207-15-213.eastlink.ca PRIVMSG #esoteric :However, this requires that it is global for the entire program, rather than having parameters you can do it locally too. But, even in C, you could do dynamic loading, too. < 1559960956 734541 :atslash!~atslash@static.231.107.9.5.clients.your-server.de JOIN :#esoteric < 1559961060 733773 :shachaf!~shachaf@unaffiliated/shachaf PRIVMSG #esoteric :whoa, https://gist.github.com/pervognsen/0e1be3b683d62b16fd81381c909bf67e is such a reasonable way to think of multidimensional arrays. < 1559961121 685109 :zzo38!~zzo38@24-207-15-213.eastlink.ca PRIVMSG #esoteric :shachaf: I looked at the code. It won't work on the web browser that I have, but it does work on my computer, on Node.js version 8 (I have both version 8 and version 6 installed, because there is a package for version 6 but version 8 I have to install manually) < 1559961214 915252 :atslash!~atslash@static.231.107.9.5.clients.your-server.de QUIT :Client Quit < 1559962742 82084 :zzo38!~zzo38@24-207-15-213.eastlink.ca PRIVMSG #esoteric :I wrote some more ideas I had about making Magic: the Gathering cards in RDF, and here is another example of a code: [:when [:upkeep :you]; :do [:sacrifice [:and [:not :this], :creature]; :else [:damage 7; :to :you]]] < 1559962868 416292 :zzo38!~zzo38@24-207-15-213.eastlink.ca PRIVMSG #esoteric :Do you think this is good? < 1559964350 107802 :FreeFull!~freefull@defocus/sausage-lover QUIT : < 1559965686 823451 :S_Gautam!uid286066@gateway/web/irccloud.com/x-ulkysdxovscyiewp JOIN :#esoteric > 1559968067 459684 PRIVMSG #esoteric :14[[07Fm14]]4 10 02https://esolangs.org/w/index.php?diff=63179&oldid=13048 5* 03Salpynx 5* (+518) 10So glad I found these archived, the geocities content is not saved anywhere! > 1559969551 161439 PRIVMSG #esoteric :14[[07Subleq14]]4 10 02https://esolangs.org/w/index.php?diff=63180&oldid=54976 5* 03Salpynx 5* (+112) 10/* External resources */ add a Ruby interpreter found on github > 1559970952 328210 PRIVMSG #esoteric :14[[07Mouse14]]4 10 02https://esolangs.org/w/index.php?diff=63181&oldid=40936 5* 03Salpynx 5* (+143) 10/* External resources */ link to original 1979 article > 1559970987 622 PRIVMSG #esoteric :14[[07Mouse14]]4 M10 02https://esolangs.org/w/index.php?diff=63182&oldid=63181 5* 03Salpynx 5* (+4) 10/* History */ link to a stub for MUSYS < 1559971500 168714 :iconmaster!~iconmaste@2604:6000:b180:d800:1979:1953:5374:a4fb JOIN :#esoteric < 1559972608 334471 :adu!~ajr@pool-173-73-86-145.washdc.fios.verizon.net QUIT :Quit: adu < 1559973293 340326 :b_jonas!~x@catv-176-63-24-197.catv.broadband.hu QUIT :Quit: Lost terminal < 1559974869 41452 :ski!~ski@remote11.chalmers.se PRIVMSG #esoteric :shachaf : oh, interesting :) < 1559975082 115031 :ski!~ski@remote11.chalmers.se PRIVMSG #esoteric :ACTION . o O ( "Blitter Hardware / DMA Channels" (in "Amiga Hardware Reference Manual") (see the part about "modulos") at ) < 1559975193 478212 :shachaf!~shachaf@unaffiliated/shachaf PRIVMSG #esoteric :ski: Makes sense. < 1559975406 724665 :zzo38!~zzo38@24-207-15-213.eastlink.ca PRIVMSG #esoteric :ski: That was what I thought too (although I have never used Amiga). < 1559975427 678871 :shachaf!~shachaf@unaffiliated/shachaf PRIVMSG #esoteric :zzo38: Do you like this article? < 1559975446 804360 :ski!~ski@remote11.chalmers.se PRIVMSG #esoteric :zzo38 : i suppose you've encountered a similar technique somewhere else ? < 1559975472 151605 :zzo38!~zzo38@24-207-15-213.eastlink.ca PRIVMSG #esoteric :shachaf: Yes, I think that is good (for some kind of purposes, at least). < 1559975499 140196 :zzo38!~zzo38@24-207-15-213.eastlink.ca PRIVMSG #esoteric :ski: No; I thought of Amiga, because I know a few things about it. < 1559975501 180522 :shachaf!~shachaf@unaffiliated/shachaf PRIVMSG #esoteric :Uh, I mean the one about multidimensional arrays, not about Amiga. < 1559975515 12502 :zzo38!~zzo38@24-207-15-213.eastlink.ca PRIVMSG #esoteric :shachaf: Yes, that is what I expected you meant < 1559975567 828156 :shachaf!~shachaf@unaffiliated/shachaf PRIVMSG #esoteric :What kinds of array types should a language have? It seems like there are so many variants. < 1559975583 885643 :shachaf!~shachaf@unaffiliated/shachaf PRIVMSG #esoteric :For example: < 1559975588 630534 :shachaf!~shachaf@unaffiliated/shachaf PRIVMSG #esoteric :* Raw pointer to T. < 1559975600 747312 :shachaf!~shachaf@unaffiliated/shachaf PRIVMSG #esoteric :* Array of N elements, N known statically. < 1559975602 833256 :zzo38!~zzo38@24-207-15-213.eastlink.ca PRIVMSG #esoteric :Depend on the programming language, I think. I would just have, you can define your own. < 1559975603 873314 :shachaf!~shachaf@unaffiliated/shachaf PRIVMSG #esoteric :* Array of N elements, N known dynamically. < 1559975640 693123 :shachaf!~shachaf@unaffiliated/shachaf PRIVMSG #esoteric :* Array of N elements with maximum capacity M, N dynamic, M static. < 1559975644 519757 :shachaf!~shachaf@unaffiliated/shachaf PRIVMSG #esoteric :* Array of N elements with maximum capacity M, N and M dynamic. < 1559975651 890803 :shachaf!~shachaf@unaffiliated/shachaf PRIVMSG #esoteric :And some other things. < 1559975698 412175 :shachaf!~shachaf@unaffiliated/shachaf PRIVMSG #esoteric :Some languages might let you define an array type with a size that's either known statically or dynamically, though I'm not sure how you'd do that without the whole thing being a complicated disaster. < 1559975699 719507 :ais523!~ais523@unaffiliated/ais523 PRIVMSG #esoteric :for high-level languages I rather like the approach where you have something dictionary-like that can be indexed with /anything/, but some helpers for if you happen to use consecutive integers < 1559975733 137197 :shachaf!~shachaf@unaffiliated/shachaf PRIVMSG #esoteric :I mean a low-level language where you're concerned with exact memory layout and ownership. < 1559975778 219311 :ski!~ski@remote11.chalmers.se PRIVMSG #esoteric :ACTION . o O ( "Single Assignment C" , ) < 1559975795 709962 :ais523!~ais523@unaffiliated/ais523 PRIVMSG #esoteric :Rust's approach seems to work fairly well; it supports four of the items on your list as language primitives or really core standard library elements < 1559975811 4521 :ais523!~ais523@unaffiliated/ais523 PRIVMSG #esoteric :*T, [T; N], [T], (not available), Vec < 1559975823 694798 :zzo38!~zzo38@24-207-15-213.eastlink.ca PRIVMSG #esoteric :I think what C does is fine, although I would do that you can define your own type and how it is passed and whatever other details it is < 1559975849 67503 :ais523!~ais523@unaffiliated/ais523 PRIVMSG #esoteric :arrays are second-class in C < 1559975854 951107 :ski!~ski@remote11.chalmers.se PRIVMSG #esoteric :`M' is an upper bound of `N' ? < 1559975855 600889 :HackEso!~h@techne.zem.fi PRIVMSG #esoteric :​/srv/hackeso-code/multibot_cmds/lib/limits: line 5: exec: M': not found < 1559975866 361944 :shachaf!~shachaf@unaffiliated/shachaf PRIVMSG #esoteric :That's what I meant. < 1559975871 852737 :ais523!~ais523@unaffiliated/ais523 PRIVMSG #esoteric :I think it would be an improvement to have them as first-class, like structs are < 1559975876 235691 :shachaf!~shachaf@unaffiliated/shachaf PRIVMSG #esoteric :There are several options I haven't mentioned, such as the one where the array "owns" the memory and where it doesn't. < 1559975895 534172 :ais523!~ais523@unaffiliated/ais523 PRIVMSG #esoteric :well, dynamic sizing is tied to owning memory < 1559975918 198568 :ais523!~ais523@unaffiliated/ais523 PRIVMSG #esoteric :if you don't own the memory you typically can't resize it, if you do, the only thing preventing a resize would be pointers into the array from outside < 1559975934 726701 :shachaf!~shachaf@unaffiliated/shachaf PRIVMSG #esoteric :Well, you could have capacity M, size N, and no way to grow the capacity. < 1559975943 842104 :ais523!~ais523@unaffiliated/ais523 PRIVMSG #esoteric :(in Rust you can't mutate anything which has an outside pointer, so in Rust, the ability to mutate a Vec also lets you resize it) < 1559975972 267119 :shachaf!~shachaf@unaffiliated/shachaf PRIVMSG #esoteric :Only if the vec is allocated with malloc/free. < 1559975988 330439 :ais523!~ais523@unaffiliated/ais523 PRIVMSG #esoteric :Vec is specifically an array that owns its memory < 1559975995 555149 :ais523!~ais523@unaffiliated/ais523 PRIVMSG #esoteric :but it's normally used for growable arrays < 1559975997 528085 :shachaf!~shachaf@unaffiliated/shachaf PRIVMSG #esoteric :It might just be statically allocated, or allocated in an arena or something. < 1559976033 946488 :ais523!~ais523@unaffiliated/ais523 PRIVMSG #esoteric :if it's statically allocated it doesn't own its memory, right? the executable image does < 1559976045 236339 :ais523!~ais523@unaffiliated/ais523 PRIVMSG #esoteric :I guess resizing an array could move it into or out of an arena < 1559976068 393600 :shachaf!~shachaf@unaffiliated/shachaf PRIVMSG #esoteric :OK, sure. What I mean is that having both capacity and size is distinct from owning the memory. < 1559976126 76403 :ski!~ski@remote11.chalmers.se PRIVMSG #esoteric :zzo38 : it's not clear (to me) what "define your own type and how it is passed and whatever other details it is" would mean, in terms of language design < 1559976127 983522 :shachaf!~shachaf@unaffiliated/shachaf PRIVMSG #esoteric :Possibly it's not very useful in practice, but I suspect it's moderately useful. < 1559976213 733036 :zzo38!~zzo38@24-207-15-213.eastlink.ca PRIVMSG #esoteric :ski: What I thought, you can define parameterized types, including with different kinds (like is possible in Haskell, for example, but not Haskell), and then you can define the characteristics for a type, and you can also define your own characteristics, too. Such characteristics can include defining variables, reading, writing, etc, using macros to convert the operations into LLVM codes. < 1559976245 169889 :shachaf!~shachaf@unaffiliated/shachaf PRIVMSG #esoteric :There's a feature related to this that C++ doesn't really support, which is to have something which can either be a compile-time argument or a runtime argument. < 1559976247 375046 :sebbu3!~sebbu@unaffiliated/sebbu JOIN :#esoteric < 1559976247 546345 :ais523!~ais523@unaffiliated/ais523 PRIVMSG #esoteric :well, from a low-level perspective, capacity is the only thing that really matters; size is just a declaration of intent about how you're using the data < 1559976260 450392 :shachaf!~shachaf@unaffiliated/shachaf PRIVMSG #esoteric :C++ supports the former with templates and the latter with arguments, but it doesn't let you abstract over them. < 1559976270 131586 :ais523!~ais523@unaffiliated/ais523 PRIVMSG #esoteric :you can plausibly imagine one array having multiple different sizes because it's partially initialized to different extents at multiple different abstraction levels < 1559976296 433092 :shachaf!~shachaf@unaffiliated/shachaf PRIVMSG #esoteric :ais523: Well, sure, but in C I often store the size along with the poitner because I want to operate on only the valid elements. < 1559976312 373279 :ski!~ski@remote11.chalmers.se PRIVMSG #esoteric :it's interesting that you can do `void frob(const size_t M,const size_t N,int (*parr)[M][N]) { ..(*parr)[i][j].. }' (VLA) in C. however, neither `int (*blub(const size_t N))[N] { ... }', nor `struct { const size_t N; int (*parr)[N]; }' works, aiui < 1559976336 141977 :shachaf!~shachaf@unaffiliated/shachaf PRIVMSG #esoteric :In practice storing the size is very common. < 1559976343 486257 :ais523!~ais523@unaffiliated/ais523 PRIVMSG #esoteric :shachaf: right; it's just that "valid" is a relative concept and storing it in the array seems wrong in a sense because there's no obvious reason to have exactly one of it (besides the capacity) < 1559976353 310783 :shachaf!~shachaf@unaffiliated/shachaf PRIVMSG #esoteric :You also might want bounds checking to check the size rather than the capacity. < 1559976364 573716 :ski!~ski@remote11.chalmers.se PRIVMSG #esoteric :ais523 : by "first-class", i assume that you mean that you can pass them as parameters to, and result from, functions, and assign them ? < 1559976371 312466 :ais523!~ais523@unaffiliated/ais523 PRIVMSG #esoteric :ski: right < 1559976397 720511 :shachaf!~shachaf@unaffiliated/shachaf PRIVMSG #esoteric :I agree that it would be nicer if C arrays were first-class. The meaning of foo(int x[4]) is silly. < 1559976399 822934 :ais523!~ais523@unaffiliated/ais523 PRIVMSG #esoteric :the most useful use for it is "number of elements that are validly initialized", meaning that you have to run their destructors when the array dies, can't read past the end of the allocated area (but can write), etc. < 1559976414 826285 :ais523!~ais523@unaffiliated/ais523 PRIVMSG #esoteric :shachaf: foo(int x[static 4]) < 1559976420 876540 :zzo38!~zzo38@24-207-15-213.eastlink.ca PRIVMSG #esoteric :Anyways, I don't use foo(int x[4]) in C. < 1559976423 110047 :shachaf!~shachaf@unaffiliated/shachaf PRIVMSG #esoteric :The meaning of that is still silly. < 1559976426 589044 :ais523!~ais523@unaffiliated/ais523 PRIVMSG #esoteric :admittedly, it still probably doesn't really do what you want, but it's a start < 1559976440 499714 :shachaf!~shachaf@unaffiliated/shachaf PRIVMSG #esoteric :struct T { int x[4]; }; foo(T t); has the more reasonable meaning. > 1559976469 61363 PRIVMSG #esoteric :14[[07MUSYS14]]4 N10 02https://esolangs.org/w/index.php?oldid=63183 5* 03Salpynx 5* (+1513) 10I'm still trying to track down the full description of this language... < 1559976470 567342 :ais523!~ais523@unaffiliated/ais523 PRIVMSG #esoteric :but valid initialisation is a high-level concept < 1559976491 856450 :sebbu!~sebbu@unaffiliated/sebbu QUIT :Ping timeout: 258 seconds < 1559976494 281556 :ski!~ski@remote11.chalmers.se PRIVMSG #esoteric :zzo38 : "like is possible in Haskell, for example, but not Haskell" ? < 1559976495 724155 :shachaf!~shachaf@unaffiliated/shachaf PRIVMSG #esoteric :I do use foo(int x[static N]) in C code -- I've never seen anyone else do it -- but only in particular cases like the output of a hash function or something. < 1559976505 28675 :shachaf!~shachaf@unaffiliated/shachaf PRIVMSG #esoteric :ais523: Arrays are also a high-level concept. < 1559976516 183955 :zzo38!~zzo38@24-207-15-213.eastlink.ca PRIVMSG #esoteric :Do you want the LLVM type [4 x i32] or whatever to be the type of the argument? < 1559976530 998301 :ais523!~ais523@unaffiliated/ais523 PRIVMSG #esoteric :zzo38: yes, that's how it would compile in LLVM < 1559976533 329528 :shachaf!~shachaf@unaffiliated/shachaf PRIVMSG #esoteric :If you have a for-each loop, for (T x : a) { ... }, that would presumably use the size. < 1559976538 423678 :zzo38!~zzo38@24-207-15-213.eastlink.ca PRIVMSG #esoteric :ski: I mean what I am describing is not Haskell, but it has parameterized types with kinds is similar to how Haskell is doing. < 1559976548 60618 :zzo38!~zzo38@24-207-15-213.eastlink.ca PRIVMSG #esoteric :(although not quite, but it is a bit similar) < 1559976555 262795 :ais523!~ais523@unaffiliated/ais523 PRIVMSG #esoteric :although, hmm, I'm not sure if it should be by-reference or by-value < 1559976570 774977 :ais523!~ais523@unaffiliated/ais523 PRIVMSG #esoteric :I guess it has to be by-value for consistency, but that would seem /really/ weird to C programmers < 1559976606 26901 :shachaf!~shachaf@unaffiliated/shachaf PRIVMSG #esoteric :Why would it be weird? < 1559976608 937482 :ais523!~ais523@unaffiliated/ais523 PRIVMSG #esoteric :shachaf: actually that feels wrong too, why would an object necessarily have only one iterator? < 1559976630 768684 :shachaf!~shachaf@unaffiliated/shachaf PRIVMSG #esoteric :That seems like a pretty natural thing to do. < 1559976634 58598 :ski!~ski@remote11.chalmers.se PRIVMSG #esoteric :zzo38 : what does "define the characteristics for a type" and "define your own characteristics" mean, from an abstract programming language perspective, divorced from particular implemention ? < 1559976645 337911 :ais523!~ais523@unaffiliated/ais523 PRIVMSG #esoteric :C programmers are used to arrays not supporting useful operations like copying them < 1559976662 605809 :ais523!~ais523@unaffiliated/ais523 PRIVMSG #esoteric :passing a VLA by value seems even weirder < 1559976680 823537 :shachaf!~shachaf@unaffiliated/shachaf PRIVMSG #esoteric :It would be fine for it to be an error. < 1559976682 353814 :ais523!~ais523@unaffiliated/ais523 PRIVMSG #esoteric :(I think that isn't possible in Rust? I don't think it can pass !Sized things by value) < 1559976687 544166 :shachaf!~shachaf@unaffiliated/shachaf PRIVMSG #esoteric :I think that's better than the current semantics. < 1559976705 986841 :ski!~ski@remote11.chalmers.se PRIVMSG #esoteric :ais523 : "size" (vs "capacity") is about which part of the storage can be assumed to hold data properly initialized to the indicated extent, yes ? < 1559976716 376590 :zzo38!~zzo38@24-207-15-213.eastlink.ca PRIVMSG #esoteric :ski: Let me to think how to explain better < 1559976722 840411 :ais523!~ais523@unaffiliated/ais523 PRIVMSG #esoteric :ski: yes < 1559976725 549569 :ski!~ski@remote11.chalmers.se PRIVMSG #esoteric :(ais523 : oh. i wrote that before seeing your next statement :) < 1559976745 85852 :ais523!~ais523@unaffiliated/ais523 PRIVMSG #esoteric :hmm, I should sleep < 1559976746 671019 :ais523!~ais523@unaffiliated/ais523 QUIT :Quit: quit < 1559976845 384103 :zzo38!~zzo38@24-207-15-213.eastlink.ca PRIVMSG #esoteric :ski: For example, there may be one characteristic for assignment, one for assignment through a pointer, one for a function call, one for taking the address of a function, one for declaring a global variable, and so on; you can define your own characteristics for your own operations. These may expand them into macros, and the macros may then expand into LLVM codes, or may define other macros or do other things. > 1559976891 679142 PRIVMSG #esoteric :14[[07MUSYS14]]4 M10 02https://esolangs.org/w/index.php?diff=63184&oldid=63183 5* 03Salpynx 5* (+127) 10/* External resources */ link to macrogenerator article < 1559976909 986002 :ski!~ski@remote11.chalmers.se PRIVMSG #esoteric :shachaf : yes, however the size sometimes isn't stored directly next to the storage reference (as i'm sure you know). e.g. `exists m,n. int[m][n]' < 1559976943 879321 :zzo38!~zzo38@24-207-15-213.eastlink.ca PRIVMSG #esoteric :(System include files would include many macros for converting C types into LLVM types, and for filling in the target datalayout and target triple in the LLVM code) < 1559976959 179885 :ski!~ski@remote11.chalmers.se PRIVMSG #esoteric :ACTION agrees with ais523's "storing it in the array seems wrong" < 1559977021 135982 :shachaf!~shachaf@unaffiliated/shachaf PRIVMSG #esoteric :Hmm. What would you do instead? < 1559977065 612539 :ski!~ski@remote11.chalmers.se PRIVMSG #esoteric :hmm .. is `void foo(const size_t N,int x[static N]) { ... }' possible, in C ? < 1559977109 200713 :shachaf!~shachaf@unaffiliated/shachaf PRIVMSG #esoteric :I doubt it. < 1559977117 401068 :shachaf!~shachaf@unaffiliated/shachaf PRIVMSG #esoteric :No. What would it mean? < 1559977164 481884 :shachaf!~shachaf@unaffiliated/shachaf PRIVMSG #esoteric :I guess it could have some meaning. < 1559977243 710104 :ski!~ski@remote11.chalmers.se PRIVMSG #esoteric :zzo38 : "like is possible in Haskell, for example, but not Haskell" sounded self-contradictory, to me < 1559977312 514034 :AnotherTest!~turingcom@ptr-82l26zfnlgwh4k4ewtw.18120a2.ip6.access.telenet.be JOIN :#esoteric < 1559977316 577971 :ski!~ski@remote11.chalmers.se PRIVMSG #esoteric :zzo38 : i'm still not really understanding what you're talking about, in your descriptions about user-declared "characteristics" for data types. perhaps some example(s) would help elucidate ? < 1559977427 984492 :ski!~ski@remote11.chalmers.se PRIVMSG #esoteric :shachaf : "What would you do instead?" -- i'm not arguing that having the effect of "storing it in the array" should be avoided. i'm just saying that, at least in a more desugared/primitive view, "storing it in the array" should be seen as an extra wrapping, around "the array" < 1559977434 603085 :zzo38!~zzo38@24-207-15-213.eastlink.ca PRIVMSG #esoteric :One example would be the sizeof operator in C. If you use the system macros then this characteristic is automatically defined for you, but if you don't, then you must either define it yourself or else the type does not have a size. < 1559977530 782923 :ski!~ski@remote11.chalmers.se PRIVMSG #esoteric :zzo38 : are you saying that `sizeof T', for some type `T' (in scope), may not work, unless appropriate header files defining macros have been included ? < 1559977550 364430 :shachaf!~shachaf@unaffiliated/shachaf PRIVMSG #esoteric :I've been trying to describe how you'd write some of these array types in C++ but I'm not sure C++ can even express it. < 1559977553 581979 :zzo38!~zzo38@24-207-15-213.eastlink.ca PRIVMSG #esoteric :Also some parameterized types may require certain characteristics (an example is that an ordinary pointer type requires a size of the type pointed to if you will make pointer arithmetic, allocations, etc) < 1559977583 935503 :ski!~ski@remote11.chalmers.se PRIVMSG #esoteric : There's a feature related to this that C++ doesn't really support, which is to have something which can either be a compile-time argument or a runtime argument. < 1559977586 939580 :ski!~ski@remote11.chalmers.se PRIVMSG #esoteric : C++ supports the former with templates and the latter with arguments, but it doesn't let you abstract over them. < 1559977598 654557 :ski!~ski@remote11.chalmers.se PRIVMSG #esoteric :from one POV, this is a matter of partial evaluation < 1559977636 414808 :ski!~ski@remote11.chalmers.se PRIVMSG #esoteric :(at least the first message) < 1559977653 714592 :zzo38!~zzo38@24-207-15-213.eastlink.ca PRIVMSG #esoteric :ski: That is the case, although not exactly what I meant. What I meant is that if you use a macro to define a type (for example, the "struct" macro) then it may define the "sizeof" characteristic of that type too, but if you use the primitive operations to define a type then you must define all of its characteristics by yourself (and if they are incorrect, then your program probably will not work). < 1559977682 911869 :ski!~ski@remote11.chalmers.se PRIVMSG #esoteric :i suppose if you want to generalize over variables ranging over phases, that could be more involved < 1559977711 617200 :shachaf!~shachaf@unaffiliated/shachaf PRIVMSG #esoteric :ski: I don't think that point of view makes things simpler, rather than more complicated. < 1559977716 391213 :zzo38!~zzo38@24-207-15-213.eastlink.ca PRIVMSG #esoteric :(The characteristics are optional, but some operations, and some parameterized types, may require certain characteristics; if it is specified to require it and it doesn't have it, then it is a compiler error.) < 1559977767 280083 :ski!~ski@remote11.chalmers.se PRIVMSG #esoteric :zzo38 : i'm not convinced it's useful to think of a "pointer" as "potentially pointing to a sequence of values of the requisite type" < 1559977807 342019 :shachaf!~shachaf@unaffiliated/shachaf PRIVMSG #esoteric :Man, C is subtle. < 1559977825 744283 :shachaf!~shachaf@unaffiliated/shachaf PRIVMSG #esoteric :The way it conflates arrays and pointers in some places and not others is tricky. < 1559977948 305416 :ski!~ski@remote11.chalmers.se PRIVMSG #esoteric :zzo38 : hm, what is this `struct' macro you're talking about ? or maybe you don't mean "macro" in the sense of CPP, but rather in terms of implementation, like how you can describe "`struct's" in assembler, via symbols bound to appropriate offset/size values ? < 1559977960 841978 :ski!~ski@remote11.chalmers.se PRIVMSG #esoteric :ACTION nods to shachaf re partial evaluation < 1559977993 559426 :shachaf!~shachaf@unaffiliated/shachaf PRIVMSG #esoteric :Ignoring that particular subtlety for a moment, you can imagine writing in C++: < 1559978014 204362 :shachaf!~shachaf@unaffiliated/shachaf PRIVMSG #esoteric :template struct StaticArray { T *ptr; }; < 1559978027 33228 :shachaf!~shachaf@unaffiliated/shachaf PRIVMSG #esoteric :template struct DynamicArray; { T *ptr; int size; }; < 1559978048 622674 :shachaf!~shachaf@unaffiliated/shachaf PRIVMSG #esoteric :And most of the code for those two types would be almost identical. < 1559978079 965278 :zzo38!~zzo38@24-207-15-213.eastlink.ca PRIVMSG #esoteric :ski: Well, it is more powerful than C macros. But you can enter the code directly without using macros, which would just be LLVM codes (with the proper wrapping needed by the compiler). < 1559978133 63952 :zzo38!~zzo38@24-207-15-213.eastlink.ca PRIVMSG #esoteric :(You could perform any kind of computations in these more powerful macros, and also affect other macros with it, and other stuff) < 1559978181 680528 :ski!~ski@remote11.chalmers.se PRIVMSG #esoteric : template struct DynamicArray; { int size; struct StaticArray arr; }; < 1559978221 912625 :shachaf!~shachaf@unaffiliated/shachaf PRIVMSG #esoteric :ski: How would that work? size isn't known at compile-time. < 1559978282 441572 :shachaf!~shachaf@unaffiliated/shachaf PRIVMSG #esoteric :There's the separate and important issue that an array isn't really a pointer so this isn't right anyway. < 1559978301 662688 :shachaf!~shachaf@unaffiliated/shachaf PRIVMSG #esoteric :You want sizeof StaticArray to be the size of the elements, not the size of a pointer. < 1559978347 59 :iconmaster!~iconmaste@2604:6000:b180:d800:1979:1953:5374:a4fb QUIT :Read error: Connection reset by peer < 1559978436 907873 :ski!~ski@remote11.chalmers.se PRIVMSG #esoteric :i'm pondering a situation where we could pass a skolem `size', as opposed to only a literal, to `StaticArray' < 1559978449 284847 :iconmaster!~iconmaste@cpe-67-249-136-214.twcny.res.rr.com JOIN :#esoteric < 1559978459 618622 :ski!~ski@remote11.chalmers.se PRIVMSG #esoteric :(perhaps it shouldn't be called `StaticArray', though) < 1559978478 955025 :shachaf!~shachaf@unaffiliated/shachaf PRIVMSG #esoteric :I think I gave a bad example anyway. < 1559978493 698807 :shachaf!~shachaf@unaffiliated/shachaf PRIVMSG #esoteric :StaticArray and DynamicArray should actually be quite different. < 1559978506 466286 :ski!~ski@remote11.chalmers.se PRIVMSG #esoteric :yea, iiuc, you want to change `T *ptr' to `T arr[size]', yes ? < 1559978519 257079 :shachaf!~shachaf@unaffiliated/shachaf PRIVMSG #esoteric :I think so. < 1559978526 948994 :iconmaster!~iconmaste@cpe-67-249-136-214.twcny.res.rr.com QUIT :Read error: Connection reset by peer < 1559978544 325072 :shachaf!~shachaf@unaffiliated/shachaf PRIVMSG #esoteric :Or maybe to char mem[sizeof (T) * size]; or something. < 1559978575 174142 :ski!~ski@remote11.chalmers.se PRIVMSG #esoteric :zzo38 : well, i want (reasonably) high-level ways to reason about these "macros". specifically, i want to be able to reason about them in a way that isn't merely in terms of what an implementation happens to do < 1559978654 693429 :iconmaster!~iconmaste@cpe-67-249-136-214.twcny.res.rr.com JOIN :#esoteric < 1559978675 129767 :shachaf!~shachaf@unaffiliated/shachaf PRIVMSG #esoteric :But now I'm not really sure what DynamicArray should be. < 1559978700 596357 :ski!~ski@remote11.chalmers.se PRIVMSG #esoteric : template struct StaticArray { T arr[size]; }; < 1559978705 619890 :ski!~ski@remote11.chalmers.se PRIVMSG #esoteric : template struct DynamicArray { size_t size; T ptr[size]; }; < 1559978709 587732 :ski!~ski@remote11.chalmers.se PRIVMSG #esoteric :is that closer ? < 1559978731 577408 :zzo38!~zzo38@24-207-15-213.eastlink.ca PRIVMSG #esoteric :Because it is macros, they can be defined differently and therefore can do differently. The compiler would just expand the definition and use that to do such things as perform computations, emit LLVM codes, affect other macros, and insert stuff into the AST of the source code where the macro is placed; but, you can still use them for high-level purposes, and like if you use FILE* in C you don't have to know exactly how FILE is defined, it is same < 1559978769 254722 :shachaf!~shachaf@unaffiliated/shachaf PRIVMSG #esoteric :ski: OK, this has clarified things a bit for me. < 1559978788 229382 :ski!~ski@remote11.chalmers.se PRIVMSG #esoteric :zzo38 : cut off near ".., and like if you use FILE* in C you don't have to know exactly how FILE is defined, it is same" ? < 1559978807 850896 :zzo38!~zzo38@24-207-15-213.eastlink.ca PRIVMSG #esoteric :..., and like if you use FILE* in C you don't have to know exactly how FILE is defined, it is same kind of thing here. < 1559978827 320172 :shachaf!~shachaf@unaffiliated/shachaf PRIVMSG #esoteric :When I pass someone a pointer to some memory, the array size isn't going to be next to the data. < 1559978837 866853 :shachaf!~shachaf@unaffiliated/shachaf PRIVMSG #esoteric :In C, I'd pass them a pointer and a size separately. < 1559978844 228754 :ski!~ski@remote11.chalmers.se PRIVMSG #esoteric :anyway, consier the difference between < 1559978872 918462 :shachaf!~shachaf@unaffiliated/shachaf PRIVMSG #esoteric :So this DynamicArray type really should be struct { size_t size; T *ptr; }; < 1559978875 253499 :ski!~ski@remote11.chalmers.se PRIVMSG #esoteric : template struct DynamicArray { size_t size; struct StaticArray arr; }; < 1559978884 276676 :ski!~ski@remote11.chalmers.se PRIVMSG #esoteric : template struct DynamicArrayPtr { size_t size; struct StaticArray *parr; }; < 1559978891 828472 :shachaf!~shachaf@unaffiliated/shachaf PRIVMSG #esoteric :Or maybe struct { size_t size; StaticArray *arr; }; < 1559978891 987989 :zzo38!~zzo38@24-207-15-213.eastlink.ca PRIVMSG #esoteric :(To do many of the things I mentioned, may need a more Lisp like syntax, although maybe with syntactic sugar for some operations.) < 1559978899 796939 :ski!~ski@remote11.chalmers.se PRIVMSG #esoteric :and of course < 1559978937 65331 :ski!~ski@remote11.chalmers.se PRIVMSG #esoteric : template struct DynamicArrayArr { size_t N; struct StaticArray arr[M]; }; < 1559978940 64424 :ski!~ski@remote11.chalmers.se PRIVMSG #esoteric :and so on < 1559978959 631137 :ski!~ski@remote11.chalmers.se PRIVMSG #esoteric :(naming is probably not that good, there) < 1559978970 81398 :shachaf!~shachaf@unaffiliated/shachaf PRIVMSG #esoteric :Let's just figure out the N version without getting M involve. < 1559978973 154264 :shachaf!~shachaf@unaffiliated/shachaf PRIVMSG #esoteric :d < 1559978982 893751 :shachaf!~shachaf@unaffiliated/shachaf PRIVMSG #esoteric :It sounds like we were getting at the same thing here. < 1559979038 149607 :shachaf!~shachaf@unaffiliated/shachaf PRIVMSG #esoteric :Wait, I'm confused about the third version. Is it an array of arrays? < 1559979057 870197 :zzo38!~zzo38@24-207-15-213.eastlink.ca PRIVMSG #esoteric :ski: Now do you understand how I mean? Probably I am still confusing < 1559979064 650131 :ski!~ski@remote11.chalmers.se PRIVMSG #esoteric :my point is merely that in general you may want `exists { size_t N; Foo> foo; }', for various choices of `Foo' < 1559979079 878120 :shachaf!~shachaf@unaffiliated/shachaf PRIVMSG #esoteric :Aha. < 1559979099 270439 :ski!~ski@remote11.chalmers.se PRIVMSG #esoteric :shachaf : "OK, this has clarified things a bit for me." -- oh, i'm a bit surprised to hear that < 1559979103 17978 :shachaf!~shachaf@unaffiliated/shachaf PRIVMSG #esoteric :I see your point now. You might want to pass a bunch of arrays of the same size, and only pass the size once. < 1559979107 877349 :ski!~ski@remote11.chalmers.se PRIVMSG #esoteric :ACTION feels rather confused here < 1559979113 680506 :ski!~ski@remote11.chalmers.se PRIVMSG #esoteric :exactly < 1559979123 598742 :shachaf!~shachaf@unaffiliated/shachaf PRIVMSG #esoteric :ski: Just imagine how confused I must've been beforehand! < 1559979155 368408 :shachaf!~shachaf@unaffiliated/shachaf PRIVMSG #esoteric :ski: I feel like fitting every use case of that form into the type system may be a fool's errand. < 1559979198 445302 :shachaf!~shachaf@unaffiliated/shachaf PRIVMSG #esoteric :Although... I would like to be able to write things like "void memcpy(Str dst, Str src);" < 1559979285 424887 :ski!~ski@remote11.chalmers.se PRIVMSG #esoteric :zzo38 : to be able to use such macros sensible, without needing to hold in head all the complications of an implementation (all the optimizations, &c.), one would need some kind of abstract API (or ABI ?) for such macros, how they're (abstractly) intended to be used, so that one has a reasonable chance of statically verifying (e.g. in head) correct usage, without TIAS < 1559979329 351400 :ski!~ski@remote11.chalmers.se PRIVMSG #esoteric :zzo38 : e.g. sexp macros are reasonably divorced from internals of implementations < 1559979332 203081 :zzo38!~zzo38@24-207-15-213.eastlink.ca PRIVMSG #esoteric :I like to be able to pass partial arrays without so much difficulty like you can in C by the use of pointer arithmetic; it seems less efficient in other programming languages < 1559979375 411221 :zzo38!~zzo38@24-207-15-213.eastlink.ca PRIVMSG #esoteric :ski: What does "TIAS" means? But, yes, the macros can be used without the internals of the implementation, although so far I have not described it because it is not actually invented yet < 1559979396 167683 :ski!~ski@remote11.chalmers.se PRIVMSG #esoteric :shachaf : "I'd pass them a pointer and a size separately." -- is the key part i was trying to communicate, yes < 1559979439 144520 :iconmaster!~iconmaste@cpe-67-249-136-214.twcny.res.rr.com QUIT :Read error: Connection reset by peer < 1559979476 572766 :ski!~ski@remote11.chalmers.se PRIVMSG #esoteric :"Is it an array of arrays?" -- yes. you could have an array of pointers to arrays (or a pointer to such an array of pointers), if you'd prefer < 1559979502 536950 :ski!~ski@remote11.chalmers.se PRIVMSG #esoteric :zzo38 : "Now do you understand how I mean? Probably I am still confusing" -- perhaps somewhat < 1559979542 856571 :ski!~ski@remote11.chalmers.se PRIVMSG #esoteric :shachaf : "fitting every use case of that form into the type system may be a fool's errand" -- fitting in which sense ? < 1559979551 405469 :iconmaster!~iconmaste@cpe-67-249-136-214.twcny.res.rr.com JOIN :#esoteric < 1559979555 620707 :shachaf!~shachaf@unaffiliated/shachaf PRIVMSG #esoteric :ski: Anyway: I don't think the first DynamicArray you give is very useful. There's no real reason to store the size with the data. < 1559979654 905002 :ski!~ski@remote11.chalmers.se PRIVMSG #esoteric :(hmm .. do you mean `void memcpy(Str *dst,Str *src,size_t N);' or some such ?) < 1559979714 216645 :ski!~ski@remote11.chalmers.se PRIVMSG #esoteric :zzo38 : "Try It And See" < 1559979732 813034 :shachaf!~shachaf@unaffiliated/shachaf PRIVMSG #esoteric :I'm not quite sure where N should come from. < 1559979748 434261 :shachaf!~shachaf@unaffiliated/shachaf PRIVMSG #esoteric :I guess it depends on what Str is. < 1559979771 354491 :ski!~ski@remote11.chalmers.se PRIVMSG #esoteric : "Try It And See" may work in other languages, but not in C due to the nature of undefined behavior/unportable code. Such coding-by-experimentation often leads to situations such as "But it worked fine earlier!" and/or "But it worked on my machine!". https://goo.gl/jPWRA9 < 1559979862 148914 :ski!~ski@remote11.chalmers.se PRIVMSG #esoteric :hmm .. i wonder what's an interesting example of mutually-dependent existentials/structs < 1559979965 748033 :shachaf!~shachaf@unaffiliated/shachaf PRIVMSG #esoteric :The point is not to make an interesting type system but a simple one. < 1559979992 614762 :ski!~ski@remote11.chalmers.se PRIVMSG #esoteric :perhaps it should be `template memcpy(T *dst,T *src,size_t size);', where `size_t' is a singleton ? < 1559980025 295028 :ski!~ski@remote11.chalmers.se PRIVMSG #esoteric :(yea, the mutually-dependent thing was an aside) < 1559980033 385873 :ski!~ski@remote11.chalmers.se PRIVMSG #esoteric :(as was the partial evaluation thing) < 1559980073 154478 :shachaf!~shachaf@unaffiliated/shachaf PRIVMSG #esoteric :Why does size_t being a singleton help compared to size_t? < 1559980102 302771 :ski!~ski@remote11.chalmers.se PRIVMSG #esoteric :we statically know it's the size of `*src' and `*dst' < 1559980118 751665 :shachaf!~shachaf@unaffiliated/shachaf PRIVMSG #esoteric :How do we know that? < 1559980126 675002 :ski!~ski@remote11.chalmers.se PRIVMSG #esoteric :because it uses the same `T' < 1559980134 798788 :shachaf!~shachaf@unaffiliated/shachaf PRIVMSG #esoteric :Oh, T is an array type or something, not the element type. < 1559980152 63023 :ski!~ski@remote11.chalmers.se PRIVMSG #esoteric :`T' is any type, `int' or `int[4]' or whatever < 1559980152 732225 :HackEso!~h@techne.zem.fi PRIVMSG #esoteric :​/srv/hackeso-code/multibot_cmds/lib/limits: line 5: exec: T': not found < 1559980185 318055 :shachaf!~shachaf@unaffiliated/shachaf PRIVMSG #esoteric :Aha, I see. < 1559980190 426680 :ski!~ski@remote11.chalmers.se PRIVMSG #esoteric : zzo38 : i'm not convinced it's useful to think of a "pointer" as "potentially pointing to a sequence of values of the requisite type" < 1559980240 668450 :ski!~ski@remote11.chalmers.se PRIVMSG #esoteric :(if you were doing it in C++, you could use by-reference parameters, instead of by-value, then the types of `src' and `dst' would be `T', rather than `T *') < 1559980284 95779 :shachaf!~shachaf@unaffiliated/shachaf PRIVMSG #esoteric :We should probably abandon C++ notation here anyway. < 1559980293 552612 :shachaf!~shachaf@unaffiliated/shachaf PRIVMSG #esoteric :I'd like a much simpler language. < 1559980312 667762 :ski!~ski@remote11.chalmers.se PRIVMSG #esoteric :yes, of course < 1559980334 914655 :ski!~ski@remote11.chalmers.se PRIVMSG #esoteric :but it may perhaps be useful to cannibalize some notions (properly construed) from e.g. C++ < 1559980340 692241 :iconmaster!~iconmaste@cpe-67-249-136-214.twcny.res.rr.com QUIT :Read error: Connection reset by peer < 1559980342 199674 :shachaf!~shachaf@unaffiliated/shachaf PRIVMSG #esoteric :Sure. < 1559980371 398467 :shachaf!~shachaf@unaffiliated/shachaf PRIVMSG #esoteric :I think the point about separating size from array in some cases is a good one. < 1559980389 347365 :ski!~ski@remote11.chalmers.se PRIVMSG #esoteric :i think there may be a nice language where one can express moves and perfect forwarding, hidden inside C++, yearning to be freed < 1559980454 260654 :shachaf!~shachaf@unaffiliated/shachaf PRIVMSG #esoteric :The goal is maybe just to take the common C idiom "void f(Thing *x, size_t n);" and make it more convenient. < 1559980465 853786 :ski!~ski@remote11.chalmers.se PRIVMSG #esoteric :shachaf : it's basically the same argument as to why (at least last i checked) Rust doesn't have true existentials, since you can express `exists a. C a *> a', but not `exists a. C a *> F a'. at least, that was the take-home i got, when i asked about it < 1559980509 558678 :shachaf!~shachaf@unaffiliated/shachaf PRIVMSG #esoteric :Right. < 1559980528 580183 :shachaf!~shachaf@unaffiliated/shachaf PRIVMSG #esoteric :(This is also true of C++ vtables, of course.) < 1559980539 236393 :iconmaster!~iconmaste@cpe-67-249-136-214.twcny.res.rr.com JOIN :#esoteric < 1559980544 31249 :ski!~ski@remote11.chalmers.se PRIVMSG #esoteric :(yes, and interfaces in Java) < 1559980573 860510 :shachaf!~shachaf@unaffiliated/shachaf PRIVMSG #esoteric :Oh, that's probably the biggest difference between type classes and interfaces. < 1559980671 119048 :ski!~ski@remote11.chalmers.se PRIVMSG #esoteric :OO usage of existentials tends to bundle the operations/methods with the instance/value state. while otoh ADT usage of existentials separates them. the latter can support "binary method" operations like "merge" and "compare" readily, while attempting to express such things in the former is much more clumsy and problematic < 1559980690 362128 :shachaf!~shachaf@unaffiliated/shachaf PRIVMSG #esoteric :Yes. < 1559980702 208570 :shachaf!~shachaf@unaffiliated/shachaf PRIVMSG #esoteric :And the same thing happens with memcpy. < 1559980730 879897 :ski!~ski@remote11.chalmers.se PRIVMSG #esoteric :(but then there's also the view that OO is about closures. related to the former view via `a -> b = exists x. (# x,(# x,a #) #-> b #)') < 1559980750 297376 :ski!~ski@remote11.chalmers.se PRIVMSG #esoteric :@where on-understanding-revisited < 1559980750 517664 :lambdabot!~lambdabot@haskell/bot/lambdabot PRIVMSG #esoteric :"On Understanding Data Abstraction, Revisited" by William R. Cook in 2009-10 at < 1559980786 341899 :ski!~ski@remote11.chalmers.se PRIVMSG #esoteric :elaborate on your last remark ? < 1559980800 47212 :zzo38!~zzo38@24-207-15-213.eastlink.ca PRIVMSG #esoteric :I suppose the characteristics of types that I described is a bit like interface methods, but instead of methods like in object oriented programming, they have interface macros. < 1559980860 947040 :shachaf!~shachaf@unaffiliated/shachaf PRIVMSG #esoteric :I mean, you can imagine having an "array" type, struct Array { size_t size; T *ptr; };, representing a pointer to size elements. < 1559980881 720217 :shachaf!~shachaf@unaffiliated/shachaf PRIVMSG #esoteric :Then you could write memcpy(Arr dst, Arr src);, and it could e.g. fail at runtime if the sizes aren't equal. < 1559980916 290337 :shachaf!~shachaf@unaffiliated/shachaf PRIVMSG #esoteric :This is similar to "Ord compare(Comparable x, Comparable y);" failing at runtime when the types aren't equal. < 1559980932 849663 :ski!~ski@remote11.chalmers.se PRIVMSG #esoteric :yes .. and perhaps it can be useful to have some kind of more surface sugar for this notion of "bundled array" < 1559980949 615831 :ski!~ski@remote11.chalmers.se PRIVMSG #esoteric :ah, yes < 1559980956 309072 :zzo38!~zzo38@24-207-15-213.eastlink.ca PRIVMSG #esoteric :shachaf: I think what is done in Haskell is better, you can specify the types must be the same or else it will fail at compile time. < 1559981009 616118 :ski!~ski@remote11.chalmers.se PRIVMSG #esoteric :`forall x. (P x -> Q x)' entails `(exists x. P x) -> (exists x. Q x)' (and also entails `(forall x. P x) -> (forall x. Q x)'), but not vice versa < 1559981010 138158 :HackEso!~h@techne.zem.fi PRIVMSG #esoteric :​/srv/hackeso-code/multibot_cmds/lib/limits: line 5: exec: forall: not found < 1559981023 172828 :shachaf!~shachaf@unaffiliated/shachaf PRIVMSG #esoteric :The latter two are quite weak. < 1559981028 479264 :ski!~ski@remote11.chalmers.se PRIVMSG #esoteric :right < 1559981047 700545 :shachaf!~shachaf@unaffiliated/shachaf PRIVMSG #esoteric :Or possibly unreasonably strong. < 1559981066 170467 :shachaf!~shachaf@unaffiliated/shachaf PRIVMSG #esoteric :Before Java had generics, people would do things like that a lot. < 1559981078 815842 :ski!~ski@remote11.chalmers.se PRIVMSG #esoteric :the first is sortof the ADT way. the next one the OO way < 1559981082 693450 :shachaf!~shachaf@unaffiliated/shachaf PRIVMSG #esoteric :You could write "Object id(Object arg);", which is like "(exists x. x) -> (exists x. x)" < 1559981127 324579 :shachaf!~shachaf@unaffiliated/shachaf PRIVMSG #esoteric :Object is at the top of the type lattice. I don't think Java has something corresponding to the bottom of the type lattice, but if it did, you could write something equivalent to "(forall x. x) -> (forall x. x)" < 1559981143 96084 :ski!~ski@remote11.chalmers.se PRIVMSG #esoteric :(hm, i suppose that closure thing should be something something CoYoneda ?) < 1559981184 607963 :mniip!mniip@freenode/staff/mniip QUIT :Ping timeout: 604 seconds < 1559981198 112809 :shachaf!~shachaf@unaffiliated/shachaf PRIVMSG #esoteric :Which, the unboxed tuple/function thing? < 1559981198 241938 :ski!~ski@remote11.chalmers.se PRIVMSG #esoteric :zzo38 : *nod*. the trick is how to be able to describe the interfaces. preferably in a static, and formal, way < 1559981209 777509 :shachaf!~shachaf@unaffiliated/shachaf PRIVMSG #esoteric :I guess so. < 1559981218 544611 :ski!~ski@remote11.chalmers.se PRIVMSG #esoteric :yes (unboxedness is just a low-level thing, which you can ignore) < 1559981236 309161 :shachaf!~shachaf@unaffiliated/shachaf PRIVMSG #esoteric :Hmm, maybe not quite. < 1559981237 377342 :ski!~ski@remote11.chalmers.se PRIVMSG #esoteric :(well, not the "unboxed function", "function pointer" in C) < 1559981241 623452 :iconmaster!~iconmaste@cpe-67-249-136-214.twcny.res.rr.com QUIT :Read error: Connection reset by peer < 1559981255 649913 :shachaf!~shachaf@unaffiliated/shachaf PRIVMSG #esoteric :CoYoneda f a = exists x. (x, f x -> a) < 1559981272 131525 :shachaf!~shachaf@unaffiliated/shachaf PRIVMSG #esoteric :No. < 1559981277 380636 :shachaf!~shachaf@unaffiliated/shachaf PRIVMSG #esoteric :CoYoneda f a = exists x. (f x, x -> a) < 1559981303 551546 :mniip!mniip@freenode/staff/mniip JOIN :#esoteric < 1559981317 868100 :shachaf!~shachaf@unaffiliated/shachaf PRIVMSG #esoteric :I don't think that works. < 1559981372 20253 :ski!~ski@remote11.chalmers.se PRIVMSG #esoteric :i suppose we have `exists x. (P x /\ Q x)' entailing `(exists x. P x) /\ (exists x. Q x)' (but not vice versa), and also `forall x. (P x /\ Q x)' entailing `(forall x. P x) /\ (forall x. Q x)' (and vice versa), complementing the above distribution rule (namely for use with multiple parameters, or multiple results) < 1559981392 559831 :iconmaster!~iconmaste@cpe-67-249-136-214.twcny.res.rr.com JOIN :#esoteric < 1559981440 497551 :ski!~ski@remote11.chalmers.se PRIVMSG #esoteric :ACTION nods re `Object',&c. < 1559981502 273543 :ski!~ski@remote11.chalmers.se PRIVMSG #esoteric : a -> b < 1559981516 194031 :ski!~ski@remote11.chalmers.se PRIVMSG #esoteric : = exists x. x * (x -> a -> b) < 1559981520 49973 :ski!~ski@remote11.chalmers.se PRIVMSG #esoteric : = exists x. x * (x * a -> b) < 1559981551 635620 :ski!~ski@remote11.chalmers.se PRIVMSG #esoteric :however, possibly one can do something more exponentialy, here ? < 1559981574 883363 :ski!~ski@remote11.chalmers.se PRIVMSG #esoteric :hm, i suppose `x -> a -> b' really is `x >---> (a -> b)' anyway < 1559981619 45804 :zzo38!~zzo38@24-207-15-213.eastlink.ca PRIVMSG #esoteric :In my proposed system, although there are interfaces similar to object oriented programming, they are purely compile-time interfaces, and there aren't any actual objects anywhere. < 1559981633 195263 :ski!~ski@remote11.chalmers.se PRIVMSG #esoteric :(curried continuations seems strange, on some leve) < 1559981726 131927 :ski!~ski@remote11.chalmers.se PRIVMSG #esoteric :fwiw, `exists x. (P x -> Q x)' also entails `(forall x. P x) -> (exists x. Q x)'. and there was also some (classical) variations where `\/' was used (Phoa ?) < 1559981768 334127 :shachaf!~shachaf@unaffiliated/shachaf PRIVMSG #esoteric :I wonder how the linear logic connectives work here. < 1559981781 666866 :ski!~ski@remote11.chalmers.se PRIVMSG #esoteric :good question :) < 1559981787 583322 :shachaf!~shachaf@unaffiliated/shachaf PRIVMSG #esoteric :Though this is quite far from the question of how to represent memory layout. < 1559981791 906996 :ski!~ski@remote11.chalmers.se PRIVMSG #esoteric :yes < 1559981844 895994 :shachaf!~shachaf@unaffiliated/shachaf PRIVMSG #esoteric :I think if the types get too complicated, it's better to return to the C solution of letting people specify sizes manually. < 1559981851 635886 :ski!~ski@remote11.chalmers.se PRIVMSG #esoteric :zzo38 : mhm. i can't say i quite see what you mean there < 1559981864 48537 :S_Gautam!uid286066@gateway/web/irccloud.com/x-ulkysdxovscyiewp QUIT :Quit: Connection closed for inactivity < 1559981990 20695 :ski!~ski@remote11.chalmers.se PRIVMSG #esoteric :perhaps. at least if there's static checking that the sizes are correct ? < 1559982010 756981 :ski!~ski@remote11.chalmers.se PRIVMSG #esoteric : shachaf : "fitting every use case of that form into the type system may be a fool's errand" -- fitting in which sense ? < 1559982035 461114 :shachaf!~shachaf@unaffiliated/shachaf PRIVMSG #esoteric :I'm not sure whether the static checking in arbitrary cases (like an array of arrays that are all the same size) is worth the type system complexity. < 1559982069 250500 :shachaf!~shachaf@unaffiliated/shachaf PRIVMSG #esoteric :I think I meant being able to express the size constraints correctly in the type system in every case. < 1559982080 937619 :ski!~ski@remote11.chalmers.se PRIVMSG #esoteric :okay < 1559982103 621527 :shachaf!~shachaf@unaffiliated/shachaf PRIVMSG #esoteric :This is for a language meant to compete with C. < 1559982142 572431 :iconmaster!~iconmaste@cpe-67-249-136-214.twcny.res.rr.com QUIT :Read error: Connection reset by peer < 1559982152 766184 :ski!~ski@remote11.chalmers.se PRIVMSG #esoteric :it at least ought to have (blind) universals and existentials, quantifying tyvars < 1559982154 474576 :shachaf!~shachaf@unaffiliated/shachaf PRIVMSG #esoteric :But maybe it's less complex than I think, in which case it's probably a good idea. < 1559982164 239592 :shachaf!~shachaf@unaffiliated/shachaf PRIVMSG #esoteric :Blind? < 1559982168 74035 :ski!~ski@remote11.chalmers.se PRIVMSG #esoteric :ACTION . o O ( BitC,Cyclone ) < 1559982186 853897 :ski!~ski@remote11.chalmers.se PRIVMSG #esoteric :proof-erasure. no type-info passed at run-time < 1559982217 227054 :shachaf!~shachaf@unaffiliated/shachaf PRIVMSG #esoteric :Oh. Possibly. < 1559982233 862569 :shachaf!~shachaf@unaffiliated/shachaf PRIVMSG #esoteric :But most of the cases we've been discussing do pass a size at runtime. < 1559982234 550041 :ski!~ski@remote11.chalmers.se PRIVMSG #esoteric :(so `size_t' would be an explicit way of storing the size aspect of such run-time type information) < 1559982279 181058 :iconmaster!~iconmaste@cpe-67-249-136-214.twcny.res.rr.com JOIN :#esoteric < 1559982283 942095 :ski!~ski@remote11.chalmers.se PRIVMSG #esoteric :yes, but not implicitly, we had `template memcpy(T *dst,T *src,size_t size);', not `template memcpy(T *dst,T *src);' < 1559982293 395438 :aloril_!~aloril@mobile-access-5d6a6a-88.dhcp.inet.fi QUIT :Remote host closed the connection < 1559982296 229785 :ski!~ski@remote11.chalmers.se PRIVMSG #esoteric :`template' here is a universal, a `forall' < 1559982296 892704 :HackEso!~h@techne.zem.fi PRIVMSG #esoteric :​/srv/hackeso-code/multibot_cmds/lib/limits: line 5: exec: template': not found < 1559982356 214720 :ski!~ski@remote11.chalmers.se PRIVMSG #esoteric :(otoh, in `template struct Foo { ..T.. };', `template' is not a universal over types, but rather over declarations) < 1559982372 945481 :shachaf!~shachaf@unaffiliated/shachaf PRIVMSG #esoteric :I see. < 1559982446 311418 :ski!~ski@remote11.chalmers.se PRIVMSG #esoteric :(i suppose in the former case, we can also see it as being over a declaration. but we can translate to a `forall' over a type. but in the latter case, we get a type lambda, which is something else) < 1559982504 999355 :ski!~ski@remote11.chalmers.se PRIVMSG #esoteric :one could possibly also have non-blind quantifiers (e.g. for size of types), in such a language, if we wanted to sometimes avoid the verbosity of manually passing size < 1559982525 379522 :aloril!~aloril@mobile-access-5d6a6a-88.dhcp.inet.fi JOIN :#esoteric < 1559982566 39668 :ski!~ski@remote11.chalmers.se PRIVMSG #esoteric :or, you could have `size_t' parameters of your types, which you sometimes might want to quantify blindly over, and sometimes non-blindly < 1559982645 952847 :shachaf!~shachaf@unaffiliated/shachaf PRIVMSG #esoteric :Huh, I never thought of that. template on structs means something different from functions, sort of. < 1559982656 589722 :shachaf!~shachaf@unaffiliated/shachaf PRIVMSG #esoteric :(But if the struct has a method, it's back to meaning forall?) < 1559982690 807735 :shachaf!~shachaf@unaffiliated/shachaf PRIVMSG #esoteric :That's not really true, they're kind of the same thing. < 1559982709 335915 :ski!~ski@remote11.chalmers.se PRIVMSG #esoteric :`type ReadS a = String -> [(a,String)]' conceptually is `forall a. type ReadS a = String -> [(a,String)]'. which is `type ReadS = \a. String -> [(a,String)]' < 1559982709 856125 :HackEso!~h@techne.zem.fi PRIVMSG #esoteric :​/srv/hackeso-code/multibot_cmds/lib/limits: line 5: exec: type: not found < 1559982719 801106 :shachaf!~shachaf@unaffiliated/shachaf PRIVMSG #esoteric :Right. < 1559982763 728 :ski!~ski@remote11.chalmers.se PRIVMSG #esoteric :while `length :: [a] -> Int' conceptually is `forall a. (length :: [a] -> Int)', which corresponds to `length :: forall a. ([a] -> Int)' (or `length :: (exists a. [a]) -> Int') < 1559982788 536231 :ski!~ski@remote11.chalmers.se PRIVMSG #esoteric :and `forall a. tau[a]' is very different from `\a. tau[a]' < 1559982810 50189 :shachaf!~shachaf@unaffiliated/shachaf PRIVMSG #esoteric :Yes. < 1559982823 60758 :shachaf!~shachaf@unaffiliated/shachaf PRIVMSG #esoteric :(Though I heard Typed Racket somehow conflates them?) < 1559982824 216701 :ski!~ski@remote11.chalmers.se PRIVMSG #esoteric :(i once attempted to untangle such a conflation of those two things, of someone i chatted with) < 1559982854 306138 :ski!~ski@remote11.chalmers.se PRIVMSG #esoteric :(hm, i don't recall. i probably haven't checked Typed Racket in detail enough ?) < 1559982880 47706 :shachaf!~shachaf@unaffiliated/shachaf PRIVMSG #esoteric :I think that was the language. Someone mentioned it once and I thought it was very odd. < 1559982892 694671 :ski!~ski@remote11.chalmers.se PRIVMSG #esoteric :could well be the case < 1559982918 521556 :ski!~ski@remote11.chalmers.se PRIVMSG #esoteric :(iirc, the one i was talking to at the time may have been gio123 ?) < 1559982941 353230 :shachaf!~shachaf@unaffiliated/shachaf PRIVMSG #esoteric :Oh, maybe it conflated type application with forall, or something. < 1559983044 238818 :shachaf!~shachaf@unaffiliated/shachaf PRIVMSG #esoteric :Man, put me in the ski fan club. < 1559983053 5373 :shachaf!~shachaf@unaffiliated/shachaf PRIVMSG #esoteric :ski has all sorts of clear thinking about all sorts of things. < 1559983057 781759 :ski!~ski@remote11.chalmers.se PRIVMSG #esoteric :ACTION twitches < 1559983073 498116 :iconmaster!~iconmaste@cpe-67-249-136-214.twcny.res.rr.com QUIT :Read error: Connection reset by peer < 1559983120 166632 :iconmaster!~iconmaste@cpe-67-249-136-214.twcny.res.rr.com JOIN :#esoteric < 1559983156 812196 :ski!~ski@remote11.chalmers.se PRIVMSG #esoteric :anyway .. before this whole conversation started (just before i posted the blitter link), i composed the following (one) message : < 1559983166 170942 :ski!~ski@remote11.chalmers.se PRIVMSG #esoteric :one can of course think of `i * n + j' not in terms of nested/curried arrays, but in terms of structured indices (so "uncurried arrays") < 1559983209 707218 :ski!~ski@remote11.chalmers.se PRIVMSG #esoteric :(this was partly in relation to someone in #haskell asking about arrays, such as curried ones) < 1559983211 765560 :shachaf!~shachaf@unaffiliated/shachaf PRIVMSG #esoteric :Yes, I think that's probably better. < 1559983233 626701 :ski!~ski@remote11.chalmers.se PRIVMSG #esoteric :if you care about it, i could perhaps go on a little about what i had in mind here < 1559983265 395763 :shachaf!~shachaf@unaffiliated/shachaf PRIVMSG #esoteric :I'm happy to hear it. < 1559983306 683291 :ski!~ski@remote11.chalmers.se PRIVMSG #esoteric :well, consider finite types, considered as prefixes of the natural numbers (with the arithmetic/additive ordering) < 1559983325 537708 :shachaf!~shachaf@unaffiliated/shachaf PRIVMSG #esoteric :By the way, did you see my unrelated language proposal to make all functions take one argument, but not curried, and to have very convenient struct literals? I think it would be better than the usual system but I don't know of any language that does it. < 1559983368 284942 :ski!~ski@remote11.chalmers.se PRIVMSG #esoteric :types `Fin n' in Agda, conceptually having as values `0',..,`n-1' (so they're basically finite ordinals, or finite well-orderings (i think) corresponding to such "abstractly") < 1559983397 31398 :ski!~ski@remote11.chalmers.se PRIVMSG #esoteric :i did not see any such proposal. in which channel ? < 1559983434 100231 :shachaf!~shachaf@unaffiliated/shachaf PRIVMSG #esoteric :It might not have been in any channel you were in. Probably only half-heartedly in any channel at all. I could say more later. < 1559983484 796348 :ski!~ski@remote11.chalmers.se PRIVMSG #esoteric :(btw, i think Datalog is missing records, or at least named parameters. for large relations, you don't want to have to refer to attributes/parameters by position) < 1559983500 347730 :ski!~ski@remote11.chalmers.se PRIVMSG #esoteric :okay < 1559983510 940069 :ski!~ski@remote11.chalmers.se PRIVMSG #esoteric :(perhaps you could remind me later) < 1559983614 972563 :ski!~ski@remote11.chalmers.se PRIVMSG #esoteric :so. let's write typing judgements like `0 :< n',...,`n-1 :< n' for the "indices" in such an "finite (natural) index type" `n' < 1559983748 580783 :ski!~ski@remote11.chalmers.se PRIVMSG #esoteric :now, consider < 1559983754 701187 :ski!~ski@remote11.chalmers.se PRIVMSG #esoteric : 012345 < 1559983759 356592 :ski!~ski@remote11.chalmers.se PRIVMSG #esoteric : 0 ****** < 1559983764 12455 :ski!~ski@remote11.chalmers.se PRIVMSG #esoteric : 1 ****** < 1559983768 106661 :ski!~ski@remote11.chalmers.se PRIVMSG #esoteric : 2 ****** < 1559983771 908429 :ski!~ski@remote11.chalmers.se PRIVMSG #esoteric : 3 **+... < 1559983773 344959 :ski!~ski@remote11.chalmers.se PRIVMSG #esoteric : 4 ...... < 1559983864 510801 :ski!~ski@remote11.chalmers.se PRIVMSG #esoteric :and assume a row-major total (well-)ordering, so that we count first row as `0',`1',`2',`3',`4',`5', second as `6',`7',`8',`9',`10',`11', and so on, with last "cell" being numbered `5*6 - 1' < 1559983958 598612 :iconmaster!~iconmaste@cpe-67-249-136-214.twcny.res.rr.com QUIT :Read error: Connection reset by peer < 1559983959 471886 :ski!~ski@remote11.chalmers.se PRIVMSG #esoteric :(`5 * 6' being "five times six"/"six, five times", with `5' being the multiplier (the "counter") and `6' the multiplicand (the duplicated thing), so that we have `5 * 6' being `6 + 6 + 6 + 6 + 6', not `5 + 5 + 5 + 5 + 5 + 5') < 1559983979 390327 :ski!~ski@remote11.chalmers.se PRIVMSG #esoteric :now, we have an inference rule < 1559984019 238594 :iconmaster!~iconmaste@cpe-67-249-136-214.twcny.res.rr.com JOIN :#esoteric < 1559984046 678195 :ski!~ski@remote11.chalmers.se PRIVMSG #esoteric : i :< m j :< n < 1559984051 390540 :ski!~ski@remote11.chalmers.se PRIVMSG #esoteric : ------------------ * < 1559984058 992054 :ski!~ski@remote11.chalmers.se PRIVMSG #esoteric : i * n + j :< m * n < 1559984084 126986 :ski!~ski@remote11.chalmers.se PRIVMSG #esoteric :(so `i' counts rows, and `j' counts columns / elements into a row) < 1559984130 463713 :ski!~ski@remote11.chalmers.se PRIVMSG #esoteric :and the index marked `+' would correspond to selecting `i' as `3' and `j' as `2', getting `3 * 6 + 2' as the element of `5 * 6' < 1559984152 527443 :ski!~ski@remote11.chalmers.se PRIVMSG #esoteric :of course, we have something similar for sums < 1559984195 439272 :ski!~ski@remote11.chalmers.se PRIVMSG #esoteric : 01234 012345 < 1559984198 289146 :ski!~ski@remote11.chalmers.se PRIVMSG #esoteric : ***+. ...... < 1559984200 561170 :ski!~ski@remote11.chalmers.se PRIVMSG #esoteric :or < 1559984203 593419 :ski!~ski@remote11.chalmers.se PRIVMSG #esoteric : 01234 012345 < 1559984212 928695 :ski!~ski@remote11.chalmers.se PRIVMSG #esoteric : ***** *+.... < 1559984224 365866 :ski!~ski@remote11.chalmers.se PRIVMSG #esoteric :with inference rules < 1559984434 880306 :ski!~ski@remote11.chalmers.se PRIVMSG #esoteric : i :< m j :< n < 1559984444 682922 :ski!~ski@remote11.chalmers.se PRIVMSG #esoteric : ---------- +0 -------------- +1 < 1559984451 455479 :ski!~ski@remote11.chalmers.se PRIVMSG #esoteric : i :< m + n m + j :< m + n < 1559984497 361109 :ski!~ski@remote11.chalmers.se PRIVMSG #esoteric :so, in the first `+' example, we have `3 :< 5 + 6'; while in the second, we have `5 + 1 :< 5 + 6' < 1559984521 130224 :shachaf!~shachaf@unaffiliated/shachaf PRIVMSG #esoteric :Tangentially, have you seen this post? https://blog.nelhage.com/2015/08/indices-point-between-elements/ < 1559984556 890654 :ski!~ski@remote11.chalmers.se PRIVMSG #esoteric :you may think of `i * n + j',`i',`m + j' as data constructors, having `i',`j', respectively either `i' or `j' as parameters. the data constructor in the `i :< m + n' case is not notated explicitly < 1559984648 686213 :ski!~ski@remote11.chalmers.se PRIVMSG #esoteric :i haven't. ty for the suggestion < 1559984772 562944 :ski!~ski@remote11.chalmers.se PRIVMSG #esoteric :anyway, before taking the next step here, i want to introduce a dependent version of the product < 1559984871 946720 :iconmaster!~iconmaste@cpe-67-249-136-214.twcny.res.rr.com QUIT :Read error: Connection reset by peer < 1559984915 225546 :ski!~ski@remote11.chalmers.se PRIVMSG #esoteric :example < 1559984919 65037 :ski!~ski@remote11.chalmers.se PRIVMSG #esoteric : 012345 < 1559984921 421377 :iconmaster!~iconmaste@cpe-67-249-136-214.twcny.res.rr.com JOIN :#esoteric < 1559984926 34776 :ski!~ski@remote11.chalmers.se PRIVMSG #esoteric : 0 ****** < 1559984931 260259 :ski!~ski@remote11.chalmers.se PRIVMSG #esoteric : 1 ***** < 1559984934 948073 :ski!~ski@remote11.chalmers.se PRIVMSG #esoteric : 2 **** < 1559984938 237140 :ski!~ski@remote11.chalmers.se PRIVMSG #esoteric : 3 *+. < 1559984939 770786 :ski!~ski@remote11.chalmers.se PRIVMSG #esoteric : 4 .. < 1559985100 781512 :shachaf!~shachaf@unaffiliated/shachaf PRIVMSG #esoteric :This is a dependent sum, I guess? Like a sigma? < 1559985239 312089 :ski!~ski@remote11.chalmers.se PRIVMSG #esoteric :so, here i in general have a type `sum_{0 =< i < m} n_i', which i'll notate as `m (>: i) * n_i'. so in this particular case, this would be `5 (>: i) * (6 - i)', where `6 - i' is valid because `i :< 5', and `5-1 =< 6' (that is perhaps not so nice a condition. let's ignore issues such as this subtraction, for now) < 1559985254 356153 :ski!~ski@remote11.chalmers.se PRIVMSG #esoteric :yes. this is a "ragged index type" < 1559985336 397447 :shachaf!~shachaf@unaffiliated/shachaf PRIVMSG #esoteric :For an array of arrays where each subarray has a different size, but they're all packed in memory together. < 1559985431 175356 :ski!~ski@remote11.chalmers.se PRIVMSG #esoteric :yes, this could be used as index type for such an array (but i'm only really considering these "index types" themselves (cf. "parameter types" in "Grammatical Framework", Aarne Ranta), not, currently at least, how they could actually be used with arrays, though obviously that would hopefully be a useful application) < 1559985564 222423 :shachaf!~shachaf@unaffiliated/shachaf PRIVMSG #esoteric :Presumably you'd want efficient rank/select support as well for actual indexing use. < 1559985665 853184 :ski!~ski@remote11.chalmers.se PRIVMSG #esoteric :(in GF, parameter types are like algebraic types, but more restricted (can't be recursive), they are used as indices of "tables", which are some sort of record or (total) finite map construction) < 1559985681 463162 :ski!~ski@remote11.chalmers.se PRIVMSG #esoteric : i :< m j :< n_i (i :< m) < 1559985686 742619 :ski!~ski@remote11.chalmers.se PRIVMSG #esoteric : -------------------------------------- * < 1559985689 312240 :ski!~ski@remote11.chalmers.se PRIVMSG #esoteric : i (>: i') * n_i' + j :< m (>: i) * n_i < 1559985739 145176 :ski!~ski@remote11.chalmers.se PRIVMSG #esoteric :here we make use of that i' :< i and also i :< m and therefore i' :< m and thus n_i' makes sense < 1559985771 351537 :ski!~ski@remote11.chalmers.se PRIVMSG #esoteric :we count i initial full rows, and then we count j into the `i'th row < 1559985786 939560 :ski!~ski@remote11.chalmers.se PRIVMSG #esoteric :makes sense ? < 1559985787 764896 :iconmaster!~iconmaste@cpe-67-249-136-214.twcny.res.rr.com QUIT :Read error: Connection reset by peer < 1559985832 546274 :iconmaster!~iconmaste@cpe-67-249-136-214.twcny.res.rr.com JOIN :#esoteric < 1559985853 710797 :shachaf!~shachaf@unaffiliated/shachaf PRIVMSG #esoteric :Makes sense. < 1559985858 983692 :ski!~ski@remote11.chalmers.se PRIVMSG #esoteric :okay < 1559986171 36979 :shachaf!~shachaf@unaffiliated/shachaf PRIVMSG #esoteric :(Is there more?) < 1559986202 969125 :ski!~ski@remote11.chalmers.se PRIVMSG #esoteric :yes < 1559986314 939322 :ski!~ski@remote11.chalmers.se PRIVMSG #esoteric :hm, i was pondering a (partly) tangent, whether it fit in here or not. i think it may fit after the next part < 1559986612 651826 :ski!~ski@remote11.chalmers.se PRIVMSG #esoteric :ok, example < 1559986650 508574 :ski!~ski@remote11.chalmers.se PRIVMSG #esoteric : 0 01234 1 01234 2 01234 3 01234 4 01234 < 1559986654 699956 :ski!~ski@remote11.chalmers.se PRIVMSG #esoteric : 0 ***** ***** ***** ..... ..... < 1559986662 43776 :ski!~ski@remote11.chalmers.se PRIVMSG #esoteric : 1 ***** ***** ***** ..... ..... < 1559986667 686912 :ski!~ski@remote11.chalmers.se PRIVMSG #esoteric : 2 ***** ***** ***+. ..... ..... < 1559986673 163141 :ski!~ski@remote11.chalmers.se PRIVMSG #esoteric : 3 ***** ***** ..... ..... ..... < 1559986675 756217 :ski!~ski@remote11.chalmers.se PRIVMSG #esoteric : 4 ***** ***** ..... ..... ..... < 1559986688 444721 :iconmaster!~iconmaste@cpe-67-249-136-214.twcny.res.rr.com QUIT :Read error: Connection reset by peer < 1559986695 340202 :ski!~ski@remote11.chalmers.se PRIVMSG #esoteric :this is considering `5 ^ 3' < 1559986722 675360 :iconmaster!~iconmaste@cpe-67-249-136-214.twcny.res.rr.com JOIN :#esoteric < 1559987027 954399 :ski!~ski@remote11.chalmers.se PRIVMSG #esoteric :inference rule < 1559987039 173476 :ski!~ski@remote11.chalmers.se PRIVMSG #esoteric : j_i :< n (i :< m) < 1559987042 786029 :ski!~ski@remote11.chalmers.se PRIVMSG #esoteric : ----------------------------- ^ < 1559987045 169538 :ski!~ski@remote11.chalmers.se PRIVMSG #esoteric : m (>: i) * n^i * j_i :< n ^ m < 1559987149 935852 :ski!~ski@remote11.chalmers.se PRIVMSG #esoteric :think of `i' as counting down from `m-1' to `0'. in the above example, we have `3 (>: i) * 5^i * j_i :< 5 ^ 3', where `j_0 = 2',`j_1 = 2',`j_2 = 3' < 1559987215 59883 :ski!~ski@remote11.chalmers.se PRIVMSG #esoteric :er, sorry, that should be `j_2 = 2',`j_1 = 2',`j_0 = 3' < 1559987225 390672 :ski!~ski@remote11.chalmers.se PRIVMSG #esoteric :we could think of `3 (>: i) * 5^i * j_i' as `5^2 * 2 + 5^1 * 2 + 5^0 * 3' < 1559987280 73265 :ski!~ski@remote11.chalmers.se PRIVMSG #esoteric :it's also possible to formulate a dependent version, iow `n_i ^ (i :<) m', aka `product_{0 =< i < m} n_i', but i think i'll skip (rederiving) it, now < 1559987374 688677 :ski!~ski@remote11.chalmers.se PRIVMSG #esoteric :btw, one nice consequence of this is that if we regard `m * n' as meaning `m (>: _) * n', then if we define `C(n,k)' (where we might suppose `k :< n+2', so that the following subtraction is a natural number) as `(n - i) ^ (i :<) k' < 1559987511 153184 :ski!~ski@remote11.chalmers.se PRIVMSG #esoteric :then e.g. `C(3,6)' (where `6 :< 3+2' does *not* hold) would be `(3 - i) ^ (i :<) 6', which with an expansion could mean `(3 - 0) * (3 - 1) * (3 - 2) * (3 - 3) * (3 - 4) * (3 - 5)', so it looks like we're referring to negative integers here < 1559987589 314907 :iconmaster!~iconmaste@cpe-67-249-136-214.twcny.res.rr.com QUIT :Read error: Connection reset by peer < 1559987684 291462 :iconmaster!~iconmaste@cpe-67-249-136-214.twcny.res.rr.com JOIN :#esoteric < 1559987699 462593 :atslash!~atslash@static.231.107.9.5.clients.your-server.de JOIN :#esoteric < 1559987742 723520 :ski!~ski@remote11.chalmers.se PRIVMSG #esoteric :however, if we interpret this expression as `(3 - 0) (>: i_0) * (3 - 1) (>: i_1) * (3 - 2) (>: i_2) * (3 - 3) (>: i_3) * (3 - 4) (>: i_4) * (3 - 5) (>: i_5) * 1', we see that since `3 - 3' is `0', `i_3' can't exist, and so we can vacuously show the body `(3 - 4) (>: i_4) * (3 - 5) (>: i_5) * 1' (corresponding to `(3 - 4 - i') ^ (i' :<) 3') is well-formed < 1559987766 165301 :ski!~ski@remote11.chalmers.se PRIVMSG #esoteric :anyway. that's more or less an aside, which i thought was kind of neat < 1559987794 138760 :ski!~ski@remote11.chalmers.se PRIVMSG #esoteric :as you can imagine, this is more or less half-baked ideas, which i've been mulling over, occasionally, for some time < 1559987813 410330 :ski!~ski@remote11.chalmers.se PRIVMSG #esoteric :one could also consider other types like `n!' e.g. < 1559987822 17630 :ski!~ski@remote11.chalmers.se PRIVMSG #esoteric :or facoriadic number representation < 1559987849 842316 :ski!~ski@remote11.chalmers.se PRIVMSG #esoteric :yea, i only discussed finite index types above, but you can also, at least to some extent, consider countable ones < 1559987870 507466 :ski!~ski@remote11.chalmers.se PRIVMSG #esoteric :(and all these have an associated total order, or perhaps it's well-ordering) < 1559987948 798436 :ski!~ski@remote11.chalmers.se PRIVMSG #esoteric :(btw, you may note that there seems to be something "telescopish" going on in the `C(n,k)' example, although of a rather simple sort) < 1559987956 629050 :ski!~ski@remote11.chalmers.se PRIVMSG #esoteric :shachaf : i suppose that's more or less what i wanted to say about this < 1559988085 94764 :ski!~ski@remote11.chalmers.se PRIVMSG #esoteric :shachaf : ty again for the "Multi-dimensional array views for systems programmers" link (i have been pondering some things in a sortof related direction, i think, after hearing a talk about SA-C. but it seems that link you gave gives a much clearer picture of those things, so i'm grateful for that) < 1559988118 483409 :ski!~ski@remote11.chalmers.se PRIVMSG #esoteric :(i'll have to check out the "Indices point between elements" link as well, ty) < 1559988276 757489 :shachaf!~shachaf@unaffiliated/shachaf PRIVMSG #esoteric :ski: Hmm, I think I was expecting this to turn back into array indexing at one point, but in retrospect that was silly. < 1559988455 689400 :shachaf!~shachaf@unaffiliated/shachaf PRIVMSG #esoteric :I see how the 3D version works now. < 1559988543 973186 :ski!~ski@remote11.chalmers.se QUIT :Ping timeout: 264 seconds < 1559988592 545113 :Phantom_Hoover!~phantomho@unaffiliated/phantom-hoover JOIN :#esoteric > 1559989462 194996 PRIVMSG #esoteric :14[[07Home Row14]]4 M10 02https://esolangs.org/w/index.php?diff=63185&oldid=57019 5* 03TuxCrafting 5* (-1) 10off -> of < 1559990042 706234 :iconmaster!~iconmaste@cpe-67-249-136-214.twcny.res.rr.com QUIT :Quit: Leaving < 1559991205 516461 :AnotherTest!~turingcom@ptr-82l26zfnlgwh4k4ewtw.18120a2.ip6.access.telenet.be QUIT :Ping timeout: 252 seconds > 1559991322 236221 PRIVMSG #esoteric :14[[07Forth14]]4 10 02https://esolangs.org/w/index.php?diff=63186&oldid=43460 5* 03A 5* (+25) 10 < 1559991330 307005 :AnotherTest!~turingcom@d51a4b8e1.access.telenet.be JOIN :#esoteric < 1559991442 843787 :S_Gautam!uid286066@gateway/web/irccloud.com/x-unvgnkcjmhqzmfdm JOIN :#esoteric > 1559991480 81385 PRIVMSG #esoteric :14[[07Forth14]]4 10 02https://esolangs.org/w/index.php?diff=63187&oldid=63186 5* 03A 5* (+45) 10/* External resources */ < 1559992416 321202 :AnotherTest!~turingcom@d51a4b8e1.access.telenet.be QUIT :Ping timeout: 248 seconds < 1559994201 114867 :b_jonas!~x@catv-176-63-24-143.catv.broadband.hu JOIN :#esoteric < 1559994355 461222 :sebbu3!~sebbu@unaffiliated/sebbu NICK :sebbu > 1559996527 960309 PRIVMSG #esoteric :14[[07Adar14]]4 N10 02https://esolangs.org/w/index.php?oldid=63188 5* 03TuxCrafting 5* (+974) 10Created page with "Adar is an esoteric "programming language" created by [[User:TuxCrafting]]. = Structure = An Adar program is a list of triplets of integers. Each triplet represent..." > 1559996621 200871 PRIVMSG #esoteric :14[[07Language list14]]4 10 02https://esolangs.org/w/index.php?diff=63189&oldid=63169 5* 03TuxCrafting 5* (+11) 10 > 1559996650 527313 PRIVMSG #esoteric :14[[07User:TuxCrafting14]]4 10 02https://esolangs.org/w/index.php?diff=63190&oldid=63170 5* 03TuxCrafting 5* (+11) 10 > 1559997579 667022 PRIVMSG #esoteric :14[[07Adar14]]4 M10 02https://esolangs.org/w/index.php?diff=63191&oldid=63188 5* 03A 5* (+49) 10/* Infinite counter */ > 1559997625 865382 PRIVMSG #esoteric :14[[07Adar14]]4 M10 02https://esolangs.org/w/index.php?diff=63192&oldid=63191 5* 03A 5* (+24) 10/* Examples */ Links > 1559997647 94907 PRIVMSG #esoteric :14[[07Adar14]]4 M10 02https://esolangs.org/w/index.php?diff=63193&oldid=63192 5* 03A 5* (+0) 10/* Looping counter */ Oops > 1559997701 245351 PRIVMSG #esoteric :14[[07Adar14]]4 M10 02https://esolangs.org/w/index.php?diff=63194&oldid=63193 5* 03A 5* (+74) 10/* Computational class */ Some models < 1559997987 11947 :b_jonas!~x@catv-176-63-24-143.catv.broadband.hu PRIVMSG #esoteric :ais523: yes, rust doesn't allow copying dynamically sized values. there's a proposal to allow it, with limitations, accepted but currently unimplemented: https://github.com/rust-lang/rust/issues/48055 < 1559998164 52808 :b_jonas!~x@catv-176-63-24-143.catv.broadband.hu PRIVMSG #esoteric :ais523: basically this would allow you to create a dynamic sized array or trait object and assign it to a fresh local variable, implemented as an alloca, or pass such an object by value as a function argument, implemented as passing a pointer < 1559998181 497761 :b_jonas!~x@catv-176-63-24-143.catv.broadband.hu PRIVMSG #esoteric :as passing a fat pointer I mean > 1559998194 535944 PRIVMSG #esoteric :14[[07Adar14]]4 10 02https://esolangs.org/w/index.php?diff=63195&oldid=63194 5* 03TuxCrafting 5* (+11) 10wording < 1559998253 199673 :b_jonas!~x@catv-176-63-24-143.catv.broadband.hu PRIVMSG #esoteric :the first part would be somewhat similar to VLA local variables in C, though with very different syntax < 1559999409 572423 :FreeFull!~freefull@defocus/sausage-lover JOIN :#esoteric > 1559999431 680090 PRIVMSG #esoteric :14[[07Adar14]]4 10 02https://esolangs.org/w/index.php?diff=63196&oldid=63195 5* 03TuxCrafting 5* (+698) 10 > 1560001383 302441 PRIVMSG #esoteric :14[[07Adar14]]4 10 02https://esolangs.org/w/index.php?diff=63197&oldid=63196 5* 03TuxCrafting 5* (-241) 10simplify the language by removing the trigger value, since it is as powerful as just >= 0 < 1560001461 464407 :sprocklem!~sprocklem@unaffiliated/sprocklem QUIT :Ping timeout: 244 seconds < 1560001948 236993 :AnotherTest!~turingcom@d51A4B8E1.access.telenet.be JOIN :#esoteric < 1560003178 245781 :AnotherTest!~turingcom@d51A4B8E1.access.telenet.be QUIT :Ping timeout: 245 seconds < 1560003224 600983 :Lord_of_Life!~Lord@unaffiliated/lord-of-life/x-0885362 QUIT :Ping timeout: 272 seconds < 1560003296 392352 :Lord_of_Life!~Lord@unaffiliated/lord-of-life/x-0885362 JOIN :#esoteric < 1560003513 930405 :AnotherTest!~turingcom@d51A4B8E1.access.telenet.be JOIN :#esoteric < 1560003948 70681 :xkapastel!uid17782@gateway/web/irccloud.com/x-rxtubzqrbutbfpuk JOIN :#esoteric > 1560004023 398767 PRIVMSG #esoteric :14[[07Adar14]]4 M10 02https://esolangs.org/w/index.php?diff=63198&oldid=63197 5* 03A 5* (+242) 10/* Computational class */ Sorry, the internet bar closed, so I was inactive for a while. > 1560004051 909865 PRIVMSG #esoteric :14[[07Adar14]]4 10 02https://esolangs.org/w/index.php?diff=63199&oldid=63198 5* 03A 5* (-242) 10/* Simulating inequality to 0 */ > 1560004091 409950 PRIVMSG #esoteric :14[[07Adar14]]4 M10 02https://esolangs.org/w/index.php?diff=63200&oldid=63199 5* 03A 5* (+4) 10/* Adar-= */ < 1560004091 899212 :AnotherTest!~turingcom@d51A4B8E1.access.telenet.be QUIT :Ping timeout: 258 seconds > 1560004362 312851 PRIVMSG #esoteric :14[[07Adar14]]4 10 02https://esolangs.org/w/index.php?diff=63201&oldid=63200 5* 03A 5* (-2) 10Better wording > 1560004911 817105 PRIVMSG #esoteric :14[[07Adar14]]4 10 02https://esolangs.org/w/index.php?diff=63202&oldid=63201 5* 03A 5* (+12) 10 > 1560005580 208221 PRIVMSG #esoteric :14[[07Talk:Adar14]]4 N10 02https://esolangs.org/w/index.php?oldid=63203 5* 03A 5* (+185) 10Created page with "== Adar Interpreter == Can you describe how the Adar interpreter is supposed to work? I can't get it to work. --~~~~" > 1560005700 521890 PRIVMSG #esoteric :14[[07Adar14]]4 M10 02https://esolangs.org/w/index.php?diff=63204&oldid=63202 5* 03A 5* (+30) 10/* Infinite loop */ > 1560005792 263395 PRIVMSG #esoteric :14[[07Talk:Adar14]]4 M10 02https://esolangs.org/w/index.php?diff=63205&oldid=63203 5* 03A 5* (+257) 10 > 1560005840 151293 PRIVMSG #esoteric :14[[07Adar14]]4 M10 02https://esolangs.org/w/index.php?diff=63206&oldid=63204 5* 03A 5* (+45) 10/* Computational class */ < 1560006033 509206 :zzo38!~zzo38@24-207-15-213.eastlink.ca QUIT :Ping timeout: 252 seconds > 1560006143 56267 PRIVMSG #esoteric :14[[07Talk:Adar14]]4 M10 02https://esolangs.org/w/index.php?diff=63207&oldid=63205 5* 03A 5* (+373) 10 > 1560006146 358210 PRIVMSG #esoteric :14[[07Adar14]]4 M10 02https://esolangs.org/w/index.php?diff=63208&oldid=63206 5* 03TuxCrafting 5* (-2) 10no idea where you got that word, but "pair" is correct > 1560006167 591123 PRIVMSG #esoteric :14[[07Talk:Adar14]]4 M10 02https://esolangs.org/w/index.php?diff=63209&oldid=63207 5* 03A 5* (+62) 10/* JPDEC + INC is computationally equivalent to JZDEC */ > 1560006191 710020 PRIVMSG #esoteric :14[[07Talk:Adar14]]4 M10 02https://esolangs.org/w/index.php?diff=63210&oldid=63209 5* 03A 5* (+73) 10/* JPDEC + INC is computationally equivalent to JZDEC */ > 1560006236 278141 PRIVMSG #esoteric :14[[07Talk:Adar14]]4 M10 02https://esolangs.org/w/index.php?diff=63211&oldid=63210 5* 03A 5* (-13) 10/* Adar Interpreter */ > 1560006276 920448 PRIVMSG #esoteric :14[[07Talk:Adar14]]4 M10 02https://esolangs.org/w/index.php?diff=63212&oldid=63211 5* 03A 5* (+1) 10grammar is hard > 1560006338 548372 PRIVMSG #esoteric :14[[07Talk:Adar14]]4 10 02https://esolangs.org/w/index.php?diff=63213&oldid=63212 5* 03A 5* (+102) 10/* JPDEC + INC is computationally equivalent to JZDEC */ > 1560006377 984200 PRIVMSG #esoteric :14[[07Talk:Adar14]]4 M10 02https://esolangs.org/w/index.php?diff=63214&oldid=63213 5* 03A 5* (+64) 10/* Adar Interpreter */ < 1560006379 309908 :zzo38!~zzo38@24-207-15-213.eastlink.ca JOIN :#esoteric > 1560006413 844452 PRIVMSG #esoteric :14[[07Talk:Adar14]]4 10 02https://esolangs.org/w/index.php?diff=63215&oldid=63214 5* 03TuxCrafting 5* (+277) 10 > 1560006490 30913 PRIVMSG #esoteric :14[[07Talk:Adar14]]4 M10 02https://esolangs.org/w/index.php?diff=63216&oldid=63215 5* 03A 5* (-111) 10/* "Turing completeness proof" - invalid due to current update */ > 1560006532 284034 PRIVMSG #esoteric :14[[07Talk:Adar14]]4 M10 02https://esolangs.org/w/index.php?diff=63217&oldid=63216 5* 03TuxCrafting 5* (-275) 10stop blanking your comments and breaking threads ffs > 1560006564 620100 PRIVMSG #esoteric :14[[07Adar14]]4 M10 02https://esolangs.org/w/index.php?diff=63218&oldid=63208 5* 03A 5* (-45) 10/* Computational class */ > 1560006703 798655 PRIVMSG #esoteric :14[[07Talk:Adar14]]4 10 02https://esolangs.org/w/index.php?diff=63219&oldid=63217 5* 03TuxCrafting 5* (+394) 10 > 1560006844 958918 PRIVMSG #esoteric :14[[07Adar14]]4 M10 02https://esolangs.org/w/index.php?diff=63220&oldid=63218 5* 03A 5* (+241) 10/* Structure */ It should be noted here > 1560007036 891425 PRIVMSG #esoteric :14[[07Talk:Adar14]]4 M10 02https://esolangs.org/w/index.php?diff=63221&oldid=63219 5* 03A 5* (+163) 10/* Adar Interpreter */ > 1560007128 847986 PRIVMSG #esoteric :14[[07Talk:Adar14]]4 10 02https://esolangs.org/w/index.php?diff=63222&oldid=63221 5* 03TuxCrafting 5* (+314) 10 > 1560007163 526894 PRIVMSG #esoteric :14[[07Talk:Adar14]]4 M10 02https://esolangs.org/w/index.php?diff=63223&oldid=63222 5* 03A 5* (+525) 10 > 1560007254 384053 PRIVMSG #esoteric :14[[07Talk:Adar14]]4 M10 02https://esolangs.org/w/index.php?diff=63224&oldid=63223 5* 03A 5* (+88) 10End this thread < 1560008331 66438 :AnotherTest!~turingcom@ptr-82l26zfnlgwh4k4ewtw.18120a2.ip6.access.telenet.be JOIN :#esoteric < 1560008695 46315 :AnotherTest!~turingcom@ptr-82l26zfnlgwh4k4ewtw.18120a2.ip6.access.telenet.be QUIT :Ping timeout: 258 seconds < 1560008908 636913 :int-e!~noone@int-e.eu PRIVMSG #esoteric :. o O ( One has to admire writers who manage to wrap up a trilogy in just three books. ) < 1560009811 65307 :AnotherTest!~turingcom@ptr-82l26zfnlgwh4k4ewtw.18120a2.ip6.access.telenet.be JOIN :#esoteric < 1560010190 43283 :AnotherTest!~turingcom@ptr-82l26zfnlgwh4k4ewtw.18120a2.ip6.access.telenet.be QUIT :Ping timeout: 258 seconds > 1560010268 977230 PRIVMSG #esoteric :14[[07Adar14]]4 10 02https://esolangs.org/w/index.php?diff=63225&oldid=63220 5* 03TuxCrafting 5* (+195) 10add truth machine < 1560010633 939243 :AnotherTest!~turingcom@d51a4b8e1.access.telenet.be JOIN :#esoteric < 1560010703 284730 :zzo38!~zzo38@24-207-15-213.eastlink.ca PRIVMSG #esoteric :Now that JavaScript has bigint I would also want popcount, for example if you use a bigint to store which slots are in use, to find the first unused slot by popcount(x&~(x+1n)). It can be done with emulation, but that would make it slow; a built-in popcount function would improve the speed. < 1560011750 840744 :AnotherTest!~turingcom@d51a4b8e1.access.telenet.be QUIT :Ping timeout: 258 seconds < 1560014168 312374 :zzo38!~zzo38@24-207-15-213.eastlink.ca PRIVMSG #esoteric :Has anyone won a game of Magic: the Gathering by taking advantage of rule 718.3? < 1560014486 95616 :b_jonas!~x@catv-176-63-24-143.catv.broadband.hu PRIVMSG #esoteric :zzo38: dunno, you probably need Karn for that < 1560014661 984021 :zzo38!~zzo38@24-207-15-213.eastlink.ca PRIVMSG #esoteric :b_jonas: Yes, I would think so; that is the only way to possibly invoke rule 718 anyways, as far as I can tell (rule 718.1 says so). < 1560014930 931571 :b_jonas!~x@catv-176-63-24-143.catv.broadband.hu PRIVMSG #esoteric :it's not the only way technically < 1560014936 746274 :b_jonas!~x@catv-176-63-24-143.catv.broadband.hu PRIVMSG #esoteric :there's Shahrazad too I think < 1560014962 455240 :b_jonas!~x@catv-176-63-24-143.catv.broadband.hu PRIVMSG #esoteric :and maybe also drafting lots of Conspiarcy cards < 1560014995 635925 :b_jonas!~x@catv-176-63-24-143.catv.broadband.hu PRIVMSG #esoteric :I mean Advantageous Proclamation < 1560015024 702116 :b_jonas!~x@catv-176-63-24-143.catv.broadband.hu PRIVMSG #esoteric :hmm, would that work? you'd need seven < 1560015032 447787 :b_jonas!~x@catv-176-63-24-143.catv.broadband.hu PRIVMSG #esoteric :should be possible in theory < 1560015066 416682 :zzo38!~zzo38@24-207-15-213.eastlink.ca PRIVMSG #esoteric :Yes, Shahrazad can do that too, although the rule number is different in that case (719.3 rather than 718.3, but those rules are the same). < 1560015067 294724 :b_jonas!~x@catv-176-63-24-143.catv.broadband.hu PRIVMSG #esoteric :I think Shahrazad is why that rule was originally there, even before Karn < 1560015086 960677 :zzo38!~zzo38@24-207-15-213.eastlink.ca PRIVMSG #esoteric :Yes, probably < 1560015096 383845 :b_jonas!~x@catv-176-63-24-143.catv.broadband.hu PRIVMSG #esoteric :but of course Shahrazad is banned now, and I for one am glad it is < 1560015172 597677 :b_jonas!~x@catv-176-63-24-143.catv.broadband.hu PRIVMSG #esoteric :I'm looking at the new cards from Modern Horizons that are revealed since I last saw the list. https://scryfall.com/card/mh1/117/alpine-guide is an awesome red spin on those blue scouts that search for a land. < 1560015290 650045 :b_jonas!~x@catv-176-63-24-143.catv.broadband.hu PRIVMSG #esoteric :there are also some nice reprints < 1560015308 562495 :b_jonas!~x@catv-176-63-24-143.catv.broadband.hu PRIVMSG #esoteric :and of course I like Changeling Outcast simply because it's a cheap changeling < 1560015317 256051 :b_jonas!~x@catv-176-63-24-143.catv.broadband.hu PRIVMSG #esoteric :black too, very useful < 1560015355 784981 :b_jonas!~x@catv-176-63-24-143.catv.broadband.hu PRIVMSG #esoteric :I'm not through the whole list yet < 1560015395 211173 :b_jonas!~x@catv-176-63-24-143.catv.broadband.hu PRIVMSG #esoteric :reprinting the better cycling lands can't hurt < 1560015402 274590 :b_jonas!~x@catv-176-63-24-143.catv.broadband.hu PRIVMSG #esoteric :though I think I prefer the old art < 1560015471 955426 :atslash!~atslash@static.231.107.9.5.clients.your-server.de QUIT :Read error: Connection reset by peer < 1560015509 604984 :atslash!~atslash@static.231.107.9.5.clients.your-server.de JOIN :#esoteric < 1560016177 332202 :b_jonas!~x@catv-176-63-24-143.catv.broadband.hu PRIVMSG #esoteric :I'd seen Defile last week already. That will be a nice addition to black's arsenal of cheap D removal spells, such as Disfigure, Deathmark, Doom Blade < 1560016445 916932 :zzo38!~zzo38@24-207-15-213.eastlink.ca PRIVMSG #esoteric :In GURPS game I play my character is Ziveruskex and his friend's name is Strixan, I thought, to make up a Magic: the Gathering cards of it? I also thought of a idea of a keyword ability called "disable". A creature that is tapped, detained, or attacking, cannot use the disable ability; otherwise it is declared when declaring attacking and then the opponent's creature is tapped and detained. < 1560016493 162966 :zzo38!~zzo38@24-207-15-213.eastlink.ca PRIVMSG #esoteric :The opponent's creature is unaffected if it is protected or if opponent pays {2}. I thought maybe some other keyword abilities other than protection could also be counted to determine whether or not it could block it, perhaps also flying, reach, and shadow. < 1560016543 714123 :b_jonas!~x@catv-176-63-24-143.catv.broadband.hu PRIVMSG #esoteric :huh? which creature of the opponent is tapped and detained? I don't understand this < 1560016586 880880 :zzo38!~zzo38@24-207-15-213.eastlink.ca PRIVMSG #esoteric :The one you are trying to disable. It must be a creature controlled by the defending player (which is always an opponent, although if some variant permits a defending player other than an opponent, you can disable their creatures too) < 1560016868 60995 :b_jonas!~x@catv-176-63-24-143.catv.broadband.hu PRIVMSG #esoteric :and I think I already said that reprinting Snow-Covered Plains is amazing < 1560016897 486813 :b_jonas!~x@catv-176-63-24-143.catv.broadband.hu PRIVMSG #esoteric :and Snow-Covered Swamp < 1560017584 261158 :zzo38!~zzo38@24-207-15-213.eastlink.ca PRIVMSG #esoteric :I am not so sure what the cost to defend against disable should be defined as (or if it should be a parameter), and if other keyword abilities should also be checked, and if so which ones (I think perhaps protection, flying, reach, and shadow; at least protection, I think) < 1560018080 314518 :zzo38!~zzo38@24-207-15-213.eastlink.ca QUIT :Ping timeout: 248 seconds < 1560018155 995312 :b_jonas!~x@catv-176-63-24-143.catv.broadband.hu PRIVMSG #esoteric :Ephemerate => instead of these fancy variants with flashback or rebound, can we just get a Cloudshift with hybrid {U/W} mana cost? It wouldn't be overpowered, but would be fun. < 1560018926 230945 :nfd9001!~nfd9001@2601:602:8500:2443:2849:a199:5061:7577 JOIN :#esoteric < 1560019046 12085 :zzo38!~zzo38@24-207-15-213.eastlink.ca JOIN :#esoteric < 1560019292 177521 :zzo38!~zzo38@24-207-15-213.eastlink.ca QUIT :Disconnected by services < 1560019296 402696 :zzo38!~zzo38@24-207-15-213.eastlink.ca JOIN :#esoteric < 1560019481 417047 :zzo38!~zzo38@24-207-15-213.eastlink.ca PRIVMSG #esoteric :Why did the cursor blinking stop in all windows for a few seconds? Other than that it worked; only the cursor blinking stopped. But now the cursor blinking works again. < 1560019817 711693 :zzo38!~zzo38@24-207-15-213.eastlink.ca PRIVMSG #esoteric :(The clock also continued to count the seconds even while the cursor blinking was stopped.) < 1560019928 65863 :AnotherTest!~turingcom@ptr-82l26zfnlgwh4k4ewtw.18120a2.ip6.access.telenet.be JOIN :#esoteric < 1560019944 678023 :b_jonas!~x@catv-176-63-24-143.catv.broadband.hu PRIVMSG #esoteric :https://scryfall.com/card/mh1/170/llanowar-tribe => now this one is cool < 1560019987 495363 :b_jonas!~x@catv-176-63-24-143.catv.broadband.hu PRIVMSG #esoteric :I'm not saying it obsoletes Joraga Treespeaker or Elvish Archdruid, but it goes to that slot < 1560020299 696465 :xkapastel!uid17782@gateway/web/irccloud.com/x-rxtubzqrbutbfpuk QUIT :Quit: Connection closed for inactivity < 1560020540 72606 :AnotherTest!~turingcom@ptr-82l26zfnlgwh4k4ewtw.18120a2.ip6.access.telenet.be QUIT :Ping timeout: 258 seconds < 1560020645 61208 :b_jonas!~x@catv-176-63-24-143.catv.broadband.hu PRIVMSG #esoteric :Putrid Goblin => oh nice, another good small black creature from the set < 1560021093 764439 :b_jonas!~x@catv-176-63-24-143.catv.broadband.hu PRIVMSG #esoteric :hmm, a modified Humble, this will be nice < 1560021102 814959 :b_jonas!~x@catv-176-63-24-143.catv.broadband.hu PRIVMSG #esoteric :https://scryfall.com/card/mh1/23/reprobation I mean < 1560021698 336318 :b_jonas!~x@catv-176-63-24-143.catv.broadband.hu PRIVMSG #esoteric :https://scryfall.com/card/mh1/181/springbloom-druid => this one is nice too, it might work in my elf deck < 1560022254 589678 :b_jonas!~x@catv-176-63-24-143.catv.broadband.hu PRIVMSG #esoteric :https://scryfall.com/card/mh1/235/universal-automaton => oh wow, that's even better! a changeling artifact < 1560022279 893276 :b_jonas!~x@catv-176-63-24-143.catv.broadband.hu PRIVMSG #esoteric :also has a relevant name for #esoteric < 1560023224 506852 :AnotherTest!~turingcom@ptr-82l26zfnlgwh4k4ewtw.18120a2.ip6.access.telenet.be JOIN :#esoteric < 1560023627 956259 :b_jonas!~x@catv-176-63-24-143.catv.broadband.hu PRIVMSG #esoteric :and yes, the Spore Frog reprint is good too < 1560024152 693246 :atslash!~atslash@static.231.107.9.5.clients.your-server.de QUIT :Quit: This computer has gone to sleep < 1560024931 504511 :AnotherTest!~turingcom@ptr-82l26zfnlgwh4k4ewtw.18120a2.ip6.access.telenet.be QUIT :Ping timeout: 252 seconds < 1560025003 61806 :S_Gautam!uid286066@gateway/web/irccloud.com/x-unvgnkcjmhqzmfdm QUIT :Quit: Connection closed for inactivity < 1560027113 128287 :xkapastel!uid17782@gateway/web/irccloud.com/x-jjetfmwnhlloomtr JOIN :#esoteric < 1560028035 417958 :zzo38!~zzo38@24-207-15-213.eastlink.ca PRIVMSG #esoteric :Maybe a card could be like: Ziveruskex {?} Legendary Creature - ? (1/3) ;; Flying ;; Disable ;; Banding ;; Partner with Strixan ;; {1U}, {T}: Scry 2. I haven't put the mana cost and subtype(s), and some other details may be altered too. I wanted to try to do so that the color identity of Ziveruskex and Strixan together include all five colors. < 1560028055 173400 :int-e!~noone@int-e.eu PART :#esoteric < 1560028171 553235 :zzo38!~zzo38@24-207-15-213.eastlink.ca PRIVMSG #esoteric :And then maybe: Strixan {?} Legendary Creature - ? (2/3) ;; Flying ;; Disable ;; Flanking ;; Partner with Ziveruskex and then I don't know? < 1560028203 989850 :oerjan!oerjan@sprocket.nvg.ntnu.no JOIN :#esoteric < 1560028205 580625 :b_jonas!~x@catv-176-63-24-143.catv.broadband.hu PRIVMSG #esoteric :what? the reminder text for those three abilities on Ziv would be like three cards long < 1560028215 425363 :b_jonas!~x@catv-176-63-24-143.catv.broadband.hu PRIVMSG #esoteric :and isn't he a Homunculus for the creature type? < 1560028249 147323 :b_jonas!~x@catv-176-63-24-143.catv.broadband.hu PRIVMSG #esoteric :no wait, not a homunculus < 1560028251 794748 :b_jonas!~x@catv-176-63-24-143.catv.broadband.hu PRIVMSG #esoteric :a squidfolk < 1560028271 672671 :zzo38!~zzo38@24-207-15-213.eastlink.ca PRIVMSG #esoteric :Homunculus? I don't think so? But, I like to omit reminder text anyways < 1560028370 213844 :b_jonas!~x@catv-176-63-24-143.catv.broadband.hu PRIVMSG #esoteric :birdfolk and catfolk are creature typed bird and cat in M:tG, but treefolk aren't typed forest < 1560028382 602507 :zzo38!~zzo38@24-207-15-213.eastlink.ca PRIVMSG #esoteric :Squid folk I don't think so either, not for Ziv < 1560028383 284808 :b_jonas!~x@catv-176-63-24-143.catv.broadband.hu PRIVMSG #esoteric :rhinofolk are typed rhino too I think < 1560028395 83842 :zzo38!~zzo38@24-207-15-213.eastlink.ca PRIVMSG #esoteric :Also, "Forest" is a subtype for lands, not for creatures < 1560028402 34778 :b_jonas!~x@catv-176-63-24-143.catv.broadband.hu PRIVMSG #esoteric :yeah, that's why they aren't < 1560028413 253918 :b_jonas!~x@catv-176-63-24-143.catv.broadband.hu PRIVMSG #esoteric :for creatures you have Treefolk and Dryad < 1560028423 572473 :b_jonas!~x@catv-176-63-24-143.catv.broadband.hu PRIVMSG #esoteric :oh, and Planmt < 1560028425 294991 :b_jonas!~x@catv-176-63-24-143.catv.broadband.hu PRIVMSG #esoteric :Plant < 1560028573 357857 :adu!~ajr@pool-173-73-86-145.washdc.fios.verizon.net JOIN :#esoteric < 1560028741 737992 :b_jonas!~x@catv-176-63-24-143.catv.broadband.hu PRIVMSG #esoteric :and then there's the Rat Ninja < 1560028787 301447 :oerjan!oerjan@sprocket.nvg.ntnu.no PRIVMSG #esoteric :@messages-loud < 1560028787 608068 :lambdabot!~lambdabot@haskell/bot/lambdabot PRIVMSG #esoteric :ais523 said 6d 6h 22m 9s ago: counterexamples to the Goldbach conjecture aren't prime anyway (although they can't end in 3, so the example was dubious in another way) < 1560028791 554300 :oerjan!oerjan@sprocket.nvg.ntnu.no PRIVMSG #esoteric :doh < 1560029015 416845 :zzo38!~zzo38@24-207-15-213.eastlink.ca PRIVMSG #esoteric :Yes, there is Rat Ninja, and I don't know what other ninjas (I once invented a Wall Ninja card, but of course that is not official) < 1560029130 272031 :zzo38!~zzo38@24-207-15-213.eastlink.ca PRIVMSG #esoteric :(For the cards I just wrote, the closest I can think seems to be Bird, although it seem a strange kind of birds even for Magic: the Gathering cards. Of course, it isn't official cards anyways, so maybe it is not matter. New subtypes can also be invented if needed, but maybe it isn't needed.) < 1560029211 778779 :zzo38!~zzo38@24-207-15-213.eastlink.ca PRIVMSG #esoteric :(And I don't know if there should be two subtypes; some cards have two. Some even have more than two, but that would be excessive I think.) < 1560029832 758191 :b_jonas!~x@catv-176-63-24-143.catv.broadband.hu PRIVMSG #esoteric :why would they be strange kinds of birds? < 1560029851 50699 :b_jonas!~x@catv-176-63-24-143.catv.broadband.hu PRIVMSG #esoteric :kand yes, they could have two subtypes, eg. Bird Wizard < 1560029947 46498 :zzo38!~zzo38@24-207-15-213.eastlink.ca PRIVMSG #esoteric :Ziveruskex and Strixan have feathers and wings and sharp beak, but also five eyes, antennas, scales, etc < 1560029971 171532 :oerjan!oerjan@sprocket.nvg.ntnu.no PRIVMSG #esoteric : oerjan: Wasn't that the joke? I'm very confusil. <-- i agreel < 1560030013 584894 :shachaf!~shachaf@unaffiliated/shachaf PRIVMSG #esoteric :oerjan: Maybe the joke's on me for having expectations. < 1560030089 134962 :shachaf!~shachaf@unaffiliated/shachaf PRIVMSG #esoteric :whoa, int-e scrapped < 1560030291 363801 :b_jonas!~x@catv-176-63-24-143.catv.broadband.hu PRIVMSG #esoteric :zzo38: that might still make them count as a Bird, as opposed to some more odd creature type. or if they're of a species of which there exist more in the setting, then it's possible that the species would get its own creature type. < 1560030305 342655 :b_jonas!~x@catv-176-63-24-143.catv.broadband.hu PRIVMSG #esoteric :they're not Specters, right? < 1560030340 142343 :zzo38!~zzo38@24-207-15-213.eastlink.ca PRIVMSG #esoteric :That is correct. Perhaps Bird is best. < 1560030395 756105 :b_jonas!~x@catv-176-63-24-143.catv.broadband.hu PRIVMSG #esoteric :are they also Wizard? < 1560030404 537356 :b_jonas!~x@catv-176-63-24-143.catv.broadband.hu PRIVMSG #esoteric :or some other occupation < 1560030460 445555 :zzo38!~zzo38@24-207-15-213.eastlink.ca PRIVMSG #esoteric :Ziveruskex is a mathematician and scholar, but Strixan is fighting with a whip and a crossbow. (Still, Ziv knows a few magics, but not so much as real wizards do) < 1560030552 924198 :int-e!~noone@int-e.eu JOIN :#esoteric < 1560030959 515099 :b_jonas!~x@catv-176-63-24-143.catv.broadband.hu PRIVMSG #esoteric :hmm. maybe Wizard or Artificer or Advisor or something in the first case, and Warrior or Archer in the second, unless Rogue or Soldier or Scout or something matches them < 1560031070 945094 :b_jonas!~x@catv-176-63-24-143.catv.broadband.hu PRIVMSG #esoteric :they're not Barbarian either I think < 1560031186 251604 :zzo38!~zzo38@24-207-15-213.eastlink.ca PRIVMSG #esoteric :I don't know why they don't have a Scholar subtype, it seem to me maybe even some existing cards should have had, maybe. < 1560031244 737716 :oerjan!oerjan@sprocket.nvg.ntnu.no PRIVMSG #esoteric :ACTION resolves to skip the rest of the logs other than his pings < 1560031245 722330 :b_jonas!~x@catv-176-63-24-143.catv.broadband.hu PRIVMSG #esoteric :it's a game where you recruit creatures fighting for you. scholars don't directly show off, except as people who direct the experiments to create the simic mutant creatures and such, in which case your creature is the simic mutant < 1560031363 377773 :b_jonas!~x@catv-176-63-24-143.catv.broadband.hu PRIVMSG #esoteric :the few scholars that appear are Wizards and Artificers < 1560031510 306523 :b_jonas!~x@catv-176-63-24-143.catv.broadband.hu PRIVMSG #esoteric :s/show off/show up/ < 1560031804 228016 :b_jonas!~x@catv-176-63-24-143.catv.broadband.hu PRIVMSG #esoteric :look at me, I can turn invisible < 1560031808 73183 :b_jonas!~x@catv-176-63-24-143.catv.broadband.hu PRIVMSG #esoteric :oerjan: now you see me, < 1560031809 627164 :b_jonas!~x@catv-176-63-24-143.catv.broadband.hu PRIVMSG #esoteric :now you don't < 1560031854 487994 :oerjan!oerjan@sprocket.nvg.ntnu.no PRIVMSG #esoteric :OKAY < 1560032674 818070 :oerjan!oerjan@sprocket.nvg.ntnu.no QUIT :Quit: Nite < 1560033154 561121 :budonyc!~budonyc@50.208.153.125 JOIN :#esoteric < 1560034183 702242 :tromp!~tromp@ip-213-127-56-81.ip.prioritytelecom.net QUIT :Remote host closed the connection < 1560034635 37142 :zzo38!~zzo38@24-207-15-213.eastlink.ca PRIVMSG #esoteric :Recruit creatures fighting for you is not the only part of the game, though; it is much more than just that. < 1560035218 40046 :myname!~myname@ks300980.kimsufi.com PRIVMSG #esoteric :what < 1560035848 339165 :tromp!~tromp@ip-213-127-56-81.ip.prioritytelecom.net JOIN :#esoteric < 1560036128 317919 :tromp!~tromp@ip-213-127-56-81.ip.prioritytelecom.net QUIT :Ping timeout: 248 seconds < 1560036359 432156 :Phantom_Hoover!~phantomho@unaffiliated/phantom-hoover QUIT :Read error: Connection reset by peer < 1560036786 804488 :Gazatron!~Gazatron@95.145.100.152 JOIN :#esoteric < 1560036842 912493 :lynn_!sid154965@gateway/web/irccloud.com/x-heibmrmlhutuqfbg NICK :lynn < 1560036857 95805 :Gazatron!~Gazatron@95.145.100.152 PRIVMSG #esoteric :looking for help getting started with Unreadable < 1560036907 306407 :Gazatron!~Gazatron@95.145.100.152 QUIT :Client Quit < 1560037045 791075 :zzo38!~zzo38@24-207-15-213.eastlink.ca PRIVMSG #esoteric :I suppose I will use Bird Wizard and Bird Archer, perhaps < 1560037082 573160 :john_metcalf!~digital_w@host86-176-135-76.range86-176.btcentralplus.com QUIT :Ping timeout: 272 seconds