LINUX.ORG.RU
ФорумTalks

Я тупой, что делать?

 


2

2

Не могу осилить ничего сложнее bash и php, просто не понимаю ЗАЧЕМ!?

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

Почитал новость о том, что в Linux приходит Rust, подумал, ну вот время для изучения C упущено, но сейчас начинается новая эпоха с Rust в ядре, чем чёрт не шутит, может стоит попробовать, авось, для ядра какие-нибудь приколюхи тоже смогу писать? НЕТ НЕ СМОГУ ПОТОМУ ЧТО Я ТУПОЙ(((((

https://doc.rust-lang.ru/book/ch03-01-variables-and-mutability.html#Затенение...

Затенение (переменных)

Я не понимаю что это и зачем это нужно.

fn main() {
    let x = 5;

    let x = x + 1;

    {
        let x = x * 2;
        println!("The value of x in the inner scope is: {x}");
    }

    println!("The value of x is: {x}");
}

Почему нельзя из main вызвать функцию, которая сделает это самое x * 2 и напишет строчку, зачем было усложнять и придумывать какое-то { }.

fn main() {
    let x = 5;

    let x = x + 1;

    x_multiple(x);

    println!("The value of x is: {x}");
}

fn x_multiple(x: i32) {
      let x = x * 2;

      println!("The value of x in the inner scope is: {x}");
}

За достоверность синтаксиса не ручаюсь.

Я ещё могу как-то понять типы данных, ну там, один байтик 255 максимальное число, два байтика уже 255 * 255 = 65025 максимальное число, четыре байтика 255 * 255 * 255 * 255... Прикольно конечно, да, что 4 байтами можно кодировать большие числа, как это делают во всяких JPEG, PNG и т.д. бинарных форматах, что можно одним символом " " (пробел) описать число 32 т.к. это 32 символ в ASCII таблице.

Структуры в расте ещё какие-то, почему нельзя обойтись обычными массивами для хранения данных.

Классы в PHP не осилил, Rust похоже тоже не осилю.

Ну и что теперь, обратно в дворники идти?

★★★★★

Последнее исправление: Spoofing (всего исправлений: 1)
Ответ на: комментарий от imul

Это пример кода, написанного программиотом. На самом деле мне нужны были книги на любом языке, кроме русского.

Irma ★★
()
Ответ на: комментарий от xwicked

Объяснние невежды. Мы писали рунами, где одна руна - один образ(слово)…

Объяснние невежды. Мы со времён палеолита писали петроглифами, где один петроглиф - один объект (дичь) со свойствами и методами охоты ©.
И через тыщи лет это ООП все понимают, в отличие от этих ваших рун и букв, которые забудут во веки веков :)

quickquest ★★★★★
()
Ответ на: комментарий от LINUX-ORG-RU

а можно для не разрабов пояснить вкратце зачем так делать? вот мне на таких абстрактных примерах тоже не очень понятно, в чем профит. почему вместо int a = 10 + b; не сделать условно int c = 10 + b и потом printf(c) ?

Не заводить лишнюю переменную? Ну так все равно надо куда-то, пусть и не явно, временно сохранить значение из верхнего уровня и восстановить по выходу из вложенного.

user_undefined
()
Ответ на: комментарий от emorozov

Добро пожаловать в клуб. Это скрипт выкидывает книги на всех языках, которые используют кириллицу, не только на русском.

Irma ★★
()
Ответ на: комментарий от Irma

Я исправил в нём парочку неэффективностей, если что. Убрал ненужный промежуточный файл, и необязательно использовать cat вместе с grep, т.к. grep ищет в файлах, если указать ей их в качестве аргументов.

emorozov
()
Ответ на: комментарий от emorozov

Ну да, ты уровнем выше. Но скрипт ДЕЛАЕТ НЕ ТО.

Irma ★★
()
Ответ на: комментарий от user_undefined

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

Это не значит, что ими всегда надо пользоваться. В книге это используется только для того, чтобы показать, что в языке есть такая возможность, и как она используется.

Можно было бы на более приближенном к жизни примере показать, но в первой главе не получится такой сделать, т.к. придётся слишком много дополнительных конструкций использовать.

emorozov
()
Ответ на: комментарий от emorozov

Это, значит, для любителей запускать цикл for по переменной i. Когда вложенных циклов становится больше трех, начинается темная магия.

А как обращаться к переменной, которая затенилась?

Irma ★★
()
Ответ на: комментарий от Irma

Я не помню. Пытался начать писать на Rust два года назад. Шло со скрипом, т.к. я пытался решать на нём задачки с leetcode, и задачки, где требуется создавать структуры данных, даже такие простые, как списки, полностью сломали мне мозг. Я не осилил создание структур данных на Rust. Собирался попробовать снова, но новая работа, даже две одновременно, и вот уже пару лет совсем нет времени и сил вернуться к нему.

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

emorozov
()
Ответ на: комментарий от Lrrr

golang … очень хорошо продуман

Хорошо пошутил. Как насчёт того, что имена, начинающиеся с маленькой буквы, - private, а с большой - public?

rupert ★★★★★
()
Ответ на: комментарий от user_undefined

вкратце зачем так делать?

Если совсем в вкратце то изолировать область видимости блока кода. Можно создавать переменные с одинаковым именем или/и делать какие то промежуточные вычисления без коллизий опять же с основным кодом.

Ну блин вот ты математик у тебя расчёты и тут в середине кода тебе надо посчитать что-то, но чуть по другому в идеале с теми же именами переменных без всяких там префиксов и прочего. Обрамил скобочками и всё. Язык си как и многие друге блочно-стуруктурированный язык, он весь состоит из блоков кода и блоков данных эти блоки обрамляются скобочками, область видимости такова что из нутри скобок видно всё что снаружи (исключая то что в других скобках), а тому что во вне не видно того что внутри скобок. Как это свойство языка использовать решать тебе, пока не найдёшь применение для себя понятное дело что будет казаться бесполезной штукой, но эта штука один из главных фундаментов на которых язык стоит. Ты и так это используешь, описывая типы данных/функции/условия/циклы, а тут просто явное применение с конкретной задачей, обрезать область видимости неименованного блока кода. Если такой блок кода именовать то получится функция, но тогда её надо будет вынести целиком во вне, а так как она будет во вне то и снабдить аргументами что-бы она могла через стек получить данные и выдать их.

Рассматривай блок кода обрамлённый скобками как анонимную функцию без аргументов и явного возврата значения, которая имеет доступ ко всему коду что выше. Дошло дело до неё она отработала записала что-то во вне и всё её нету, ниже по коду никак нельзя обратится к тому что было в этом блоке.

LINUX-ORG-RU ★★★★★
()
Последнее исправление: LINUX-ORG-RU (всего исправлений: 2)
Ответ на: комментарий от LINUX-ORG-RU

ну вот как раз условные вложенные for(i.... В целом понятно, и на мой взгляд, если бы в той же книге было бы как раз такое, то было бы понятней. Я например понимаю почему я захочу в цикле использовать во вложенных блоках в качестве имени переменной i (де-факто стандарт) вместо i,index1,index2… А вот нафига для совсем разных по смыслу операций использовать одно и то же имя уже сложнее понять.

пока не найдёшь применение для себя понятное дело что будет казаться бесполезной штукой, но эта штука один из главных фундаментов на которых язык стоит

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

как я понял одна из фишек именно раста, что в let x = x * 2; будет использоваться x из верхнего уровня, в сях int x = x * 2; уже не прокатит

user_undefined
()
Последнее исправление: user_undefined (всего исправлений: 1)
Ответ на: комментарий от user_undefined

Это всё равно что задавать вопрос о практическом применении колеса, ну оно катиться с горки и подпрыгивает на дружках, это его свойство. А уж какое у колеса практическое применение это как бы ну ты понял, оно не само же по себе. Ну можно к нему педальки с боков вставить и кататься, можно на палку два колеса посадить и катать. Что-бы ты не делал это всё будет просто его катание, хоть для машины, хоть для чего. Так же с блоком кода обрамлённом в скобки, его область видимости изолированна это его свойство, а уж как это применять на практике. Ну например если я не ошибаюсь там стек разбивается, тоесть на уровне исполнения кода уже изоляция, допустим для тебя это важно, ну вот например и практическое применение.

LINUX-ORG-RU ★★★★★
()
Ответ на: комментарий от user_undefined

как я понял одна из фишек именно раста, что в let x = x * 2; будет использоваться x из верхнего уровня, в сях int x = x * 2; уже не прокатит

Ну это не фишка, а просто разность. А так да. Но это уже детали, языки тут оч разные и сравнивать уже нечего ибо всё разное.

Одинаковы базовые примитивы и концепции. И такм и там области видимости блоков кода, но работают по разному. Суть одна, реализация разная. Для понимания нужна суть, а уж тонкости везде свои. Понимая суть переменных ты поймёшь что это такое и в расте и в си и в питоне где угодно. Но то как они работают будет везде по разному. У спуфи с типами проблемы, а самые ванильные и чистые типы данных это Си. Во всех остальных языках над ними свои нюансы и полумагия рантайма.

LINUX-ORG-RU ★★★★★
()

Структуры в расте ещё какие-то, почему нельзя обойтись обычными массивами для хранения данных.

Можно. Когда будешь писатьпросматривать столько кода, что за месяц будешь гарантированно всё забывать, то поймешь для чего.

ya-betmen ★★★★★
()
Ответ на: комментарий от LINUX-ORG-RU

ну оно катиться с горки и подпрыгивает на дружках, это его свойство

во, катится, подпрыгивает, вот уже весело, уже неплохо :) А тут я понимаю, что цель показать, что есть в принципе такая возможность, но лучше бы, что бы объяснялось на более реально используемых примерах.

например если я не ошибаюсь там стек разбивается, тоесть на уровне исполнения кода уже изоляция, допустим для тебя это важно, ну вот например и практическое применение.

во, согласен, это уже более хорошее описание, даже если лично мне это не нужно.

P.S. сходил по ссылке и там есть практический пример, с этого и надо было начинать facepalm.jpg

user_undefined
()
Ответ на: комментарий от quickquest

Мы со времён палеолита писали петроглифами, где один петроглиф - один объект (дичь) со свойствами и методами охоты

Говори за своих предков, мои - рунами писали, а твои МОЖЕТ гонялись за дичью.

xwicked ★★☆
()
Ответ на: комментарий от dataman

Нигде, он сам придумал =) Ничего страшного, он только только начал въезжать в это всё касаемо языков при работе с которыми уже нужно обращать внимания на то как работает ЭВМ (и не только). Хоть маненько, но надо внимания/понимания, но перед этим базовые знания почти фундаментальные в том числе что надо двойку в степень количества бит возводить. А не максимальные значения множить.

Если не будет додумывать, а читать через месяц другой,третий эти болячки уйдут.

LINUX-ORG-RU ★★★★★
()
Ответ на: комментарий от Irma

Гугл даёт какую-то безумную выдачу по запросу «программиот».

alex1101
()
Ответ на: комментарий от sparkie

Сама с таким сталкивалась. Не всё можно вкурить сразу, потом само приходит.

Murg ★★★
()
Ответ на: комментарий от dataman

Ну почему же, на баше и подобных он хреначит дай боже, ябнесмог. Ну и в целом понимает как там всё в системе устроено и всё такое прочее. Просто все эти биты/байты мимо проходили. Но вот захотел =)

Просто есть разница когда ты общаешься с компьютером на уровне что сделать и как сделать. Последнее ему особо никогда было не нужно ибо как делать знали программы и командная оболочка. Так что даже тут нет ничего страшного =)

LINUX-ORG-RU ★★★★★
()
Ответ на: комментарий от Psilocybe

а для того чтобы одинаковый фрагмент алгоритма внутри function testfn() не копировать.

Ну почему же? Иногда локальные функции нужны для именования смысла куска кода. Да, можно комментарием, но комментарий устареть может, а локальной именованной функции устареть намного сложнее(ну если только совсем говнокодеры доберутся).

Loki13 ★★★★★
()
Ответ на: комментарий от Anoxemian

и начинкой! Мясо с сыром на пример... и в сметанку мокнуть.

Расти большой :3

Murg ★★★
()
Ответ на: комментарий от TheAnonymous

Ага, но намного более общительный (хоть и с затруднениями) по сравнению с обычными аутистами.

Dimez ★★★★★
()
Ответ на: комментарий от alex1101

В фортране 77 тоже было круто: переменные, начинающиеся с I-N, считаются целыми. Я уже слышу как ты кричишь «Это другое!»

rupert ★★★★★
()

Это «{}» скорее всего делается для «оптимизации», потому что это будет отдельный блок кода, в котором после его выполнения сразу удалятся созданные переменные и память немного освободится. Я видел даже такие штуки:

function blaBlaBla() {
do {x = x+ 1} while(false);
}

Таким образом do-while выше выполнится всего один раз, но зато переменные внутри него сразу же удалятся и это типа оптимизация.

ИМХО в нашем современно мире с современными компиляторами и JIT-ами это уже устаревшие «приемы»

romanlinux ★★★
()

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

anonymous2 ★★★★★
()
Последнее исправление: anonymous2 (всего исправлений: 1)
Ответ на: комментарий от fsb4000

Ты же вроде часто жаловался как мало получаешь и испытываешь зависть к программистам и майнерам потому что они получают больше твоего.

И всё равно приравниваешь деньги к уму, это такой твой способ признаться в отсутствии ума?

Если он стремится к чему-либо, и у него не получается, то такие да, - это вероятно признак отсутствия ума хотя бы для поиска правильного способа.

Но если человеку важнее количество свободного времени, а не денег, то разве найти доход с относительно высоким $/h и работать всего 40h/mo это не проявление ума, хоть и в сравнении с другими годовой доход будет относительно небольшим?

sanyo1234
()
Последнее исправление: sanyo1234 (всего исправлений: 3)
Ответ на: комментарий от anonymous2

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

А готовые либы со всем этим?

Мне вот тоже не очень то нравятся языки программирования, в которые на уровне синтаксиса языка пытаются приделать какие-то тулзы предметной области. Хотя те же xBase/Clipper/FoxPro были прикольными для своего времени.

sanyo1234
()
Ответ на: комментарий от user_undefined

а можно для не разрабов пояснить вкратце зачем так делать?

Не надо так делать. Чем меньше сущностей задействуешь, тем лучше. В своё время на перле такой брейнфак могли изобразить… А подобный шадовинг из той же примерно оперы, только в более упрощенной форме.

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

Гениальный язык программирования должен будет по запросу «сделай зашибись» выдавать супер отпимальную программу без багов. Но у погромистов на такой ЯП не хватит мозгов. Так и живём с сями и ржавыми.

foror ★★★★★
()
Последнее исправление: foror (всего исправлений: 2)

Структуры в расте ещё какие-то, почему нельзя обойтись обычными массивами для хранения данных.

Абстракции. Скажи спасибо, что на перфокартах не программируешь, а массивы используешь, деды бы на тебя смотрели как на смузихлёба в те времена.

Классы в PHP не осилил, Rust похоже тоже не осилю.

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

Я вот недавного в opencl по быстрому хотел разобраться, так потратил полдня, пока на хабре не нашел статью от 2011 года, где за 10 минут мне всё разжевали. А до этого куча идиотов на ютубе часами чего-то жевали, вокруг иллюстрации блоков CU с официального сайта.

foror ★★★★★
()
Последнее исправление: foror (всего исправлений: 1)

Вот мои источники, бережно сохраненные на случай если понадобиться разобраться в ржавом:

https://github.com/embassy-rs/embassy

https://fasterthanli.me/articles/the-curse-of-strong-typing

https://highassurance.rs/

https://fasterthanli.me/articles/a-half-hour-to-learn-rust

https://bfnightly.bracketproductions.com/rustbook/chapter_0.html

https://docs.opentitan.org/doc/ug/rust_for_c/

Но я их не проверял, может и там одни идиоты.

foror ★★★★★
()
Последнее исправление: foror (всего исправлений: 1)
Ответ на: комментарий от emorozov

Да черт знает. У знакомого сын с синдромом аутизм. Химиком стал и живёт сейчас в штатах. Вероятно все таки степень заболевания разная бывает

saibogo ★★★★
()
Ответ на: комментарий от foror

О, какие откровения. ИИ должны писать программы. А ещё, дай угадаю, законы и вообще работать в судах.

А по какому алгоритму работает человек, пишущий программу? По какому алгоритму человек, дающий задачу человеку, пишущему программу?

А про проблему останова ты точно знаешь?

emorozov
()
Ответ на: комментарий от foror

выдавать супер отпимальную программу без багов.

«Программа без багов» - это сферический конь в вакууме. Потому что на одном железе и в одних условиях она может не помещаться в память, а в другом не успевать. И выясняется это только в процессе отладки, потому что чтобы предусмотреть это - нужен неимоверный объем исходных данных и возможных состояний

vaddd ★☆
()
Ответ на: комментарий от emorozov

А ещё, дай угадаю, законы и вообще работать в судах.

Было бы неплохо.

А про проблему останова ты точно знаешь?

Даны описание процедуры и её начальные входные данные. Требуется определить: завершится ли когда-либо выполнение процедуры с этими данными; либо, что процедура всё время будет работать без остановки.

foo(int x)
   for (int i = 0; i < x; x++)
       print(x)

foo(10)

Ответ: процедура завершится. Можно писать анализатор. Или это что-то по научному и тебе нужен всеобщий анализатор для сферических коней в ваккууме?

foror ★★★★★
()
Последнее исправление: foror (всего исправлений: 2)
Ответ на: комментарий от foror

Ну а теперь напиши этот анализатор. Напиши именно программу, которая выдаст тебе такой ответ. Для любой процедуры и любых входных данных.

Заодно также можешь параллельно вечный двигатель построить. Озолотишься, с энергией в мире сейчас большие проблемы, и вечный двигатель был бы очень востребован.

emorozov
()
Ответ на: комментарий от vaddd

нужен неимоверный объем исходных данных и возможных состояний

Так и что? Так сейчас и обучают нейронки.

foror ★★★★★
()
Ответ на: комментарий от emorozov

Для любой процедуры и любых входных данных.

Так я тебя и спросил, тебе шашечки или ехать? Другого ответа я и не ожидал от очередного погромиста.

foror ★★★★★
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.