Вопрос простой: они научились предотвращать деление теломеров (т.е. фактически запрограммированное в нашем организме старение) или хотя бы значимо его замедлять.
Если нет - то какое это имеет отношение к замедлению старения кроме косметического?
Ну у меня два "честных" варианта: - отлежаться, потом поднапрячься, и за 2 недели выдать +/- ту же продуктивность, что без болезни, да в первые 3 дня пока я лежу - можете мне звонить и спрашивать, но прогать я не могу; - 3 дня больничных, потом удалёнка - но тогда и звонков типа "а вот таска в каком состоянии" не нужно; и "поднапрягаться" в оставшиеся 7 рабочих дней я тоже не буду;
Но почему-то кажется, что подразумевается вариант: эти 3 дня что ты отлёживаешься как раз войдут в больничные, болеешь - значит болей, но звонить если что срочно нужно узнать мы тебе всё равно будем - и этот вариант мне уже немного не нравится.
Не буду писать дальше, чтобы не быть похожим на ворчливого деда )) Разумеется написать компилятор к боле-менее взрослому языку крайне объёмная задача и лучше работающий прототип, чем идеальная модель без единой строчки кода.
Я не совсем понял что значит "проприетарный IR" (просто тут может быть условно и JIT-объектник (который почти не отличается от исходного кода), а может быть уже почти готовый бинарнит (этот вариант намного хуже). Если "проприетарный IR" похож на бинарник (например появились архитектурно-специфичные команды, есть конкретный флаговый регистр, виртуальные регистры распределены....) то задача похожа на бинарную трансляцию.
Если это именно только-только сгенерированный IR - то можете дальше не читать.
==================== Если задача похожа на бинарную трансляцию, то:
Дооптимизировать код, лежащий в бинарнике "generally" идея так себе. Сделать бы так, чтобы работало (что не отменяет того факта, что если у вас изначально очень слабый компилятор - можно иногда что-то и улучшить).
Делать TBAA на IR это боль. Слишком много паразитной семантики в бинарник уже внесли (люди по незнанию пишут "слишком мало семантики в бинарнике" - это обратно реальному положению дел)
Один из известных подходов - делать отдельную фазу компиляции RTMD (run time memory delimitation), которая в run-time проверяет пересекаются ли два "массива" (указатель и отдельный атрибут длины) - если удалось доказать, что не пересекаются, выполняют оптимизированный код, если нет (проверка консервативна) - код предусматривающий возможность пересечения.
Как под это дело приспособить LLVM и можно ли (как бы он ещё свою паразитную семантику не внёс, свзязанную с ограничениями LLVM-IR, надо проверять), я не знаю.
Ты пришёл и говоришь: дзин возьми чаевые. Но ты даёшь деньги мне без уважения, не восхваляя моё искусство обслуживания до небес. Ты дикий гайдзин даже не назвал меня сан.
Я понимаю, что вопрос общий и ответ "везде по разному", но раз вы упомянули типовой сценарий, то вот типовой кейс к сценарию:
Я заболел простудой. Сказал работодателю: следующие 2 недели из дома. При этом первые несколько дней буду отлёживаться (пока голова ватная), следующие работать.
Эти условно 3 дня, пока я не могу программировать (хотя могу сказать, где что и как по общим вопросам) - они в те 5 дней больничных войдут или нет?
Смысл всего пункта - вопросы по языку принимаются, или это not the point. Вот у вас тип возвращаемого значения можно не указывать, если он void, почему так? Вот у вас let, а не let mut (т.е. по-умолчанияю данные мутабельны), почему так? Вот у вас return следовательно {} не является expression (следовательно switch expression надо будет приделывать к языку отдельным оператором), почему так? Вот вы собираетесь делать вывод типов (вводить auto по-простому), уже думали насколько мощным он может быть в такой системе типизации? ...
2.1 Изначальная проблема: dangling if (не знал термина) на пустом месте усложняет язык для программиста (т.е. плохой неинтуитивный дизайн). Т.е. программисту надо не только помнить 100500 объективно сложных моментов, а ещё и вдобавок 100500 неоднозначностей, которых при лучшем дизайне не было бы.
2.2 Извините был невнимателен, действительно примеры нельзя интерпретировать никак иначе, кроме обязательности скобок.
А просвятите пожалуйста (если серьёзно работаете): 1. TBAA же фронтэнд (делается на call-graph, то есть до IR), разве нет, т.е. как понимать вашу фразу "форнтэнд не интересует, интересует TBAA"?
2. А разве с C\C++ подобных языках чего-то ждут от TBAA? Насколько я понял, что консенсус: - не только алгоритмически неразрешимо, но и каких-то прорывных подходов ждать не стоит => если за N^1.5 (условно) не удалось доказать эквивалентность всё считаем разным. - ну и strict aliasing для тех, кто ССЗБ.
Спасибо. Удачи вам, в целом масштабный обучающий\хобби проект, искренне желаю вам довести его до конца и не пополнять "хабровское кладбище недоделанных прекрасных проектов".
ПС Я правильно понял, что язык в целом учебный и служит целью "чтобы было вокруг чего писать компилятор" и какие-то каверзные вопросы (почему проблему if {} if {} else {} не поправили) вам задавать не стоит?
Здравствуйте спасибо за статью. Позвольте пару уточнений: 1. А что представляет из себя сам язык (или это "general C++ подобное (без мультинаследования надеюсь) в образовательных целях), а то как-то обсуждать технические моменты без а) общей идеи б) технической реализации -- не очень удобно.
2. Вы в прошлой статье обмолвились, что "компилятор делится на 2 части front-end и back-end". Мне кажется, что сегодня уже лучше говорить как в LLVM: front-end (всё до преобразования в IR), middle-end (аппаратно-независимые оптимизации над IR), back-end (аппаратно-зависимые оптимизации над IR и планирование+кодогенерация).
Мне кажется, что это два принципиально разных примера.
В случае с Catapult C - вы можете обычными методами тестирования проверить правильность С-программы. И дальше - специфические тесты на транслятор Catapult C. То есть специфические тесты на ошибки в двух моделях.
В случае же с ChatGPT у вас нет ни одной модели, верность которой вам проверять.
Пожизненный не надо - а вот для подачи и отзыва заявления только ножками в МФЦ уже хорошо (это бОльшую часть нежелательных случаев закрывает, и оставляет возможность воспользоваться желательными - взять квартиру в ипотеку, а потом опять запрет на кредит).
А как предусмотрены разные форс.мажоры, типа "основную карточку потерял", а не неосновную обычно переводил минимум денег в целях безопасности, хочу пойти в овердрафт на 3 дня, а тут ОПППА
Просто тут (в США) банки преимущественно отучили подсовывать подлянки
А можно узнать как это произошло. Из шапочно знакомых многие пишут, что чуть не из почтовых ящиков вынимают платёжки плохо отличимые от писем гос.организаций.
И вроде ничего не поделаешь "свобода договора", которая оборачивается "бачили очи шо куповали"
Пример анимешников тут очень показателен, всем кажется, что "ну аниме и аниме, вроде похоже", а они видят, что это чушь полная )
Так это же замечательно. Если НС рисуют "полную чушь" - значит заработки художников достаточно хорошо защищены. Осталось только НС качественно облажаться - и художники могут даже поднять расценки на свои творения (мы все увидим, что недооценивали их навыки и готовы будем платить больше).
А обычные люди будут наслаждаться тем, что им нравится, не разбирая "патентованное это аниме" или "чушь полная от нейросетки"
Сейчас та же история, и последствия будут те же: ремесленники с фентези-аниме-аватарками-обоями за 200 рублей или начинают расти, или ищут настоящую работу,
Ну я пару лет назад хотел заказать 3 аватарки в стиле фэнтези (при этом ТЗ было именно "в стиле" - сейчас такие Midjourney рисует пачками). Мне 3 тысячи (по тысяче рублей за аватарку) зарядили. Я подумал и сказал "не очень то было надо".
Вопрос простой: они научились предотвращать деление теломеров (т.е. фактически запрограммированное в нашем организме старение) или хотя бы значимо его замедлять.
Если нет - то какое это имеет отношение к замедлению старения кроме косметического?
Спасибо классные ссылки.
Вот ещё, must see на мой взгляд (цикл лекций) - просто такого уровня изложение я мало где видел.
https://www.youtube.com/watch?v=QOIn8Uh3lkE
Ну у меня два "честных" варианта:
- отлежаться, потом поднапрячься, и за 2 недели выдать +/- ту же продуктивность, что без болезни, да в первые 3 дня пока я лежу - можете мне звонить и спрашивать, но прогать я не могу;
- 3 дня больничных, потом удалёнка - но тогда и звонков типа "а вот таска в каком состоянии" не нужно; и "поднапрягаться" в оставшиеся 7 рабочих дней я тоже не буду;
Но почему-то кажется, что подразумевается вариант: эти 3 дня что ты отлёживаешься как раз войдут в больничные, болеешь - значит болей, но звонить если что срочно нужно узнать мы тебе всё равно будем - и этот вариант мне уже немного не нравится.
Да спасибо понял.
Не буду писать дальше, чтобы не быть похожим на ворчливого деда ))
Разумеется написать компилятор к боле-менее взрослому языку крайне объёмная задача и лучше работающий прототип, чем идеальная модель без единой строчки кода.
Удачи вам.
Я не совсем понял что значит "проприетарный IR" (просто тут может быть условно и JIT-объектник (который почти не отличается от исходного кода), а может быть уже почти готовый бинарнит (этот вариант намного хуже). Если "проприетарный IR" похож на бинарник (например появились архитектурно-специфичные команды, есть конкретный флаговый регистр, виртуальные регистры распределены....) то задача похожа на бинарную трансляцию.
Если это именно только-только сгенерированный IR - то можете дальше не читать.
====================
Если задача похожа на бинарную трансляцию, то:
Дооптимизировать код, лежащий в бинарнике "generally" идея так себе. Сделать бы так, чтобы работало (что не отменяет того факта, что если у вас изначально очень слабый компилятор - можно иногда что-то и улучшить).
Делать TBAA на IR это боль. Слишком много паразитной семантики в бинарник уже внесли (люди по незнанию пишут "слишком мало семантики в бинарнике" - это обратно реальному положению дел)
Один из известных подходов - делать отдельную фазу компиляции RTMD (run time memory delimitation), которая в run-time проверяет пересекаются ли два "массива" (указатель и отдельный атрибут длины) - если удалось доказать, что не пересекаются, выполняют оптимизированный код, если нет (проверка консервативна) - код предусматривающий возможность пересечения.
Как под это дело приспособить LLVM и можно ли (как бы он ещё свою паразитную семантику не внёс, свзязанную с ограничениями LLVM-IR, надо проверять), я не знаю.
Ты пришёл и говоришь: дзин возьми чаевые. Но ты даёшь деньги мне без уважения, не восхваляя моё искусство обслуживания до небес. Ты дикий гайдзин даже не назвал меня сан.
Я понимаю, что вопрос общий и ответ "везде по разному", но раз вы упомянули типовой сценарий, то вот типовой кейс к сценарию:
Я заболел простудой.
Сказал работодателю: следующие 2 недели из дома. При этом первые несколько дней буду отлёживаться (пока голова ватная), следующие работать.
Эти условно 3 дня, пока я не могу программировать (хотя могу сказать, где что и как по общим вопросам) - они в те 5 дней больничных войдут или нет?
Смысл всего пункта - вопросы по языку принимаются, или это not the point. Вот у вас тип возвращаемого значения можно не указывать, если он void, почему так? Вот у вас let, а не let mut (т.е. по-умолчанияю данные мутабельны), почему так? Вот у вас return следовательно {} не является expression (следовательно switch expression надо будет приделывать к языку отдельным оператором), почему так? Вот вы собираетесь делать вывод типов (вводить auto по-простому), уже думали насколько мощным он может быть в такой системе типизации? ...
2.1 Изначальная проблема: dangling if (не знал термина) на пустом месте усложняет язык для программиста (т.е. плохой неинтуитивный дизайн). Т.е. программисту надо не только помнить 100500 объективно сложных моментов, а ещё и вдобавок 100500 неоднозначностей, которых при лучшем дизайне не было бы.
2.2 Извините был невнимателен, действительно примеры нельзя интерпретировать никак иначе, кроме обязательности скобок.
А просвятите пожалуйста (если серьёзно работаете):
1. TBAA же фронтэнд (делается на call-graph, то есть до IR), разве нет, т.е. как понимать вашу фразу "форнтэнд не интересует, интересует TBAA"?
2. А разве с C\C++ подобных языках чего-то ждут от TBAA?
Насколько я понял, что консенсус:
- не только алгоритмически неразрешимо, но и каких-то прорывных подходов ждать не стоит => если за N^1.5 (условно) не удалось доказать эквивалентность всё считаем разным.
- ну и strict aliasing для тех, кто ССЗБ.
Спасибо.
Удачи вам, в целом масштабный обучающий\хобби проект, искренне желаю вам довести его до конца и не пополнять "хабровское кладбище недоделанных прекрасных проектов".
ПС
Я правильно понял, что язык в целом учебный и служит целью "чтобы было вокруг чего писать компилятор" и какие-то каверзные вопросы (почему проблему if {} if {} else {} не поправили) вам задавать не стоит?
Здравствуйте спасибо за статью.
Позвольте пару уточнений:
1. А что представляет из себя сам язык (или это "general C++ подобное (без мультинаследования надеюсь) в образовательных целях), а то как-то обсуждать технические моменты без а) общей идеи б) технической реализации -- не очень удобно.
2. Вы в прошлой статье обмолвились, что "компилятор делится на 2 части front-end и back-end". Мне кажется, что сегодня уже лучше говорить как в LLVM: front-end (всё до преобразования в IR), middle-end (аппаратно-независимые оптимизации над IR), back-end (аппаратно-зависимые оптимизации над IR и планирование+кодогенерация).
Мне кажется, что это два принципиально разных примера.
В случае с Catapult C - вы можете обычными методами тестирования проверить правильность С-программы. И дальше - специфические тесты на транслятор Catapult C. То есть специфические тесты на ошибки в двух моделях.
В случае же с ChatGPT у вас нет ни одной модели, верность которой вам проверять.
Почти со всем согласен, но второй пример - это же ужас, в виде мины под будущие изменния.
a, *mid, b = [1, 2, 3, 4, 5, 6]
print(a, mid, b)
# 1 [2, 3, 4, 5] 6
Хм.. а разве в решении "оракл против гугл" не было отдельно указано, что решение не создаёт прецедента?
Пожизненный не надо - а вот для подачи и отзыва заявления только ножками в МФЦ уже хорошо (это бОльшую часть нежелательных случаев закрывает, и оставляет возможность воспользоваться желательными - взять квартиру в ипотеку, а потом опять запрет на кредит).
А как предусмотрены разные форс.мажоры, типа "основную карточку потерял", а не неосновную обычно переводил минимум денег в целях безопасности, хочу пойти в овердрафт на 3 дня, а тут ОПППА
А можно узнать как это произошло. Из шапочно знакомых многие пишут, что чуть не из почтовых ящиков вынимают платёжки плохо отличимые от писем гос.организаций.
И вроде ничего не поделаешь "свобода договора", которая оборачивается "бачили очи шо куповали"
Главное потом не словить: "да на порядок в двоичной системе - ну мы же программисты, для нас она родная"
Отличный тест на "понимаете ли вы разницу между искусством и историей искусства".
Так это же замечательно.
Если НС рисуют "полную чушь" - значит заработки художников достаточно хорошо защищены. Осталось только НС качественно облажаться - и художники могут даже поднять расценки на свои творения (мы все увидим, что недооценивали их навыки и готовы будем платить больше).
А обычные люди будут наслаждаться тем, что им нравится, не разбирая "патентованное это аниме" или "чушь полная от нейросетки"
Ну я пару лет назад хотел заказать 3 аватарки в стиле фэнтези (при этом ТЗ было именно "в стиле" - сейчас такие Midjourney рисует пачками).
Мне 3 тысячи (по тысяче рублей за аватарку) зарядили. Я подумал и сказал "не очень то было надо".