|
|
|
Тяпничная со-программа
|
|||
|---|---|---|---|
|
#18+
С примером fixxer сегодня не успвеваю. Но вот пока есть порт с С на Scala. Здесь yield return был-бы удобен тем что ничего кардинально переписывать не нужно. Почти любой алгоритм существует в классическом императивном (а не списковом) виде и мне как человеку достаточно ленивому можно было-бы в идеале сделать косметический реплейсмент. Код: java 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19. 20. 21. 22. 23. 24. 25. 26. 27. 28. 29. 30. 31. 32. 33. 34. 35. 36. 37. 38. 39. 40. 41. 42. 43. 44. 45. 46. 47. 48. 49. 50. 51. 52. 53. 54. 55. 56. 57. 58. 59. 60. 61. 62. 63. 64. 65. 66. 67. 68. 69. 70. 71. 72. 73. 74. 75. 76. 77. 78. 79. 80. 81. 82. 83. 84. 85. 86. 87. 88. 89. 90. 91. 92. 93. 94. 95. 96. 97. 98. 99. 100. 101. 102. 103. 104. 105. 106. 107. 108. 109. 110. 111. 112. 113. 114. 115. 116. 117. 118. 119. 120. 121. 122. 123. 124. 125. 126. 127. 128. 129. 130. 131. 132. 133. 134. 135. 136. 137. 138. 139. 140. 141. 142. 143. 144. 145. 146. 147. 148. 149. 150. 151. 152. 153. 154. 155. 156. 157. 158. 159. 160. 161. 162. 163. 164. 165. 166. 167. 168. 169. 170. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 23.08.2016, 21:12 |
|
||
|
Тяпничная со-программа
|
|||
|---|---|---|---|
|
#18+
maytonПоддержка со-программ в ЯП LanguageCo-routines supportCno support Для C есть Portable Coroutine Library (PCL) А ещё в C возможен такой трюк (для меня это было открытием). kealon(Ruslan)языковых конструкций нету, я же говорю делал нитевидную многозадачность под досом выделялась память под стэк и проца yield, которая меняла регистр SP на доступные стэки. Сомневаюсь что так можно под виндой сделать, хотя попробовать не мешает ...Только что проверил под Linux (gcc x86). Внутри функции ассемблерной вставкой можно запросто поменять значение esp, поставив его на буфер, выделенный malloc'ом. Причём, функция после этого продолжает видеть свои параметры, и нормально завершается по return. Теперь добавить куда-нибудь в начало longjmp, в точках yield return вставить setjmp, и задача почти решена... кажется, так оно и сделано в PCL. Только там ассемблерных вставок нет, но есть хакерские манипуляции с jmp_buf. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 27.08.2016, 13:53 |
|
||
|
Тяпничная со-программа
|
|||
|---|---|---|---|
|
#18+
Serg_77m, это мегакруто. PCL. Но КМК это левел библиотеки а не языка. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 27.08.2016, 17:23 |
|
||
|
Тяпничная со-программа
|
|||
|---|---|---|---|
|
#18+
Serg_77mТолько что проверил под Linux (gcc x86). Внутри функции ассемблерной вставкой можно запросто поменять значение esp, поставив его на буфер, выделенный malloc'ом. Причём, функция после этого продолжает видеть свои параметры, и нормально завершается по return. Теперь добавить куда-нибудь в начало longjmp, в точках yield return вставить setjmp, и задача почти решена... кажется, так оно и сделано в PCL. Только там ассемблерных вставок нет, но есть хакерские манипуляции с jmp_buf. Оптимизацию включи. Оптимизм то и выключится ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 27.08.2016, 23:17 |
|
||
|
|

start [/forum/topic.php?fid=16&gotonew=1&tid=1340627]: |
0ms |
get settings: |
6ms |
get forum list: |
14ms |
check forum access: |
2ms |
check topic access: |
2ms |
track hit: |
52ms |
get topic data: |
7ms |
get first new msg: |
4ms |
get forum data: |
2ms |
get page messages: |
27ms |
get tp. blocked users: |
1ms |
| others: | 204ms |
| total: | 321ms |

| 0 / 0 |
