Как человек, написавший первый, немного наивный и простенький, компилятор еще в 1985-м, 10-м классе мат-школы, даже стесняюсь спросить: "А нахуя козе - баян? Она и так веселая!".
Чтобы код генерить. В принципе можно и без внешнего ассемблера, наверное, если встроить его в компилятор. Да вроде глупо как-то, когда все уже есть готовое.
Тоже стесняюсь спросить: вы в своем компиляторе прям объектный или даже просто машинный код генерировали? И без листингов, чтобы никто не догадался? Или он у вас текст на одном ЯВУ транслировал в текст на другом ЯВУ? Раскройте секрет своего мастерства, как вы без ассемблера обошлись.
Мдее, объектный код и есть машинный, только без заданных смещений. Генерировать читабельный человеком листинг при трансляции не обязательно, он в общем-то, разумеется есть, и выстроен в памяти компилятора, деревом ветвлений там, или ещё как, неважно. Вам говорят-говорят, пишут-пишут, а вы не слушаете :)
Мдее, объектный код и есть машинный, только без заданных смещений. Генерировать читабельный человеком листинг при трансляции не обязательно, он в общем-то, разумеется есть, и выстроен в памяти компилятора, деревом ветвлений там, или ещё как, неважно. Вам говорят-говорят, пишут-пишут, а вы не слушаете :)
Почему же, слушаю. Но и от вас не услышал, как в компиляторе обойтись без ассемблера, встроенного или внешнего. Остальные ораторы были еще менее конкретны, но я уже понял, что спрашивать доводы здесь моветон, скажут, что я "код клянчу". Надо верить на слово. Сказали что козе баян не нужен - и баста.
Подождем, может, начальник транспортного цеха откроет завесу тайны.
Про чарлиплексинг совсем не в кассу. А абстрактное синтаксическое дерево является результатом работы фронт-энда, оно находится до бэк-энда и код не генерит. Вы расскажите как бэк-энд сделать без ассемблера, не надо не относящуюся к делу ерунду впаривать. Впрочем, если вы совсем в компиляторах ничего не педрите, то вам простительно.
вторая ссылка. Там нет ассемблера, еже ли вчё. Код генерит "кодогенератор", и он легко пишется даже на С++ (питон, перл и чего угодно). Вы так ничего и не поняли: компилятор - программа обрабатывающая ТЕКСТОВЫЙ файл и выдающая кодогенератором такой же ТЕКСТОВЫЙ файл .. зачем там "ассемблер"?
компилятор - программа обрабатывающая ТЕКСТОВЫЙ файл и выдающая кодогенератором такой же ТЕКСТОВЫЙ файл .. зачем там "ассемблер"?
Обычно она выдает текстовый файл на языке ассемблера. Поэтому ассемблерный текст используется (генерируется) бэк-эндом, и, соответственно, знание ассемблера необходимо тому, кто пишет бэк-энд. Помимо случаев когда транслируется текст с одного ЯВУ на другой ЯВУ, о чем я говорил выше.
А во второй ссылке и процессора нет. Мало ли шняг, которые гененрируют всякий код. Не надо горбатого лепить.
Компилятор (gcc как пример) МОЖЕТ выдавать ДОПОЛНИТЕЛЬНО текст на языке ассемблера (если попросить), но НЕ ОБЯЗАН это делать. Его главный результат - бинарник для библиотекаря и/или линковщика/сборщика (оба жрут как правило один и тот же формат файла). И только на выходе линковщика как итого появляется бинарник с машинными кодами исполнения (и то не фак).
Текст на языке ассемблера, вы можете получить даже обратной транскрипцией бинарника с помощью скажем objdump (для gcc в частности) ..
Компилятор (gcc как пример) МОЖЕТ выдавать ДОПОЛНИТЕЛЬНО текст на языке ассемблера (если попросить), но НЕ ОБЯЗАН это делать. Его главный результат - бинарник для библиотекаря и/или линковщика/сборщика (оба жрут как правило один и тот же формат файла). И только на выходе линковщика как итого появляется бинарник с машинными кодами исполнения (и то не фак).
Текст на языке ассемблера, вы можете получить даже обратной транскрипцией бинарника с помощью скажем objdump (для gcc в частности) ..
Повторяю и фиксирую, с чем спорит вся шобла, включая вас: бэк-энд компилятора ... без ассемблера не написать.
Вы не понимаете вопроса? Я уже раз пять разжевал: как человек, который пишет бэк-энд компилятора, может обойтись без знания ассемблера? Для совсем тупых, еще раз повторяю: ассемблер - это не только транслятор, это и язык низкого уровня. Вы не знаете что такое бэк-энд компилятора? Гуглите. Найдите, например, книгу Ахо, Сети и Ульмана "Компиляторы", займитесь самообразованием, чем на детских форумах всякую ахинею нести.
Arhat109-2 пишет:
.. Вы в школе информатику не проходили разве?
Я в школе информатику проходил, когда вы еще под стол пешком ходили. Моим корочкам "программист" уже 45 лет.
Насмешили. Откройте книжку "Керниган, Ричи" "язык Си" и найдите там компилятор с языка Си написанный на самом Си. Ни строчки ассемблера. :)
Без знания ассемблера он вполне обходится. Вот без знания машинных кодов (как набора исходных текстов для кодогенератора) - нет. Но .. это Ресурс кодогенератора, а не "написано на Ассемблере".
Кодогенератор в общем-то туп: он обходит дерево и на выход (в файл бинарника) плюет образцы из ресурса - списка машинных команд. ФСЁ ничего больше он не делает, если не считать вопросов оптимизации кода. И плюет он все теми же fput...(), точно также как плюется любой текст.
В прочтейшем случае, меняете ресурс - получаете кодогенератор для другой машины. Только и всего.
Открыл я книгу, на которую вы ссылаетесь. Ахо у меня есть другие, про сети, про алгоритмы, а вот эту не читал, что логично, я не пишу и не собираюсь писать компиляторы. Книга хорошая, не один год может уйти, чтобы её понять, а иногда вот и 45 может оказаться мало, ведь ценят-то по лицу, а не по паспорту.
Каковы преимущества системы обработки языка, в которой компилятор даёт выход на языке ассемблера, по сравнению с системой, в которой компилятор даёт выход на машинном языке?
Закрыл, pdf сохранил, на досуге обязательно почитаю.
PS бедный топикстартер, который джавист из Ынтерпрайза, уже давно в ужасе сбежал из ветки :DDDD
Что за чудестные примеры "твёрка"! То бишь кручения задом. Это просто праздник какой-то!
"Триак", ты заявил что для генерации кода на ассемблере нужен ассемблер, сам, а не "знания ассемблера". Чё ты там "думал" али "имел ввиду" - это твои половые трудности, но написал ты так.
Вот повторяю вопрос: "Нахуя козе боян?", что в переводе означает: зачем нужен ассемблер, для генерации кода на ассемблере?
Самая веселуха в том что ниже ассемблера существуют микрокоды. И уже МК рассатривается как !!! цифровой автомат . И уже коды ассемблера это некий компромисс между как меньше запихать транзисторов и как компактнее будет программа для этого МК. Где DMA это нахер этот медленый МК мы сами быстрее все запихаем. Опять же компилятор под RISC легко рисовать, а вот под SISC начинается пляска , так как разумеется простые команды замечательно компилируются, но соль SISC в макрокомандах, которые экономят память и быстродействие. И вся петрушка в том, что найти такие команды ассемблера, в которые легко компилировались строки языка высокого уровня, в частности Паскаля или Си. И что бы совсем не уйти от темы, то народ стоит перед реализацией многопоточности , как на микрокодах, как на кодах, как на компиляторах , как на языках высокого уровня и главное как затащить туда народ что бы оплатил этот праздник безумия. Что в конце концов и реализовано.
Давайте ещё наброшу, чтобы поднять градус флейма :)
Изобрёл я допустим язык, называется seven-eleven, с одной-единственной инструкцией: fucking_instruction
А вот компилятор к нему на похапе (ахтунг, крамола!) (кросс-платформенный, попрошу заметить, и вполне себе рабочий!, и даже листинг умеет, как и просили)
дискуссия ушла в сторону - ассемблеры, компиляторы...
Что касается библиотеки coop - мне кажется, у нее есть своя ниша и своя целевая аудитория.
Почти каждый новичок в какой-то момент сталкивается с ситуацией, что два кода, каждый из которых отлично работает - никак не хотят соединятся в один скетч из-за того, что в них используются операторы delay(). Обычно в этот момент те из новичков, кто поумнее - понимают, что придется все-таки почитать книжки, а остальные - забрасывают "эту ардуину" подальше.
Библиотека coop предлагает своим пользователями третий путь - легко и непринужденно, не углубляясь в дебри программирования, совместить в одном скетче два-три говнокода, скопипащенных в инете. Для этой аудитории ограничения библиотеки не имеют существенного значения. Например, невозможность вызывать функцию delay_coop() из подпрограмм вряд ли составит проблему, так как в подобных скетчах все равно все инструкции находятся исключительно в loop()
Думаю, что не ошибусь, если скажу, что почти каждый из нас в своем "программистком детстве" писал подобную ОС - я вот писал, каюсь. Правда, потом наступило понимание, что вместо выдумывания костылей проще сразу писать код так, чтобы одна ветка не блокировала другую.
Разница в том, что ТС выложил свое творчество для широких масс - для тех самых нубов, кому жизненно необходимо именно такое простое решение. Так что, уважаемые метры - не стоит нападать на библиотеку - она просто не для вас. Она написана для тех, кому нужен рабочий скетч "здесь и сейчас", "срочно", а "книжки читать некогда".
b707, разачарую пожалуй. Библиотека для сьема температуры внутри себя(!) имеет delay(). и таких (писанных на Wiring) - просто "вагон и маленькая тележка". Как только такой громотей применит одну из таких поделок (а это то, что и можно натырить в сети), так библиотека coop идет .. лесом с теми самыми "трудноуловимимы ашипками", о которых и писал Logik.
Так шта .. я бы не стал рекомендовать новичкам сиё изделие так опрометчиво.
Ахо у меня ваще-то есть. Подскажите на какой конкретно странице в ней написано, что кодогенератор пишется исключительно на асме?
Я вообще-то говорил о тех все более маргинальных областях, где применение ассемблера (языка или компилятора) до сих пор оправдано. Так что про "исключительность" вы, скажем помягче, придумали. Но перчатку подниму.
"Компилятор - это программа, которая считывает текст программы на одном языке - исходном, и транслирует его в эквивалентный текст на другом языке - целевом" (с), Книга Дракона. Чему ваше #156 более-менее соответствует.
Генерация кода описана в главе 9. Конкретно на стр. 488 (издание Вильямс, 2001 год) написано, что "выход генератора кода может принимать различные виды: абсолютный машинный язык, перемещаемый машинный язык, или язык ассемблера". Все эти варианты перечислены в моем #151, где я пытался расспросить подробнее, как wdrakula обошелся без них, может, целевым языком был ЯВУ? Ответа не получил, но в #169 wdrakula опять высказался в том смысле, что не использовал ничего из перечисленного, а его веселая коза играет без этих баянов.
Ни на йоту не меняя смысла, но слегка обобщив мое давешнее "бэк-энд компилятора ... без ассемблера не написать", мне все-таки хочется услышать от кого-то из выступавших пламенных ораторов, от вас, например, как вы собираетесь писать (а wdrakula, по его утверждениям, уже писал в 1985 году) кодогенератор ... без использования языка целевой машины.
Но оставим за бортом случай ЯВУ как выходного языка и генерацию ассемблерного текста. Меня также интересует, как можно сгенерировать машинный или перемещаемый код, если программист при написании кодогенератора не знает/не использует ассемблер целевого процессора. Из религиозных соображений? Обязательно надо прям в машинными кодами мыслить, наверное, в бинарном формате? Иначе "маразм", как утверждалось в #149? wdrakula выход кодогенератора непосредственно в машинных кодах писал, даже комментариев на ассемблере не делал?
А не много ли вы тут всем глупой лапши на уши взялись развешивать, а?
Дорогой, тебе уже говорили, что ты передёргиваешь. Дословно ты писал:
triac пишет:
Понятно что бэк-энд компилятора или вытесняющую ось без ассемблера не написать.
Любой, для кого русский язык родной понимает эту фразу как "для написания компилятора, необходимо писать ассемблерные куски". А ты теперь утверждаешь, что якобы ты имел в виду не написание кусков на ассемблере, а типа "просто его знание". За покерным столом за такое бьют по физическому лицу.
А если насчёт "знания", я могу добавить, что компилятор не напишешь без таблицы умножения. Можешь начинать презирать и считать маразмом и её.
Здесь все поняли это именно так, и я не первый тебе говорю, что ты передёргиваешь. Тебя прижали твоими же словами, и не имея что возразить, ты решил воспользоваться "последним оружием тролля" - оскорблениями. Молодец! Так и продолжай, только не здесь. Отсюда иди нах, тебе тут не рады.
Ахо у меня ваще-то есть. Подскажите на какой конкретно странице в ней написано, что кодогенератор пишется исключительно на асме?
Я вообще-то говорил о тех все более маргинальных областях, где применение ассемблера (языка или компилятора) до сих пор оправдано. Так что про "исключительность" вы, скажем помягче, придумали. Но перчатку подниму.
"Компилятор - это программа, которая считывает текст программы на одном языке - исходном, и транслирует его в эквивалентный текст на другом языке - целевом" (с), Книга Дракона. Чему ваше #156 более-менее соответствует.
Генерация кода описана в главе 9. Конкретно на стр. 488 (издание Вильямс, 2001 год) написано, что "выход генератора кода может принимать различные виды: абсолютный машинный язык, перемещаемый машинный язык, или язык ассемблера". Все эти варианты перечислены в моем #151, где я пытался расспросить подробнее, как wdrakula обошелся без них, может, целевым языком был ЯВУ? Ответа не получил, но в #169 wdrakula опять высказался в том смысле, что не использовал ничего из перечисленного, а его веселая коза играет без этих баянов.
Ни на йоту не меняя смысла, но слегка обобщив мое давешнее "бэк-энд компилятора ... без ассемблера не написать", мне все-таки хочется услышать от кого-то из выступавших пламенных ораторов, от вас, например, как вы собираетесь писать (а wdrakula, по его утверждениям, уже писал в 1985 году) кодогенератор ... без использования языка целевой машины.
Но оставим за бортом случай ЯВУ как выходного языка и генерацию ассемблерного текста. Меня также интересует, как можно сгенерировать машинный или перемещаемый код, если программист при написании кодогенератора не знает/не использует ассемблер целевого процессора. Из религиозных соображений? Обязательно надо прям в машинными кодами мыслить, наверное, в бинарном формате? Иначе "маразм", как утверждалось в #149? wdrakula выход кодогенератора непосредственно в машинных кодах писал, даже комментариев на ассемблере не делал?
А не много ли вы тут всем глупой лапши на уши взялись развешивать, а?
Сударь, Вы - трепло. А посему, на правах моедратора, ваш дальнейший флуд из этой темы буду нещадно выпиливать. Это - предупреждение. Мое.
Если позволите, сухой остаток от обсуждения данной реализации многозадачности автором triac:
1. С начала я дико удивился, что многозадачность можно создать без выделения собственного стека каждой задаче и обойтись только сохранением контекста.
2. Немного подумав. понял, что запрет локальных переменных и перевод их в статические частично решает проблему, с понятными ограничениями.
3. Подумав еще немного, понял, что если задачи не завершаются стандартным образом, то и с адресами возвратов задач все не так плохо - конечно, они искажаются, но никогда не используются.
4. И еще немного подумав, если все вызовы переключения происходят из основного модуля задачи, то все должно работать.
5. В то же время представленный на рассмотрение Logik фрагмент кода, принадлежащий автору реализации, нарушает свои же требования (использует локальные переменные) и будет работать при строго определенных условиях (если последняя из задач запускается ранее всех остальных), что не говорит в пользу данного варианта.
6. Общий вывод - работать будет, но ограничения имеют место быть (существенные они либо нет, решать индивидуально). Ухудшает ситуацию, что нарушение данных ограничений не влечет за собой каких-либо предупреждений на этапе компиляции, все отдается на внимательность программиста.
6. Если я что то упустил или недопонял, поправьте.
В целом, примерно так. Есть небольшой "нюанс" - использование в задачах библиотек сторонних производителей, который зачастую пишутся такого же уровня специалистами и с использованием Wiring. Отсюда: наличие локалов в библиотеке - явление чуть чаще чем штатное. И второе: наличие внутри библиотечных функций delay().
Любая попытка заменить в библиотечной функции с локалами его на delay_coos() приведет к краху. Но! Именно для этого и написана его библиотека .. ибо нафиг кооперативность и многозадачность, если библиотека температурного датчика делает delay(750) внутри себя .. 0.75 секунды - мимо, Карл! Какая уж тут "точность" его кооперативности да ещё и с заданным временем.
Тем не менее, как поделка, для освоения построения многозадачных систем на начальном уровне - вполне нормальное решение.
Ровно до тех пор пока в задачах нет библиотек и нет желания их "оптимизировать" под такие кооперативные задачи.
На самом деле, все что там требуется - это решить вопрос с локалами, и запихать в функцию yeld() нормальное переключение задач, предварительно вынеся в глобал счетчик задержки delay() .. он внезапно локален внутри функции. :)
А вот решить вопрос с локалами = дополнить задачу своим стеком. И это уже "следующий уровень". :)
Как человек, написавший первый, немного наивный и простенький, компилятор еще в 1985-м, 10-м классе мат-школы, даже стесняюсь спросить: "А нахуя козе - баян? Она и так веселая!".
Чтобы код генерить. В принципе можно и без внешнего ассемблера, наверное, если встроить его в компилятор. Да вроде глупо как-то, когда все уже есть готовое.
Тоже стесняюсь спросить: вы в своем компиляторе прям объектный или даже просто машинный код генерировали? И без листингов, чтобы никто не догадался? Или он у вас текст на одном ЯВУ транслировал в текст на другом ЯВУ? Раскройте секрет своего мастерства, как вы без ассемблера обошлись.
Мдее, объектный код и есть машинный, только без заданных смещений. Генерировать читабельный человеком листинг при трансляции не обязательно, он в общем-то, разумеется есть, и выстроен в памяти компилятора, деревом ветвлений там, или ещё как, неважно. Вам говорят-говорят, пишут-пишут, а вы не слушаете :)
Мдее, объектный код и есть машинный, только без заданных смещений. Генерировать читабельный человеком листинг при трансляции не обязательно, он в общем-то, разумеется есть, и выстроен в памяти компилятора, деревом ветвлений там, или ещё как, неважно. Вам говорят-говорят, пишут-пишут, а вы не слушаете :)
Почему же, слушаю. Но и от вас не услышал, как в компиляторе обойтись без ассемблера, встроенного или внешнего. Остальные ораторы были еще менее конкретны, но я уже понял, что спрашивать доводы здесь моветон, скажут, что я "код клянчу". Надо верить на слово. Сказали что козе баян не нужен - и баста.
Подождем, может, начальник транспортного цеха откроет завесу тайны.
Примерно так:
https://ru.wikipedia.org/wiki/%D0%90%D0%B1%D1%81%D1%82%D1%80%D0%B0%D0%BA...
https://ru.wikipedia.org/wiki/%D0%9A%D0%BE%D0%B4%D0%BE%D0%B3%D0%B5%D0%BD...
Примерно так:
https://ru.wikipedia.org/wiki/%D0%90%D0%B1%D1%81%D1%82%D1%80%D0%B0%D0%BA%D1%82%D0%BD%D0%BE%D0%B5_%D1%81%D0%B8%D0%BD%D1%82%D0%B0%D0%BA%D1%81%D0%B8%D1%87%D0%B5%D1%81%D0%BA%D0%BE%D0%B5_%D0%B4%D0%B5%D1%80%D0%B5%D0%B2%D0%BE
https://ru.wikipedia.org/wiki/%D0%9A%D0%BE%D0%B4%D0%BE%D0%B3%D0%B5%D0%BD%D0%B5%D1%80%D0%B0%D1%86%D0%B8%D1%8F
Про чарлиплексинг совсем не в кассу. А абстрактное синтаксическое дерево является результатом работы фронт-энда, оно находится до бэк-энда и код не генерит. Вы расскажите как бэк-энд сделать без ассемблера, не надо не относящуюся к делу ерунду впаривать. Впрочем, если вы совсем в компиляторах ничего не педрите, то вам простительно.
вторая ссылка. Там нет ассемблера, еже ли вчё. Код генерит "кодогенератор", и он легко пишется даже на С++ (питон, перл и чего угодно). Вы так ничего и не поняли: компилятор - программа обрабатывающая ТЕКСТОВЫЙ файл и выдающая кодогенератором такой же ТЕКСТОВЫЙ файл .. зачем там "ассемблер"?
выход - ровно такой же текстовый файл, хоть и зовется "бинарником" .. поясню, а то Вы "в таньке" явно. :)
компилятор - программа обрабатывающая ТЕКСТОВЫЙ файл и выдающая кодогенератором такой же ТЕКСТОВЫЙ файл .. зачем там "ассемблер"?
Обычно она выдает текстовый файл на языке ассемблера. Поэтому ассемблерный текст используется (генерируется) бэк-эндом, и, соответственно, знание ассемблера необходимо тому, кто пишет бэк-энд. Помимо случаев когда транслируется текст с одного ЯВУ на другой ЯВУ, о чем я говорил выше.
А во второй ссылке и процессора нет. Мало ли шняг, которые гененрируют всякий код. Не надо горбатого лепить.
выход - ровно такой же текстовый файл, хоть и зовется "бинарником" ..
Это достойно занесения в анналы :)
Да нет жеж! :)
Компилятор (gcc как пример) МОЖЕТ выдавать ДОПОЛНИТЕЛЬНО текст на языке ассемблера (если попросить), но НЕ ОБЯЗАН это делать. Его главный результат - бинарник для библиотекаря и/или линковщика/сборщика (оба жрут как правило один и тот же формат файла). И только на выходе линковщика как итого появляется бинарник с машинными кодами исполнения (и то не фак).
Текст на языке ассемблера, вы можете получить даже обратной транскрипцией бинарника с помощью скажем objdump (для gcc в частности) ..
.. Вы в школе информатику не проходили разве?
пипец какой тупой трольь.. самовыпиливаюсь. :)
Компилятор (gcc как пример) МОЖЕТ выдавать ДОПОЛНИТЕЛЬНО текст на языке ассемблера (если попросить), но НЕ ОБЯЗАН это делать. Его главный результат - бинарник для библиотекаря и/или линковщика/сборщика (оба жрут как правило один и тот же формат файла). И только на выходе линковщика как итого появляется бинарник с машинными кодами исполнения (и то не фак).
Текст на языке ассемблера, вы можете получить даже обратной транскрипцией бинарника с помощью скажем objdump (для gcc в частности) ..
Повторяю и фиксирую, с чем спорит вся шобла, включая вас: бэк-энд компилятора ... без ассемблера не написать.
Вы не понимаете вопроса? Я уже раз пять разжевал: как человек, который пишет бэк-энд компилятора, может обойтись без знания ассемблера? Для совсем тупых, еще раз повторяю: ассемблер - это не только транслятор, это и язык низкого уровня. Вы не знаете что такое бэк-энд компилятора? Гуглите. Найдите, например, книгу Ахо, Сети и Ульмана "Компиляторы", займитесь самообразованием, чем на детских форумах всякую ахинею нести.
.. Вы в школе информатику не проходили разве?
Я в школе информатику проходил, когда вы еще под стол пешком ходили. Моим корочкам "программист" уже 45 лет.
Не получилось выпилиться .. увы мне.
Насмешили. Откройте книжку "Керниган, Ричи" "язык Си" и найдите там компилятор с языка Си написанный на самом Си. Ни строчки ассемблера. :)
Без знания ассемблера он вполне обходится. Вот без знания машинных кодов (как набора исходных текстов для кодогенератора) - нет. Но .. это Ресурс кодогенератора, а не "написано на Ассемблере".
Кодогенератор в общем-то туп: он обходит дерево и на выход (в файл бинарника) плюет образцы из ресурса - списка машинных команд. ФСЁ ничего больше он не делает, если не считать вопросов оптимизации кода. И плюет он все теми же fput...(), точно также как плюется любой текст.
В прочтейшем случае, меняете ресурс - получаете кодогенератор для другой машины. Только и всего.
Насмешили. Откройте книжку "Керниган, Ричи" "язык Си" и найдите там компилятор с языка Си написанный написанный на самом Си.
Не припомню такого в этой книжке. Однако догадываюсь, что вы играете боян #151, транслятор одного Яву в другой Яву. Типа Хаскел в С или Окамл в С.
Почитайте уже хоть что-нибудь по теме .. надоело вашим образованием заниматься. И похоже не только мне.
Не стройте из себя дурачка, в #161 я привел книгу, на которой базируются мои знания компиляторов. Сами-то вы хоть что-то кроме K&R читали?
Открыл я книгу, на которую вы ссылаетесь. Ахо у меня есть другие, про сети, про алгоритмы, а вот эту не читал, что логично, я не пишу и не собираюсь писать компиляторы. Книга хорошая, не один год может уйти, чтобы её понять, а иногда вот и 45 может оказаться мало, ведь ценят-то по лицу, а не по паспорту.
http://linux-doc.ru/programming/assembler/book/compilers.pdf
Упражнение 1.1.3
Каковы преимущества системы обработки языка, в которой компилятор даёт выход на языке ассемблера, по сравнению с системой, в которой компилятор даёт выход на машинном языке?
Закрыл, pdf сохранил, на досуге обязательно почитаю.
PS бедный топикстартер, который джавист из Ынтерпрайза, уже давно в ужасе сбежал из ветки :DDDD
Не стройте из себя дурачка, в #161 я привел книгу, на которой базируются мои знания компиляторов. Сами-то вы хоть что-то кроме K&R читали?
Ахо у меня ваще-то есть. Подскажите на какой конкретно странице в ней написано, что кодогенератор пишется исключительно на асме?
Ещё порекомендую Пратт "Языки программирования. Разработка и реализация". Хоть и стара книжка, но интересна.
to triac: Перелистал (мож и правда забыл чего) .. ну Вы батенька и трепло .. впрочем, Вы этот ярлык на себя возложили автоматом несколько ранее.
Что за чудестные примеры "твёрка"! То бишь кручения задом. Это просто праздник какой-то!
"Триак", ты заявил что для генерации кода на ассемблере нужен ассемблер, сам, а не "знания ассемблера". Чё ты там "думал" али "имел ввиду" - это твои половые трудности, но написал ты так.
Вот повторяю вопрос: "Нахуя козе боян?", что в переводе означает: зачем нужен ассемблер, для генерации кода на ассемблере?
Самая веселуха в том что ниже ассемблера существуют микрокоды. И уже МК рассатривается как !!! цифровой автомат . И уже коды ассемблера это некий компромисс между как меньше запихать транзисторов и как компактнее будет программа для этого МК. Где DMA это нахер этот медленый МК мы сами быстрее все запихаем. Опять же компилятор под RISC легко рисовать, а вот под SISC начинается пляска , так как разумеется простые команды замечательно компилируются, но соль SISC в макрокомандах, которые экономят память и быстродействие. И вся петрушка в том, что найти такие команды ассемблера, в которые легко компилировались строки языка высокого уровня, в частности Паскаля или Си. И что бы совсем не уйти от темы, то народ стоит перед реализацией многопоточности , как на микрокодах, как на кодах, как на компиляторах , как на языках высокого уровня и главное как затащить туда народ что бы оплатил этот праздник безумия. Что в конце концов и реализовано.
Давайте ещё наброшу, чтобы поднять градус флейма :)
Изобрёл я допустим язык, называется seven-eleven, с одной-единственной инструкцией: fucking_instruction
А вот компилятор к нему на похапе (ахтунг, крамола!) (кросс-платформенный, попрошу заметить, и вполне себе рабочий!, и даже листинг умеет, как и просили)
Компилятор? Компилятор. Кросс-платформенный? А то. Ассемблер? Не, нету. :)
дискуссия ушла в сторону - ассемблеры, компиляторы...
Что касается библиотеки coop - мне кажется, у нее есть своя ниша и своя целевая аудитория.
Почти каждый новичок в какой-то момент сталкивается с ситуацией, что два кода, каждый из которых отлично работает - никак не хотят соединятся в один скетч из-за того, что в них используются операторы delay(). Обычно в этот момент те из новичков, кто поумнее - понимают, что придется все-таки почитать книжки, а остальные - забрасывают "эту ардуину" подальше.
Библиотека coop предлагает своим пользователями третий путь - легко и непринужденно, не углубляясь в дебри программирования, совместить в одном скетче два-три говнокода, скопипащенных в инете. Для этой аудитории ограничения библиотеки не имеют существенного значения. Например, невозможность вызывать функцию delay_coop() из подпрограмм вряд ли составит проблему, так как в подобных скетчах все равно все инструкции находятся исключительно в loop()
Думаю, что не ошибусь, если скажу, что почти каждый из нас в своем "программистком детстве" писал подобную ОС - я вот писал, каюсь. Правда, потом наступило понимание, что вместо выдумывания костылей проще сразу писать код так, чтобы одна ветка не блокировала другую.
Разница в том, что ТС выложил свое творчество для широких масс - для тех самых нубов, кому жизненно необходимо именно такое простое решение. Так что, уважаемые метры - не стоит нападать на библиотеку - она просто не для вас. Она написана для тех, кому нужен рабочий скетч "здесь и сейчас", "срочно", а "книжки читать некогда".
b707, разачарую пожалуй. Библиотека для сьема температуры внутри себя(!) имеет delay(). и таких (писанных на Wiring) - просто "вагон и маленькая тележка". Как только такой громотей применит одну из таких поделок (а это то, что и можно натырить в сети), так библиотека coop идет .. лесом с теми самыми "трудноуловимимы ашипками", о которых и писал Logik.
Так шта .. я бы не стал рекомендовать новичкам сиё изделие так опрометчиво.
Ахо у меня ваще-то есть. Подскажите на какой конкретно странице в ней написано, что кодогенератор пишется исключительно на асме?
Я вообще-то говорил о тех все более маргинальных областях, где применение ассемблера (языка или компилятора) до сих пор оправдано. Так что про "исключительность" вы, скажем помягче, придумали. Но перчатку подниму.
"Компилятор - это программа, которая считывает текст программы на одном языке - исходном, и транслирует его в эквивалентный текст на другом языке - целевом" (с), Книга Дракона. Чему ваше #156 более-менее соответствует.
Генерация кода описана в главе 9. Конкретно на стр. 488 (издание Вильямс, 2001 год) написано, что "выход генератора кода может принимать различные виды: абсолютный машинный язык, перемещаемый машинный язык, или язык ассемблера". Все эти варианты перечислены в моем #151, где я пытался расспросить подробнее, как wdrakula обошелся без них, может, целевым языком был ЯВУ? Ответа не получил, но в #169 wdrakula опять высказался в том смысле, что не использовал ничего из перечисленного, а его веселая коза играет без этих баянов.
Ни на йоту не меняя смысла, но слегка обобщив мое давешнее "бэк-энд компилятора ... без ассемблера не написать", мне все-таки хочется услышать от кого-то из выступавших пламенных ораторов, от вас, например, как вы собираетесь писать (а wdrakula, по его утверждениям, уже писал в 1985 году) кодогенератор ... без использования языка целевой машины.
Но оставим за бортом случай ЯВУ как выходного языка и генерацию ассемблерного текста. Меня также интересует, как можно сгенерировать машинный или перемещаемый код, если программист при написании кодогенератора не знает/не использует ассемблер целевого процессора. Из религиозных соображений? Обязательно надо прям в машинными кодами мыслить, наверное, в бинарном формате? Иначе "маразм", как утверждалось в #149? wdrakula выход кодогенератора непосредственно в машинных кодах писал, даже комментариев на ассемблере не делал?
А не много ли вы тут всем глупой лапши на уши взялись развешивать, а?
Дорогой, тебе уже говорили, что ты передёргиваешь. Дословно ты писал:
Понятно что бэк-энд компилятора или вытесняющую ось без ассемблера не написать.
Любой, для кого русский язык родной понимает эту фразу как "для написания компилятора, необходимо писать ассемблерные куски". А ты теперь утверждаешь, что якобы ты имел в виду не написание кусков на ассемблере, а типа "просто его знание". За покерным столом за такое бьют по физическому лицу.
А если насчёт "знания", я могу добавить, что компилятор не напишешь без таблицы умножения. Можешь начинать презирать и считать маразмом и её.
Любой, для кого русский язык родной понимает эту фразу как "для написания компилятора, необходимо писать ассемблерные куски".
Фантазер. Как хвостик прижали, сразу замяукал...
Любой, для кого русский язык родной понимает эту фразу как "для написания компилятора, необходимо писать ассемблерные куски".
Фантазер. Как хвостик прижали, сразу замяукал...
Нет. Я тоже так понимаю.
Здесь все поняли это именно так, и я не первый тебе говорю, что ты передёргиваешь. Тебя прижали твоими же словами, и не имея что возразить, ты решил воспользоваться "последним оружием тролля" - оскорблениями. Молодец! Так и продолжай, только не здесь. Отсюда иди нах, тебе тут не рады.
Жалка, дебилогонятель помер. :(
Падытожу. Нативный компилятор можно написать без использования ассемблера. А вот без знания ассемблера разрабоччиком - нельзя.
А также без знания таблицы умножения и без умения читать и писать.
Ахо у меня ваще-то есть. Подскажите на какой конкретно странице в ней написано, что кодогенератор пишется исключительно на асме?
Я вообще-то говорил о тех все более маргинальных областях, где применение ассемблера (языка или компилятора) до сих пор оправдано. Так что про "исключительность" вы, скажем помягче, придумали. Но перчатку подниму.
"Компилятор - это программа, которая считывает текст программы на одном языке - исходном, и транслирует его в эквивалентный текст на другом языке - целевом" (с), Книга Дракона. Чему ваше #156 более-менее соответствует.
Генерация кода описана в главе 9. Конкретно на стр. 488 (издание Вильямс, 2001 год) написано, что "выход генератора кода может принимать различные виды: абсолютный машинный язык, перемещаемый машинный язык, или язык ассемблера". Все эти варианты перечислены в моем #151, где я пытался расспросить подробнее, как wdrakula обошелся без них, может, целевым языком был ЯВУ? Ответа не получил, но в #169 wdrakula опять высказался в том смысле, что не использовал ничего из перечисленного, а его веселая коза играет без этих баянов.
Ни на йоту не меняя смысла, но слегка обобщив мое давешнее "бэк-энд компилятора ... без ассемблера не написать", мне все-таки хочется услышать от кого-то из выступавших пламенных ораторов, от вас, например, как вы собираетесь писать (а wdrakula, по его утверждениям, уже писал в 1985 году) кодогенератор ... без использования языка целевой машины.
Но оставим за бортом случай ЯВУ как выходного языка и генерацию ассемблерного текста. Меня также интересует, как можно сгенерировать машинный или перемещаемый код, если программист при написании кодогенератора не знает/не использует ассемблер целевого процессора. Из религиозных соображений? Обязательно надо прям в машинными кодами мыслить, наверное, в бинарном формате? Иначе "маразм", как утверждалось в #149? wdrakula выход кодогенератора непосредственно в машинных кодах писал, даже комментариев на ассемблере не делал?
А не много ли вы тут всем глупой лапши на уши взялись развешивать, а?
Сударь, Вы - трепло. А посему, на правах моедратора, ваш дальнейший флуд из этой темы буду нещадно выпиливать. Это - предупреждение. Мое.
del
del
del
del
Архат, может хватит уже херней страдать?
ok, deleted.. :)
P.S.Не вижу смысла оставлять прямые оскорбления на форуме.
Если позволите, сухой остаток от обсуждения данной реализации многозадачности автором triac:
1. С начала я дико удивился, что многозадачность можно создать без выделения собственного стека каждой задаче и обойтись только сохранением контекста.
2. Немного подумав. понял, что запрет локальных переменных и перевод их в статические частично решает проблему, с понятными ограничениями.
3. Подумав еще немного, понял, что если задачи не завершаются стандартным образом, то и с адресами возвратов задач все не так плохо - конечно, они искажаются, но никогда не используются.
4. И еще немного подумав, если все вызовы переключения происходят из основного модуля задачи, то все должно работать.
5. В то же время представленный на рассмотрение Logik фрагмент кода, принадлежащий автору реализации, нарушает свои же требования (использует локальные переменные) и будет работать при строго определенных условиях (если последняя из задач запускается ранее всех остальных), что не говорит в пользу данного варианта.
6. Общий вывод - работать будет, но ограничения имеют место быть (существенные они либо нет, решать индивидуально). Ухудшает ситуацию, что нарушение данных ограничений не влечет за собой каких-либо предупреждений на этапе компиляции, все отдается на внимательность программиста.
6. Если я что то упустил или недопонял, поправьте.
В целом, примерно так. Есть небольшой "нюанс" - использование в задачах библиотек сторонних производителей, который зачастую пишутся такого же уровня специалистами и с использованием Wiring. Отсюда: наличие локалов в библиотеке - явление чуть чаще чем штатное. И второе: наличие внутри библиотечных функций delay().
Любая попытка заменить в библиотечной функции с локалами его на delay_coos() приведет к краху. Но! Именно для этого и написана его библиотека .. ибо нафиг кооперативность и многозадачность, если библиотека температурного датчика делает delay(750) внутри себя .. 0.75 секунды - мимо, Карл! Какая уж тут "точность" его кооперативности да ещё и с заданным временем.
Тем не менее, как поделка, для освоения построения многозадачных систем на начальном уровне - вполне нормальное решение.
Ровно до тех пор пока в задачах нет библиотек и нет желания их "оптимизировать" под такие кооперативные задачи.
Инетерсно, что в астрологии означает "знатный срач на полной луне"
На самом деле, все что там требуется - это решить вопрос с локалами, и запихать в функцию yeld() нормальное переключение задач, предварительно вынеся в глобал счетчик задержки delay() .. он внезапно локален внутри функции. :)
А вот решить вопрос с локалами = дополнить задачу своим стеком. И это уже "следующий уровень". :)