lucky kulon, для программирования достаточно знать английский на уровне - просто "понимания английских слов и предложений", т.е. произношение не так важно, как и знаний многих аспектов грамматики при построении предложений. Ну а если ты уже будешь работать программистом - то тебе придётся коммуницировать и применять уже навыки хорошего произношения и вообще - хорошего владения языка в целом. Вывод: для самостоятельного программирования английский ты можешь выучить сам, на любых ресурсах. Ну а для ВЛАДЕНИЯ языком - придётся идти на курсы. Такова правда.
Приветствую! Ты говорил что в будущем создашь видос про разбор компилятора на примере какого то языка - если сделаешь на примере питона и/или пхп - получишь сразу +20 к карме )) Спасибо заранее)
Спасибо! Очень интересно узнать, конкретно от тебя, больше информации и практики по компиляторам в ближайшем будущем. Язык реализации не столь важен, но Python предпочтительней.
Брат, всё пучком, всё чётенько и по полочкам. Наполненность контента замечательная. Единственное имеется опечатка на 4:46, там 1 фаза не Синтаксический, а Лексический анализ.
2:23 ну как-бы да, но как-бы оно работает чуть по другому как я помню Интерпретатор: вход (код) -> препроцессинг (превращение кода в промежуточный, т.е. байт код) -> выход после препроцессинга -> интерпретатор (выполняет байт код) -> выход Плюсы и минусы интерпретатора: + возможно выполнять код на лету (т.е. сохранил какой-то код в качестве текста в переменную и выполнил при помощи exec() в питухоне) - медленное выполнение (так как всё выполняется на уровне выше, чем нативно (т.е. разные уровни абстракции)) ? безопасная работа с памятью Компилятор: вход (код) -> компиляция (линковка, сборка библиотек в один файл) -> код.obj -> компиляция (уже в исполняемый файл) -> исполняемый файл.exe плюсы и минусы компилятора: + нативное (уже поддерживаемое системой) выполнение - СЛОЖНА - невозможность выполнять код на лету ? ручное управление памятью
Чувак, не подумай, что я выебуюсь, видео четкое, но ты вводишь людей немного в заблуждение на счет этапов. 1. Лексический анализ (он же разбор на токены) 2. Синтаксический анализ (он же парсинг) ... ну а дальше все правильно
относительно семантики.Хорошо написано у Ю.Н.Хараре.Предлагается вообще отказаться от души, чувств,эмоций в угоду потоку данных, информации.Будущее за квантовыми компами.Я-_за.📺‼
Хорошо что людей больше, иначе мы не сложили все потенциалы и не поняли этот мир, без близкого по значению заряда потенциал не соединится с мышлением, это к примеру палочка которая не взлетит если не швырнуть.
А что это за молитва в самом начале ролика на иностранном языке?! Шутка, конечно, но если серьезно, то ваш ролик неоценим. Я с молодости пытался научиться хоть какому-то простенькому программированию, но судьба уводила мои потуги в сторону. Сам электрик, КиПовец, заимаюсь любительской радиоэлектроникой, но хотелось что-нибудь замутить посерьёзнее.... К сожалению одни только термины загоняют в тупик, не говоря о их функциях и методах правильного написания программ!!! Спасибо за грамотное разъяснение и в понятной форме по этой теме!!! ❤️❤️❤️❤️❤️
Может ли кто нибудь обьяснить как именно работает компьютер и транслируется программа на уровне электрического импульса, электрона и т.д. Типа нажал на кнопку клавиатуры и оттуда пошло определенное напряжение и вышло на экране что то? То что на видео объяснено это все могут прочитать и снова не понять :(
Вики архитектура арм или 86 генератируется импульс и попадает в манхэттэн и едет по трассе в сток а там пробка, или все по по очереди или кто-то с мигалками после пробки попадает в ДТП и там полицейский выбирает в телефоне какому прокурору позвонить(регистр) злому или богатому и решает что с тобой делать на 8 или 2 могут и на 0 умножить, если вышел то можно в экран улыбнутся
Пока еще учусь,поэтому не спец в этой теме.Объясните ,в чем же физика этого процесса,нигде не могу найти инфу.Как комптилятор переводит язык в в электрические сигналы,как это происходит вообще
3:42 - не совсем точно. Пример: с точки зрения синтаксиса все может быть правильно, но при этом присутствовать семантические ошибки, несмотря на которые программа скомпилировалась.
Окей. "...тот самый аутпут". Под этой фразой подразумевалось, "Вы получаете то, что желаете получить", а не просто, какой-то там аутпут. Я не делаю ошибок в видео, в 99% случаев. Данный случай - это не тот самый 1%.
Почему не существует полноценного «нодового» (визуального) языка программирования? Я знаю несколько нодовых языков программирования (grasshopper, vvvv, xod ide, UE blueprints,...) в целом они все +-похожи, но ни один из них не даёт возможности создать (скомпилировать) проект в целый конечный вид, в виде самостоятельного приложения. Почему нельзя создать нодовых язык программирования, который давал бы возможность создавать и кросс-платформенные приложения и программироваться контроллеры?. Для знания такого языка не важно знать английский, и не важен синтаксис. С такими языками, больше сосредоточиваешься на алгоритме, и патч по мне намного наглядней чем строки кода. Подобной интересной попыткой был проект Mooha на GitHub но почему то он заглох.
Компиляторы обнаруживают изменённость файла по времени модификации. Если отличается - исходный файл изменён, и его нужно перекомпилировать. Лучше делать это по хэшу исходного файла. Если возвращаешь файл к предыдущему состоянию - он такой же, но снова компилируется. В то время как можно вычислить хэш, увидеть, что такой контент уже компилировался, и повторно этого не делать. К тому же, точно не будет ошибки - время модификации файла может быть перезаписано, а результат хэш-функции не перезапишешь никак. SHA2-256 вычисляется быстро. В современных процессорах, даже самых дешёвых, присутствуют специальные машинные инструкции для ускорения вычислений SHA2-256. Т.е. эту хэш-функцию можно использовать во всех удобных местах - вычислительная нагрузка не очень затратная. На старых компьютерах это более затратно, но на всех новых - вычисляется быстро. Не помню точно порядок цифры, но вычисляется быстро. Присутствие специальных инструкций в общих процессорах говорит о том, что эта хэш-функция предлагается для широкого использования. Обратите внимание, что к другим хэш-функциям, например, к SHA-1, используемой в Git, это не относится. В процессоры Intel были включены специальные машинные инструкции только для SHA2-256 и AES-256. Поэтому, если нужны быстрые вычисления, следует ориентироваться именно на эти алгоритмы - на клиентских компьютерах они будут быстры. В частности, Git следует перевести с SHA-1 на SHA2-256.
Не стоит пользоваться сложными выражениями. Например: *(Output_Buffer + Output_Length++) = 0x80 | Middle_Seven; Озвучивается, что постфиксный инкремент ускоряет вычисление. Что такая форма записи формирует более эффективный машинный код. Может быть, это так. Но главное преимущество языков программирования высокого уровня - это простота. А такая запись очень усложняет понимание. Навскидку, можете сказать что окажется в скобках? То, что до инкремента или после? Когда именно происходит инкремент? До того, как значение переменной попадает в выражение или после? Задумываетесь, не так ли? Интуитивного понимания нет. Приоритеты операций в C, действительно, сложны. Пишите выражения как можно проще. Доступную оптимизацию сделает за Вас компилятор. Ваша программа, в первую очередь, должна быть проста для чтения и понимания. Вместо того, чтобы лепить инкремент прямо в выражение, разместите его как следующий оператор: *(Sueuf_Output_Buffer + Output_Length) = 0x80 | Middle_Seven; Output_Length++; Когда Вы будете читать это, Вы точно будете знать что попадает в выражение и когда именно происходит инкремент. Потому что линейная логика исполнения программы абсолютно естественна. Скажу Вам, что компилятор для этого и предыдущего кода, скорее всего, сформирует совершенно одинаковый машинный код, потому что оптимизация здесь очень проста. В общих задачах, не требующих сверхэффективности, стремитесь к простоте кода, а не к его эффективности. Конечно, есть и задачи, где на первом месте стоит именно производительность. В таких задачах Вам, возможно, потребуется тщательно продуманный C код. Который, возможно, будет выглядеть не самым понятным образом, но зато будет эффективным. В некоторых случаях, Вам даже может понадобится выписать код на ассемблере. Так делают, в частности, в ядрах операционных систем. Там, где в счёт идёт каждая исполняемая инструкция, программа может быть написана даже на ассемблере. Помните, что чем сложнее Вы напишете свой код, тем труднее Вам будет понять его впоследствии. Лично у меня, память о коде хранится не дольше 3-х месяцев. Спустя 3 месяца я смотрю на свой собственный код, и совершенно не могу вспомнить что это и о чём. Мне приходится читать и вникать. И чем проще он написан - тем проще это делать.
чел чисто на середине видео сказал главную проблему почему мы не можем создать ии способного обучатся как человек, а потому что мы точно не знаем как это делает мозг "семантика". поправьте меня там где я ошибся (а я скорее всего ошибся где то)
Очень похоже на разговор о том,как космические корабли бороздят просторы больших и малых театров,а далее огоро дами,огородами и к Ко- товскому...Инпут,аутпут, интерфейс любому кол- хозному электромонте- ру более понятны как вход,выход и провода. Слегка попроще нужно быть.
блин, ну вот збс, если шаришь в программировании и английском. А так типа я так много чего не понял из-за того, что слишком много слов, значение которых надо идти искать, в итогу отвлекаешься и бля...
В C5 ключевое слово "inline" следует заменить на "inlay". "inline" - это слово-паразит, которое мешает программированию. [In-lying]? [В-ложь]? Вероятно, имеются в виду имена ключевых слов, которые мешают программированию. Звучание слова [inlay] больше соответствует смыслу этого ключевого слова: "ляжь-в". Код, который ложится прямо в место вызова функции. Вы можете ввести это ключевое слово в свой код C/C++ с помощью директивы #define в заголовочном файле: #define inlay inline и в дальнейшем использовать вместо "inline" - "inlay". Почему это важно? Потому что Вы это читаете. Правильно звучащие ключевые слова делают язык программирования более эргономичным, более удобным в использовании.
Процедура - функция, не возвращающая значение, - в C5 должна записываться без возвращаемого типа. В C для этого служит ужасное, пугающее слово "void". Думаю, это слово также является палочкой в колесо. Из C5 его необходимо исключить. Процедура должна выглядеть так: Procedure(uint32 Parameter) { ... } Это даёт программисту интуитивное понимание того, что возвращаемого значения у процедуры нет. У функции возвращаемое значение присутствует: uint32 Function(uint8 Parameter) { ... } Не представляю как обеспечить это удобство в C/C++. Макросы делают замену, но здесь должно быть отсутствие печатаемых символов.