Physics.Math.Code
151K subscribers
5.22K photos
2.2K videos
5.81K files
4.55K links
VK: vk.com/physics_math
Чат инженеров: @math_code
Учебные фильмы: @maths_lib
Репетитор IT mentor: @mentor_it
YouTube: youtube.com/c/PhysicsMathCode

Обратная связь: @physicist_i
Download Telegram
📘 The Elements of Computing Systems: Building a Modern Computer from First Principles [2005 + 2021] Noam Nisan and Shimon Schocken

💾 Скачать книги

📱 May 2024 CACM: Nand to Tetris: Building a Modern Computer System from First Principles

📱 Shimon Schocken

📱 Nand2Tetris - Building a modern computer

Источник: From Nand to Tetris

На coursera:
▪️ Построение современного компьютера на основе первых принципов: От Nand до Tetris (проектно-ориентированный курс)
▪️ Построение современного компьютера на основе первых принципов: От Nand до Tetris Part II (курс, ориентированный на проект)

Описание: На этом курсе, ориентированном на проекты*, Вы построите современную компьютерную систему с нуля. Мы разделим это увлекательное путешествие на шесть практических проектов, которые проведут Вас от конструирования элементарных логических вентилей до создания полностью функционирующего компьютера общего назначения. В процессе обучения Вы узнаете - самым прямым и конструктивным образом - как работают компьютеры и как они создаются. Что Вам потребуется: Это самостоятельный курс: все знания, необходимые для успешного прохождения курса и создания компьютерной системы, будут даны в процессе обучения. Поэтому мы не предполагаем никаких предыдущих знаний в области информатики или инженерии, и все учащиеся приветствуются на борту. Вам не понадобится никаких физических материалов, поскольку Вы будете собирать компьютер на своем собственном ПК, используя программный аппаратный симулятор, точно так же, как настоящие компьютеры проектируются компьютерными инженерами в полевых условиях. Аппаратный симулятор, а также другие программные инструменты будут предоставлены Вам бесплатно после регистрации на курс. Формат курса: Курс состоит из шести модулей, каждый из которых включает серию видеолекций и проект. Вам потребуется около 2-3 часов для просмотра лекций каждого модуля и около 5-10 часов для выполнения каждого из шести проектов. Курс можно пройти за шесть недель, но Вы можете делать это в своем собственном темпе. Вы можете посмотреть выступление на TED об этом курсе, набрав в Гугле "nand2tetris TED talk". *О проектно-ориентированных курсах: Курсы, ориентированные на проект, предназначены для того, чтобы помочь Вам завершить личностно значимый проект в реальном мире, а Ваш преподаватель и сообщество учеников с аналогичными целями будут давать Вам советы и рекомендации на этом пути. Активно применяя новые концепции в процессе обучения, Вы овладеете содержанием курса более эффективно; кроме того, у Вас появится возможность использовать полученные навыки для внесения позитивных изменений в свою жизнь и карьеру. По окончании курса у Вас будет готовый проект, которым Вы сможете с гордостью пользоваться и делиться. #программирование #низкоуровневое_программирование #Linux #assembler #cpp #C

💡 Physics.Math.Code // @physics_lib
Please open Telegram to view this post
VIEW IN TELEGRAM
139🔥22👍9😍2🗿2🙏1
📘 The Elements of Computing Systems.zip
26.1 MB
📘 The Elements of Computing Systems: Building a Modern Computer from First Principles [2005 + 2021] Noam Nisan and Shimon Schocken

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

Достоинства:
Хорошая структурированность;
Оригинальный авторский подход.

☕️ Для тех, кто захочет задонать на кофе:
ВТБ: +79616572047 (СБП) ЮMoney: 410012169999048

#программирование #низкоуровневое_программирование #архитектура #computer_science #assembler #cpp #C

💡 Physics.Math.Code // @physics_lib
138👍27🔥9👨‍💻2🤩1🗿1
🧩 Задача на C++: "Таинственная конкатенация"

🖥 Что выведет следующая программа? Будьте внимательны!
#include <iostream>
#define MERGE(a, b) a ## b

int main() {
const char* result1 = MERGE("Hello, ", "World!");
const char* result2 = MERGE("Hello, ", "World" "!");

std::cout << result1 << std::endl;
std::cout << result2 << std::endl;
return 0;
}

Варианты:
1. Обе строки выведут "Hello, World!"
2. Ошибка компиляции
3. Первая выведет мусор, вторая — "Hello, World!"
4. Первая вызовет ошибку, вторая скомпилируется
Задумайтесь на минутку, прежде чем запускать код...

🔍 Разбор проблемы
Правильный ответ: 2 (Ошибка компиляции) или, если точнее, ошибка возникнет уже на строке с result1.
🖥 Код с решением и комментариями:
#include <iostream>
#define MERGE(a, b) a ## b

int main() {
// Эта строка НЕ скомпилируется:
// const char* result1 = MERGE("Hello, ", "World!");
// После раскрытия макроса получим: "Hello, ""World!"
// Это два отдельных строковых литерала без оператора конкатенации

// А вот эта строка скомпилируется и выведет "Hello, World!":
const char* result2 = MERGE("Hello, ", "World" "!");
// После раскрытия макроса получим: "Hello, ""World""!"
// А благодаря фазе трансляции, соседние строковые литералы
// сливаются в один: "Hello, World!!"

// Правильный способ через макрос:
const char* result3 = "Hello, " "World!";

std::cout << result2 << std::endl; // Выведет: Hello, World!!
std::cout << result3 << std::endl; // Выведет: Hello, World!
return 0;
}

📚 Малоизвестный факт:
В
C++ есть специальная фаза трансляции, где соседние строковые литералы объединяются в один. Например: const char* s = "Hello, " "World!"; // Эквивалентно "Hello, World!"
Но этот процесс происходит до раскрытия макросов, поэтому MERGE("Hello, ", "World!") не работает как ожидается.

Ключевые моменты:
1. Оператор ## в макросах выполняет сращивание токенов, а не строк
2. Строковые литералы автоматически конкатенируются на фазе трансляции
3. Макросы раскрываются на более поздней фазе, когда уже слишком поздно для "правильной" конкатенации строк

Будьте осторожны с оператором ## при работе со строковыми литералами! Для их конкатенации лучше использовать обычное расположение рядом или constexpr функции в современном
C++.

Чем токен отличается от строки?

1. Токен (в контексте препроцессора
C++) — это минимальная единица текста программы, которую распознает препроцессор ( int, main, (, ), {, "Hello", 123, +, ; )
Препроцессор работает именно на уровне токенов. Оператор ## сращивает именно токены, а не их значение

2. Строковый литерал — это конкретный тип токена, который представляет строку в кавычках. Пример: "Hello" — это один токен типа "строковый литерал"


Ещё по теме: Задачки по программированию для наших подписчиков [ C/C++ ]

#C #cpp #cplusplus #программирование #задачи

💡 Physics.Math.Code // @physics_lib
Please open Telegram to view this post
VIEW IN TELEGRAM
49👍19🤷‍♂15🤯6🔥4👾4👏1👻1