Snusmumriken
Он новый.
Александр
даже на Rust Он что особенный?
Просто у раст-сообщества есть привычка переписывать до сырых альф уже написанный и стабилизированный софт
Hello, World! 🎄
Интерпретаторы разные бывают. По мимо эталона есть PyPy, CPython, Jython и другие
СPython вроде позволяет транслировать Python в С код и его уже в машинный компилирует. Jypython ну это Java. Про pypy не слышал, вроде это же просто какой-то сайт с документацией к модулям в Python?
Александр
СPython вроде позволяет транслировать Python в С код и его уже в машинный компилирует. Jypython ну это Java. Про pypy не слышал, вроде это же просто какой-то сайт с документацией к модулям в Python?
путаешь с pip, pypy - это питон на... питоне, у него крутость вроде в более продвинутом анализе, через него часто питонячие линтеры, анализаторы и форматеры делают
Hello, World! 🎄
Он новый.
Новый?
Anonymous
На минутку Си это 1969—1973
Anonymous
Так что Rust довольно молодой язык. А Pypy это реализация питона на питоне.
Snusmumriken
Не знал.
Луа делает то же самое, с аналогичным байткодом. Жава делает то же самое, но "компилирует" в файлики с байткодом которые потом запускает.
Александр
@fhello_world ну так написано "documentation for PyPy, a fast, compliant alternative implementation of the Python language"
Snusmumriken
На минутку Си это 1969—1973
1972-2018, последний крупный стандарт C11 Или ты про год выпуска?
Hello, World! 🎄
Как интерпретируемый язык может быть написан на самом себе (может, но как он будет запустится)? Ему же нужен будет интерпретатор.
Snusmumriken
Как интерпретируемый язык может быть написан на самом себе (может, но как он будет запустится)? Ему же нужен будет интерпретатор.
Смотри. Я беру такой и на луа пишу парсер луа кода, который делает байткод и начинает его выполнять )) Программа "сишного интерпретатора" будет запускать луа интерпретатор, который запустит программу на луа которая будет интерпретировать код на луа.
Anonymous
А Си написан на Си. Большинство языков реализуют по принципу. Написали на чем то, переписали на самом себе.
Александр
Как интерпретируемый язык может быть написан на самом себе (может, но как он будет запустится)? Ему же нужен будет интерпретатор.
Ну так интерпретировать грубо говоря можно любой язык на любом языке. Очевидно, что где-то в конце пути там всё равно сишка, но она отрабатывает по отношению к интерпретатору pypy как ВМ. Хотя и верно, что в конце концов ВМки раскрываются до сишной ВМ, которая в свою очередь исполняется на ВМ в виде тандема ОС/ЦПУ
Anonymous
Это понятно, я про то, что Python на Python ему для запуска нужен Python, смылс от этого.
Забавно , но реализация Pypy в N раз быстрее оригинала. Как то так.
Hello, World! 🎄
Hello, World! 🎄
Тогда есть смылс
Anonymous
Так он потому что компилируемый.
Компиляция и интерпретация, это очень близкие вещи. В 90% случаев.
Snusmumriken
Забавно , но реализация Pypy в N раз быстрее оригинала. Как то так.
Текущая реализация, потому что СЕЙЧАС pypy транслирует таки код на питоне в сишку и компилит. Считай что это самокомпилируемая реализация.
Hello, World! 🎄
Так же как Golang написан на Golang.
Он тоже вроде компилируемый.
Hello, World! 🎄
Текущая реализация, потому что СЕЙЧАС pypy транслирует таки код на питоне в сишку и компилит. Считай что это самокомпилируемая реализация.
Получается меня запутали. Написали блин, что интерпретатор Python на Python написали, я вот и думал зачем. А тут оказывается PyPy реализация Python транслирующаяся в си и компилирующаяся в машинный код.
Александр
Получается меня запутали. Написали блин, что интерпретатор Python на Python написали, я вот и думал зачем. А тут оказывается PyPy реализация Python транслирующаяся в си и компилирующаяся в машинный код.
Ну так иерархия исполнения. Нет ничего удивительного в том, что Код луа/си транслировался в код ВМ1, тот в код ВМ2,...., а тот в автокод или выполнялся существующими порциями машкода, т.е. скомпилированной сишной ВМ. Более того так джава уже лет 20 живёт - Java -> байткод JVM -> собранная к машине JVM. Просто нужно понять, что языки пишут не под процессоры, а под виртуальные машины, а реализована эта ВМ программно или аппаратно - это другой вопрос
usernameak
А Си написан на Си. Большинство языков реализуют по принципу. Написали на чем то, переписали на самом себе.
что забавно, самый старый из дошедших до наших дней компилятор си уже был на си
Sergey
Современный C++ написан на ..... C++. По крайней мере gcc.
Snusmumriken
Я надеюсь, все участники чата понимают условности всего этого?
Snusmumriken
Допустим, язык. Парсер написан на одном, линтер на другом, построитель деревьев вызовов на третьем. Такое происходит тут и там. В конечном итоге большая часть — просто куски машинного кода, которые пофигу на чём были написаны ранее, другая часть интерпретируется.
Anonymous
Как минимум важная цель этого. Что бы разработчик на Си. Мог писать компилятор или понимать как его написали. НУ или Go.... Из новых языков мало кто по настоящему компилируются. Так вот, очень грустно когда ты пишешь на Питоне, но не знаешь Си. Потраха для тебя черный ящик.
Snusmumriken
Это "интерпретатор для всего подряд", когда куча разных яп транслируются в один и тот же байткод.
Anonymous
неее любой человек который поймёт что вообще в компиляторе происходит по любому может писать на других языках
ну вот я могу понять как пишут го. Но я не могу понять как написан Си. Это разные уровни. Реализации бывают простые, а бывают очень сложные. У Java вот >3 VM. Попробуй во всем этом разобраться.... Учитывая что если даже ты знаешь Java, но без знаний С++ там тяжко.
Anonymous
Теория и практика очень разные вещи, увы.
Александр
ну вот я могу понять как пишут го. Но я не могу понять как написан Си. Это разные уровни. Реализации бывают простые, а бывают очень сложные. У Java вот >3 VM. Попробуй во всем этом разобраться.... Учитывая что если даже ты знаешь Java, но без знаний С++ там тяжко.
Си был сначала написан на ассемблере, потом уже когда был компилятор Си на ассемблере с помощью него писали компилятор Си на Си. Более того ассемблеры так вообще когда-то писали в машкодах.
usernameak
Скорее всего его на самом себе переписали, чтоб проще было кроссплатформенный компилятор сделать
компилятор тогда был наглухо прибит гвоздями к архитектуре PDP11 и состоял из лютой лапши
Александр
Скорее всего его на самом себе переписали, чтоб проще было кроссплатформенный компилятор сделать
Ну не совсем - там всё равно внутри иерархия в виде Си->промежуточное представление(аналог llvm/jvm байткода)->ассемблер -> байты
Александр
Ассемблерные вставки в Си коде?
Их обрабатывает ассемблер. Т.е. по сути это эдакий проброс автокода сквозь сишный компилятор, который работает только в условиях, когда соблюдены все соглашения и синтаксис автокода поддерживается программой ассемблером.
Александр
Ок :\
Короче логика в том, что Си - это лишь удобный и общий язык-соглашение, который можно очень легко(т.к. не делает ничего за рамками фон-нейманновской архитектуры) и прозрачно переводить в автокод целевой машины. Переносимость выполняется же за счёт исполнения соглашений по стандарту языка Си и стандартам двоичной трансляции под целевый ЦПУ
Sergey
Основное преимущество С в том, что существуют компиляторы практически подо все платформы. Так-то это ужасный язык, просто все привыкли.
Sergey
Хм, я-то умею, я даже С++ умею, у меня и справка есть и даже не одна))))
Sergey
Смесь префиксной и постфиксной нотации... ну, такое. Из-за этого в С++ нельзя просто написать f() -> int, а нужно auto f() -> int. Ну это так, мелочи, есть и более серьёзные проблемы.
Snusmumriken
Anonymous
Слишком легко обосраться
В любом языке с управлением памятью.
Snusmumriken
Нет, не в любом ) Но обосраться в сишке объективно легко.
usernameak
Слишком легко обосраться
так не срать под себя и не обосрёшься
Anonymous
Пример языка хоть 1?
Sergey
Snusmumriken
И до сих пор блин сколько хаков программ через поля ввода в сишке без проверки длины входящего буфера, когда то что входит больше чем то куда оно входит, и тянет за собой дополнительные инструкции.
Anonymous
Си используют 90% случаев, где без него никак. Альтернатив нет.Где есть возможность альтернативы, уже давно стараются брать другое.
Anonymous
Но в плюсах под себя дать. еще проще...Вопрос в том. Что проще. Запомнить простые дыры или сложные.
Snusmumriken
И до сих пор блин сколько хаков программ через поля ввода в сишке без проверки длины входящего буфера, когда то что входит больше чем то куда оно входит, и тянет за собой дополнительные инструкции.
Да прошивки для nintendo switch хакаются блин браузером этой самой нинтенды, когда в некоторые поля подаётся дополнительная херня с командами для проца по переводу в рутмод и запуск пользовательского кода с перелопачиванием этой самой прошивки ))
Tony
в этом смысле плюсы объективно лучше
Плюсы плохи совместимостью с Си :)
Sergey
в этом смысле плюсы объективно лучше
Да, но к сожалению, они унаследовали множество проблем С. Почитайте Страуструпа.
Anonymous
Но без Си мир не возможен. Так что имеем что имеем.
Tony
Sergey
Но без Си мир не возможен. Так что имеем что имеем.
Мир с роботами?) Боитесь начнут войну?)
Tony
Точнее, давно придумали кучу других
Anonymous
Придумали бы какой-нибудь другой
придумать, можно придумать, получится как Си, но удобнее. Вопрос в том как все Легаси за 50 лет переписать.