[ /b/ /u/ /rf/ /dt/ /vg/ /r/ /cr/ /lor/ /mu/ /oe/ /s/ /w/ /hr/ ] [ /a/ /ma/ /sw/ /hau/ /azu/ ] [ /tv/ /cp/ /gf/ /bo/ /di/ /vn/ /ve/ /wh/ /fur/ /to/ /bg/ /wn/ /slow/ /mad/ ] [ /d/ /news/ ] [ Главная | Настройки | Закладки | Плеер ]

 [ Скрыть форму ]
Имя
Не поднимать тред 
Тема
Сообщение
Капча Капча
Пароль
Файл
Вернуться к
  • Публикация сообщения означает согласие с условиями предоставления сервиса
  • В сообщениях можно использовать разметку wakabamark
  • На данной доске отображаются исходные имена файлов!
  • Разрешенные типы файлов: music, vector, image, code, pdf, flash, archive, text, video
  • Тред перестает подниматься после 500 сообщений.
  • Треды с числом ответов более 100 не могут быть удалены.
  • Старые треды перемещаются в архив после 40 страницы.

No.36161 Ответ [Открыть тред]
Файл: 125860969610249.jpg
Jpg, 39.86 KB, 300×100 - Нажмите на картинку для увеличения
edit Find source with google Find source with iqdb
125860969610249.jpg
Доска посвящена созданию программ и всему, что с ним связано. Для обсуждения готовых программ, железа, устройств есть доска >>/lor/

Простые реквесты для ньюфагов >>28288
Помощь начинающим >>44688 (новый)
Оффициальный™ Лунного Сахара тред >>43581

Языки программирования:
Haskell >>35693
Lisp >>29402
Assembler >>32929
C++ >>43511
Java >>46281
C# и .Net >>27510
Perl >>37854
Python >>46029
Доска посвящена созданию программ и всему, что с ним связано. Для обсуждения готовых программ, железа, устройств есть доска >>/lor/

Простые реквесты для ньюфагов >>28288
Помощь начинающим >>44688 (новый)
Оффициальный™ Лунного Сахара тред >>43581

Языки программирования:
Haskell >>35693
Lisp >>29402
Assembler >>32929
C++ >>43511
Java >>46281
C# и .Net >>27510
Perl >>37854
Python >>46029
PHP >>23225
JavaScript >>40541
Pascal/Delphi >>37645
Golang >>48143

Фреймворки и библиотеки:
Ruby on Rails >>31319
Qt >>31597

Инструменты:
Vim >>33881
Emacs >>36714
Системы контроля версий >>28005

Прочие технологии:
SQL >>29820

Информатика:
Стеганография >>35350

"Кафедра сайтостроя": тред тут в /s >>31137 и тред в /u >>u/104773
Game Development тред тут >>39943 "Кафедра гейм-девелопмента" в /u: >>u/60525
Сообщение слишком длинное. Полная версия. Post was modified last time at 2017-09-26 21:53:58


No.49834 Ответ [Открыть тред]
Ура! Сегодня День Программиста! Все же мы чуть такие? :)

https://youtu.be/2QkTuQPY0jY
>> No.49851 Ответ
Файл: 12726202097097.gif
Gif, 3.22 KB, 240×240 - Нажмите на картинку для увеличения
edit Find source with google Find source with iqdb
12726202097097.gif
Божечки кошечки. А тут программисты бывают вообще? Или так, только интересующиеся?
>> No.49852 Ответ
typingstudy.com - интересно,насколько трудно будет напечатать без опечаток все 15 уроков подряд?
>> No.49853 Ответ
>>49851
Бывают. Я же тут иногда.

>>49852
Трудно. конкретно этот не пробовал, но в соло на клавиатуре месяц пальцы ломал. Зато теперь на английском печатаю вслепую без проблем. Надо бы за русский еще засесть.


No.43511 Ответ [Открыть тред]
Файл: 599716131.png
Png, 77.78 KB, 317×372 - Нажмите на картинку для увеличения
edit Find source with google Find source with iqdb
599716131.png
Предыдущий тред: >>39226
415 posts are omitted, из них 37 с файлами. Развернуть тред.
>> No.49496 Ответ
Сап. Есть замечательный плеер mpv и, к сожалению, менее замечательное андроид приложение https://github.com/mpv-android/mpv-android, которое строится на libmpv. Мне бы очень хотелось его переписать с использованием всех самых новых технологий, но для этого нужно сделать андроид либу с использованием С++ и JNI. Если кого-то заинтересует создание такой либы - распишу подробнее,
>> No.49497 Ответ
>>49496
А можно старых? Ну, для совместимости.
>> No.49523 Ответ
>>49494
> Не одно и то же, отдельному зверю вменяют ещё и кодинг (считай, написание подпорок и костылей) в обязанности, обзывая девопсом.
Но девопс -- это и есть админ. И админы и без этого могут кодить.

> Самое простое — держать бэкапы.
А как так делать бекапы, чтобы их сразу же можно было развернуть в один клик на машине с потенциально другим железом? И чтоб сразу заработало.

> , настроив по минимуму.
Надо, чтоб без настройки, чтобы уже было настроено. Там могут быть конфиги нгинха и прочего на километры

> список пакетов
И конфиги. И расположения этих конфигов. И какие-то поднятые свои программы.

> Получается, для этого докер не нужен, потому что есть пакетный менеджер
На пакетном менеджере сложно поставить разные инстансы субд с разными настройками и разных версий под разные проекты, чтобы они не пересекались.
>>49494
> Не одно и то же, отдельному зверю вменяют ещё и кодинг (считай, написание подпорок и костылей) в обязанности, обзывая девопсом.
Но девопс -- это и есть админ. И админы и без этого могут кодить.

> Самое простое — держать бэкапы.
А как так делать бекапы, чтобы их сразу же можно было развернуть в один клик на машине с потенциально другим железом? И чтоб сразу заработало.

> , настроив по минимуму.
Надо, чтоб без настройки, чтобы уже было настроено. Там могут быть конфиги нгинха и прочего на километры

> список пакетов
И конфиги. И расположения этих конфигов. И какие-то поднятые свои программы.

> Получается, для этого докер не нужен, потому что есть пакетный менеджер
На пакетном менеджере сложно поставить разные инстансы субд с разными настройками и разных версий под разные проекты, чтобы они не пересекались.

> Мне даже кажется, что какую-нибудь софтину на плюсах пересобирать с make на случай факапа быстрее, чем обкатывать ваши скрипты в контейнере.
Да не

> Ты открыл hh.ru
А мне по знакомствам надо было?
Сообщение слишком длинное. Полная версия.
>> No.49531 Ответ
>>49523
> девопс
Админу кодинг на языке программирования в обязанности не вменяется. И куча остальных вещей, которые на него взгрузили, особо ценник не повысив, тоже.
> как делать бэкапы ... и чтоб сразу заработало
tar +- chroot, шеллскрипты. На вкус.
"чтоб сразу заработало" смахивает на фразу про Большую Кнопку из /s/ другой, мёртвой борды. Ясно ведь, в каком контексте её используют?
> с потенциально другим железом
bash, distro~bootstrap. Обычно такой задачи не стоит. Я не видел людей, массово выкидывавших x86 и переходящих на какой-нибудь ARM. Подозреваю, что подавляющая масса докерообразов в основном собираются под amd64 даже если это не так, конечного набора архитектур, как в дистрибутиве, нет, не было и не будет и поэтому под тезис о "потенциально другом железе" тут работает в пользу того, что и должно заниматься менеджментом пакетов — полноценных дистрибутивов с полноценными ПМ.
> в один клик
Оговорочка по Фрейду. Вы таки дома на какой системе живёте?
> Надо, чтоб без настройки, чтобы уже было настроено. Там могут быть конфиги нгинха и прочего на километры
Энджой ёр дыры в безопасности. За вас настраивать кто-то другой не будет. А если и будет, то сделает это из рук вон плохо.
> И конфиги. И расположения этих конфигов. И какие-то поднятые свои программы.
Это уже в архив или в строчку git clone $project; cd $project; make; make install в одном маленьком скрипте никак не помещается?
Если у вас с бойлерплейтом проблемы, можно использовать функции, например
>>49523
> девопс
Админу кодинг на языке программирования в обязанности не вменяется. И куча остальных вещей, которые на него взгрузили, особо ценник не повысив, тоже.
> как делать бэкапы ... и чтоб сразу заработало
tar +- chroot, шеллскрипты. На вкус.
"чтоб сразу заработало" смахивает на фразу про Большую Кнопку из /s/ другой, мёртвой борды. Ясно ведь, в каком контексте её используют?
> с потенциально другим железом
bash, distro~bootstrap. Обычно такой задачи не стоит. Я не видел людей, массово выкидывавших x86 и переходящих на какой-нибудь ARM. Подозреваю, что подавляющая масса докерообразов в основном собираются под amd64 даже если это не так, конечного набора архитектур, как в дистрибутиве, нет, не было и не будет и поэтому под тезис о "потенциально другом железе" тут работает в пользу того, что и должно заниматься менеджментом пакетов — полноценных дистрибутивов с полноценными ПМ.
> в один клик
Оговорочка по Фрейду. Вы таки дома на какой системе живёте?
> Надо, чтоб без настройки, чтобы уже было настроено. Там могут быть конфиги нгинха и прочего на километры
Энджой ёр дыры в безопасности. За вас настраивать кто-то другой не будет. А если и будет, то сделает это из рук вон плохо.
> И конфиги. И расположения этих конфигов. И какие-то поднятые свои программы.
Это уже в архив или в строчку git clone $project; cd $project; make; make install в одном маленьком скрипте никак не помещается?
Если у вас с бойлерплейтом проблемы, можно использовать функции, например
installfromgit () { git clone $1 $2; pushd $2; if [ -z "$3" ]; then make; make install; else sh -c "$3"; fi; popd};
installfromgit git://githost.example/killer-project.git killer-project "X=Y sh install.sh"
...
> На пакетном менеджере сложно поставить разные инстансы субд с разными настройками и разных версий под разные проекты, чтобы они не пересекались.
Ещё раз, как я говорил, если у вас в архитектуре по десять БД, очередей и всего остального, то эта изумительной красоты архитектура — помойка. Что самое интересное, с самого начала мою истерику по поводу сотен БД вы назвали небывальщиной, или я что-то путаю?
На Nix/Guix можно. В разные префиксы совать можно. В чруты разные, если уж стрелять из пушки по воробьям, можно. Вы же тянете весь комбайн.
> Да не
А вы дайте пруфы своего "Да не". Четыре буквы и скрипт снизу vs сборка чрут-образа, секс с неймспейсами, оверлейной ФС, костылями для того, чтобы вытащить ресурсы наружу и загадить таблицу того же фаервола плюс непрозрачный контейнер, который обязан состоять ровно из одного процесса.
> А мне по знакомствам надо было?
А вот это хз. Я не специалист по рынку. Но вакансии "всё в одном" должны наводить на мысли. Всё в традициях одного укросайтика на итальянском домене.

Что-то мы по третьему кругу всё идём.
Сообщение слишком длинное. Полная версия.
>> No.49532 Ответ
>>49531
Там после popd в функции семиколон не стоит, забыли.
>> No.49533 Ответ
>>49531
> шеллскрипты
Ну это уже почти то же самое. Но они типа должны быть удобнее.
> Я не видел людей, массово выкидывавших x86 и переходящих на какой-нибудь ARM.
Не настолько другим. Я не так выразился. Просто я к тому, что на другой материнке уже операционка может не загрузится, и её надо заново ставить.
> Оговорочка по Фрейду. Вы таки дома на какой системе живёте?
Дома на винде, на работе работаю на Линухе(дома я не работаю)
> Энджой ёр дыры в безопасности.
Ну обновлять это уже отдельно. Но вот надо просто поднять. А обновить чуть потом. Обновить всё равно легче, заново не настраивая.
> Ещё раз, как я говорил, если у вас в архитектуре по десять БД
Ну так я разрабатываю на одной машине несколько не связанных проектов. У них у каждого вся архитектура совершенно иная.
>> No.49686 Ответ
Файл: qt.png
Png, 32.51 KB, 1200×880 - Нажмите на картинку для увеличения
edit Find source with google Find source with iqdb
qt.png
Там это, Qt скурвился.
https://valdyas.org/fading/software/about-qt-offering-changes-2020/
https://www.qt.io/blog/qt-offering-changes-2020
Речь идет о неприятных изменениях в условиях лицензии и распространения. Сам до конца не въехал пока, поэтому не буду пытаться пересказать своими словами.
>> No.49848 Ответ
Здравствуйте. Вопросы больше про Си, но тем не менее:
1) NULL это всегда и везде 0х0000? Или зависит от либ/архитектуры?
2) Сейчаc читаю LDD для протухших ядер, и там везде после kmalloc() мемсетится нулями весь выделенный ломоть памяти. Зачем?
>> No.49849 Ответ
>>49848
> NULL это всегда и везде 0х0000?
Нет. Хотя реальных архитектур ты можешь и не встретить. http://c-faq.com/null/varieties.html
> Сейчаc читаю LDD для протухших ядер, и там везде после kmalloc() мемсетится нулями весь выделенный ломоть памяти. Зачем?
Видимо чтобы нельзя было прочитать какие-то ценные данные, которые там были до этого.
>> No.49850 Ответ
>>49686
Какие-нибудь KDE просто форкнут и начнут паралельно пилить, не проблема.


No.48832 Ответ [Открыть тред]
Файл: pg087.png
Png, 23.35 KB, 475×349
edit Find source with google Find source with iqdb
pg087.png
Файл: pg072.png
Png, 56.58 KB, 515×709
edit Find source with google Find source with iqdb
pg072.png
Файл: 14686072547160.png
Png, 44.08 KB, 1024×450
edit Find source with google Find source with iqdb
14686072547160.png

Как понять ООП? Я просто вот не понимаю, зачем это нужно. Безотносительно языка программирования

Вот допустим есть некие классы, классы как в плюсах. Есть методы, которые к этим классам привязаны. Зачем это вообще нужно, если можно просто сделать структуру и набор функций, которые могут с этими структурами нечто осмысленное делать?

Вот допустим есть public private protected модификаторы доступа т.е. ограничения на то, откуда какой метод можно вызывать. public можно вызывать отовсюду, private только для методов из числа public, а protected ... protected становится private при наследовании, притом наследований может быть 3 вида - тоже public, private, protected... Зачем всё это? Чем это лучше просто кучи функций, которые могут просто вызывать другие функции и работать с какими-то структурами?

Или вот методы, методы это функции, которые привязаны к конкретной структуре, но что если мне нужны методы, которые связывают два разных класса? Например это может код, переводящий из вектора в растровую картинку. Этот код должен быть методом класса для растровой или векторной картинки?
79 posts are omitted, из них 6 с файлами. Развернуть тред.
>> No.49530 Ответ
>>49529
> подтиповый, который якобы более "лежит в основе"
> Основа, ни основа -- пофигу
Ну-ну. Чаще чем в ООП наследование нигде больше не используется.

> Класс типов подразумевает общий класс у типов у Хаскеля. Ну и что?
Никто ничего не подразумевает. Еще раз, в Хаскеле нет типов как таковых. Если ты желаешь, в Хаскеле есть разнородные интерфейсы, которые твой тип может реализовать. При этом реализованы они могут быть когда угодно.

> Примерно так же выглядят типы с параметрами в Хаскеле. Это почти те же дженерики.
Из головы..
data Either a b = Left a | Right b
data Maybe a = Just a | Nothing

f :: (Num a) => Either [a] (a, a) -> Maybe a
f (Right (x, y)) = Just (x + y)
>>49529
> подтиповый, который якобы более "лежит в основе"
> Основа, ни основа -- пофигу
Ну-ну. Чаще чем в ООП наследование нигде больше не используется.

> Класс типов подразумевает общий класс у типов у Хаскеля. Ну и что?
Никто ничего не подразумевает. Еще раз, в Хаскеле нет типов как таковых. Если ты желаешь, в Хаскеле есть разнородные интерфейсы, которые твой тип может реализовать. При этом реализованы они могут быть когда угодно.

> Примерно так же выглядят типы с параметрами в Хаскеле. Это почти те же дженерики.
Из головы..
data Either a b = Left a | Right b
data Maybe a = Just a | Nothing

f :: (Num a) => Either [a] (a, a) -> Maybe a
f (Right (x, y)) = Just (x + y)
f (Left (x:y:_)) = Just (x + y)
f _ = Nothing
Осталось тебе реализовать подобное своими дженериками, а потом можно будет и сравнить "почти же"-сть.

> Или это будет куча разрозненных функций, которые не объединены ни в какие модули?
Везде используется модулярность, только в одном случае у нас будет набор связанных одной идеей функций, тогда как в другом - классов. В первом варианте комбинация различных модулей элементарная, во втором приходится задумываться о внутренних зависимостях классов между друг другом. Только и всего.
Сообщение слишком длинное. Полная версия.
>> No.49839 Ответ
https://habr.com/ru/post/451982/ кстати вот нашел:

> Подавляющее большинство существенного кода не работает всего с одним объектом, а на самом деле реализует задачи поперечных срезов. Пример: когда class Player ударяет при помощи метода hits() class Monster, где на самом деле нужно изменять данные? Величина hp объекта Monster должна уменьшиться на attackPower объекта Player; величина xp объекта Player должна увеличиться на уровень Monster в случае убийства Monster. Должно ли это происходить в Player.hits(Monster m) или в Monster.isHitBy(Player p)? Что если здесь нужно учитывать и class Weapon? Мы передаём аргумент в isHitBy или у Player есть геттер currentWeapon()?

> Этот упрощённый пример со всего тремя взаимодействующими классами уже становится типичным кошмаром ООП. Простое преобразование данных превращается в кучу неуклюжих взаимопереплетённых методов, вызывающих друг друга, и причина этого только в догме ООП — инкапсуляции. Если добавить в эту смесь немного наследования, то мы получим хороший пример того, как выглядит стереотипное ПО уровня Enterprise.

Может быть в ООП это все же решается как-нибудь красивее, чем через "кучу неуклюжих взаимопереплетённых методов, вызывающих друг друга"?
>> No.49840 Ответ
>>49839
Не решается. ООП фундаментально сломано. Оно не работает даже на примерах из книжек про введение в ООП (там, в книжках, об этом, правда, тактически умалчивают).
>> No.49841 Ответ
>>49840
Все решается. Конкретно для этого случая, шаблон ECS. Если не подходит, то медиатор.
>> No.49842 Ответ
>>49841
Посмотрите на этих поехавших: они несут какую-то ересь, придумывают новые слова и переиспользуют уже существующие.
Я так полагаю, он еще счастлив, что смог выдавить из себя парочку умных аббревиатур. Чем более все абскурно, тем более можно выделиться со своими знанимями. ECS!

Для решения проблемы тебе нужна одна функция с двумя аргументами. Звучит тривиально, нет?
>> No.49843 Ответ
>>49839
> Пример: когда class Player ударяет при помощи метода hits() class Monster, где на самом деле нужно изменять данные?
> Должно ли это происходить в Player.hits(Monster m) или в Monster.isHitBy(Player p)? Что если здесь нужно учитывать и class Weapon? Мы передаём аргумент в isHitBy или у Player есть геттер currentWeapon()?

Или пример неудачный, или автор не прав, но в чём проблема в примере? Можно и так, и так, суть не в этом. Допустим один разработчик написал метод Player.hits(Monster m). Другой разработчик приходит через полгода и начинает разбираться, как это работает. Он не ломает голову над вопросами, которыми задаётся автор, а просто читает код и переходит по методам как по ссылкам: "Так, тут у нас класс Player, тут у нас метод hits получает экземпляр класса Monster, тут у нас вызывается геттер currentWeapon() и т.д."
>> No.49844 Ответ
>>49842
Мне нравится какой ты на все озлобленный демагог. Продолжай в том же духе, бро. Добра.
>> No.49845 Ответ
>>49841
Но ECS к ООП абсолютно перпендикулярен. То есть, вообще никакого отношения, кроме того, что его можно реализовать с помощью объектов. В реальности у тебя тут будет HitManager.do_attack( player, monster );, что есть антипаттерн.
> Все решается
Начну немного издалека, но ты потерпи.
Ещё относительно недавно на вопрос "Что такое ООП?" следовал ответ "Полиморфизм, инкапсуляция, наследование". Сейчас люди стали чуть менее категоричными, но они продолжают-таки признавать, что эти принципы есть основные киты ООП. При этом полиморфизм в ООП - сабтайпинг, о котором будет следующий абзац - это подмножество полиморфизма вообще, и полиморфизм есть, например, в StandardML, а вот ООП туда не завезли. Да что там, его можно сделать даже в сишке; тебе процесс не понравится, но можно. Инкапсуляция тоже есть как в SML, так и в сишке. Даже некоторые ассемблеры (тот же масм, который использует сишный линкер) позволяют тебе делать локальные для файла функции/переменные. Остаётся наследование. Вот это уже чистая ООПешная тема. Что забавно, ибо в последнее время программисты объектной ориентации от него открещиваются. На этом можно было бы и закончить, но я продолжу.

>>49841
Но ECS к ООП абсолютно перпендикулярен. То есть, вообще никакого отношения, кроме того, что его можно реализовать с помощью объектов. В реальности у тебя тут будет HitManager.do_attack( player, monster );, что есть антипаттерн.
> Все решается
Начну немного издалека, но ты потерпи.
Ещё относительно недавно на вопрос "Что такое ООП?" следовал ответ "Полиморфизм, инкапсуляция, наследование". Сейчас люди стали чуть менее категоричными, но они продолжают-таки признавать, что эти принципы есть основные киты ООП. При этом полиморфизм в ООП - сабтайпинг, о котором будет следующий абзац - это подмножество полиморфизма вообще, и полиморфизм есть, например, в StandardML, а вот ООП туда не завезли. Да что там, его можно сделать даже в сишке; тебе процесс не понравится, но можно. Инкапсуляция тоже есть как в SML, так и в сишке. Даже некоторые ассемблеры (тот же масм, который использует сишный линкер) позволяют тебе делать локальные для файла функции/переменные. Остаётся наследование. Вот это уже чистая ООПешная тема. Что забавно, ибо в последнее время программисты объектной ориентации от него открещиваются. На этом можно было бы и закончить, но я продолжу.

Теперь рассмотрим Liskov Substitution Principle. Это та самая L из SOLID. Ещё поговаривают, что это l из Agile и даже из Waterfall, где их сразу две. Этот принцип настолько важен, что в честь него назвали язык LISP. Я буду говорить про его ООП интерпретацию. Звучит он так: если у тебя есть базовый класс А, и есть наследующийся от А класс В, то везде, где ожидается объект класса А, можно передать объект класса Б, и семантика программы не изменится. Если подумать, то оно логично. Это, как говорят у них, цельная точка (whole point) наследования. В конце концов, если у тебя есть ящик, который может хранить фрукты, но не бананы и яблоки, а некие абстрактные фрукты, то такой ящик тебе будет не очень полезен.

Теперь, держа в голове последние два абзаца, рассмотрим пример из почти любой книжки про введение ООП в начинающих. Этот пример, например, можно увидеть в книге Страуструпа Programming: Principles and Practices in C++ (или как-то так) где-то, если я не ошибаюсь, в первых трёх-четырёх главах. Мы делаем графическую объектно-ориентированную библиотеку. У нас есть базовый класс Shape, у нас есть много-много его наследников, и мы с ним можем делать разные вещи - рисовать на экран, печатать, считать площади и т.д. и т.п.. Мы доходим до реализации классов Rectangle и Square, и у нас появляется три пути, ради рассмотрения которых всё это и писалось.

Итак, путь первый, он же не_ооп: class Rectangle extends Shape и сlass Square extends Shape
Тут всё очевидно. Никакого переиспользования кода, отношения "is a" не выражены и т.д. Любой оопрограммист скажет тебе, что это неправильно и никто так не делает, а если делает, то он дурак и должен получать клавиатурой по голове пока не осознает. Ну, или хоть пусть какого-нибудь Буча почитает. Поэтому...

...Путь второй, он же очевидный и неправильный: class Rectangle extends Shape и class Square extends Rectangle
И вроде бы тут не к чему придраться, но я не просто так же написал абзац про LSP выше. Рассмотрим код
```function scale( r:Rectangle ) {
r.width *= 10;
r.height *= 2;
}
scale( new Square( 4 ) );
```Этот код скомпилится, но он нарушает LSP. Более того, тут почти undefined behaviour, потому что этот код зависит от того, как реализован сам язык, как реализована библиотека шейпов, и может быть даже как компилятору позволено код оптимизировать. Как же правильно? Если помедитировать над LSP, то можно прийти к выводу, что дочерние классы могут только расширять родительские, но ни в коем случае не ограничивать. Ведь именно из-за введения нового инварианта в Square у нас и получилась фигня. Поэтому правильный код...

...Номер три: class Square extends Shape и class Rectangle extends Square.
И всё, вроде бы хорошо, ну, кроме "очевидности ооп", о которой тебе говорят в книжках. Знаешь, вот эти все истории про "собачка - это животное, и кошечка - это животное, поэтому мы делаем базовый класс, наследуемся от него, и кошечка говорит "мяу", а собачка говорит "гав" - смотрите, как просто мы можем моделировать реальный мир. И ты читаешь эти истории, веришь им, а в реальности у тебя вот такая фигня выходит. Но если бы на этом всё закончилось, то я бы тут не распинался. Consider, как говорится, зе following
```if ( new Rectangle( 15, 45 ) is Square ) throw "somethin' really fucked up's goin' on here m8";```
Что, по-твоему, сделает этот код? Я, конечно, не математик, но какое-то внутреннее чувство мне подсказывает, что прямоугольник со сторонами 15 и 45 - это не квадрат.

Вот эта вот задача не решаема в ооп. Фундаментальная проблема всея компьютер саенса разводит руками. В книжках об этом умалчивают, потому что иначе никто дальше первой главы (с этим примером) читать не будет.
Сообщение слишком длинное. Полная версия.
>> No.49846 Ответ
>>49845
> Остаётся наследование. Вот это уже чистая ООПешная тема.
А трейты (trait, интерфейсы с возможностью объявлять дефолтные реализации методов) относятся к наследованию?
А typeclass из Хаскеля?
Видимо наследование есть не только в ООП, или в ООП есть своё ООП-шное определение наследования.
>> No.49847 Ответ
>>49846
В ООП-шном наследовании можно унаследовать переопределённую реализацию метода.
С трейтами и тайпклассами это сделать не так просто, как в ООП.


No.33881 Ответ [Открыть тред]
Файл: vim-shortcuts-dar...
Png, 116.56 KB, 2560×1600
edit Find source with google Find source with iqdb
vim-shortcuts-dark_2560x1600.png
Файл: vim_cheat_sheet_f...
Png, 1791.61 KB, 3301×2550
edit Find source with google Find source with iqdb
vim_cheat_sheet_for_programmers_print.png

Обещал про Vim написать. Ну вот собсна и написал.

Итак. Для начала поговорим о том, кому он не нужен. Ненужен он в самую первую очередь тем, кто не умеет в слепую десятипальцевую печать. Для таких людей vim буде каторгой. Посему данной категории людей советую либо забить на это дело, либо начать развивать слепую печать. Благо навык полезный. Можно гуглить например очевидную stamina и т.д. Вторая категория людей, которым не нужен сабж, это фанаты emacs по очевидным причинам. Кроме того не очень желательно изучать для виндопользователей. Ибо может быть черевато переходом на linux в конечном итоге, лол.

Ну а теперь собсна о vim и о том, что он из себя представляет. Если кратко, то это текстовый редактор, оптимизированный под слепую печать. Т.е. в нём можно делать всё не снимая рук с клавиатуры. Ну а ещё он мощный, расширяемый, бла-бла-бла.

Ок. Где взять? Для линупсов достаточно установить из пакетного менеджера очевидный пакет под именем vim sudo apt-install vim для бубунты, а остальные и сами разберутся. Для винды можно пользовать ссылочку ftp://ftp.vim.org/pub/vim/pc/gvim74.exe

Скачали, запустили. Ну и? Где вся няшнота то?
Объясняю только самые основы:
  • выход без сохранения точнее закрытие файла при помощи :q!
  • есть несколько режимов работы. Основные: "нормальный", редактирование, командный, выделение.
  • передвижение по файлу при помощи клавиш h j k l это соответственно влево, вниз, вверх, вправо.
  • для собсна редактирования можно нажать например i
Далее находим vimtutor и проходим его. Он ответит на остальные вопросы. Для линупсов vimtutor ru в консольке. Для винды должно быть гхдетоу в районе меню пуск. Хотя шут его знает. Потом изучаем и печатаем на бумажку или ставим в качестве обойки воон те картинки, что в комплекте с постом идут.
Обещал про Vim написать. Ну вот собсна и написал.

Итак. Для начала поговорим о том, кому он не нужен. Ненужен он в самую первую очередь тем, кто не умеет в слепую десятипальцевую печать. Для таких людей vim буде каторгой. Посему данной категории людей советую либо забить на это дело, либо начать развивать слепую печать. Благо навык полезный. Можно гуглить например очевидную stamina и т.д. Вторая категория людей, которым не нужен сабж, это фанаты emacs по очевидным причинам. Кроме того не очень желательно изучать для виндопользователей. Ибо может быть черевато переходом на linux в конечном итоге, лол.

Ну а теперь собсна о vim и о том, что он из себя представляет. Если кратко, то это текстовый редактор, оптимизированный под слепую печать. Т.е. в нём можно делать всё не снимая рук с клавиатуры. Ну а ещё он мощный, расширяемый, бла-бла-бла.

Ок. Где взять? Для линупсов достаточно установить из пакетного менеджера очевидный пакет под именем vim sudo apt-install vim для бубунты, а остальные и сами разберутся. Для винды можно пользовать ссылочку ftp://ftp.vim.org/pub/vim/pc/gvim74.exe

Скачали, запустили. Ну и? Где вся няшнота то?
Объясняю только самые основы:
  • выход без сохранения точнее закрытие файла при помощи :q!
  • есть несколько режимов работы. Основные: "нормальный", редактирование, командный, выделение.
  • передвижение по файлу при помощи клавиш h j k l это соответственно влево, вниз, вверх, вправо.
  • для собсна редактирования можно нажать например i
Далее находим vimtutor и проходим его. Он ответит на остальные вопросы. Для линупсов vimtutor ru в консольке. Для винды должно быть гхдетоу в районе меню пуск. Хотя шут его знает. Потом изучаем и печатаем на бумажку или ставим в качестве обойки воон те картинки, что в комплекте с постом идут.

Это было сверхкраткое введение. А теперь мы будем обмазыватся плугинками и всячески допиливать редактор до удобоваримого состояния. Для начала открываем .vimrc или _vimrc (для венды). Это конфигурационный файлег. Да, да, господа виндузятники. Ни каких окошечек с настроечками. Только хардкор.
По поводу настроечек рекомендую загуглить самомуа лучше почитать маны. Примеры: http://dimio.org/cgi-bin/bps/hlghtsrc/sourcehl.cgi?d=conf&s=vimrc&l=vim http://pastebin.com/jy4a3pE5 http://pastebin.com/paPWQ5fE http://pastebin.com/V3GdD38s Тысячи их.

Однако мы переходим к самому интересному. Доведём до ума сабж при помощи плугинок. Ибо без них vim уныл. Для начала нужно установить пакетный менеджер. Рекомендую либо Vundle либо NeoBundle. Думаю сами сможете загуглить их. К ним идут инструкции. Тож сами читнёте.

Самые полезниньки плагины можно найти там http://vim.wikia.com/wiki/Use_Vim_like_an_IDE

Отдельно упомяну следующие:
NERDTree добавляет древо файлов.
bufexplorer даёт удобную навигацию по буферам.
Вот кстати о буферах, окнах и табах в виме. Вот открыли вы один файлег, а потом, не закрывая первый, открыли второй. Можно потом переключаться между этими файлами. А можно их в одном окне одновременно открыть. Подробнее об том читнуть в справке или например в http://habrahabr.ru/post/28572/ http://habrahabr.ru/post/102373/
Vim Powerline раскрашивает статусную строку.
ColorSamplerPack набор тем оформления.

Вообще лучше самому подбирать плугинки. Их дофига, но не каждому все из них нужны. Да и изучать каждую плугинку тож время отнимает.

Можно ещё читнуть напоследок http://habrahabr.ru/post/176187/

Ну пока всё. Спрашивайте свои ответы. Ато может я чего забыл ненароком.
Сообщение слишком длинное. Полная версия. 246 posts are omitted, из них 43 с файлами. Развернуть тред.
>> No.49821 Ответ
Сегодня девочка узнала об include jump и что ctags, оказывается, более удобный, чем кажется.
>> No.49822 Ответ
Файл: 2017-07-08-913354...
Jpg, 308.67 KB, 881×1277
edit Find source with google Find source with iqdb
2017-07-08-913354.jpg
Файл: ADM-3A.jpg
Jpg, 443.13 KB, 2676×2370
edit Find source with google Find source with iqdb
ADM-3A.jpg

Интересно ещё вспомнить, что vi писался конкретно под терминал ADM-3A (https://ru.wikipedia.org/wiki/ADM-3), в котором сэкономили на дополнительных клавишах и микропроцессоре, почему он и получил название «тупого терминала». Так что он автором таким сделан, чтобы работать на этом и подобных дрынах, а вовсе не ради какой-то там эргономики. Этому анахронизму уже более 40-ка лет.
>> No.49823 Ответ
>>49822
> а вовсе не ради какой-то там эргономики
Ну почему же. Ради эргономики работы именно на этом конкретном и подобных терминалах. А типичная современная клавиатура недалеко ушла от этих терминалов. (Esc только перебиндить надо.)

Я всегда говорил, что в споре emacs .vs. vi за эргономику, vi выигрывает при условии использования стандартной ублюдочной клавиатуры, а если взять нормальный kinesis или ergodox, то все эти пляски с режимами становятся не нужны, а emacs с его аккордами становится вполне удобен.
>> No.49824 Ответ
Файл: 2018-01-04-943532.png
Png, 139.38 KB, 654×826 - Нажмите на картинку для увеличения
edit Find source with google Find source with iqdb
2018-01-04-943532.png
>>49823
Это не удобство, это компромисс между удобством и железом.

http://www.classiccmp.org/dunfield/altair/d/adm3a.pdf — почитай, довольно интересно в плане понимания, что, зачем и почему.
Этот, как и другие, терминал подключался к универскому мэйнфрейму через модем на скорости 300 бод, т.е. даже экран vi на нём перерисовывался оче неторопливо с другой стороны, люди только-только начали пересаживаться с телетайпов, так что полноэкранный режим для них был чем-то нереально охуенным. Все коды, которые он посылал, были ASCII кодами и реализованны аппаратно кучей микрух TTL-логики, т.е. Ctrl+A отсылает ASCII SOH, а не скан-коды клавиш, к которым ты привык; приём ASCII BEL или прожимание Ctrl+G заставляет термил бибикать, и хер что ты с этим сделаешь (там под крышечкой с винтиком, на которой написано ADM, есть переключатель, чтобы он не бибикал). Вся его ёба-графика, т.е. перемещение курсора по экрану, была реализована аппаратно в самом терминале, т.е. ESC = ## ## ставит курсор в позицию ## ##, ты не можешь изменить это поведение программно. По соображениям простоты аппаратной реализации разработчики терминала повесили стрелки на клавиши HJKL (Ctrl+HJKL), хотя удобней IJKL. Клавиша Here Is отсылала уникальный идентификатор терминала и досталась в наследство от телетайпов, так же, как и Line Feed, которая прокручивала барабан с бумагой на один шаг вверх, а посему она тупо дублирует Ctrl+J.
>>49823
Это не удобство, это компромисс между удобством и железом.

http://www.classiccmp.org/dunfield/altair/d/adm3a.pdf — почитай, довольно интересно в плане понимания, что, зачем и почему.
Этот, как и другие, терминал подключался к универскому мэйнфрейму через модем на скорости 300 бод, т.е. даже экран vi на нём перерисовывался оче неторопливо с другой стороны, люди только-только начали пересаживаться с телетайпов, так что полноэкранный режим для них был чем-то нереально охуенным. Все коды, которые он посылал, были ASCII кодами и реализованны аппаратно кучей микрух TTL-логики, т.е. Ctrl+A отсылает ASCII SOH, а не скан-коды клавиш, к которым ты привык; приём ASCII BEL или прожимание Ctrl+G заставляет термил бибикать, и хер что ты с этим сделаешь (там под крышечкой с винтиком, на которой написано ADM, есть переключатель, чтобы он не бибикал). Вся его ёба-графика, т.е. перемещение курсора по экрану, была реализована аппаратно в самом терминале, т.е. ESC = ## ## ставит курсор в позицию ## ##, ты не можешь изменить это поведение программно. По соображениям простоты аппаратной реализации разработчики терминала повесили стрелки на клавиши HJKL (Ctrl+HJKL), хотя удобней IJKL. Клавиша Here Is отсылала уникальный идентификатор терминала и досталась в наследство от телетайпов, так же, как и Line Feed, которая прокручивала барабан с бумагой на один шаг вверх, а посему она тупо дублирует Ctrl+J.
Т.е. в подобных терминалах никакой кастомизации быть не могло в принципе, здесь всё аппаратно сделано, сиречь «ешь что дают». Отсюда или vi-шные режимы, или emacs-овские аккорды, что влезет в память универского компа. В современных клавиатурах аппаратной осталась только клавиша System Request, которая досталась в наследство от мэйнфреймов.
Сообщение слишком длинное. Полная версия.
>> No.49825 Ответ
Файл: 649a345fdb3bf5951fd9ac1b64a0d3ef.png
Png, 970.01 KB, 1593×896 - Нажмите на картинку для увеличения
edit Find source with google Find source with iqdb
649a345fdb3bf5951fd9ac1b64a0d3ef.png
>>49824
Это все не так и важно, не так ли? Моды в vi появились в древние времена и задумывались под древнюю аппаратуру, но это не отменяет того, что сама идея пережила эти времена и сейчас используется именно из-за своей эргономичности: Spacemacs и vi-like плагины во всех популярных IDE будут тому подтверждением.
>> No.49826 Ответ
>>49825
Альтернативная теория:
Старпёры привыкли к ви(му). Старпёры были хорошими программистами. Новое поколение увидело, что хорошие программисты пишут в ви(ме), стали подражать и привыкли. Из нового поколения получились хорошие программисты. Ещё более новое поколение увидело, что хорошие программисты пишут в ви(ме), и стало подражать. Продолжать до 2020 года.
>> No.49827 Ответ
Файл: 2015-02-25-714031.png
Png, 174.62 KB, 350×651 - Нажмите на картинку для увеличения
edit Find source with google Find source with iqdb
2015-02-25-714031.png
>>49825
Какая идея? Идея vi — полноэкранный редактор, который работает на любом дрыне, имитирующем аппаратно пиш.машинку и подключаемом к компьютеру через тормознутый диалап. За это он был очень любим одминами, у которых в каморке всегда такой дрын имелся, стал стандартом и до сих пор суётся в дистрибутивы по принципу «А вдруг?!», благо менять в нём ничего уже не надо.
В современности же vim косплеит по факту edit.com с нескучными фичами, однако его кривой RE-движок не вывозит и заставляет юзать Perl.

Программисты как правило умеют и любят программировать, так что им, как и другим мастерам, не проблема сделать что-то, что им нужно. Многие кодят по фану головоломные вещи хотя другим советуют никогда не пробовать делать эти вещи.

А если смотреть ширее, то:
— скан-коды и куча дополнительных клавиш в клавиатурах, которые отсюда можно перебиндить под свои нужды — в ASCII-терминалах у вас нет возможности узнать, например, нажата ли клавиша Ctrl, поскольку она просто обнуляет 6-й бит в коде символа;
— чемпион по скоропечатанью выехал на том, что использовал CapsLock вместо Shift — так почему-то быстрее (собственно {Shift,A} прожимать удобнее, чем Shift+A, но у нас клавиатуры до сих пор косплеят пиш.машинку, где такое поведение было обусловлено механикой);
— аккорды всегда были в винде, пробиваются через Alt: {Alt,f,o}, {Alt,f,s}, {Alt,e,u} — ЖидБрейнс в своей Идее на это почему-то забил;
— аккорды были в AutoCAD, также они есть в QCAD (Компас — не знаю, не крутила) — я вообще не представляю, как можно что-то начертить без аккордов, особенно альбом простыней A1.

>>49825
Какая идея? Идея vi — полноэкранный редактор, который работает на любом дрыне, имитирующем аппаратно пиш.машинку и подключаемом к компьютеру через тормознутый диалап. За это он был очень любим одминами, у которых в каморке всегда такой дрын имелся, стал стандартом и до сих пор суётся в дистрибутивы по принципу «А вдруг?!», благо менять в нём ничего уже не надо.
В современности же vim косплеит по факту edit.com с нескучными фичами, однако его кривой RE-движок не вывозит и заставляет юзать Perl.

Программисты как правило умеют и любят программировать, так что им, как и другим мастерам, не проблема сделать что-то, что им нужно. Многие кодят по фану головоломные вещи хотя другим советуют никогда не пробовать делать эти вещи.

А если смотреть ширее, то:
— скан-коды и куча дополнительных клавиш в клавиатурах, которые отсюда можно перебиндить под свои нужды — в ASCII-терминалах у вас нет возможности узнать, например, нажата ли клавиша Ctrl, поскольку она просто обнуляет 6-й бит в коде символа;
— чемпион по скоропечатанью выехал на том, что использовал CapsLock вместо Shift — так почему-то быстрее (собственно {Shift,A} прожимать удобнее, чем Shift+A, но у нас клавиатуры до сих пор косплеят пиш.машинку, где такое поведение было обусловлено механикой);
— аккорды всегда были в винде, пробиваются через Alt: {Alt,f,o}, {Alt,f,s}, {Alt,e,u} — ЖидБрейнс в своей Идее на это почему-то забил;
— аккорды были в AutoCAD, также они есть в QCAD (Компас — не знаю, не крутила) — я вообще не представляю, как можно что-то начертить без аккордов, особенно альбом простыней A1.

Так что удвою вот этих: >>49818 >>49823

>>49826
Забавно в свете вашей теории вспомнить тот факт, что vi со второй версии перестал помещаться в память универского компа.
Сообщение слишком длинное. Полная версия.
>> No.49831 Ответ
>>49827
Ты немножко терминологию путаешь. "Аккорды" -- это как раз одновременные нажатия, типа Ctrl+Alt+Del. Последовательные нажатия (вроде виндовых {Alt,f,o}) как-то по-другому называются. И ближе к виайным режимам по принципам работы.

А стандартная клавиатура, конечно, то ещё дерьмо. Инженерный идиотизм, как я его называю. По-хорошему, ещё при появлении электрических пишущих машинок (когда механических рычагов под клавишами не стало) нужно было всю раскладку переработать с точки зрения эргономики.
>> No.49832 Ответ
>>49824
> Это не удобство, это компромисс между удобством и железом.
Любое удобство работы на компе это компромисс с железом. По крайней мере, пока нейроинтерфейс не разработали.
>> No.49838 Ответ
>>49824
> хотя удобней IJKL
Вкусовщина. Начинал пользоваться вимом из-за хайпа, без навыка слепой печати. Потом один чувак сказал, что я косячу. Научился (почти)слепой печати (косячные биндинги мышечной памяти и иногда приходиться мысленно представлять клавиатуру и места кнокок).

Так вот, теперь субъективно один ряд управляющих кнопок вместо WASD-подобного кажеться лучше. Хз. Я больше думал не про "HJKL", а про "JKL;" - чтобы с соска руку не нужно было убирать.


No.49719 Ответ [Открыть тред]
Файл: cirno-s-computer-science-class-sicp.jpg
Jpg, 174.71 KB, 1355×882 - Нажмите на картинку для увеличения
edit Find source with google Find source with iqdb
cirno-s-computer-science-class-sicp.jpg
Здесь я буду собирать и делиться интересными и очень блогпостами, записями с конферений и публикациями.

Проблема восьми королев, решенная с помощью типов. Вариант с шаблонами на плюсах прилагается в комментариях:
https://aphyr.com/posts/342-typing-the-technical-interview

Использование экзистенциальных типов и CPS для написания безопасных zero-cost API:
https://dl.acm.org/doi/10.1145/3299711.3242755

SPJ о линейных типах. В теории, мы должны их увидеть в 9-ой версии GHC.
https://www.youtube.com/watch?v=t0mhvd3-60Y
12 posts are omitted. Развернуть тред.
>> No.49764 Ответ
>> No.49765 Ответ
Файл: 1496459160698.jpg
Jpg, 95.33 KB, 517×753 - Нажмите на картинку для увеличения
edit Find source with google Find source with iqdb
1496459160698.jpg
>>49764
Пожалуйста, с небольшими комментариями в следующий раз! Голые ссылки надо открывать и вспоминать!
>> No.49766 Ответ
>>49763
> Как мне известно, это просто набор переписывающих правил, позволющих вычислить статическую часть кода и специализировать динамическую во время компиляции.
Да, но это не всё. Есть прокции Футамуры https://habr.com/ru/post/47418/
Теоретически, можно сделать такую штуку - мы пишем некий интерпретатор некоего языка X на каком-то очень умном ЯП, потом особым образом специализируя код интерптетатора, можно синтезировать компилятор из интерпретатора. И если потом код на языке X отдать этому синтезированному компилятору, он может скомпилировать это в полноценный бинарник, притом самого интерпретатора там не будет вшито в рантайм, это может быть прямая компиляция в инструкции целевого процессора.

Вот на что-то такое было бы интересно посмотреть.
>> No.49769 Ответ
>>49766
Погугли книгу "Understanding and Writing Compilers" (Richard Bornat).
>> No.49779 Ответ
>>49763
https://keldysh.ru/papers/2018/prep2018_111.pdf - вот обзорная статья по суперкомпиляции
> Делается попытка «выполнить» программу не для конкретных входныхданных, а «символически» в «общем» виде, то есть для произвольныхвходных данных. Ну или для всех входных данных, удовлетворяющих каким-то ограничениям. Для этого строится «дерево конфигураций» (=«дерево процессов»). В узлах дерева находятся «конфигурации», кото-рые описывают множества состояний вычислительного процесса. По-нятно, что эти множества должны быть описаны на каком-то языке,и могут быть не вполне точными («прихватывать» что-то лишнее). А стрелки, связывающие узлы дерева, соответствуют каким-то действиями проверкам, происходящим при исполнении программы.

https://sergei-romanenko.github.io/scp-notes-ru/ и вот еще.

Я считаю что это достаточно интересное направление
>> No.49783 Ответ
Файл: porovozik.png
Png, 136.47 KB, 662×556 - Нажмите на картинку для увеличения
edit Find source with google Find source with iqdb
porovozik.png
>>49779
> Я считаю что это достаточно интересное направление
А я считаю, что моск аффтара достаточно суперкомпилирован токсоплазмой.
Когда на вашем супер-языке найдут хотя бы элемент в массиве, тогда и приходи!!!!!111ы
>> No.49784 Ответ
>>49779
Спасибо, я посмотрю обязательно!

В последнее время читаю страшные вещи вот тут:
http://comonad.com/reader/

Практически ничего непонятно, и нагнетает сильно. Формального математического образования очень не хватает.
>> No.49808 Ответ
>> No.49835 Ответ
Файл: 4317119750_4d5c719004.jpg
Jpg, 39.13 KB, 500×449 - Нажмите на картинку для увеличения
edit Find source with google Find source with iqdb
4317119750_4d5c719004.jpg
>>49719
Ну? Где мои интересности?
>> No.49837 Ответ
Файл: e98f78899ee18eda12326c79.jpg
Jpg, 201.74 KB, 900×540 - Нажмите на картинку для увеличения
edit Find source with google Find source with iqdb
e98f78899ee18eda12326c79.jpg
>>49835
Прости, я почти ничего не читаю в эти сумбурные времена!
Узнал только про интересный проект, позволяющий компилировать полиморфные функции без указателей и без специализации. В README тут более подробно. Интересно, насколько это может иметь смысл добавить в уже существующие функциональные языки.

https://github.com/ollef/sixten#compared-to-other-languages


No.49696 Ответ [Открыть тред]
Файл: tumblr_inline_ml09rkrmWH1qz4rgp.gif
Gif, 151.78 KB, 400×267 - Нажмите на картинку для увеличения
edit Find source with google Find source with iqdb
tumblr_inline_ml09rkrmWH1qz4rgp.gif
Тред помощи начинающим свой долгий и тернистый путь в дебри программирования. А также необузданных оленей, код-мартышек, выбора ЯП и иных платиновых вещей.
Но в первую очередь всё-таки помощи новичкам. Всё, чтобы зашедший сюда в первый раз мог почувствовать себя как дома.
Главное - без фанатизма.

Предыдущий: >>47927
15 posts are omitted, из них 6 с файлами. Развернуть тред.
>> No.49812 Ответ
>>49362
Это я. Волею судьбы уже больше полугода как занесло меня в безопасность и системщину. Доволен всем, но математика как-то не понадобилась от слова совсем. Старайтесь и у вас всё получится!
>> No.49813 Ответ
Так, кто может объяснить на пальцах, одним предложений в десять слов, что такое объектно-ориентированное и функционально-ориентированное программирование? Объяснить не профессиональному программисту, не человеку, получившему красный диплом в математическом ВУЗе, а обычному человеку.
>> No.49814 Ответ
>>49813
В функциональном программировании ты имеешь дело с функциями, которые манипулируют данными и другими функциями.
В ООП у тебя функции и данные упакованы в объекты.
>> No.49815 Ответ
Файл: Houseki.no.Kuni.full.2043411.jpg
Jpg, 766.89 KB, 1080×720 - Нажмите на картинку для увеличения
edit Find source with google Find source with iqdb
Houseki.no.Kuni.full.2043411.jpg
>>49813
ООП мыслит данными и их отношениями, ФОП мыслит тем, что можно сделать с данными.
Вот смотри: допустим есть у тебя объекты пизда, жопа и хуй; с точки зрения ООП хуй можно совать только в пизду, а с точки зрения ФОП — в пизду, жопу и вообще в любую дырку. Наверное поэтому среди функциональщиков так много голубых.
>> No.49816 Ответ
>>49813
Nicaque. Вся суть в ответе. Если ты хуй и заучил что-то, то это будет видно. А если ты хуй, который использует это хуйню, то тоже будет видно.
Можно порекомендовать качать софт скиллс, но это тоже не поможет. Надо знать.
>> No.49817 Ответ
>>49814
Спасибо.
>>49815
Спасибо.
>>49816
> Nicaque.
Надеюсь, это не оскорбление.

Всем спасибо за ответы. Я так понял, что так я не пойму, поэтому забью и не буду забивать голову, а буду дальше смотреть лекции, практиковаться и всё пойму, когда придёт время.
>> No.49828 Ответ
Какую хорошую книжку прочитать по алгоритмам?
>> No.49829 Ответ
>>49828
Я бы посоветовал стандартного Кормэна "Алгоритмы: построение и анализ", но он сложноват для изучения, если нет вузовской базы. Но если изучал алгоритмы в вузе, то он отличен как справочник Лучше попробуй онлайн курсы от MIT или других вузов.
>> No.49833 Ответ
>>49829
Спасибо, попробую.
>> No.49836 Ответ
>>49833
Кстати, видел курс на степике. Он вообще для школьников, но дают минимальное представление об анализе алгоритмов. Можешь начать с него, он простенький.
https://stepik.org/course/64454


No.48615 Ответ [Открыть тред]
Файл: 1.jpg
Jpg, 49.89 KB, 1024×600 - Нажмите на картинку для увеличения
edit Find source with google Find source with iqdb
1.jpg
Предлагаю челендж, где каждую неделю мы будем выполнять задания.

Придумал разные уровни сложности:
1 - как самый простой.
5 - самый сложный.

Первые задания от меня, на правах ОПа!

C3: Реализация синтезатора bytebeat, воспроизводящего аудио непосредственно с помощью OpenAL или аудио вашей платформы (e.g alsa, oss, sndio)

C2: Реализуйте последовательность Фибоначчи с помощью рекурсивного решения, но избегайте экспоненциальной временной сложности. Программа должна быть четко определена для первых 100 членов Фибоначчи. Это типичный вопрос на интервью. Haskell, Idris и Agda не могут быть использованы для этого задания, бонусные очки для выяснения, почему.

C1: Реализация программы fizzbuzz без использования оператора деления по модулю ( % , mod, rem, & c...)

Реализацию можно кидать тут под спойлером либо pastebin.
Предлагаю челендж, где каждую неделю мы будем выполнять задания.

Придумал разные уровни сложности:
1 - как самый простой.
5 - самый сложный.

Первые задания от меня, на правах ОПа!

C3: Реализация синтезатора bytebeat, воспроизводящего аудио непосредственно с помощью OpenAL или аудио вашей платформы (e.g alsa, oss, sndio)

C2: Реализуйте последовательность Фибоначчи с помощью рекурсивного решения, но избегайте экспоненциальной временной сложности. Программа должна быть четко определена для первых 100 членов Фибоначчи. Это типичный вопрос на интервью. Haskell, Idris и Agda не могут быть использованы для этого задания, бонусные очки для выяснения, почему.

C1: Реализация программы fizzbuzz без использования оператора деления по модулю ( % , mod, rem, & c...)

Реализацию можно кидать тут под спойлером либо pastebin.

Связь дабы не проебать треад и для организации тут: @lambdaclass
Сообщение слишком длинное. Полная версия.
>> No.49129 Ответ
Так себе идея.
>> No.49134 Ответ
>>48615
Где-то я видел уже задачу C2. Не понимаю, почему haskell не может быть использован для решения. Вот несколько решений на хаскеле. Третье не рекурсивное, но самое лаконичное и ясное. Первые два - рекурсивные, хотя рекурсивна внутренняя функция. А рекурсивной должна быть внешняя? Тогда наверное и вправду не получится избежать экспоненциальной временной сложности. Но почему именно на тех трех языках? На джаве наверное тоже не получится избежать. Или здесь я должен разбираться в тонкостях того, как исполняется хаскель, чтобы ответить?

Первые два решения дают список в "перевернутом" виде. Если нужно возвращать список в нормальном виде, тогда причина в том, как устроены списки в хаскеле.

module Fib () where

fib :: Int -> [Int]
fib 1 = [1]
fib 2 = [1,1]
fib n = innerfib [1,1] (n-2)

innerfib :: [Int] -> Int -> [Int]
innerfib arr 0 = arr
innerfib (a : b : rest) n = innerfib (a + b : a : b : rest) (n-1)
>>48615
Где-то я видел уже задачу C2. Не понимаю, почему haskell не может быть использован для решения. Вот несколько решений на хаскеле. Третье не рекурсивное, но самое лаконичное и ясное. Первые два - рекурсивные, хотя рекурсивна внутренняя функция. А рекурсивной должна быть внешняя? Тогда наверное и вправду не получится избежать экспоненциальной временной сложности. Но почему именно на тех трех языках? На джаве наверное тоже не получится избежать. Или здесь я должен разбираться в тонкостях того, как исполняется хаскель, чтобы ответить?

Первые два решения дают список в "перевернутом" виде. Если нужно возвращать список в нормальном виде, тогда причина в том, как устроены списки в хаскеле.

module Fib () where

fib :: Int -> [Int]
fib 1 = [1]
fib 2 = [1,1]
fib n = innerfib [1,1] (n-2)

innerfib :: [Int] -> Int -> [Int]
innerfib arr 0 = arr
innerfib (a : b : rest) n = innerfib (a + b : a : b : rest) (n-1)

fib2 :: Int -> [Int]
fib2 1 = [1]
fib2 2 = [1,1]
fib2 n = innerfib2 (1, 1) (n-2) [1,1]

innerfib2 :: (Int,Int) -> Int -> [Int] -> [Int]
innerfib2 p 0 arr = arr
innerfib2 p n arr = case nextpair p of (a,b) -> innerfib2 (a,b) (n-1) (b:arr)

nextpair :: (Int,Int) -> (Int,Int)
nextpair (a,b) = (b, a+b)

fib3 :: Int -> [Int]
-- fib3 n = take n (map snd (iterate nextpair (1,1)))
fib3 n = (map snd . take n) (iterate nextpair (1,1))
Сообщение слишком длинное. Полная версия.
>> No.49179 Ответ
fizzbuzz
public class FizzBuzz {
public static void main(String[] args) {
for (int i = 1, m = 4, n = 2; i <= 100; i++, m--, n--) {
if (m == 0 || n == 0) {
if (n == 0) {
System.out.print("Fizz");
n = 3;
}
if (m == 0) {
System.out.print("Buzz");
m = 5;
}
System.out.println();
} else {
fizzbuzz
public class FizzBuzz {
public static void main(String[] args) {
for (int i = 1, m = 4, n = 2; i <= 100; i++, m--, n--) {
if (m == 0 || n == 0) {
if (n == 0) {
System.out.print("Fizz");
n = 3;
}
if (m == 0) {
System.out.print("Buzz");
m = 5;
}
System.out.println();
} else {
System.out.println(i);
}
}
}
}
Сообщение слишком длинное. Полная версия.
>> No.49182 Ответ
>>49179
Как не нужно делать последовательность Фибоначчи
import java.math.BigInteger;

public class Fibonacci {

private static int count = 100;

private static void step(BigInteger num1, BigInteger num2) {
count--;
if (count <= 0) {
return;
}
System.out.print(num2 + " ");
step(num2, num1.add(num2));
>>49179
Как не нужно делать последовательность Фибоначчи
import java.math.BigInteger;

public class Fibonacci {

private static int count = 100;

private static void step(BigInteger num1, BigInteger num2) {
count--;
if (count <= 0) {
return;
}
System.out.print(num2 + " ");
step(num2, num1.add(num2));
}

public static void main(String[] args) {
step(BigInteger.ZERO, BigInteger.ONE);
}
}
Сообщение слишком длинное. Полная версия.
>> No.49219 Ответ
>>49182
А так?
a = 0
b = 1
c = 0
while c < 1000:
c = a + b
a = b
b = c
print(a)
>> No.49803 Ответ
>>49219
Оно не рекурсивное.
>> No.49805 Ответ
>>48615
import java.math.BigInteger

fun fib(num: Int): MutableList<BigInteger> = when(num) {
in 0..1 -> (0..num).map { it.toBigInteger() }.toMutableList()
else -> fib(num - 1).apply { add(get(size - 1) + get(size - 2)) }
}

fun main() {
println(fib(2))
}
>> No.49830 Ответ
Где мои задачи? Уже джва года жду!


No.49799 Ответ [Открыть тред]
Файл: Bounty_Hunter_icon.png
Png, 73.38 KB, 256×144 - Нажмите на картинку для увеличения
edit Find source with google Find source with iqdb
Bounty_Hunter_icon.png
Какие есть конкурсы с большим денежным вознаграждением? Помню телеграм раньше делал всякие конкурсы, но не могу сейчас найти актуальные (все старые). Где можно найти объявления о таких конкурсах собранные вместе?
>> No.49806 Ответ
>>49799
rsa factorization challenge
Старый но вроде еще живой.


No.48984 Ответ [Открыть тред]
Файл: omega.png
Png, 7.18 KB, 400×400 - Нажмите на картинку для увеличения
edit Find source with google Find source with iqdb
omega.png
Привет. Это тред для пиара pfpmd: http://pfpmd7dd5ijt4add2sfi4djsaij4u3ebvnwvyvuj6aeipe2f5llptkid.onion/
pfpmd - это тесно сплетенные в одно целое анонимный чат и текстовые борды. Тематика: computer science, математика, программирование, технологии, криптоанархизм, софт и т.п.

pfpmd существует с 2015 года. Изначально он был попыткой воскресить один ресурс, который назывался лолкс, но теперь это в прошлом. Населен небольшим количеством людей и имеет низкую активность, что и хотелось бы изменить. Из-за того, что pfpmd это tor hidden service, периодически туда заходят люди ищущие цп, гуро и т.п., но, ничего не найдя, быстро уходят. pfpmd не модерируется, бан невозможен, как и цензура. Логотипом pfpmd является символ Ω, в честь Chaitin omega number https://en.wikipedia.org/wiki/Chaitin%27s_constant

Фичи pfpmd:
-Борды не фиксированы, в форме создания поста можно указать имя новой борды и она будет создана динамически в момент создания поста.
-Можно менять описание борды, это может делать любой пользователь сколько угодно раз;
-На странице с чатом по дефолту отображаются сообщение не только из чата, но и со всех борд. Это поведение можно изменить в настройках.
-На станице чана отображаются треды со всех борд (у нас это было еще до нульчана). Но можно отобразить только треды какой-то одной борды, просто перейдя по ссылке этой борды.
-Картинки отображатся с некоторых ресурсов, например, imgur, twitter. Также показываются превьюшки видео с youtube и некоторых имиджборд. Список будет пополняться в будущем.
Привет. Это тред для пиара pfpmd: http://pfpmd7dd5ijt4add2sfi4djsaij4u3ebvnwvyvuj6aeipe2f5llptkid.onion/
pfpmd - это тесно сплетенные в одно целое анонимный чат и текстовые борды. Тематика: computer science, математика, программирование, технологии, криптоанархизм, софт и т.п.

pfpmd существует с 2015 года. Изначально он был попыткой воскресить один ресурс, который назывался лолкс, но теперь это в прошлом. Населен небольшим количеством людей и имеет низкую активность, что и хотелось бы изменить. Из-за того, что pfpmd это tor hidden service, периодически туда заходят люди ищущие цп, гуро и т.п., но, ничего не найдя, быстро уходят. pfpmd не модерируется, бан невозможен, как и цензура. Логотипом pfpmd является символ Ω, в честь Chaitin omega number https://en.wikipedia.org/wiki/Chaitin%27s_constant

Фичи pfpmd:
-Борды не фиксированы, в форме создания поста можно указать имя новой борды и она будет создана динамически в момент создания поста.
-Можно менять описание борды, это может делать любой пользователь сколько угодно раз;
-На странице с чатом по дефолту отображаются сообщение не только из чата, но и со всех борд. Это поведение можно изменить в настройках.
-На станице чана отображаются треды со всех борд (у нас это было еще до нульчана). Но можно отобразить только треды какой-то одной борды, просто перейдя по ссылке этой борды.
-Картинки отображатся с некоторых ресурсов, например, imgur, twitter. Также показываются превьюшки видео с youtube и некоторых имиджборд. Список будет пополняться в будущем.
-Текстовое поле ввода чата поддерживает подобие командной строки. Есть команды для создания тредов, ответа в тред, изменения описания борды.
-Можно скрыть отображение всех сообщений с кириллицей.
-Поддерживается форматирование блоков кода. Подсветка синтаксиса реализована через highlight.js и выключена по дефолту, но ее можно влючить в настройках.
-Поддерживается форматирование математических формул через KaTeX. Но эта фича тоже выключена по дефолту.
-Есть страница с логами всех сообщений (включая борды) в обратном по дате порядке.

Основные принципы:
-Максимальное облегчение сервера, весь (кроме статического) html генерится на клиенте, сервер отправляет клиенту только сырые данные;
-Минимум зависимостей у клиентского кода. Всё, за исключение подсветки синтаксиса и математических формул, реализовано на голом javascript, без использования всяких jquery, vue.js и прочих фреймворков. Исходный код KaTeX и highlightjs подгружается только когда фичи включены в настройках.
-Отсутствие цензуры.

Планы развития:
-Децентрализация на уровне серверов. Будет множество инстансов pfpmd, которые синхронизируются между собой. Юзер сможет подключаться к любому из серверов, сможет поднять свой.
-Сделать клиентское приложение с консольным интерфейсом и веб интерфейсом. Чтобы юзер мог без запуска торбраузера заходить на pfpmd или вообще без гуйни, а также чтобы иметь свою локальную базу сообщений, по которой можно делать поиск и что угодно.
-Допилить дизайн.

Следующим постом будет FAQ. Но, в любом случае, я буду отвечать в тред.
Сообщение слишком длинное. Полная версия. 1 post is omitted. Развернуть тред.
>> No.48986 Ответ
Файл: 1464748799129979470_1.gif
Gif, 8812.08 KB, 291×291 - Нажмите на картинку для увеличения
edit Find source with google Find source with iqdb
1464748799129979470_1.gif
> pfpmd - это тесно сплетенные в одно целое анонимный чат и текстовые борды
> У меня нет на это времени
>> No.48988 Ответ
>>48986
Есть логи и тред со всеми сообщениями из чата. Можно раз в день на все ответить и дальше заниматься своими делами, например.
>> No.49023 Ответ
Оп, тематика заинтересовала, но я нихуя не понял. Есть гайд для самых маленьких? Захожу, вижу бессмысленный чат,вижу кучу по-видимому зашифрованной херни в разделе Chan. Как всем этим пользоваться?
>> No.49024 Ответ
>>49023
> Есть гайд для самых маленьких?
В chat - собственно чат. Если перейти в chan, то там будут треды со всех разделов с тремя последними ответами. У каждого треда там есть ссылка в борду, если по ней перейти, то отобразятся только треды этой борды. Ну, короче, очевидно же.
В чате отображаются сообщения со всех разделов. Когда тред не из чата, справа будет, например, /pr/123/ на зеленом фоне, т.е. имя борды и номер треда этого сообщения. Также это ссылки в эту борду и тред соответственно. Алсо, можно применить фильтр для скрытия сообщений не из чата.
У чата есть своя борда, которая называется /cht/ и в ней единственный тред, где отображаются сообщения всего чата (только чата).
Есть еще логи вообще всех сообщений, которые отображаются в обратном порядке, по 200 сообщений на страницу. Там тоже можно применить фильтр и оставить только сообщения чата.
Также есть фильтр кириллицы и много других фич, смотри ОП. И будет еще больше фильтров в будущем.
> Захожу, вижу бессмысленный чат
Побочный эффект отсутствия модерации и цензуры.
> вижу кучу по-видимому зашифрованной херни в разделе Chan
Это недавний вайп, мусор из /dev/random.
> Как всем этим пользоваться?
Просто пишешь, что тебя интересует на обозначенную тематику. В борды, в чат, куда угодно.
>> No.49650 Ответ
Новый интерфейс: http://pfpmd7dd5ijt4add2sfi4djsaij4u3ebvnwvyvuj6aeipe2f5llptkid.onion/beta/

Клиент с Command-line interface и Web UI: http://pfpmd7dd5ijt4add2sfi4djsaij4u3ebvnwvyvuj6aeipe2f5llptkid.onion/static/pfpmd-client_latest.7z

Децентрализация, переписывание бэкенда - в процессе.
>> No.49651 Ответ
А исходники движка будут выложены?
>> No.49652 Ответ
>>49651
Исходники фронтенда в клиенте (ссылка выше).
Бэкенд сейчас переписывается с учётом децентрализации и его исходники будут выложены.
>> No.49788 Ответ
Прототип децентрализации запилен. Теперь есть второй сервер, который синхронизируется с первым. Первый и второй сервер соответственно:
http://pfpmd7dd5ijt4add2sfi4djsaij4u3ebvnwvyvuj6aeipe2f5llptkid.onion/
http://t77eir7lxmbawattqzj4aaeuilqevgm62g5g5tzvgmxrlp66bnhcxqad.onion/
Бэкенд переписан на rust. Айдишники стали uuid. Фронтенды адаптированы. Теперь есть swagger документация. Выложены все исходники включая бэкенд. Также каждый день делается автоматический бэкап базы, который можно скачать.
Новый интерфейс (который раньше был /beta/) теперь стал основным, старый тоже доступен - /ui2/. Также в новом интерфейсе появилась компактная тема.
>> No.49796 Ответ
А зачем для тор браузера сделал? Лучше переделай в обычный .com формат
>> No.49797 Ответ
>>49796
> А зачем для тор браузера сделал?
Не для тор браузера, а для tor. Почитай, что такое onion service. Onion service - это не обязательно веб сервер, это может быть что угодно, хоть xmpp, email, ssh. В этом случае, как ты понимаешь, браузер вообще не используется. И даже если это веб сервер, то может использоваться любой браузер, просто ты прописываешь в этом браузере tor socks5 proxy.
Также у pfpmd есть клиентское приложение и браузер можно не использовать. И у pfpmd есть api документация, т.е. любой может создать своё клиентское приложение.

1. Для анонимности.
2. Onion service может поднять кто угодно откуда угодно из любого места где есть выход в интернет и не прилагая больших усилий (для этого нужно добавить всего две строчки в torrc). Поэтому те, кто пожелают поднять дополнительный pfpmd сервер, смогут это легко сделать.
3. Просто идеологически нравится tor. Tor сеть - интернет здорового человека. Нравятся выбранные подходы достижения анонимности, например, трафик шифруется без использования https, а значит CA не нужны, и т.д.


No.3901 Ответ [Открыть тред]
Файл: ababas.jpg
Jpg, 70.66 KB, 317×372 - Нажмите на картинку для увеличения
edit Find source with google Find source with iqdb
ababas.jpg
Я тут на C программу написал, которая копирует входной поток в выходной с заменой каждой строки, состоящей из одного или нескольких пробелов, одним пробелом.
http://pastebin.com/xe3kSfyY
Как это сделать без goto ? Что можно улучшить?
336 posts are omitted, из них 75 с файлами. Развернуть тред.
>> No.49777 Ответ
>>49776
> Но, как Касперски ещё когда-то давно сказал: если вам удобно и привыкли на винде, то и сидите на ней, а не занимайтесь ерундой.
Для меня Касперски ни разу не авторитет в этом вопросе. Да и я никому ничего не навязывал, сидите где ходите. Меня спросили про рекомендации - я их дал.
> И я считаю, что рекомендация ньюфагам ставить прыщи - это сознательная диверсия с целью уменьшить себе конкуренцию на рынке труда.
Ну ок, я считаю иначе.
> Японский-то (в большинстве случаев) работает. В большинстве случаев, конечно, не из коробки (и это очень интересно, когда ты выбираешь японский язык в настройках клавиатуры, а оно по-японски не пишет, но линуксовый-вей же; кто я, чтобы судить). Проблема тут - настроить.
Ну вот я и предложил способ решения - взять какой-нибудь дистрибутив, который делают японцы для себя. В нем наверняка всё и так настроено из коробки, и ничего настраивать не требуется.
> Что выучат, если нечего?
Нет, не "нечего". Получить понимание, что есть отдельная штука "компилятор", есть отдельная штука "линкер", есть объектные файлы, есть ассемблер, есть динамические и статические либы... это по-твоему "нечего"?
> Тебе действительно нужны аргументы в пользу того, что человек севший осиливать программирование будет занят, собственно, осиливанием этого самого программирования, и у него на ближайшее время будет куча более интересных занятий, чем разгребание ключей компилятора?
>>49776
> Но, как Касперски ещё когда-то давно сказал: если вам удобно и привыкли на винде, то и сидите на ней, а не занимайтесь ерундой.
Для меня Касперски ни разу не авторитет в этом вопросе. Да и я никому ничего не навязывал, сидите где ходите. Меня спросили про рекомендации - я их дал.
> И я считаю, что рекомендация ньюфагам ставить прыщи - это сознательная диверсия с целью уменьшить себе конкуренцию на рынке труда.
Ну ок, я считаю иначе.
> Японский-то (в большинстве случаев) работает. В большинстве случаев, конечно, не из коробки (и это очень интересно, когда ты выбираешь японский язык в настройках клавиатуры, а оно по-японски не пишет, но линуксовый-вей же; кто я, чтобы судить). Проблема тут - настроить.
Ну вот я и предложил способ решения - взять какой-нибудь дистрибутив, который делают японцы для себя. В нем наверняка всё и так настроено из коробки, и ничего настраивать не требуется.
> Что выучат, если нечего?
Нет, не "нечего". Получить понимание, что есть отдельная штука "компилятор", есть отдельная штука "линкер", есть объектные файлы, есть ассемблер, есть динамические и статические либы... это по-твоему "нечего"?
> Тебе действительно нужны аргументы в пользу того, что человек севший осиливать программирование будет занят, собственно, осиливанием этого самого программирования, и у него на ближайшее время будет куча более интересных занятий, чем разгребание ключей компилятора?
Какое такое разгребание ключей? Блин... это разгребание на базовом уровне, достаточном чтобы получить из стольки-то .c файлов столько-то .o файлов, а потом это слинковать в исполняемый, оно от силы займет 30 минут. Только что ты говорил, что там учить нечего, а теперь говоришь про какое-то разгребание, что вообще происходит?
> И опять у тебя некорректные сравнения, потому что хаскиль - это другой язык, а я тебе про самый обычный переход между реализациями одного языка в рамках даже одного стандарта.
Т.е. хочешь сказать, что чтоб выучить флаги для MSVC после флагов от GCC, надо сильно много потратить времени?
> Возможно, я слишком остро на это реагирую, но уж больно часто я слышу вот эту комбинацию из "ставь линукс, учи компиляцию, иде - магия, поэтому нинужно", будто им на ютубе какой-то модный блоггер рассказал, и все полезли повторять.
Ну это мне не модный блоггер рассказал, а мой личный опыт.
Сообщение слишком длинное. Полная версия.
>> No.49778 Ответ
>>49771
> А вот что там искать в объектных файлах?
Ну например объектные файлы выставляют наружу некоторые символы. Скажем, static функции наружу не выставляются, а не-static - выставляются, и их можно вызывать из другого .c файла. Вот эти базовые вещи желательно понимать.

Отдельная тема - динамически загружаемые библиотеки (.dll, .so, .dylib) - как их подгружать, как такие-то функции из них вызвать и так далее.
> > понимание вещей "что такое системный вызов?", "что такое ABI, API?",
> Я надеюсь именно понимание, а не спрос за все подводные?
Ну все подводные обычно знать не надо, то только в узкой области может быть нужно, если разрабатываешь ядро или компилятор какой-нибудь. А общее понимание - да, полезно.
>> No.49780 Ответ
>>49777
> Получить понимание, что есть отдельная штука "компилятор", есть отдельная штука "линкер", есть объектные файлы, есть ассемблер, есть динамические и статические либы... это по-твоему "нечего"?
Ну... да? То есть, ты только что всё описал. Но и это не нужно, потому что вот взял я сишный интерпретатор, и теперь у меня есть только магический бинарь и исходник. И ни компилятора, ни линкера, ни объектных файлов - ничего.
> это разгребание на базовом уровне, достаточном чтобы получить из стольки-то .c файлов столько-то .o файлов, а потом это слинковать в исполняемый, оно от силы займет 30 минут
Это, конечно же, неправда. Человек либо нагуглит, либо в книжке у него будет написана строка, которую нужно скопировать в консольку, и он её просто будет копировать. Займёт это гораздо меньше 30 минут. А вот если человек в начале обучения пойдёт читать гццшный мануал, или сделает --help=???, то уйдёт гораздо больше 30 минут, и пользы от этого особой не будет.
> Т.е. хочешь сказать, что чтоб выучить флаги для MSVC после флагов от GCC, надо сильно много потратить времени?
Я хочу сказать, что при переходе с компилятора на интерпретатор знания о компиляции и её флагах не перенесутся.

>>49777
> Получить понимание, что есть отдельная штука "компилятор", есть отдельная штука "линкер", есть объектные файлы, есть ассемблер, есть динамические и статические либы... это по-твоему "нечего"?
Ну... да? То есть, ты только что всё описал. Но и это не нужно, потому что вот взял я сишный интерпретатор, и теперь у меня есть только магический бинарь и исходник. И ни компилятора, ни линкера, ни объектных файлов - ничего.
> это разгребание на базовом уровне, достаточном чтобы получить из стольки-то .c файлов столько-то .o файлов, а потом это слинковать в исполняемый, оно от силы займет 30 минут
Это, конечно же, неправда. Человек либо нагуглит, либо в книжке у него будет написана строка, которую нужно скопировать в консольку, и он её просто будет копировать. Займёт это гораздо меньше 30 минут. А вот если человек в начале обучения пойдёт читать гццшный мануал, или сделает --help=???, то уйдёт гораздо больше 30 минут, и пользы от этого особой не будет.
> Т.е. хочешь сказать, что чтоб выучить флаги для MSVC после флагов от GCC, надо сильно много потратить времени?
Я хочу сказать, что при переходе с компилятора на интерпретатор знания о компиляции и её флагах не перенесутся.

Если так уж хочется, чтобы "учили компиляцию", то советуйте, хотя бы, учить именно компиляцию. То есть, парсинг, деревья, оптимизации, генерацию кода и всё такое. В этом, хотя бы, смысл есть. Сейчас это выглядит так, будто первокурсникам рассказали, что вот эта вот кнопочка в ихневой иде, она не магия, а она компилирует (без подробностей), линкует (без подробностей, а то и не объясняя, что такое "линкует"), и только потом запускает. И они такие: "ох, нифига себе! вот оно как! пойду пацанам в интернете покажу, какой я теперь умный". Это примерно, как слово "алгоритм", или (как у тебя в ссылке выше (бай зе вей, там такая хрень написана, что я бы порекомендовал тебе пересмотреть своих авторитетов)) "алгебра".
Сообщение слишком длинное. Полная версия.
>> No.49781 Ответ
>>49780
> Но и это не нужно, потому что вот взял я сишный интерпретатор, и теперь у меня есть только магический бинарь и исходник.
А зачем ты его взял? Сишным интерпретаторм мне ни разу пользоваться не доводилось, зачем ты его в пример приводишь? Что ты этим хочешь показать? В 99.999% случаев язык Си "используют" через компилятор, а не через некий интерпретатор. И как ты бинарь из интерпретатора получать собрался?
> Сейчас это выглядит так, будто первокурсникам рассказали, что вот эта вот кнопочка в ихневой иде, она не магия, а она компилирует (без подробностей), линкует (без подробностей, а то и не объясняя, что такое "линкует"), и только потом запускает.
Почему "без подробностей"? Без каких подробностей? Почему ты мне приписываешь то, что я не писал?

Мне вот например доводилось писать и править сборочные скрипты, которые вообще ни от какой IDE не зависят, и там, да, нужно понимать про объектные файлы, которые потом таким-то образом линкуются. Это по-твоему бесполезные знания?
>> No.49782 Ответ
>>49780
> Я хочу сказать, что при переходе с компилятора на интерпретатор знания о компиляции и её флагах не перенесутся.
Ну почему же не перенесутся. Часть перенесется. Флаги в компиляторе MSVC и в GCC будут другими, а общие принципы там те же. Объектные файлы, экспортируемые символы, линковка, бла-бла-бла...
>> No.49785 Ответ
>>49782
Если уж говорить про интерпретатор Си или крестов, давайте рассмотрим реальный пример: https://root.cern.ch/cling
> Cling Metaprocessor provides convenient and easy to use interface for changing the interpreter's internal state or for executing handy commands. Cling provides the following metaprocessor commands:

> syntax: .(command), where command is:

> .x filename.cxx - loads filename and calls void filename() if defined
> .L library | filename.cxx - loads library or filename.cxx
> .printAST - shows the abstract syntax tree after each processed entity
> .I path - adds an include path
Там оказывается можно загружать какие-то библиотеки. Выходит, знания о разделяемых библиотеках оказываются не бесполезными?

Если поподробнее изучить возможности этого интерпретатора, окажется что он (сюрприз!) не совсем соответствует стандартному языку C или C++ - уже хотя бы потому, что в стандартах C и C++ режим интерпретатора как таковой вообще не описывается. Об этом можно почитать в статье https://www.researchgate.net/publication/256082045_Cling_-_The_New_Interactive_Interpreter_for_ROOT_6

Так что это уже получается немного другой язык, не C и не C++. Кстати, есть еще Jancy такой Си-подобный скриптовый язык https://habr.com/ru/company/tibbo/blog/258427/
>> No.49786 Ответ
Когда чуть более года назад я начал учить Сишечку по K&R, то поставил в Окна какую-то аскетичную ИДЕ с названием наподобии Сстудио или такое да-да, я просто не помню названия, зато помню, что её индусы очень сильно любят. Ну поставил, шоб всё как у людей, а кроме редактора мне ничего и не нужно было. Однако в ней был местный отладчик! Нет, не тот что gdb с тысячами имён и оболочек, а местный самородок, создателями же спизженный/написанный, судя по его работе. Дичь начиналась уже с попыток отладить керниганоричивские removeTab() - оно просто не выдерживало подобное и часто зависал, проёбывал брейкпоинты, выдавал SegFault на пустом месте итд. Забив на такой отладчик, я ещё какое-то время дебажил принтами, но код со временем становился всё более сложным и сложным, и я понял, что без gdb мне дальше не уйти.
Узнал, что в юниксах все мне нужные вещи работают из коробки и переполз на убунту. Ну и пока норм, так как для меня все принципиальные различия между виндой и юниксом заключаются в различиях между ABI и API, а в дебри пока не лез. Всё таки соглашусь с мнением: если Си - значит нужон Unix.
Алсо какие флажки в gcc могут понадобиться ньюфагу кроме "--help -Ox -S -c -E -gx -fno/f-<something>"?
>> No.49787 Ответ
>>49786
> Алсо какие флажки в gcc могут понадобиться ньюфагу кроме "--help -Ox -S -c -E -gx -fno/f-<something>"?
Например, компилировать с варнингами -Wall -Wextra - https://gcc.gnu.org/onlinedocs/gcc/Warning-Options.html. Опции из категории -fsanitize не будут лишними, описаны тут https://gcc.gnu.org/onlinedocs/gcc/Instrumentation-Options.html

Ну и еще полезно в каком-нибудь Valgrind прогонять, но это уже не имеет отношения к компилятору
>> No.49792 Ответ
>>49786
> какие флажки в gcc могут понадобиться ньюфагу
CFLAGS = \
-std=c89 -pedantic -Wall -Wextra -Wformat=2 \
-O3 -march=native -mtune=native -Wl,--build-id=none -s

-std=c89 -pedantic — строгая проверка соответствия кода стандарту ANSI C89. Он самый старый и самый переносимый между остальными компиляторами. Не обязательно.
-Wall -Wextra — куда ж без них. Для пущего эффекта можно добавить -Werror, любой ворнинг будет останавливать компиляцию; на любителя.
-Wformat=2 — проверка форматирования в printf. Нельзя вызывать printf(str) — если в str вдруг окажется строка с лишними спецификаторами (пользователь ввёл, например), будет undefined behaviour. Правильно: printf("%s", str) или fputs(str, stdout).
Это что касается статических проверок.
-O3 -march=native -mtune=native — оптимизации, о которых я пока мало знаю. Максимальная (-O3), для вот этого процессора (-mtune=native), и вот этой архитектуры (-march=native), на которых компилируется код.
-Wl,--build-id=none -s — флаги для линкера. Немножко уменьшает вес бинария и количество лишних секций, чтобы не мозолили глаза в дампах.
Остаются ещё две лишние, для их удаления придётся дополнительно вызвать
strip -R .note -R .comment $(BIN)

>>49786
> какие флажки в gcc могут понадобиться ньюфагу
CFLAGS = \
-std=c89 -pedantic -Wall -Wextra -Wformat=2 \
-O3 -march=native -mtune=native -Wl,--build-id=none -s

-std=c89 -pedantic — строгая проверка соответствия кода стандарту ANSI C89. Он самый старый и самый переносимый между остальными компиляторами. Не обязательно.
-Wall -Wextra — куда ж без них. Для пущего эффекта можно добавить -Werror, любой ворнинг будет останавливать компиляцию; на любителя.
-Wformat=2 — проверка форматирования в printf. Нельзя вызывать printf(str) — если в str вдруг окажется строка с лишними спецификаторами (пользователь ввёл, например), будет undefined behaviour. Правильно: printf("%s", str) или fputs(str, stdout).
Это что касается статических проверок.
-O3 -march=native -mtune=native — оптимизации, о которых я пока мало знаю. Максимальная (-O3), для вот этого процессора (-mtune=native), и вот этой архитектуры (-march=native), на которых компилируется код.
-Wl,--build-id=none -s — флаги для линкера. Немножко уменьшает вес бинария и количество лишних секций, чтобы не мозолили глаза в дампах.
Остаются ещё две лишние, для их удаления придётся дополнительно вызвать
strip -R .note -R .comment $(BIN)

Рекомендую освоить make всем, кто ещё не. Очень экономит время.
Приложенный файл компилирует все исходники, каждый в свой бинарий. Можно вызывать make <имя>, чтобы скомпилять только один. Дополнение имён по табу должно срабатывать.
Для мелких учебных программок, состоящих из одного файла — в самый раз.
Сообщение слишком длинное. Полная версия.
>> No.49795 Ответ
Файл: Makefile.gz
Archive, 0.24 KB, 0 файлов - Нажмите на картинку, чтобы скачать файл
view
Makefile.gz
>>49792
> Приложенный файл
Забыл. Раз уж забыл, заодно поясню.
MAKEFLAGS = -rR
Отмена встроенных переменных и правил. Плюс к переносимости и скорости выполнения.

$(V).SILENT:
По умолчанию компиляция происходит молча. Выполняемая команда выводится, только если передать
$ make V=1


[0] [1] [2] [3] [4] [5] ... [52] [53] [54]
Пароль:

[ /b/ /u/ /rf/ /dt/ /vg/ /r/ /cr/ /lor/ /mu/ /oe/ /s/ /w/ /hr/ ] [ /a/ /ma/ /sw/ /hau/ /azu/ ] [ /tv/ /cp/ /gf/ /bo/ /di/ /vn/ /ve/ /wh/ /fur/ /to/ /bg/ /wn/ /slow/ /mad/ ] [ /d/ /news/ ] [ Главная | Настройки | Закладки | Плеер ]