Вопрос про многопоточность (МП)

triac
triac аватар
Offline
Зарегистрирован: 03.05.2018

wdrakula пишет:

Как человек, написавший первый, немного наивный и простенький, компилятор еще в 1985-м, 10-м классе мат-школы, даже стесняюсь спросить: "А нахуя козе - баян? Она и так веселая!".

Чтобы код генерить. В принципе можно и без внешнего ассемблера, наверное, если встроить его в компилятор. Да вроде глупо как-то, когда все уже есть готовое.

Тоже стесняюсь спросить: вы в своем компиляторе прям объектный или даже просто машинный код генерировали? И без листингов, чтобы никто не догадался? Или он у вас текст на одном ЯВУ транслировал в текст на другом ЯВУ? Раскройте секрет своего мастерства, как вы без ассемблера обошлись.

negavoid
Offline
Зарегистрирован: 09.07.2016

Мдее, объектный код и есть машинный, только без заданных смещений. Генерировать читабельный человеком листинг при трансляции не обязательно, он в общем-то, разумеется есть, и выстроен в памяти компилятора, деревом ветвлений там, или ещё как, неважно. Вам говорят-говорят, пишут-пишут, а вы не слушаете :)

triac
triac аватар
Offline
Зарегистрирован: 03.05.2018

negavoid пишет:

Мдее, объектный код и есть машинный, только без заданных смещений. Генерировать читабельный человеком листинг при трансляции не обязательно, он в общем-то, разумеется есть, и выстроен в памяти компилятора, деревом ветвлений там, или ещё как, неважно. Вам говорят-говорят, пишут-пишут, а вы не слушаете :)

Почему же, слушаю. Но и от вас не услышал, как в компиляторе обойтись без ассемблера, встроенного или внешнего.  Остальные ораторы были еще менее конкретны, но я уже понял, что спрашивать доводы здесь моветон, скажут, что я "код клянчу". Надо верить на слово. Сказали что козе баян не нужен - и баста.

Подождем, может, начальник транспортного цеха откроет завесу тайны.

Arhat109-2
Offline
Зарегистрирован: 24.09.2015
triac
triac аватар
Offline
Зарегистрирован: 03.05.2018

Про чарлиплексинг совсем не в кассу. А абстрактное синтаксическое дерево является результатом работы фронт-энда, оно находится до бэк-энда и код не генерит. Вы расскажите как бэк-энд сделать без ассемблера, не надо не относящуюся к делу ерунду впаривать. Впрочем, если вы совсем в компиляторах ничего не педрите, то вам простительно. 

Arhat109-2
Offline
Зарегистрирован: 24.09.2015

вторая ссылка. Там нет ассемблера, еже ли вчё. Код генерит "кодогенератор", и он легко пишется даже на С++ (питон, перл и чего угодно). Вы так ничего и не поняли: компилятор - программа обрабатывающая ТЕКСТОВЫЙ файл и выдающая кодогенератором такой же ТЕКСТОВЫЙ файл .. зачем там "ассемблер"?

Arhat109-2
Offline
Зарегистрирован: 24.09.2015

выход - ровно такой же текстовый файл, хоть и зовется "бинарником" .. поясню, а то Вы "в таньке" явно. :)

triac
triac аватар
Offline
Зарегистрирован: 03.05.2018

Arhat109-2 пишет:

 компилятор - программа обрабатывающая ТЕКСТОВЫЙ файл и выдающая кодогенератором такой же ТЕКСТОВЫЙ файл .. зачем там "ассемблер"?

Обычно она выдает текстовый файл на языке ассемблера. Поэтому ассемблерный текст используется (генерируется) бэк-эндом, и, соответственно, знание ассемблера необходимо тому, кто пишет бэк-энд.  Помимо случаев когда транслируется текст с одного ЯВУ на другой ЯВУ, о чем я говорил выше.

А во второй ссылке и процессора нет. Мало ли шняг, которые гененрируют всякий код. Не надо горбатого лепить.

triac
triac аватар
Offline
Зарегистрирован: 03.05.2018

Arhat109-2 пишет:

выход - ровно такой же текстовый файл, хоть и зовется "бинарником" ..

Это достойно занесения в анналы :)

Arhat109-2
Offline
Зарегистрирован: 24.09.2015

Да нет жеж! :)

Компилятор (gcc как пример) МОЖЕТ выдавать ДОПОЛНИТЕЛЬНО текст на языке ассемблера (если попросить), но НЕ ОБЯЗАН это делать. Его главный результат - бинарник для библиотекаря и/или линковщика/сборщика (оба жрут как правило один и тот же формат файла). И только на выходе линковщика как итого появляется бинарник с машинными кодами исполнения (и то не фак).

Текст на языке ассемблера, вы можете получить даже обратной транскрипцией бинарника с помощью скажем objdump (для gcc в частности) ..

.. Вы в школе информатику не проходили разве?

пипец какой тупой трольь.. самовыпиливаюсь. :)

triac
triac аватар
Offline
Зарегистрирован: 03.05.2018

Arhat109-2 пишет:

Компилятор (gcc как пример) МОЖЕТ выдавать ДОПОЛНИТЕЛЬНО текст на языке ассемблера (если попросить), но НЕ ОБЯЗАН это делать. Его главный результат - бинарник для библиотекаря и/или линковщика/сборщика (оба жрут как правило один и тот же формат файла). И только на выходе линковщика как итого появляется бинарник с машинными кодами исполнения (и то не фак).

Текст на языке ассемблера, вы можете получить даже обратной транскрипцией бинарника с помощью скажем objdump (для gcc в частности) ..

Повторяю и фиксирую, с чем спорит вся шобла, включая вас: бэк-энд  компилятора ... без ассемблера не написать.

Вы не понимаете вопроса? Я уже раз пять разжевал: как человек, который пишет бэк-энд компилятора, может обойтись без знания ассемблера?  Для совсем тупых, еще раз повторяю: ассемблер - это не только транслятор, это и язык низкого уровня. Вы не знаете что такое бэк-энд компилятора? Гуглите. Найдите, например, книгу Ахо, Сети и Ульмана "Компиляторы", займитесь самообразованием, чем на детских форумах всякую ахинею нести.

Arhat109-2 пишет:

.. Вы в школе информатику не проходили разве?

Я в школе информатику проходил, когда вы еще под стол пешком ходили. Моим корочкам "программист" уже 45 лет.

Arhat109-2
Offline
Зарегистрирован: 24.09.2015

Не получилось выпилиться .. увы мне.

Насмешили. Откройте книжку "Керниган, Ричи" "язык Си" и найдите там компилятор с языка Си написанный на самом Си. Ни строчки ассемблера. :)

Без знания ассемблера он вполне обходится. Вот без знания машинных кодов (как набора исходных текстов для кодогенератора) - нет. Но .. это Ресурс кодогенератора, а не "написано на Ассемблере".

Кодогенератор в общем-то туп: он обходит дерево и на выход (в файл бинарника) плюет образцы из ресурса - списка машинных команд. ФСЁ ничего больше он не делает, если не считать вопросов оптимизации кода. И плюет он все теми же fput...(), точно также как плюется любой текст.

В прочтейшем случае, меняете ресурс - получаете кодогенератор для другой машины. Только и всего.

triac
triac аватар
Offline
Зарегистрирован: 03.05.2018

Arhat109-2 пишет:

Насмешили. Откройте книжку "Керниган, Ричи" "язык Си" и найдите там компилятор с языка Си написанный написанный на самом Си.

Не припомню такого в этой книжке. Однако догадываюсь, что вы играете боян #151, транслятор одного Яву в другой Яву. Типа Хаскел в С или Окамл в С.

Arhat109-2
Offline
Зарегистрирован: 24.09.2015

Почитайте уже хоть что-нибудь по теме .. надоело вашим образованием заниматься. И похоже не только мне.

triac
triac аватар
Offline
Зарегистрирован: 03.05.2018

Не стройте из себя дурачка, в #161 я привел книгу, на которой базируются мои знания компиляторов. Сами-то вы хоть что-то кроме K&R читали?

negavoid
Offline
Зарегистрирован: 09.07.2016

Открыл я книгу, на которую вы ссылаетесь. Ахо у меня есть другие, про сети, про алгоритмы, а вот эту не читал, что логично, я не пишу и не собираюсь писать компиляторы. Книга хорошая, не один год может уйти, чтобы её понять, а иногда вот и 45 может оказаться мало, ведь ценят-то по лицу, а не по паспорту.

http://linux-doc.ru/programming/assembler/book/compilers.pdf

Упражнение 1.1.3

Каковы преимущества системы обработки языка, в которой компилятор даёт выход на языке ассемблера, по сравнению с системой, в которой компилятор даёт выход на машинном языке?

Закрыл, pdf сохранил, на досуге обязательно почитаю.

PS бедный топикстартер, который джавист из Ынтерпрайза, уже давно в ужасе сбежал из ветки :DDDD

Arhat109-2
Offline
Зарегистрирован: 24.09.2015

triac пишет:

Не стройте из себя дурачка, в #161 я привел книгу, на которой базируются мои знания компиляторов. Сами-то вы хоть что-то кроме K&R читали?

Ахо у меня ваще-то есть. Подскажите на какой конкретно странице в ней написано, что кодогенератор пишется исключительно на асме?

Arhat109-2
Offline
Зарегистрирован: 24.09.2015

Ещё порекомендую Пратт "Языки программирования. Разработка и реализация". Хоть и стара книжка, но интересна.

to triac: Перелистал (мож и правда забыл чего) .. ну Вы батенька и трепло .. впрочем, Вы этот ярлык на себя возложили автоматом несколько ранее.

wdrakula
wdrakula аватар
Offline
Зарегистрирован: 15.03.2016

Что за чудестные примеры "твёрка"! То бишь кручения задом. Это просто праздник какой-то!

"Триак", ты заявил что для генерации кода на ассемблере нужен ассемблер, сам, а не "знания ассемблера". Чё ты там  "думал" али "имел ввиду" - это твои половые трудности, но написал ты так.

Вот повторяю вопрос: "Нахуя козе боян?", что в переводе означает: зачем нужен ассемблер, для генерации кода на ассемблере?

qwone
qwone аватар
Offline
Зарегистрирован: 03.07.2016

Самая веселуха в том что ниже ассемблера существуют микрокоды. И уже МК рассатривается как !!! цифровой автомат . И уже коды ассемблера это некий компромисс между как меньше запихать транзисторов и как компактнее будет программа для этого МК.  Где DMA это нахер этот медленый МК мы сами быстрее все запихаем.  Опять же компилятор под RISC легко рисовать, а вот под SISC начинается пляска , так как разумеется простые команды замечательно компилируются, но соль SISC в макрокомандах, которые экономят память и быстродействие. И вся петрушка в том, что найти такие команды ассемблера, в которые легко компилировались строки языка высокого уровня, в частности Паскаля или Си.  И что бы совсем не уйти от темы, то народ стоит перед реализацией многопоточности , как на микрокодах, как на кодах, как на компиляторах , как на языках высокого уровня и главное как затащить туда народ что бы оплатил этот праздник безумия. Что в конце концов и реализовано.

negavoid
Offline
Зарегистрирован: 09.07.2016

Давайте ещё наброшу, чтобы поднять градус флейма :)

Изобрёл я допустим язык, называется seven-eleven, с одной-единственной инструкцией: fucking_instruction

А вот компилятор к нему на похапе (ахтунг, крамола!) (кросс-платформенный, попрошу заметить, и вполне себе рабочий!, и даже листинг умеет, как и просили)

<?php
$machine_x86 = [ "fucking_instruction" => 0x90, ];
$machine_avr = [ "fucking_instruction" => "XZ", ];
$machine_asm = [ "fucking_instruction" => "nop\r\n", ];

$machine = "machine_avr";

$lines = file( $argv[1] );
foreach ( $lines as $line )
{
	switch( trim($line) )
	{
		case "fucking_instruction":
			echo $$machine[ trim($line) ];
			break;
	}
}

Компилятор? Компилятор. Кросс-платформенный? А то. Ассемблер? Не, нету. :)

b707
Offline
Зарегистрирован: 26.05.2017

дискуссия ушла в сторону - ассемблеры, компиляторы...

Что касается библиотеки coop - мне кажется, у нее есть своя ниша и своя целевая аудитория.

Почти каждый новичок в какой-то момент сталкивается с ситуацией, что два кода, каждый из которых отлично работает - никак не хотят соединятся в один скетч из-за того, что в них используются операторы delay(). Обычно в этот момент те из новичков, кто поумнее - понимают, что придется все-таки почитать книжки, а остальные - забрасывают "эту ардуину" подальше.

Библиотека coop предлагает своим пользователями третий путь - легко и непринужденно, не углубляясь в дебри программирования, совместить в одном скетче два-три говнокода, скопипащенных в инете. Для этой аудитории ограничения библиотеки не имеют существенного значения. Например, невозможность вызывать функцию delay_coop() из подпрограмм вряд ли составит проблему, так как в подобных скетчах все равно все инструкции находятся исключительно в loop()

Думаю, что не ошибусь, если скажу, что почти каждый из нас в своем "программистком детстве" писал подобную ОС - я вот писал, каюсь. Правда, потом наступило понимание, что вместо выдумывания костылей проще сразу писать код так, чтобы одна ветка не блокировала другую.

Разница в том, что ТС выложил свое творчество для широких масс - для тех самых нубов, кому жизненно необходимо именно такое простое решение. Так что, уважаемые метры - не стоит нападать на библиотеку - она просто не для вас. Она написана для тех, кому нужен рабочий скетч "здесь и сейчас", "срочно", а "книжки читать некогда".

Arhat109-2
Offline
Зарегистрирован: 24.09.2015

b707, разачарую пожалуй. Библиотека для сьема температуры внутри себя(!) имеет delay(). и таких (писанных на Wiring) - просто "вагон и маленькая тележка". Как только такой громотей применит одну из таких поделок (а это то, что и можно натырить в сети), так библиотека coop идет .. лесом с теми самыми "трудноуловимимы ашипками", о которых и писал Logik.

Так шта .. я бы не стал рекомендовать новичкам сиё изделие так опрометчиво.

triac
triac аватар
Offline
Зарегистрирован: 03.05.2018

Arhat109-2 пишет:

Ахо у меня ваще-то есть. Подскажите на какой конкретно странице в ней написано, что кодогенератор пишется исключительно на асме?

Я вообще-то говорил о тех все более маргинальных областях, где применение ассемблера (языка или компилятора) до сих пор оправдано. Так что про "исключительность" вы, скажем помягче, придумали. Но перчатку подниму.

"Компилятор - это программа, которая считывает текст программы на одном языке - исходном, и транслирует его в эквивалентный текст на другом языке - целевом" (с), Книга Дракона. Чему ваше #156 более-менее соответствует.

Генерация кода описана в главе 9. Конкретно на стр. 488 (издание Вильямс,  2001 год) написано, что "выход генератора кода может принимать различные виды: абсолютный машинный язык, перемещаемый машинный язык, или язык ассемблера". Все эти варианты перечислены в моем #151, где я пытался расспросить подробнее, как wdrakula обошелся без них, может, целевым языком был ЯВУ?  Ответа не получил, но в #169 wdrakula опять высказался в том смысле, что не использовал ничего из перечисленного, а его веселая коза играет без этих баянов. 

Ни на йоту не меняя смысла, но слегка обобщив мое давешнее "бэк-энд  компилятора ... без ассемблера не написать", мне все-таки хочется услышать от кого-то из выступавших пламенных ораторов, от вас, например, как вы собираетесь писать (а wdrakula, по его утверждениям, уже писал в 1985 году)  кодогенератор ... без использования языка целевой машины.

Но оставим за бортом случай ЯВУ как выходного языка и генерацию ассемблерного текста.  Меня также интересует, как можно сгенерировать машинный или перемещаемый код, если программист при написании кодогенератора не знает/не использует ассемблер целевого процессора. Из религиозных соображений? Обязательно надо прям в машинными кодами мыслить, наверное, в бинарном формате? Иначе "маразм", как утверждалось в #149? wdrakula выход кодогенератора непосредственно в машинных кодах писал, даже комментариев на ассемблере не делал?

А не много ли вы тут всем глупой лапши на уши взялись развешивать, а?

Ворота
Ворота аватар
Offline
Зарегистрирован: 10.01.2016

Дорогой, тебе уже говорили, что ты передёргиваешь. Дословно ты писал:

triac пишет:

Понятно что бэк-энд  компилятора или вытесняющую ось без ассемблера не написать. 

Любой, для кого русский язык родной понимает эту фразу как "для написания компилятора, необходимо писать ассемблерные куски". А ты теперь утверждаешь, что якобы ты имел в виду не написание кусков на ассемблере, а типа "просто его знание". За покерным столом за такое бьют по физическому лицу.

А если насчёт "знания", я могу добавить, что компилятор не напишешь без таблицы умножения. Можешь начинать презирать и считать маразмом и её.

triac
triac аватар
Offline
Зарегистрирован: 03.05.2018

Ворота пишет:

Любой, для кого русский язык родной понимает эту фразу как "для написания компилятора, необходимо писать ассемблерные куски".

Фантазер. Как хвостик прижали, сразу замяукал...

DetSimen
DetSimen аватар
Offline
Зарегистрирован: 25.01.2017

triac пишет:

Ворота пишет:

Любой, для кого русский язык родной понимает эту фразу как "для написания компилятора, необходимо писать ассемблерные куски".

Фантазер. Как хвостик прижали, сразу замяукал...

Нет.  Я тоже так понимаю. 

ЕвгенийП
ЕвгенийП аватар
Offline
Зарегистрирован: 25.05.2015

Здесь все поняли это именно так, и я не первый тебе говорю, что ты передёргиваешь. Тебя прижали твоими же словами, и не имея что возразить, ты решил воспользоваться "последним оружием тролля" - оскорблениями. Молодец! Так и продолжай, только не здесь. Отсюда иди нах, тебе тут не рады.

DetSimen
DetSimen аватар
Offline
Зарегистрирован: 25.01.2017

Жалка, дебилогонятель помер. :( 

DetSimen
DetSimen аватар
Offline
Зарегистрирован: 25.01.2017

Падытожу. Нативный компилятор можно написать без использования ассемблера. А вот без знания ассемблера разрабоччиком - нельзя.

ЕвгенийП
ЕвгенийП аватар
Offline
Зарегистрирован: 25.05.2015

А также без знания таблицы умножения и без умения читать и писать.

Arhat109-2
Offline
Зарегистрирован: 24.09.2015

triac пишет:

Arhat109-2 пишет:

Ахо у меня ваще-то есть. Подскажите на какой конкретно странице в ней написано, что кодогенератор пишется исключительно на асме?

Я вообще-то говорил о тех все более маргинальных областях, где применение ассемблера (языка или компилятора) до сих пор оправдано. Так что про "исключительность" вы, скажем помягче, придумали. Но перчатку подниму.

"Компилятор - это программа, которая считывает текст программы на одном языке - исходном, и транслирует его в эквивалентный текст на другом языке - целевом" (с), Книга Дракона. Чему ваше #156 более-менее соответствует.

Генерация кода описана в главе 9. Конкретно на стр. 488 (издание Вильямс,  2001 год) написано, что "выход генератора кода может принимать различные виды: абсолютный машинный язык, перемещаемый машинный язык, или язык ассемблера". Все эти варианты перечислены в моем #151, где я пытался расспросить подробнее, как wdrakula обошелся без них, может, целевым языком был ЯВУ?  Ответа не получил, но в #169 wdrakula опять высказался в том смысле, что не использовал ничего из перечисленного, а его веселая коза играет без этих баянов. 

Ни на йоту не меняя смысла, но слегка обобщив мое давешнее "бэк-энд  компилятора ... без ассемблера не написать", мне все-таки хочется услышать от кого-то из выступавших пламенных ораторов, от вас, например, как вы собираетесь писать (а wdrakula, по его утверждениям, уже писал в 1985 году)  кодогенератор ... без использования языка целевой машины.

Но оставим за бортом случай ЯВУ как выходного языка и генерацию ассемблерного текста.  Меня также интересует, как можно сгенерировать машинный или перемещаемый код, если программист при написании кодогенератора не знает/не использует ассемблер целевого процессора. Из религиозных соображений? Обязательно надо прям в машинными кодами мыслить, наверное, в бинарном формате? Иначе "маразм", как утверждалось в #149? wdrakula выход кодогенератора непосредственно в машинных кодах писал, даже комментариев на ассемблере не делал?

А не много ли вы тут всем глупой лапши на уши взялись развешивать, а?

Сударь, Вы - трепло. А посему, на правах моедратора, ваш дальнейший флуд из этой темы буду нещадно выпиливать. Это - предупреждение. Мое.

triac
triac аватар
Offline
Зарегистрирован: 03.05.2018

del

triac
triac аватар
Offline
Зарегистрирован: 03.05.2018

del

triac
triac аватар
Offline
Зарегистрирован: 03.05.2018

del

triac
triac аватар
Offline
Зарегистрирован: 03.05.2018

del

 

b707
Offline
Зарегистрирован: 26.05.2017

Архат, может хватит уже херней страдать?

wdrakula
wdrakula аватар
Offline
Зарегистрирован: 15.03.2016

ok, deleted.. :)

P.S.Не вижу смысла оставлять прямые оскорбления на форуме.

GarryC
Offline
Зарегистрирован: 08.08.2016

Если позволите, сухой остаток от обсуждения данной реализации многозадачности автором triac:

1. С начала я дико удивился, что многозадачность можно создать без выделения собственного стека каждой задаче и обойтись только сохранением контекста.

2. Немного подумав. понял, что запрет локальных переменных и перевод их в статические частично решает проблему, с понятными ограничениями.

3. Подумав еще немного, понял, что если задачи не завершаются стандартным образом, то и с адресами возвратов задач все не так плохо - конечно, они искажаются, но никогда не используются.

4. И еще немного подумав, если все вызовы переключения происходят из основного модуля задачи, то все должно работать.

5. В то же время представленный на рассмотрение Logik фрагмент кода, принадлежащий автору реализации, нарушает свои же требования (использует локальные переменные) и будет работать при строго определенных условиях (если последняя из задач запускается ранее всех остальных), что не говорит в пользу данного варианта.

6. Общий вывод - работать будет, но ограничения имеют место быть (существенные они либо нет, решать индивидуально). Ухудшает ситуацию, что нарушение данных ограничений не влечет за собой каких-либо предупреждений на этапе компиляции, все отдается на внимательность программиста.

6. Если я что то упустил или недопонял, поправьте.

Arhat109-2
Offline
Зарегистрирован: 24.09.2015

В целом, примерно так. Есть небольшой "нюанс" - использование в задачах библиотек сторонних производителей, который зачастую пишутся такого же уровня специалистами и с использованием Wiring. Отсюда: наличие локалов в библиотеке - явление чуть чаще чем штатное. И второе: наличие внутри библиотечных функций delay().

Любая попытка заменить в библиотечной функции с локалами его на delay_coos() приведет к краху. Но! Именно для этого и написана его библиотека .. ибо нафиг кооперативность и многозадачность, если библиотека температурного датчика делает delay(750) внутри себя .. 0.75 секунды - мимо, Карл! Какая уж тут "точность" его кооперативности да ещё и с заданным временем.

Тем не менее, как поделка, для освоения построения многозадачных систем на начальном уровне - вполне нормальное решение.

Ровно до тех пор пока в задачах нет библиотек и нет желания их "оптимизировать" под такие кооперативные задачи.

ua6em
ua6em аватар
Offline
Зарегистрирован: 17.08.2016

Инетерсно, что в астрологии означает "знатный срач на полной луне"

Arhat109-2
Offline
Зарегистрирован: 24.09.2015

На самом деле, все что там требуется - это решить вопрос с локалами, и запихать в функцию yeld() нормальное переключение задач, предварительно вынеся в глобал счетчик задержки delay() .. он внезапно локален внутри функции. :)

А вот решить вопрос с локалами = дополнить задачу своим стеком. И это уже "следующий уровень". :)