Надеюсь, уже не спите, бандиты? У меня накопилось несколько вопросов, и гугл не помог. Надеюсь, добрые аноны ответят на них, желательно без сильного битья хуями по лбу. Итак.
-Что такое фреймворки? Только простыми словами. Прочитал определение из википедии, нихуя не понял. Это что-то типа программы, в которой делают другие программы? Или как? Нихуя не понятно. -Зачем нужны абстрактные классы? Вообще нихуя не понял, зачем они нужны. "У абстрактного класса нет экземпляров". Ну ок, и что из этого следует? Нахуя он нужен? Пишут, что реализует принцип полиморфизма, но мне это не о чём не говорит. -Смежный вопрос - что такое полиморфизм простыми словами? С наследованием и инкапсуляцией быстро разобрался, а эту вот залупу до сих пор не понимаю. Да, пробовал читать в интернете. Нихуя не понял. -Правильно ли я понял, что к классу можно обращаться только через его объект? Типа, если я хочу передать в этот класс какие-то параметры (чтобы он в своём методе что-нибудь с ними сделал), то нужно создать его экземпляр? Или есть ещё какие-то способы? -Чем интерпретатор отличается от компилятора? Вчера препод задал такой вопрос, никто не смог ему внятно ответить. Как я понял, компилятор переводит сразу весь код в байт-код, и там уже начинает его осуществлять, а интерпретатор делает это построчно (т.е. читает строку и сразу переводит). Препод сказал, что нихуя не правильно. Так как правильно то?
>>245479071 (OP) >Что такое фреймворки? Ето типа набор утилит и библиотек. Ну типа репак от васяна со всяким говном и нескучными обоями.
>абстрактные классы Нахуй не нужны, чистой воды суходрочка.
>полиморфизм Ну тип можешь разные алгоритмы для обработки разных данных внутри одного метода реализовать епта
>классу можно обраща Бросай ты это ооп ебучее, оно из тебя гомика сделает.
>интерпретатор отличается от компилятора Канпелятор генерирует исполняемый фаел, а интерпритатар сам исполняет ну или сам передает команды виртуальной машине на исполнение
>>245479071 (OP) 1. Набор либ, чтоб ты не выдумывал свои велосипеды, когда проект делаешь, а делал всё +/- по стандарту этого фреймворка. 2. Чтоб от них наследовать другие классы и вынести туда общие свойства/методы. А вообще наследование не нужно в 2к21 - от него лишь больше гемора. А если смотреть глубже и холиварнее - ФП > ООП. Особенно на JS. Только сильно упарываться не надо, код должен оставаться читабельным 3. Методы с одним названием, но с абсолютно разной реализацией и параметрами (опционально) у наследуемых классов. 4 . >передать в класс какие-то параметры Попробуй не смешивать в голове понятия экземпляр и класс. И погугли о статических методах/полях 5. Он ебанутый либо ты чего-то не так сказал. Нюансы разве что в том, что интерпретатору не надо в байт код. В промежуточный конвертнул , немного оптимизировал даже, если умеет и давай строку запускать. И да, компилятор не обязательно в байт код, а в любой другой язык.
>>245479071 (OP) Лень отвечать на вопросы, которые легко гуглятся, но немного поправлю это: > -Чем интерпретатор отличается от компилятора? Вчера препод задал такой вопрос, никто не смог ему внятно ответить. Как я понял, компилятор переводит сразу весь код в байт-код, и там уже начинает его осуществлять, а интерпретатор делает это построчно (т.е. читает строку и сразу переводит). Препод сказал, что нихуя не правильно. Так как правильно то? Компилятор делает из исходников объектные файлы, а далее уже линковщик их собирает в работоспособную программу. То что ты сказал про интерпритаторы верно. То что ты сказал преподу про компиляторы, на самом деле являются jit-компиляторами, а это немного другое.
>>245479071 (OP) 1) Фреймворк - библиотека. Набор программных вызовов, которые будут использоваться для выполнения какой-то задачи. Дабы не писать тонну однотипных кодов везде, используют уже готовые. 2) Особо сложная абстракция на практике мало используется. Только как часть сложного концепта в особо сложном продукте, как тот же фреймворк. 3) Полиморфизм - возможность использовать разные объекты которые реализуют один и тот же интерфейс (контракт). Полезно, для более "общего вида" кода. Например у тебя 2 разных БД скажем, Mongo и MySQL. Логика обращения к базе разная, а ты хочешь получать данные из одного метода. 4) Есть "статичные методы", которые будут едины для всех объектов. 5)уже ответили выше
>>245479580 > Ето типа набор утилит и библиотек. Ну типа репак от васяна со всяким говном и нескучными обоями. > Нахуй не нужны, чистой воды суходрочка. > Ну тип можешь разные алгоритмы для обработки разных данных внутри одного метода реализовать епта > Бросай ты это ооп ебучее, оно из тебя гомика сделает. > Канпелятор генерирует исполняемый фаел, а интерпритатар сам исполняет ну или сам передает команды виртуальной машине на исполнение Мы вам перезвоним. Ни одного верного ответа, лол. Разве что половина от последнего верно отвечена.
>>245479071 (OP) >Что такое фреймворки? Только простыми словами. Прочитал определение из википедии, нихуя не понял. Это что-то типа программы, в которой делают другие программы? Или как? Нихуя не понятно. есть язык программирования - набор правил и комманд, которые передаются в компилятор, чтобы сделать исполняемый файл. есть библиотека (либа), в которой умные люди уже задолго до тебя сделали набор функций и классов, которые очень часто требуются всем погромистам. фреймворк - это набор библиотек, написанных в определённом стиле, часто являющиеся надстройкой над языком программирования со своими особенностями, например Boost и Qt над C++.
Фреймворк это надстройка поверх языка программирования, позволяющая решать определенный класс задач быстрее и проще, чем язык программирования. Например, если сравнивать со строительством из дерева, то язык программирования это топор, пила, пара клиньев и несколько ножей. Можно сделать что угодно, но скорее всего заебешься. А станок для выпиливания досок это фреймворк. Можно быстро сваять конструкции из досок, но только их, для чего угодно еще нужно будет опять использовать сам язык.
Полиформизм это идея о том, что если ты говоришь компьютеру "сделай Хм У", то не должен думать о том, что для разных У Х делается по-разному. Например, есть у тебя функция съесть(еда). Чтобы съесть банан, надо его помыть и почистить, чтобы съесть мясо его надо обработать температурой, Сникерс надо просто съесть. Но если тебе приходится об этом думать, то программист, писавший эту функцию, накосячил. Смысл как раз в разделении труда: если уж какой-то Вася написал какую-то функцию, делающую какое-то действие, он должен избавить тех кто ее использует от мыслей о том, как именно она работает. Без этого принципа каждому кто использует функцию Васи приходилось бы повторять половину Васиной работы.
Абстрактные классы нужны для технической реализации полиморфизма. Например, Васе может быть проще написать две отдельных функции: съестьСникерс() и съестьБанан(), между которыми не будет абсолютно ничего общего. Тогда для того чтобы ты все-таки видел одну функцию, он напишет абстрактную функцию съесть(), и реализует ее двумя "настоящими" функциями съестьБанан и съестьСникерс. Тогда ты будешь всегда вызывать функцию съесть, технически при этом будет вызываться одна из "настоящих" функций, но тебе будет пофиг.
>>245479790 Наоборот в теории. Есть у тебя фап рулетка (на 100 вариантов), вайфу рулетка(10 вариантов и зависит от 4 цифры id предыдущего сообщения) и аниме рулетка(на 10 вариантов с даблами и триплами). Эти рулетки реализуют интерфейс rollable, а точнее его метод roll. У всех разная реализация, а у вайфу будет отличаться количество параметров. Но ты уверен, что если этот класс реализует Rollable, то ты можешь роллять с помощью roll(id).
>>245479071 (OP) Берешь и кодишь. Препод блядь, как же отсала система образования, препод спросил что такое интерпретатор. Блядь открой питон, открой любой компилируемый язык и покажи эту разницу на практике. Не бля, будут дуить каким нибудь лекциями бедных студентов, препод скахал блядь. Хочешь научиться разрабатывать - бери и разрабатывай. Курсы не советую - это для быдла. Читай книги на тематику и изучай методом научный тык + гугл. Можно посмотреть ченить на ютабе но это такое.
>>245480259 Не маняврируй. Ты вчера так и не пояснил за проблему безопасности системд. Сам системд и линукс - 2 совершенно разные темы. Если системд обосрется, то это точно не по вине линукса. Также, можно выбрать дистрибутив GNU/Linux'а без системд. >>245480308 А системд тут причем?
>>245480463 >можно выбрать дистрибутив GNU/Linux'а без системд. Но их нет. Генту в прод сунет только полный идиот, как и красноглазые форки форков дебиана с sysv.
>>245480508 Пишешь пайтон скрипт, сохраняешь файл, пишешь python hello_world.py, оно работает. Делаешь также с с++ или явой - оно не работает, надо сначала компилировать. Все. Просто и понятно. Также и со всеми остальными темами. Одна из основных черт дебильной системы образования - склонность к переусложнению простых вещей.
>>245480567 Ты так и продолжишь жопой вилять? В чем проблема безопасности системд? >>245480591 Это нихуя не покажет различия. Они отличаются больше, чем способом запуска результата. Сам компилятор кстате не дает бинарник в результате. Его вывод нужно еще слинковать. >>245480605 Оп запутался во всей этой хуйне, поэтому я и пояснил. Все остальное гуглится.
>>245480751 >Это нихуя не покажет различия. Они отличаются больше, чем способом запуска результата. Сам компилятор кстате не дает бинарник в результате. Его вывод нужно еще слинковать. На практике мой подход даст больше знания, чем унылый зубреж беспредметный. Те, кто столкнется с этим, выучат различия на парктике. А по факту имеющая манера обучения приводит к тому, что половина группы не поймет вообще ничего, а вторая половина зазубрит к ЭкЗаМеНу. А не реальную работу пойдет только тот, кто копал тему сам вне занятий, а не смотрел в рот ебаным преподам, отрабатывающим свобю зарплату.
>>245480856 >На практике мой подход даст больше знания, чем унылый зубреж беспредметный. Те, кто столкнется с этим, выучат различия на парктике. А по факту имеющая манера обучения приводит к тому, что половина группы не поймет вообще ничего, а вторая половина зазубрит к ЭкЗаМеНу. А не реальную работу пойдет только тот, кто копал тему сам вне занятий, а не смотрел в рот ебаным преподам, отрабатывающим свобю зарплату.
Раз уж тут тред тупых вопросов, то вкочусь. А правда, что супер продвинутые программисты могут переключать зрение на такое, как у Нео? Ну т.е. видеть, как существует мир на низком уровне, предсказывать, действовать, как команда ИИ в доте против геймеров, используя весь потенциал в рамках правил игры.
>>245480856 > На практике мой подход даст больше знания, чем унылый зубреж беспредметный. А потом такие маньки нихуя не будут понимать че к чему. > Те, кто столкнется с этим, выучат различия на парктике. А нахуй тогда такое образование надо? > А не реальную работу пойдет только тот, кто копал тему сам вне занятий, а не смотрел в рот ебаным преподам, отрабатывающим свобю зарплату. Ну тут согласен.
>>245481011 >Раз уж тут тред тупых вопросов, то вкочусь. А правда, что супер продвинутые программисты могут переключать зрение на такое, как у Нео? Ну т.е. видеть, как существует мир на низком уровне, предсказывать, действовать, как команда ИИ в доте против геймеров, используя весь потенциал в рамках правил игры.
>>245481041 Надо будет - разебрутся. >А нахуй тогда такое образование надо? Бинго. Оно не нужно. Синтаксис, книги по паттернам и алгоритмам, книги по предметной зоне и нужным фреймворкам - вуаля, ты программист лучше, чем 99 процентов выпускников российских говновузов.
>>245481119 >Синтаксис, книги по паттернам и алгоритмам, книги по предметной зоне и нужным фреймворкам - вуаля, ты программист лучше, чем 99 процентов выпускников российских говновузов.
>>245479071 (OP) >-Что такое фреймворки? Часто это просто библиотека, в которой реализованы какие то фишки, которые можно юзать в своём коде, что бы не городить велосипеды. Но в отличие от библиотеки, может ещё добавлять какую то функциональность, которую нельзя добавить средствами самого языка. >-Зачем нужны абстрактные классы? Абстрактный класс нужен если ты написал какой то промежуточный класс, экземпляры которого не нужны, но его функциональность нужна в потомках. Например ты написал абстрактный класс солдат в стратежке, который имеет хп, может бегать и может умирать, но по факту такого базового юнита тебе не надо. А потом наследовал от него два класса автоматчик и хилер, один ещё может стрелять а второй хилить. Что б не переписывать базовую механику для автоматчика и хилера - её выносят в родитель. >Смежный вопрос - что такое полиморфизм простыми словами? Вот как в примере выше. Полиморфизм - это способность наследования беганья и умирания у солдата и хилера от солдата. >Правильно ли я понял, что к классу можно обращаться только через его объект? В целом к нему можно обращаться через статические методы и поля. >-Чем интерпретатор отличается от компилятора? Компилятор преобразовывает код в машинный код для конкретного процессора (х86 или арм) Интерпретатор преобразовывает код в процессоронезависимый байт код, который уже в процессе выполнения преобразовывается в машинный код на лету.
>>245479657 >>245479580 >>245479071 (OP) Про фреймворк чуток сложнее все. Фреймворк от библиотеки в основном отличается тем, что он предоставляет некоторую точку расширения функционала. То есть во фреймворке реализуется "push"-модель. А в либках обычно "pull" модель
>>245479071 (OP) Наверняка уже ответили, но я тоже поясню своими словами. >Что такое фреймворки Это некая "заготовка" или "полуфабрикат" на твоём языке программирования для какого-то типа программ. например, для вебсервера. Уже почти всё сделано, причем на высоком уровне сделано (с учетом безопасности, производительности и прочей хуйни) осталось лишь сделать тонкую настройку под твой проект. >Зачем нужны абстрактные классы? Чтобы кода меньше писать и поддерживать. Например, у тебя пять таблиц в базе, которые отличаются одним полем, а остальные 100 полей одинаковые. Тебе нужно настроить интерфейс доступа к базе для каждой таблицы. Ты можешь написать пять классов и в каждом описать всё 101 поле, а можешь написать один абстрактный класс на 100 полей и 5 классов, наследующихся от абстрактного, и с 1 дополнительным полем каждый. Так намного проще всё читается, легче понять че происходит и легче вносить изменения. Аналогично, с методами, когда есть 10 одинаковых для всех классов методов и 1 отличающийся. Лучше, когда одинаковые не повторяются, а хранятся в одном месте. >полиморфизм простыми словами Когда вызываешь один и тот же метод у разных классов, а выполняется он по разному, потому что у всех он немного по-другому реализован >к классу можно обращаться только через его объект? Класс - это тоже объект типа "класс", можно обратиться и к классу напрямую, без объекта, вызвав классовый метод, например >Чем интерпретатор отличается от компилятора Интерпретатору не нужна компиляция, можно сразу файлы запускать и они тут же выполнятся. Компилятор же должен сначала скомпилить весь твой код в отдельный файл и его уже надо запускать. На самом деле, интерпретатор не так прост, что тупо построчно выполняет. На самом деле, он создает "ускоренные" версии файлов на лету, а если какой-то файл выполняется часто и много, есть фишка, которая делает сорт оф компиляцию, создавая ещё более ускоренные версии файлов.
>>245479071 (OP) Я лично не понимаю чем на фронтенде отличается либа от фреймворка. В других языках просто сразу видно где фреймворк, где либа. Фреймворк - КАРКАС, почему реакт не фреймворк?
>>245481011 Да. Но если отталкиваться от твоего представления, то они на программистов не похожи. Это пограничные люди, у которых точно нет должности тимлидов и архитекторов в корпорациях. В лучшем случае - это чудак, прогрессивный дед на своей волне.
>>245479830 >Компилятор делает из исходников объектные файлы, а далее уже линковщик их собирает в работоспособную программу. Окей, допустим это верно >То что ты сказал про интерпритаторы верно. >То что ты сказал преподу про компиляторы, на самом деле являются jit-компиляторами, а это немного другое. Что ты несешь блять?
Интерпретаторы НИХУЯ НИЧЕГО НЕ КОМПИЛИРУЮТ, интерпретатор просто читает код (возможно его промежуточное представление после перевода в байткод, см. java), определяет функции, параметры, и грубо говоря свитчкейсом хуячит вызывать ту функцию или интринсик, которую надо, с переданными параметрами. Компиляции никакой нет, компиляция только для самого интерпретатора, и вообще говоря голый интерпретатор, без какой-либо поддержки JITа или вызова скомпилированных библиотек, можно и без ассемблера написать работать это нихуя не быстро будет, конечно же, но зато платформонезависимость хуемое
А JIT нихуя не обязан компилить ВЕСЬ код, как правило компилятся только отдельные функции, то есть тут как раз можно условно счтитать "компилируется по мере поступления кода". Не совсем, так как компилируется сразу ВСЯ функция, применяются оптимайзеры-циклоанолайзеры-прочее, но если у тебя в коде написано "zalupa.huj(pizda);", то JIT компиляция пойдет при вызове данной строки, а не задолго до нее
Я правильно понимаю, что в c++ есть параметрический полиморфизм и он реализован через вируальные методы, а есть ad-hoc реализованный обычной перегрузкой?
>>245479071 (OP) >-Что такое фреймворки? Чужой код, который ты используешь >-Зачем нужны абстрактные классы? Ваще не ебу >-Смежный вопрос - что такое полиморфизм простыми словами? Ну типа... забыл чот >-Правильно ли я понял, что к классу можно обращаться только через его объект? Типа, если я хочу передать в этот класс какие-то параметры (чтобы он в своём методе что-нибудь с ними сделал), то нужно создать его экземпляр? Или есть ещё какие-то способы? А нахуя? >-Чем интерпретатор отличается от компилятора? Компилятор перевод в машинный код, а интерпретатор сразу хуярит. Наверно
> Фреймфорк - библиотека framework - сходите в гугл транслейт хотя бы, бля дебилы... Это прежде всего набор практик и архитектурных паттернов, фреймворк предполагает работу в рамках всех этих практик и паттернов. А то что вы описываете, суть библиотека чего-нибудь, что в корне не верно по отношению к понятию фреймфорка. Agile/SCRUM тоже фреймворк например, а оно вообще не про написание кода.
Абстрактные классы нужны, что бы делать архитектуру, на этапе когда ты в душе не ебешь с чем конкретно придется работать, или например ты пишешь публичный API. Те же фреймворки активно юзают абстракные классы, т.к. они не знают, что за бизнес логику ты будешь делать, но построить взаимодействие на уровне внутренних систем уже можно.
В разных языках по разному, но обращение напрямую к свойствам класса возможно, обычно это нужно явно указать как статичный метод/свойство. Единственное, о чем надо помнить - в статичном методе нет this, т.е. нет инстанса. Тема использования всего этого добра холивар тот еще. Нормально использовать например статичные свойства как некие константные значения в скоупе конкретного класса. Стат методы могут быть например использованы для реализации синглтон патерна. Короче, не надо из везде пихать, надо думать башкой.
Компилятор генерит готовый машиный код, интерпритатор делает это на лету. Еще есть разница в обработке ошибок. Компиляция занимает время, но скомпилированная программа работает быстрее.
>>245485784 > Интерпретаторы НИХУЯ НИЧЕГО НЕ КОМПИЛИРУЮТ Правильно, они транслируют исходный код в машинный. В чем ошибка у опа? > интерпретатор просто читает код (возможно его промежуточное представление после перевода в байткод, см. java) Java является jit-компилируемой. Внутри jvm происходит не интерпритация, а трансляция байт-кода в машинный. > Компиляции никакой нет, компиляция только для самого интерпретатора Мань, исходники комплириуются в байт-код, который уже исполняет сам jvm(в случае с жабой), со всеми оптимизациями и прочими прелестями компиляции. Далее, байт-код транслируется в машинный. > и вообще говоря голый интерпретатор, без какой-либо поддержки JITа Интерпритатор не может поддерживать jit, такого просто не существует, лол. > А JIT нихуя не обязан компилить ВЕСЬ код Обычный компилятор тоже не обязан компилировать весь код, интерпритатор не обязан интерпритировать весь код... Но как правило, компилируется ВЕСЬ код. Это правило не работает разве что в каких-то васянских jit'ах и хранятся они далеко в глубинах гитхаба. Я, например, про таких даже не слышал. > как правило компилятся только отдельные функции И как это должно работать? > "компилируется по мере поступления кода" Сам то понял что сказал? Сейчас бы что-то компилировать на пользовательской машине... > но если у тебя в коде написано "zalupa.huj(pizda);", то JIT компиляция пойдет при вызове данной строки, а не задолго до нее Мань, от того, что компиляция называется jit, сути самой компиляции не меняет. Только вместо объектных файлов, ты получишь байткод.
>>245479071 (OP) Нахуй вы везде вставляете "типа", зумерье ебаное? Без него твое предложение потеряло бы смысл? Если ты так же будет засирать код, то лучше сразу иди на завод.
>Java является jit-компилируемой. Внутри jvm происходит не интерпритация, а трансляция байт-кода в машинный. В jvm и интерпретация, и компиляция, здрасьте >Мань, исходники комплириуются в байт-код, который уже исполняет сам jvm(в случае с жабой), со всеми оптимизациями и прочими прелестями компиляции. Далее, байт-код транслируется в машинный. Байткод - это не компиляция, это промежуточное представление, ты блять можешь СРАЗУ писать на байткоде и это будет выполняться спокойно, как бы максимально неоптимально твой байткод не был бы. И держу в курсе, данные представления спокойно между друг другом переводятся, lookup class to dex >Интерпритатор не может поддерживать jit, такого просто не существует, лол. Скажи это HotSpotу, ARTу, скажи это V8 >Обычный компилятор тоже не обязан компилировать весь код, интерпритатор не обязан интерпритировать весь код... Но как правило, компилируется ВЕСЬ код. Это правило не работает разве что в каких-то васянских jit'ах и хранятся они далеко в глубинах гитхаба. Я, например, про таких даже не слышал. Опять таки, скажи это HotSpotу, ARTу, скажи это V8, ВСЕ блять компилят функции при достижении хот лимита, знаешь почему? Потому что блять компиляция - вещь дорогая, если ты блять 10 строчек вызываешь раз за весь рантайм, тебе нахуй не сдалось это компилировать в машинный, проще запустить интерпретатор. Осключение - AOT, но это отдельная песня, не везде поддерживается >И как это должно работать? Держишь хотнесс каунтер на функцию, видишь, что часто вызывается - отправляешь на компиляцию. там компилируется и инлайнится только то, что можно (то есть интринсики, луп анроллинг и прочие прелести), вызовы ДРУГИХ функций оформляются как ВЫЗОВ функций (иногда еще есть инлайнинг, но это сложная песня)
>>245482733 Потому что реакт сам по себе не решает никакой задачи, он просто дергает возвращающие жсх функции. Если ты к нему добавишь еще несколько хуевин, и сам напишешь для каждого компонента логику обновления - тогда у тебя получится фреймворк имени самого себя.
>>245488828 > В jvm и интерпретация, и компиляция, здрасьте В jvm происходит трансляция байткода в машинный. > Байткод - это не компиляция Да, это не компиляция, это результат компиляции. > это промежуточное представление Ок, а объектные файлы при компиляции это уже готовый результат? > ты блять можешь СРАЗУ писать на байткоде и это будет выполняться спокойно, как бы максимально неоптимально твой байткод не был бы. Ты также можешь и объектные файлы писать и они слинкуются. > Скажи это HotSpotу, ARTу, скажи это V8 2 первых говна не гунлится, V8 на пике. > Опять таки, скажи это HotSpotу, ARTу, скажи это V8, ВСЕ блять компилят функции при достижении хот лимита, знаешь почему? Все это кто? Хоть один пруф давай. Нахуя что-то компилировать на машине пользователя? > Потому что блять компиляция - вещь дорогая, если ты блять 10 строчек вызываешь раз за весь рантайм, тебе нахуй не сдалось это компилировать в машинный, проще запустить интерпретатор. Эти 10 строчек выполнятся везде за доли микросекунд, какая разница че с ними делать? К слову, в нормальных иде, компилируются только измененые файлы. > Держишь хотнесс каунтер на функцию, видишь, что часто вызывается - отправляешь на компиляцию. Нахуя? Объясни смысл компиляции на пользовательской машине. Это лишние подвисания и прочее говно. Мб ты путаешь с inline функциями, которые могут компилироваться либо как функция, либо встратваться в код? Там как раз нечто похожее и происходит.