SHARE
TWEET

Untitled

a guest Aug 23rd, 2019 83 Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
  1. stoopkid> in swipl are there best practices regarding the use of atoms vs. double-quoted strings?
  2. 1:40 PM for representation of text data
  3. 1:40 PM let's say.. not like paragraphs of text but just like "My Column Header" or some such
  4. 2:08 PM → gareppa joined (~gareppa@unaffiliated/gareppa)
  5. 2:09 PM
  6. <dmiles> ... atoms are supposed to be used when the strings mean something important to your program
  7. 2:09 PM "My Column Header" means more to the user
  8. 2:11 PM 'Column Header ID 666'  though would be an atom
  9. 2:12 PM teh atom in that case will use memory in general
  10. 2:12 PM as it becomes a global enum
  11. 2:13 PM vs the string is always allocated as least globally as poissble
  12.  
  13. ...
  14.  
  15. <stoopkid> dmiles: hrmm... https://www.swi-prolog.org/pldoc/man?section=ext-dquotes-motivation
  16. 2:24 PM "Representing text using atoms is often considered inadequate for several reasons: 1) It hides the conceptual difference between text and program symbols. Where content of text often matters because it is used in I/O, program symbols are merely identifiers that match with the same symbol elsewhere. Program symbols can often be consistently replaced, for example to obfuscate or compact a program. "
  17. 2:25 PM from this i'm gathering that if you want the data to represent that specific piece of text, as opposed to some arbitrary identifier that could hypothetically be replaced w/ a different identifier, then it should be a string
  18. 2:27 PM
  19. <dmiles> ... identifiers are intended to be unique ID?
  20. 2:28 PM (if so, then i would make them go into the global table.. like i did with 'Column Header ID 666')
  21. 2:29 PM → freeman42x joined (~freeman42@2a02:8084:e80:9580:b5c1:77d1:8cdc:2d87)
  22. 2:29 PM
  23. <stoopkid> well, let's say you're actually writing that column to output w/ the header included, do we want the header to literally say exactly "Column Header ID 666" or do we not care what it says?
  24. 2:30 PM
  25. <dmiles> ... "Program symbols can often be consistently replaced,"   the compiled program would not need the text of the information
  26. 2:30 PM only that it wasn tthe same as 'Column Header ID 667'
  27. 2:31 PM those atoms can be replaced by 'foo1'  and 'foo2' and hte program will still operate
  28. 2:31 PM if i want to out those.. tha tis a differnt story
  29. 2:32 PM to output those, i might still use an atom in this case because i can output atoms.. i just dont want too arbitaryly rename them
  30. 2:33 PM but *only* wouild keep it as an atom if my program really understood them
  31. 2:33 PM not "but" .. "and" there
  32. 2:34 PM
  33. <stoopkid> so how would you indicate to an obfuscator which atoms can be substituted and which ones represent exact text and thus can't be substituted?
  34. 2:35 PM
  35. <dmiles> ... i have a private way i do that which i am suire other programers would find annyying i actual make my atoms appear like '"Dont obfusicate me"'
  36. 2:35 PM '"text"'
  37. 2:35 PM
  38. <stoopkid> ic
  39. 2:36 PM
  40. <dmiles> ... it also makes me remember i am outputing it
  41. 2:36 PM and since it is aukward to type uit reminds me of the debt created
  42. 2:37 PM so when to use strings?  When i am receivned new data from the outside world.. or creating it programmatically
  43. 2:38 PM when trying to protected the limited resources of the global dictionary
  44. 2:39 PM " They are stored in a shared table. Volatile strings represented as atoms come at a significant price due to the required cooperation between threads for creating atoms. Reclaiming temporary atoms using Atom garbage collection is a costly process that requires significant synchronisation."
  45. 2:40 PM
  46. <stoopkid> so do you have some custom code or w/e to manipulate atoms that contain double-quotes like that?
  47. 2:40 PM
  48. <dmiles> ... yes.. that code removes the quotes from printing
  49. 2:41 PM
  50. <stoopkid> well, but also for like append, substring, etc..
  51. 2:41 PM sorry, concat*, substring, etc..
  52. 2:41 PM seems you'd have to wrap every string manipulation predicate in something that deals w/ the double-quotes
  53. 2:41 PM
  54. <dmiles> ... if i am performing thos operates than i should be using a string datatype
  55. 2:42 PM
  56. <stoopkid> hrm
  57. 2:42 PM
  58. <dmiles> ... but i do that that code .. i just promise to never use it :P
  59. 2:42 PM
  60. <stoopkid> idk, swipl does provide atomic_list_concat and such after all
  61. 2:42 PM
  62. <dmiles> ... since it has to dewrap.. operate.. rewrap
  63. 2:43 PM atomic_list_concat btw operates on strings
  64. 2:43 PM ?- atomic_list_concat(List,' ',"I was a string").
  65. 2:43 PM ?- atomic_list_concat(List,' ',"I was a string")
  66. 2:43 PM
  67. <yesbot> anonymous 'List'=['I',was,a,string]
  68. 2:44 PM
  69. <stoopkid> that's a list of atoms though right?
  70. 2:44 PM
  71. <dmiles> ... yes
  72. 2:44 PM ?- atomic_list_concat(['I',was,a,string],' ',NowIHohhingRam)
  73. 2:44 PM
  74. <yesbot> anonymous 'NowIHohhingRam'='I was a string'
  75. 2:45 PM
  76. <stoopkid> so swipl seems to assume that users would indeed be doing these kind of string manipulations directly on atoms
  77. 2:45 PM
  78. <dmiles> ... ?- atomic_string_concat(['I','have','already','been','GCed'],' ',X)
  79. 2:45 PM
  80. <yesbot> anonymous procedure `prolog_eval:atomic_string_concat(A,B,C)' does not exist
  81. 2:45 PM procedure `prolog_eval:atomic_string_concat(A,B,C)' does not exist
  82. 2:45 PM procedure `prolog_eval:atomic_string_concat(A,B,C)' does not exist
  83. 2:45 PM procedure `prolog_eval:atomic_string_concat(A,B,C)' does not exist
  84. 2:45 PM procedure `prolog_eval:atomic_string_concat(A,B,C)' does not exist
  85. 2:45 PM procedure `prolog_eval:atomic_string_concat(A,B,C)' does not exist
  86. 2:45 PM procedure `prolog_eval:atomic_string_concat(A,B,C)' does not exist
  87. 2:45 PM procedure `prolog_eval:atomic_string_concat(A,B,C)' does not exist
  88. 2:45 PM procedure `prolog_eval:atomic_string_concat(A,B,C)' does not exist
  89. 2:45 PM procedure `prolog_eval:atomic_string_concat(A,B,C)' does not exist
  90. 2:45 PM procedure `prolog_eval:atomic_string_concat(A,B,C)' does not exist
  91. 2:45 PM procedure `prolog_eval:atomic_string_concat(A,B,C)' does not exist
  92. 2:45 PM procedure `prolog_eval:atomic_string_concat(A,B,C)' does not exist
  93. 2:45 PM procedure `prolog_eval:atomic_string_concat(A,B,C)' does not exist
  94. 2:45 PM 2 + 2 = 5.
  95. 2:46 PM → pie_ joined (~pie_@unaffiliated/pie-/x-0787662)
  96. 2:47 PM
  97. <stoopkid> atom_concat, atomic_list_concat, sub_atom, sub_atom_icasechk, ...
  98. 2:47 PM
  99. <dmiles> ... well now it is frowned upon.. but lots of code still does that
  100. 2:47 PM
  101. <stoopkid> ic
  102. 2:49 PM
  103. <dmiles> ... sub_atom_* is mostly for when you are needidng to created and decompose new global identifiers
RAW Paste Data
We use cookies for various purposes including analytics. By continuing to use Pastebin, you agree to our use of cookies as described in the Cookies Policy. OK, I Understand
 
Top