Криптонит. Разработка, наука, шифрование
1.87K subscribers
816 photos
51 videos
482 links
Канал IT-компании «Криптонит».
Рассказываем про:
•работу с Big Data на основе AI, ML, шифрования
•разработку и языки программирования
•математику и криптографию

На связи @OBogolyubskaya_official
Присоединяйтесь к нам: https://career.kryptonite.ru/
Download Telegram
⚡️Вот это Perl! Ярый сторонник движения за свободное ПО лингвист и программист Ларри Уолл часто радует перлами. Один из них родился в 1987 году и остаётся популярным до сих пор. Речь о Perl — Practical Extraction and Report Language, языке для практического извлечения данных и обработки отчётов.

Ключевая идея Perl выражается наиболее известной фразой Ларри Уолла: «Простые вещи должны оставаться простыми, а сложные — становиться возможными».

👁‍🗨Изначально язык предназначался для автоматизированной обработки текстовых файлов, но со временем его функциональность расширилась. Сегодня Perl используют в научных исследованиях, создании сайтов, приложений и пользовательских интерфейсов.

Ещё одна фраза Ларри иллюстрирует универсальность языка: «Есть несколько способов сделать что-либо». Связано это с тем, что Perl поддерживает как объектно-ориентированный подход, так и процедурную, и функциональную парадигмы.

🔵 Perl можно назвать Си-подобным, с заимствованиями из LISP, Бейсика, текстового редактора sed, языка сценариев AWK, командного интерпретатора UNIX и бог знает чего ещё. Это весьма необычный сплав структуры и синтаксиса совершенно разных программных продуктов.

При должном знании английского изучать Perl сравнительно легко из-за обилия бесплатной литературы, свободно распространяемых модулей и развитого сообщества, насчитывающего десятки тысяч программистов. На основе Perl создан язык Raku (ранее — Perl 6), который развивается как самостоятельный диалект. #ИЯП
Please open Telegram to view this post
VIEW IN TELEGRAM
А вы знали, что в честь Эйфеля названа не только башня, но и язык программирования? Рассказываем о нём и о его создателе, который сейчас преподаёт в российском Университете Иннополис.

👁‍🗨В 1985 году французский специалист в области программной инженерии Бертран Мейер представил язык программирования Eiffel, ориентированный на создание ПО для критически важной инфраструктуры.

Этому способствовала его прежняя работа главой отдела программных разработок в компании Électricité de France, управляющей атомными электростанциями по всей Франции. Тогда Мейер поставил своей целью написание максимально строгого и безопасного языка.

❗️Название Eiffel было дано в честь Александра Гюстава Эйфеля, построившего в Париже знаменитую башню. Аналогия призвана показать, что язык «Эйфель» также надёжен, как Эйфелева башня, и позволяет быстро создавать сложные конструкции из стандартных компонентов без ущерба безопасности.

В основу языка Eiffel легла концепция контрактного программирования — подхода к проектированию ПО, ранее описанного Мейером. Этот подход требует написания формальных утверждений корректности и призван реализовать строгую модель взаимодействия всех программных элементов.

❗️Синтаксис в Eiffel тоже непривычно строгий и призван облегчить читаемость кода. Сокращения не приветствуются, все классы и процедуры комментируются, зарезервированные слова набираются жирным шрифтом, а идентификаторы — курсивом.

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

📌По современной классификации Eiffel относится к объектно-ориентированным языкам программирования со строгой статической типизацией и встроенной поддержкой параллельных вычислений.

Он был написан с заимствованием синтаксиса и ряда подходов из «Алгол-60» и Планкалкюль, а после стандартизации в ISO и ECMA оказал влияние на Java, C# и другие современные языки программирования.

🟢Язык Eiffel продолжает развиваться, а Бертран Мейер с 2014 года преподаёт в российском Университете Иннополис, где ведёт курсы «Введение в требования и спецификации программного обеспечения», «Методология и методы научного исследования» и другие. #ИЯП
Please open Telegram to view this post
VIEW IN TELEGRAM
Сегодня расскажем о самом (не)благозвучном языке программирования — Brainfuck🤯 #ИЯП

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

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

🟢За мозговыносящий синтаксис, больше похожий на топтание кота по знакам препинания, Brainfuck и получил своё название. Для примера напишем программу, которая будет выводить слово KRYPTONITE в ASCII кодах (75 82 89 80 84 79 78 73 84 69).

Вот один из вариантов её реализации:
++++++++++[>+++++++>++++++++<<-]>+++++.>++.+++++++.<+++++.++++.-----.-.-----.>-----.<----.

Как легко увидеть, здесь используется цикл и три ячейки памяти. Мы записываем в нулевую ячейку "10" как начальное значение счётчика. В конце каждого цикла оно уменьшается на единицу, пока не станет равным нулю. В первую ячейку записываем "7", а во вторую — "8".

🔵После завершения цикла значения в первой и второй ячейках увеличатся в десять раз. В них будут записаны значения, удобные для дальнейших преобразований: в первой ячейке сохранится "70", а во второй — "80". Без использования цикла нам пришлось бы писать 70 и 80 плюсиков подряд.

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

❗️Например, буква «К» получается добавлением пяти (+++++) к значению "70" из первой ячейки, а буква «R» — добавлением двух (++) к значению "80" из второй ячейки.

Если захотите чего-то мозговыносящего, попробуйте оптимизировать эту программу, задействовав меньше операторов и/или ячеек.
Please open Telegram to view this post
VIEW IN TELEGRAM
Как и обещали, рассказываем про язык программирования FOCAL, который использовали на советском компьютере-клавиатуре «Электроника БК-0010» и на ПК серии PDP.

🧠FOCAL — Formulating Online Calculations in Algebraic Language (формулирование онлайн-вычислений на алгебраическом языке). Он появился в 1968 году как упрощённый вариант языка JOSS, в котором впервые было представлено разделение времени.

Первая версия называлась просто FOCAL. Через год вышла доработанная редакция FOCAL-69, а ещё через два появился FOCAL-71.

❗️По сравнению с BASIC, FOCAL требовал меньше памяти и мог работать в минимальном системном окружении. Интерпретатор «Фокал» записывался прямо в ПЗУ и позволял писать более сложные программы.

Синтаксис у FOCAL и BASIC сходен. При этом в FOCAL каждое зарезервированное слово начинается на свою уникальную букву, поэтому команды можно сокращать. Например, вместо COMMENT писать C, вместо TEXT — T, а QUIT заменить Q. Вот пример листинга:

01.01 C Вывести на экран слово «Криптонит» заглавными буквами
01.02 T "КРИПТОНИТ" !
01.03 Q


📌На FOCAL была написана оригинальная игра «Посадка на Луну» (Lunar Lander), позже переписанная на другие языки.

«Фокал» мог стать популярным, однако из-за стремления к упрощению он не поддерживал пользовательские функции, а все переменные в нём были только числовыми (с фиксированной запятой), что затрудняло написание кода.

🟥В середине семидесятых на смену PDP пришла 32-разрядная архитектура VAX и «Фокал» постепенно утратил актуальность. Его развитием ещё какое-то время занимались энтузиасты, но с девяностых этот язык практически не используется. #ИЯП
Please open Telegram to view this post
VIEW IN TELEGRAM
От пролога до логического вывода. Продолжаем рассказывать об истории языков программирования📚 #ИЯП

Пролог — это не только вступление, но и язык программирования, оказавший большое влияние на развитие ИИ. Он был предложен профессором Экс-Марсельского университета Аленом Кольмерауэром. Появившись в 1972 году, Prolog быстро стал самым популярным воплощением концепции логического программирования.

🔵В программах на Prolog нет жёсткой последовательности действий. Вместо неё задаётся набор известных фактов (предикатов), составляющих базу знаний. Обращаясь к программе, пользователь отправляет запрос к её базе знаний. На основе системы фактов и правил вывода программа пытается доказать или опровергнуть некоторое утверждение об объектах и их связях, содержащееся в запросе.

Например, в программе на Prolog есть записи о видах деятельности разных компаний:
область_деятельности(КРИПТОНИТ, ИИ)
область_деятельности(КРИПТОНИТ, ИБ)
область_деятельности(ДРУГАЯКОМПАНИЯ, ИИ)
область_деятельности(ДРУГАЯКОМПАНИЯ, телеком)
область_деятельности(ЕЩЁКОМПАНИЯ, ритейл)


Пользователь хочет узнать, какие компании занимаются разработкой в области ИИ. Для этого он отправляет запрос:
?область_деятельности(X, ИИ)


И получает ответ следующей структуры:

X = КРИПТОНИТ, ДРУГАЯКОМПАНИЯ


❗️Полнота ответа зависит от актуальности базы знаний, а его стиль — от заданного шаблона унификации логического вывода.

📌В 1996 году Prolog был описан в стандарте ISO/IEC JTC1/SC22/WG17 и продолжает развиваться в настоящее время. Его можно назвать частично-декларативным (код = данные), побуждающим использовать как приёмы процедурных языков, так и элементы ООП, но двигающимся в сторону императивного программирования и интеллектуальных агентов.
Please open Telegram to view this post
VIEW IN TELEGRAM
Давайте проверим память или интуицию! Попробуйте правильно ответить на все пять вопросов про языки программирования прошлого⬇️

Этот тест сделан по мотивам нашей рубрики #ИЯП — история языков программирования.
Please open Telegram to view this post
VIEW IN TELEGRAM
Малболг — язык из ада или как придумать что-то очень сложное и бесполезное.

Существует интернет-сообщество «эзотерические языки программирования». К нему в 1997 году присоединился американский студент Бен Олмстед. Он задался целью создать «адски сложный» для понимания язык и вскоре придумал Malbolge, названный так в честь восьмого круга ада из «Божественной комедии» Данте Алигьери. Про него рассказываем дальше. #ИЯП

😈В чём же сложности Malbolge? Их много. Чтобы сразу не было скучно, Бен отошёл от двоичной логики, заменив её на троичную. Подобным образом ранее поступили создатели советской ЭВМ «Сетунь» , но совершенно из других побуждений.

Перед запуском в интерпретаторе программа на Malbolge выполняет инструкцию crazy (crz). Эта команда считывает из памяти два числа, сравнивает их в троичной системе и записывает результат в память. Операция повторяется до тех пор, пока выделенная интерпретатором память не закончится.

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

🔵Другая уникальность Malbolge заключается в том, что программы на нём изменяют свой собственный код во время работы. Самоизменяющиеся инструкции были специально придуманы Беном для того, чтобы результат исполнения кода был неочевиден.

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

🔴Malbolge получился настолько крышесносным, что сам автор не осилил написать на нём даже «Hello World!». Вместо этого Бен сделал упрощённую версию языка Dis и программу на нём, которая печатала одну букву: «H».

Чтобы реализовать простейший Hello World на Malbolge, группе энтузиастов потребовалось два года, LISP и генетические алгоритмы, перебирающие варианты расшифровки команд. Вот как выглядел итоговый листинг:

(=<`# 9]~6ZY327Uv4-QsqpMn&+Ij"'E%e{Ab~w=_:]Kw%o44Uqp0/Q?xNvL:`H%c# DD2^WV>gY;dts76qKJImZkj 


📌Упоминание языка Malbolge есть в сериале «Элементарно» на CBS. В одном из его эпизодов преступник роняет записку с кодом на Malbolge, а Холмс расшифровывает его и получает подсказку.
Please open Telegram to view this post
VIEW IN TELEGRAM
Как вы думаете, когда был придуман первый объектно-ориентированный язык? Рассказываем в нашей рубрике про историю языков программирования. #ИЯП

🧠По одной из версий — ещё в мае 1962 года, сразу после презентации компьютера UNIVAC 1107. Тогда к директору системного программирования Eckert–Mauchly Computer Роберту Бемеру подошёл норвежский программист Кристен Нюгор, предложивший ему ряд смелых идей по развитию языка Алгол-60, которые позволили бы выполнять на UNIVAC алгоритмическую симуляцию различных процессов реального мира.

🟦Вскоре Нюгор по приглашению Бемера выступил с докладом на международной конференции IFIP по обработке информации. Его работа называлась «SIMULA – расширение ALGOL для описания дискретно-событийных систем». Среди прочего, она описывала ключевые концепции ООП: классы, подклассы и наследование.

❗️Название SIMULA расшифровывалось как SIMIUlation LAnguage и подчёркивало тот факт, что основной целью этого языка была цифровая симуляция.

Докладом заинтересовались в Вычислительном Центре города Осло, где Нюгор вместе с Оле-Йоханом Далем продолжили работу над Simula — уже как над самостоятельным языком.

⚡️В июне 1967 года Нюгор и Даль представили язык Simula-67. Он был стандартизирован в феврале следующего года и стал популярным алголоподобным языком общего назначения. «Симула-67» использовалась в образовательных целях университетами Норвегии, Дании и Швеции. На этом языке выполняли моделирование СБИС (сверхбольших интегральных схем), что ускорило разработку ЭВМ нового поколения.

👁‍🗨В СССР «Симула-67» использовался на ЭВМ семейства «Урал», в частности — «Урал-16» и применялся для моделирования работы целых заводов.

Simula-67 повлиял на создание С++ (который задумывался как «Си с классами»), Pascal, Eiffel и многих других языков.
Please open Telegram to view this post
VIEW IN TELEGRAM
Хотите добавить красок своему коду? Тогда используйте Piet! Рассказываем про этот яркий язык программирования ниже. #ИЯП

🧠Австралийский физик и специалист по обработке изображений Давид Морган-Мар придумал несколько эзотерических языков программирования. Один из самых известных среди них — Piet. Программы на этом языке выглядят как произведения искусства!

Своё название Piet получил в честь основоположника неопластицизма — нидерландского художника Пита Мондриана.

🔵Вместо строк кода в Piet используются цветовые блоки. Каждый блок состоит из непрерывной последовательности коделей — пикселей одного цвета. Всего в языке предусмотрено 20 цветов.

Каждый цветной (не чёрный и не белый) блок кодирует целое число, равное количеству коделей в этом блоке. Белые кодели используются для изменения текущего цвета без выполнения команд. Последовательности белых коделей игнорируются. Чёрные блоки задают границы и вызывают смену направления считывания следующих блоков.

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

Узнаёте, что изображено на картинке?🔥
Please open Telegram to view this post
VIEW IN TELEGRAM
Этот язык заменит Python! (или нет😄)

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

Сейчас активно развивается сфера машинного обучения, в которой широко используются графические ускорители и универсальный язык Python. Однако ему на смену готовят интересную и более специфическую альтернативу — Mojo.

О нём и рассказываем в нашей исторической рубрике про языки программирования. #ИЯП

🧠Его придумали в компании Modular, основанной бывшим сотрудником Google Тимом Дэвисом и Кристофером Латтнером (соавтором языка Swift, оптимизатора кода LLVM и компилятора MLIR).

Как раз на платформе MLIR и строится Mojo. Это более современная структура компилятора, которая позволяет Mojo эффективно задействовать различные ускорители, включая графические (GPU) и тензорные (TPU) процессоры, а также специализированные интегральные схемы (ASIC).

❗️Работая над Mojo, Дэвис и Латтнер стремились объединить удобство использования языка программирования высокого уровня (в частности — Python), с производительностью системных языков программирования, таких как C++ и Rust.

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

Впервые Mojo был анонсирован в конце 2022 года. Первая версия вышла в 2023 году. Текущая стабильная версия выложена на GitHub всего месяц назад. На сайте разработчика доступна документация по Mojo на английском языке.
Please open Telegram to view this post
VIEW IN TELEGRAM
В нашем канале обновились рубрики — собрали их актуальный список в одном посте: нажимайте на тэги и читайте только то, что интересно вам❤️

🔹#нейрословарь — разбираем термины из мира нейронных сетей;
🔹#на_ноль_делить_нельзя — рассказываем о неочевидных математических фактах;
🔹#накодь — постим код с ошибкой, а потом рассказываем, как её решить;
🔹#история_математики — рассказываем про необычные математические приборы и ЭВМ прошлого;
🔹#Криптонит_говорит — делаем наш айтишный подкаст;
🔹#языки_программирования — сделали обзоры Java, JavaScript, Python, C++, Golang, Scala, Rust, Spark и продолжаем рассказывать о трендах;
🔹#научные_статьи — ломаем мозг над сложными статьями сотрудников «Криптонита»;
🔹#задачки — решаем задачки на логику и математику;
🔹#вакансии_Криптонит — приглашаем присоединиться к нашей команде;
🔹#новости_Криптонит — рассказываем, чем живёт компания;
🔹#мнения_экспертов — делимся мыслями наших экспертов на актуальные темы;
🔹#подборки — собираем в одном месте ресурсы для специалистов разных областей ИТ;
🔹#цитаты_вдохновляют — делимся мыслями известных людей;
🔹#интервью — наши сотрудники рассказывают о профессиональном пути и трендах отрасли;
🔹#Криптонит_объясняет — рассказываем просто насколько это возможно о сложных терминах и понятиях.
🔹#ИЯП — изучаем языки программирования прошлого;
🔹#криптословарь — объясняем основные криптографические термины.
Please open Telegram to view this post
VIEW IN TELEGRAM