Интерактивный язык программирования?

Есть ли язык программирования, который может быть запрограммирован полностью в интерактивном режиме, не будучи должен записать файлы, которые интерпретируются или компилируются. Думайте, возможно, что-то как IRB для Ruby, но система, которая разработана, чтобы позволить Вам записать целую программу из командной строки.

5
задан Yazz.com 14 February 2010 в 21:52
поделиться

11 ответов

Smalltalk можно программировать полностью интерактивно, но я бы не стал называть приглашение smalltalk «командной строкой». Большинство сред лиспа также похожи на это. Также постскриптум (как в принтерах), если не изменяет память.

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

7
ответ дан 18 December 2019 в 05:26
поделиться

Всегда есть лисп, оригинальная альтернатива Smalltalk с этой характеристикой.

4
ответ дан 18 December 2019 в 05:26
поделиться

Пытались ли вы переименовать новую версию CSS в CSSv2.css, а затем направить страницу на ее использование? Если это решает проблему устаревших файлов, то вы просто испытываете отсутствие обновления файлов. Если нет, у тебя есть более серьезные проблемы.

-121--1852452-

В течение недель ? Попробуйте открыть саму таблицу стилей (введя ее адрес в адресную строку браузера) и нажмите F5 . Если он все еще не освежается, ваша проблема лежит в другом месте.

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

<link rel="stylesheet" type="text/css" href="styles.css?version=51">
-121--1852445-

Это действительно вопрос о реализациях, не языков, но

  • Smalltalk (попробуйте версию Squeak ) сохраняет все ваши работы в "интерактивном рабочем пространстве", но он является графическим и не ориентирован на командную строку.

  • APL, который был впервые развернут в системах IBM 360 и 370, был полностью интерактивным, используя командную строку на модифицированной машинке IBM Selectric! Ваши функции APL хранились в "рабочем пространстве", которое совсем не напоминало обычный файл.

  • Многие, многие языковые реализации поставляются с чисто интерактивными интерпретаторами командной строки, например, скажем Standard ML of New Jersey , но поскольку они не предлагают какого-либо постоянного пространства имен (т.е. когда вы выходите из программы, вся ваша работа теряется), я не думаю, что они действительно должны считаться.

Интересно, что главные движущие силы Smalltalk и APL (Кей и Айверсон соответственно) выиграли премии Тьюринга. (Айверсон получил свою награду Тьюринга после того, как ему было отказано в пребывании в Гарварде.)

2
ответ дан 18 December 2019 в 05:26
поделиться

вы можете найти его в модуле

~/Library/Application Support/iPhone Simulator/User/Applications
-121--4605266-

datetime , который поможет вам с этим:

datetime.datetime.strptime(date_string, format1).strftime(format2)

Для конкретного примера вы можете сделать

>>> datetime.datetime.strptime('Mon Feb 15 2010', '%a %b %d %Y').strftime('%d/%m/%Y')
'15/02/2010'
>>>
-121--767626-

Многие Forths можно использовать так.

1
ответ дан 18 December 2019 в 05:26
поделиться

Предположим, что у вас есть класс (A), который объединяет два других класса (B) (C), и необходимо сохранить экземпляры класса (A) внутри хэш-таблицы. Реализация по умолчанию позволяет различать только экземпляры, но не по (B) и (C). Таким образом, два экземпляра A могут быть равны, но по умолчанию нельзя сравнивать их правильным путь.

-121--530663-

Полезно использовать Объекты значений . Ниже приведен пример из репозитария Portland Образца :

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

Таким образом, я могу иметь несколько копий объект, представляющий дату 16 января 1998. Любая из этих копий будет равна друг другу. Для маленького такой объект, как этот, он часто проще создавать новые и перемещать они вокруг, а не полагаться на один объект для представления даты.

Объект значения должен всегда переопределять .equals () в Java (или = в Smalltalk). (Не забудьте переопределить .hashCode () как ну.)

-121--530661-

Кто-то уже упомянул Forth, но я хотел бы немного подробнее остановиться на истории Forth. Традиционно Forth является языком программирования, который является собственной операционной системой. Традиционный Forth сохраняет программу непосредственно на дисковые секторы без использования «реальной» файловой системы. Он мог позволить себе это, потому что он не работал непосредственно на процессоре без операционной системы, поэтому ему не нужно было играть хорошо.

Действительно, некоторые реализации имеют Forth не только в качестве операционной системы, но и в качестве CPU (множество более современных процессоров на основе стека фактически спроектированы как Forth машины).

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

1
ответ дан 18 December 2019 в 05:26
поделиться

Я предполагаю, что вы ищете что-то похожее на то, как раньше работал BASIC (загрузитесь с приглашением BASIC и начните кодировать).

IPython позволяет сделать это довольно интуитивно. Оболочки Unix, такие как Bash, используют ту же концепцию, но вы не можете повторно использовать и сохранять свою работу почти так же интуитивно, как в IPython. Кроме того, Python - гораздо лучший язык общего назначения.

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

Также взгляните на Справочник по "магии" IPython, поскольку он предоставляет множество утилит, которые делают то, что вам нужно, и позволяет вам легко определить свои собственные. Это очень "мета", но пример, показывающий, как создать магическую функцию IPython, вероятно, является самым кратким примером "полного приложения", построенного на IPython.

7
ответ дан 18 December 2019 в 05:26
поделиться

Единственный способ избежать записи каких-либо файлов - это полностью перейти на работающую интерактивную среду. Когда вы программируете таким образом (то есть интерактивно, как в IRB или F# interactive), как вы распространяете свои программы? Когда вы выходите из интерактивной консоли IRB или F#, вы теряете весь код, который вы написали в интерактивном режиме.

Smalltalk (см. современные реализации, такие как Squeak) решает эту проблему, и я не знаю ни одной другой среды, где можно было бы полностью обойтись без файлов. Решение заключается в том, что вы распространяете образ среды выполнения (который включает вашу интерактивно созданную программу). В Smalltalk такие образы называются images.

3
ответ дан 18 December 2019 в 05:26
поделиться

Обратите внимание, что «удобные обертки», которые вы упоминаете для удаления (), разъединения () и rmdir (), если вы имеете в виду те, которые объявлены в < glib/gstdio.h >, на самом деле не являются «удобными обертками». В чем удобство префиксирования полностью стандартных функций с "g_"? (И обратите внимание, что я говорю это, даже если я ввел их в первую очередь.)

Единственная причина, по которой эти оболочки существуют, это проблемы с именами файлов в Windows, где эти оболочки на самом деле состоят из реального кода; они принимают аргументы имени файла в Юникоде, закодированные в UTF-8. Соответствующие «развернутые» функции библиотеки Microsoft C получают имена файлов на системной кодовой странице.

Если вы специально не пишете код, предназначенный для переноса в Windows, нет причин использовать обертки g_remove () и т.д.

-121--3842588-

@ Daniel, @ MKUltra, чтобы подробно рассказать о предполагаемых проблемах лака с печеньем, на самом деле нет. Совершенно нормально не кэшировать запрос, если он возвращает вместе с ним файл cookie. Файлы cookie в основном предназначены для того, чтобы различать различные пользовательские предпочтения, поэтому я не думаю, что кто-то хотел бы кэшировать их (особенно если они включают какую-то секретную информацию, такую как идентификатор сеанса или пароль!).

Если сервер отправляет файлы cookie с файлами .js и образами, это проблема на задней стороне, а не на стороне лака. Как ссылается @ Daniel (ссылка предоставлена), вы можете принудительно кэшировать эти файлы в любом случае, благодаря действительно классный язык/DSL интегрирован в лак...

-121--1173866-

Любая оболочка unix соответствует вашему вопросу. Это происходит от bash , sh , csh , ksh до tclsh для TCL или wish для записи графического интерфейса TK.

3
ответ дан 18 December 2019 в 05:26
поделиться

Как уже упоминалось, Python имеет несколько хороших интерактивных оболочек, я бы рекомендовал bpython для начала вместо ipython, преимуществом bpython здесь является поддержка автозавершения и диалогов помощи, чтобы помочь вам узнать, какие аргументы принимает функция или что она делает (если у нее есть docstrings).

2
ответ дан 18 December 2019 в 05:26
поделиться

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

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

2
ответ дан 18 December 2019 в 05:26
поделиться

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

Концепция интенционального программирования Чарльза Симони (Charles Simonyi) тоже может быть частью этого пути, но пока вы не можете пойти и купить ее. Возможно, стоит изучить проект Intentional Workbench.

1
ответ дан 18 December 2019 в 05:26
поделиться
Другие вопросы по тегам:

Похожие вопросы: