Comments 10
Автор путает терминал, эмулятор терминала и командную оболочку.
Программа, которую написал автор — это командная оболочка.
Грустно признавать, но это статья уровня:
10 let a=1
20 print a
30 a=a+1
40 goto 20
И возгласы "ого!! оно печатает числа!1" со ссылкой на обязательный гитхаб.
Я не хочу обидеть автора. Но в доинтернетное время такое делалось не только не в гитхабе, а часто в блокноте ручкой и даже в уме.
Чтобы познать уровень своего невежества по Даннингу-Крюгеру, зайдите на wasm.in или на Киберфорум, почитайте, постарайтесь понять, что приведенное в статье это дичайший хелловорд.
Да, Вы поймете, что не понимаете вообще ничего. Это минус. Но это и плюс - если интерес к предмету настоящий, а не попонтоваться "я написал статью на Хабр, время чтения 5 минут", то понимание того, что Вы не понимаете ничего, сподвигнет Вас изучать предмет дальше.
С Уважением.
На самом деле, настоящий терминал -- это отдельная железка, которую использует человек для работы с машиной:

Мужик сидит и что-то набирает на клавиатуре терминала; то, что он набирает, передаётся байт за байтом в машину (слева три шкафа -- это и есть машина); машина же, в свою очередь, байт за байтом передаёт на терминал символы и управляющие коды, образующие в итоге то, что человек видит на экране. У машины может быть несколько терминалов, и все они могут использоваться одновременно (собственно, в 60-80-е годы так обычно и бывало); терминалами не обязательно должны быть дисплеи с клавиатурами -- очень часто использовались телетайпы и пишущие машинки, хотя по мере распространения дисплеев они, конечно, выходили из употребления.
Что же касается т.н. терминалов в, скажем, современном Линухе, -- это программы, которые программно симулируют настоящие железные терминалы. Как правильно заметили в комментариях, то, что автор написал, -- это не терминал, это командная оболочка, т.е. программа, выполняющаяся под управлением операционной системы и использующая сервисы операционной системы для считывания символов, поступающих от терминала, и вывода на терминал каких-либо сообщений. Что из себя терминал представляет, данная программа понятия не имеет -- это скрывает от неё операционная система. Технически, скажем, возможно подключить к современному ПК настоящий древний терминал, при необходимости написать для операционной системы драйвер под конкретную модель терминала, после чего можно будет работать за этим терминалом точно так же, как можно работать в окне программного симулятора терминала на самом ПК.
Я как-то пытался отследить по исходникам линукс ядра, как данные перемещаются из драйвера uart в line discipline, tty, а затем в приложение. В итоге не вышло, весьма запутанно оказалось. Вот и подумал, неужели эта статья реально описывает терминал с нуля? Ан нет (
На самом деле дальше интереснее, у вас есть несколько подходов в продолжении, выше историческую справку привели, насчет терминала вам нужен PTY, псевдо терминал, есть Сшные заголовки, которые прям системные и возможно зависят от ОС, для терминала нужны аски последовательности, эти аски последовательности даст псевдотерминал, у псевдотерминала есть мастер и слейв(файл termios, и open_pty/fork_pty).
Подходы, которые помогут в изучении, проще начинать не с оболочки или с оболочки, но высокоуровнево, на самом деле например на java>=25 можно успешно организовать, свой терминал, тоесть вы стартуете без login, но имеете возможность высокоуровнево рассмотреть первое приближение поведения ввода/вывода, просто потомучто внизу, будет нужен только сервер или демон pty, так как линукс/виндовс ушли далеко, рабочее место проще организовать минимально Юниксовое, это совет через виртуалку или на пк фрибсд проще поставить, фрибсд создавался как коммуникационная единица(исторически получается так просто), в его основе пока что ничего не изменилось на эту тему, вы просто быстрее поймёте с явой и фрибсд, что конкретно изучать на эту тематику
если вы будете изучать с явы, то тут путь изящнее чем мы можем себе вообразить, потомучто рантайм один, вам не надо пикать системные утилиты, вы можете их реализовать, но опять же без логина системного, тоесть это будет рантайм отдельный, по-сути мини терминал-ОС на яве.
Другой путь, более хардкорный, в его основе лежит, другая парадигма, но его можно погнуть в сторону печатной машинки, это написать свой ассемблер, и погнуть его под опрос 3 портов, получится некий эмулятор печатной машинки
Скрытый текст

Я пишу свой терминал с нуля, чтобы понять как работает компьютер