Русский
Русский
English
Статистика
Реклама

Hi

Из песочницы Hi Programming Language

21.09.2020 14:20:44 | Автор: admin
Начиная с этой статьи мы приступаем к публикации концепта реализации нового языка программирования Hi.

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

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

Don't bite my finger, look where I am pointing
Warren S. McCulloch, 1960s

Исходная постановка задачи


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

В целом, при некоторых ограничениях, эта задача была решена еще в 2018 году приложением Helius' full of life, которое можно найти в App Store.

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

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

Так как хорошо спроектированной интеллектуальной системе одинаково удобно сгенерировать синтаксис любого непротиворечивого языка в любой форме, то для того, чтобы использовать язык коммуникаций между искусственным и естественным интеллектом логично использовать традиционный алгоритмический код, сделав его максимально удобным для паттернов мышления человека, знакомого с мейнстримовыми языками, предком которых был Algol. Это потомки по линии Pascal (Ada, Modula) и C (C++, Java, Swift). Впрочем, наш концепт построения абстракций и внимательное отношение к скобкам близки к духу Scheme (Lisp), а интеграция команд программного окружения в выразительные средства языка соответствует идеям скриптовых языков, винтажному BASIC для первых микрокомпьютеров и проекту Oberon системы Никлауса Вирта.

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

В итоге сформулируем назначение языка как обмен алгоритмами между искусственным и естественным интеллектом, совместное программирование задач (игр и головоломок) для себя и других, свободный обмен текстами программ.

Hi World


Перед тем, как мы обсудим основные тезисы для конструирования синтаксиса языка, представим три коротких фрагмента кода. Начнем с традиционной программы вывода приветственного сообщения:

PRINT Hello world!

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

Представим два более интересных примера: нахождение для двух целых чисел наибольшего общего делителя в императивном стиле и с использованием рекурсии:

FUN gcd   INPUT a: INT   INPUT b: INT   WHILE a ~= b LOOP      IF a > b THEN a -= b ELSE b -= a ENDIF   REPEAT   PRINT gcd = , aRETURNFUN gcd _ a: INT, _ b: INT -> INT   IF b == 0 THEN RETURN a ENDIFRETURN gcd b, (a % b)PRINT gcd 6, 9 # печатает 3

Требования для языка Hi


Каждый удачный язык проектируется с конкретным назначением, которое определяет его синтаксические особенности и семантику. Например, ASSEMBLER был предназначен для прямого кодирования команд процессора в мнемонической форме, удобной человеку; BASIC (тот который с номерами строк и оператором GOTO) удачно продолжил идею прямой трансляции команд высокоуровневому интерпретатору. Hi programming language предназначен стать языком команд и алгоритмов для коммуникаций между Human и абстрактным интеллектом некоторой спроектированной системы.

Как логичное следствие, программным кодом считается не скомпилированный машинный код и не байт-код виртуальной машины, а исходный текст (листинг), включая комментарии. Соответственно, внутренняя реализация кода никоим образом не стандартизируется и оставляется на усмотрение реализации интерпретаторов или компиляторов.

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

  1. Язык должен быть легким в освоении человеком
  2. Язык должен быть надежным в использовании
  3. Язык должен быть способен к организации очень сложных программных систем.

Давайте подробнее исследуем эти базовые требования.

Язык должен быть легким в освоении


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

Следовательно, мы используем конструкции вида LOOPREPEAT, а не {}. Фигурные скобки в качестве приятного бонуса будем использовать вот так:
s = {1, 2, 3} у нас будет обозначать присвоение переменной s множества из трех целых чисел.
a = [1, 2, 3] у нас будет обозначать присвоение переменной a массива из трех целых чисел.

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

2) Для арифметических выражений используем запись вида: a + b + c, а не (+ a b c), как в семействе LISP.

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

4) Используем нативную алгоритмизацию паттернов мышления: императивный язык с возможностью рекурсивных функций и элементами функциональных вычислений. Как мы в дальнейшем рассмотрим на одном из примеров, императивный стиль вполне удобен и для программирования приложений, основанных на архитектуре обработки событий в декларативном ключе, подобных SwiftUI. Иначе говоря, термины императивный и декларативный скорее отображают позицию наблюдателя, чем реальность, данную нам в ощущение.

5) Следим за отсутствием избыточности синтаксических конструкций и эргономичностью ввода символов кода. Мы используем новую строку в качестве разделителя. Впрочем, как и в языке Swift, можно использовать ; в одной строке в качестве разделителя для нескольких выражений. При этом наше инженерное образование категорически протестует против придания синтаксической значимости отступам в тексте программы, как это ранее использовалось в Fortran, а в настоящее время в Python.

Надежный язык


Необходимым условием существования сложных систем во времени является требование полной семантической однозначности и исполнимости каждой корректно написанной программы без исправлений при неизбежной эволюции и усложнении языка в будущем. Как решить эту проблему надежности работы программ при его неизбежном развитии и расширении? Для того, чтобы избежать конфликта совпадения идентификаторов и зарезервированных слов мы используем простой и эффективный способ, как сделано, например, в Oberon. Язык HI резервирует все идентификаторы с буквами в верхнем регистре без цифр с количеством символов более одного как служебные. Таким образом допустимыми идентификаторами, написанными вручную программистом или сгенерированными интеллектуальной системой, являются следующие примеры:

foo, Foo, f_001, F1, F, for

Примеры идентификаторов, которые зарезервированы языком:

FOO, FOR, HI, YES, EVERYRESTRICTIONMATTER

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

LET x = 6  # константа x имеет тип INTVAR boolean = TRUE  # объявление переменной boolean типа BOOL

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

Язык для построения очень сложных программных систем


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

Мы пока оставим в стороне реализацию архитектуры сложных систем на языке Hi и детально разберем эти вопросы в последующем при изложении концепции организации классов протоколов, коммуникации между ними и способам построения их иерархии. Заметим только, что архитектура сложных приложений будет строиться из небольших автономных, легко читаемых и модифицируемых фрагментов и вдохновение здесь мы черпали не в изучении computer science, а в архитектуре взаимодействия клеток и органов живых организмов. Тело обыкновенного человека составляет порядка 50 триллионов жизнеспособных клеток, успешно функционирующих несмотря на сложные окружающие условия, наличие множества паразитов и постоянные повреждения миллионов микрокомпонентов. Создателю компьютерной системы, которая полностью прекращает свое функционирование вследствие единственного обращения к несуществующему индексу массива здесь есть чему поучиться.

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

Ограничения


На практике всегда, когда мы применяем какие либо требования для конструирования систем, то чем-то приходится или жертвовать или на что-то не обращать внимания. Для нас в конструкции языка Hi не имеет принципиального значения:

  • Точная совместимость синтаксиса с другими языками программирования
  • Возможность использования существующих внешних библиотек кода или интеграция с другими программными системами
  • Оптимизация скорости исполнения программ c ориентацией на аппаратные возможности и n-битную архитектуру компьютеров
  • Сложность реализации интерпретаторов / компиляторов для полной версии языка
  • Так как исполняемый интерпретатором программный код это исходный текст, то не предусмотрено встроенной защиты от копирования и легкой модификации в случае наличия доступа к источнику

В завершение скажем о происхождения приветливого наименования языка программирования HI, Hi или hi. Допустим это будет Helius interactive Programming Language или Human Intelligence Programming Language. В отличие от всех конструкций нашего языка это единственный мета идентификатор, который не имеет однозначной семантики.

В следующей статье представим описание Hi Basic Programming Language на одной странице и затем разберем логику конструирования синтаксиса, следуя требованиям тезисов, представленных выше.
Подробнее..

Почему мы говорим hello и hi история английских приветствий бонус

20.11.2020 20:09:45 | Автор: admin


Вы можете не знать английского, но слова hello и hi поймете даже в этом случае. Это одни из самых распространенных слов в английском. Носители языка их используют каждый день. И студенты, когда учат английский как второй, изучают их одними из самых первых.

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

Hi как возглас для привлечения внимания стал приветствием


Hi сегодня используется для неформального приветствия. Между друзьями, хорошими знакомыми или родными самое то.

Hi, dude! Wassup?
Hi, none. Just chilling.

Здорово, чувак. Как оно?
Здорово, да ниче. Отдыхаю себе.

А само слово имеет довольно длинную историю, которая насчитывает более полутора тысяч лет. Но обо всем по порядку.

В качестве приветствия слово hi стали употреблять примерно 150 лет назад. Вот цитата из одной из культовых книг по этикету начала XX века Этикет в обществе, в бизнесе, в политике и дома (Etiquette in Society, in Business, in Politics, and at Home, 1922):

Even more informal is the widely used 'Hi.' A friendly greeting for people who already know each other, it should never be said in answer to a formal introduction, but it is universally used, and accepted, by the young.

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


За 100 лет значение слова ничуть не поменялось. Но интересно, что впервые в качестве приветствия его стали использовать в Америке. Как раз после Гражданской войны, когда очень остро встал вопрос о самоидентификации американского английского и его отмежевании от британского.

Лингвисты предполагают, что hi это видоизмененные среднеанглийские восклицания hy, hey или ey, которые использовались для привлечения внимания и выражения эмоций в Англии.

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

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

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

Hello могло выглядеть совсем по-другому


Hello это самое популярное приветствие в английском языке. Но интересно то, что до начала XIX века в Британии так практически не здоровались.

Вернее, было очень похожее слово, но с иным произношением hallo или hullo.

И существует две основных версии его происхождения.

  • В староанглийском языке было слово hlan, которое означало лечить, быть здоровым. В качестве приветствия его можно считать практически полным аналогом русского здравствуй.
  • В The American Heritage Dictionary утверждается, что hello может быть измененным holla, которое произошло от старофранцузского восклицания hola. Это предположение косвенно подтверждает то, что в современном испанском hola и сейчас используют как приветствие.

Но в современном варианте слово hello стали использовать с 1833 года. И вот что говорит на этот счет Генри Фаулер, известный исследователь английского, в своей работе A Dictionary of Modern English Usage (1926):

Hello, formerly an Americanism, is now nearly as common as hullo in Britain. And the Englishman cannot be expected to give up the right to say hello if he likes it better than his native hullo.

Слово Hello ранее было американизмом, а сейчас оно так же распространено, как hullo в Британии. И нельзя ожидать, что англичанин откажется от права говорить hello, если это слово нравится ему больше, чем родное hullo.

Истинную популярность слово hello получило после изобретения телефона в 1876 году. Правда, изначально Александр Грэхем Белл именно он создал телефон предлагал, чтобы для начала разговора использовали слово Ahoy, но Hello победило.

Кстати, это обыгрывали в мультсериале Симпсоны. Мистер Бернс отвечает на телефонный звонок фразой Ahoy-hoy. Видимо, это сделано, чтобы подчеркнуть возраст героя.


Мол, мистер Бернc настолько старый, что пользуется телефонным приветствием, которое еще Белл придумал.

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

Другой известный изобретатель Томас Эдисон решил немного изменить систему и в 1877 отправил президенту телефонно-телеграфной компании Питсбурга короткую записку:

Friend David, I do not think we shall need a call bell as Hello! can be heard 10 to 20 feet away. What you think?



Друг Дэвид, я не думаю, что нам нужен звонок, если Hello! можно услышать на расстоянии 10-20 футов. Что ты думаешь об этом?

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

И очень скоро девушек-операторов телефонных станций стали называть hello-girls.

Слово мгновенно стало популярным в массовой культуре. Уже в 1882 году вышла первая книга, в заголовке которой было Hello. А в 1901 году вышла песня Hello, Central, Give Me Heaven, которая стала хитом. Слово стало неразрывно ассоциироваться с телефонным аппаратом. И чем больше телефонов становилось в США и в мире, тем шире его использовали.

И уже через 50 лет, в 1920-х, оно стало настолько обычным, что превратилось в приветствие не только по телефону, но и в реальной жизни.

Но если бы не настойчивость Эдисона, который предлагал именно Hello для начала телефонного разговора, то вполне возможно, что англичане здоровались бы Ahoy.

Бонус: еще 11 приветствий на все случаи жизни


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

  • Good morning. А также Good afternoon и Good evening. Формальное популярное приветствие. Подходит для любой ситуации. Если сократить до Morning, то становится более неформальным. Тут аккуратно, потому что Good day и Good night используются для прощания. P.s. Но не в Австралии. Там Good day вполне обычное приветствие.
  • Whats up. Он же Wassup и Sup. Неформальное приветствие, принятое между хорошими знакомыми или друзьями.
  • Nice to meet you. Чаще всего используется при знакомстве с новым человеком.
  • How do you do? Эту фразу знают все школьники. И она просто до ужаса формальная. Будет к месту разве что на какой-нибудь важной бизнес-встрече или званом ужине у аристократов.
  • Howdy! Сокращенный сленговый вариант How do you do?. Неформальное приветствие, распространенное в Канаде и северных штатах США.
  • Yo! Вполне обычное неформальное приветствие молодежи между друзьями.
  • Hey there! Обычно используется как приветствие к компании людей.
  • Alright mate? Дружественное сленговое приветствие в Британии.
  • Hey man! Неформальное приветствие между знакомыми мужчинами или коллегами. Интересно, что хорошо знакомую девушку тоже можно поприветствовать Hey man, но не экспериментируйте с Hey woman. Максимум Hey girl, но даже такой вариант считается не сильно приличным.
  • Hey you. Обычно, так приветствуют представителей противоположного пола, чтобы показать свой интерес. Такой себе способ поздороваться, флиртуя.
  • Greetings! Формальное приветствие, не слишком распространенное. Чаще его можно услышать как приветствие с трибуны. Или же как ироничный и шуточный способ поздороваться.

Вариантов приветствий существует еще много. Но классические Hello и Hi используют чаще всего. Так что можно разнообразить свою английскую речь как угодно или же просто говорить всем Hi и Hello. Потому что так делают почти все.

Кстати, мы тут собираем материал, чтобы описать самые необычные и нестандартные приветствия на английском. Поделитесь мыслями? Будем рады!

Онлайн-школа EnglishDom.com вдохновляем выучить английский через технологии и человеческую заботу




Только для читателей Хабра первый урок с преподавателем по Skype бесплатно! А при покупке занятий получите до 3 уроков в подарок!

Получи целый месяц премиум-подписки на приложение ED Words в подарок.
Введи промокод hellothere на этой странице или прямо в приложении ED Words. Промокод действителен до 20.11.2021.

Наши продукты:

Подробнее..

Категории

Последние комментарии

  • Имя: Макс
    24.08.2022 | 11:28
    Я разраб в IT компании, работаю на арбитражную команду. Мы работаем с приламы и сайтами, при работе замечаются постоянные баны и лаги. Пацаны посоветовали сервис по анализу исходного кода,https://app Подробнее..
  • Имя: 9055410337
    20.08.2022 | 17:41
    поможем пишите в телеграм Подробнее..
  • Имя: sabbat
    17.08.2022 | 20:42
    Охренеть.. это просто шикарная статья, феноменально круто. Большое спасибо за разбор! Надеюсь как-нибудь с тобой связаться для обсуждений чего-либо) Подробнее..
  • Имя: Мария
    09.08.2022 | 14:44
    Добрый день. Если обладаете такой информацией, то подскажите, пожалуйста, где можно найти много-много материала по Yggdrasil и его уязвимостях для написания диплома? Благодарю. Подробнее..
© 2006-2024, personeltest.ru