[конкурс] Формирование условий

 
1 2 3 4 5 6 7 8
BG Реконструктор #30.07.2008 22:52  @Татарин#30.07.2008 18:50
+
-
edit
 
Татарин> Я согласен покоммисарствовать.
Татарин> Предлагаю в качестве задачи написание интерпретатора достаточно простого языка. То есть, примерно в рамках олимпиадной задачи по программированию - часа на 4-5 работы.

Быстродействие как будем оценять? :)
 
EE Татарин #31.07.2008 02:35  @Реконструктор#30.07.2008 22:52
+
-
edit
 

Татарин

координатор
★★★★☆
Татарин>> Я согласен покоммисарствовать.
Татарин>> Предлагаю в качестве задачи написание интерпретатора достаточно простого языка. То есть, примерно в рамках олимпиадной задачи по программированию - часа на 4-5 работы.
Реконструктор> Быстродействие как будем оценять? :)
Как обычно - выполнением интерпретируемой программы. Тесты могут содержать алгоритм любой сложности.
...А неубитые медведи делили чьи-то шкуры с шумом. Боюсь, мы поздно осознали, к чему всё это приведёт.  
RU Alexandrc #31.07.2008 09:01
+
-
edit
 

Alexandrc

аксакал

Я тут подумал... просто решение какой-либо задачи, недостаточно для "разрешения спора".
Нужна именно реализация конкретных известных алгоритмов. В идеале программы должны быть одинаковыми, с учетом синтаксической(?) разницы.
Предложение Татарина тоже подходит.
Но вы там держитесь!  
Это сообщение редактировалось 31.07.2008 в 09:06
RU Balancer #31.07.2008 14:34  @Татарин#30.07.2008 18:50
+
-
edit
 

Balancer

администратор
★★★★★
Татарин> Предлагаю в качестве задачи написание интерпретатора достаточно простого языка. То есть, примерно в рамках олимпиадной задачи по программированию - часа на 4-5 работы.

JBForth :)
 
+
-
edit
 

Kernel3

аксакал

Balancer> JBForth :)
И? Это было написано за 5 часов? :)
Broken Windows® cures my ills and makes me feel alright... ©  
EE Татарин #31.07.2008 14:40  @Balancer#31.07.2008 14:34
+
-
edit
 

Татарин

координатор
★★★★☆
Татарин>> Предлагаю в качестве задачи написание интерпретатора достаточно простого языка. То есть, примерно в рамках олимпиадной задачи по программированию - часа на 4-5 работы.
Balancer> JBForth :)
Ну, что-то вроде, да. :)
Но лучше не Форт, а что-то Басикоподобное, в достаточной степени примитивизированое.
...А неубитые медведи делили чьи-то шкуры с шумом. Боюсь, мы поздно осознали, к чему всё это приведёт.  
EE Татарин #31.07.2008 14:44  @Alexandrc#31.07.2008 09:01
+
-
edit
 

Татарин

координатор
★★★★☆
Alexandrc> Я тут подумал... просто решение какой-либо задачи, недостаточно для "разрешения спора".
Alexandrc> Нужна именно реализация конкретных известных алгоритмов. В идеале программы должны быть одинаковыми, с учетом синтаксической(?) разницы.
Спор идёт не "С++ версус Ява", а "комбинация Реконструктор с С++ версус комбинация Сергей-4030 с Явой". :)
Дуэль изначально нечестная, просто каждый из спорящих считает, что нечестность в его пользу. :D
...А неубитые медведи делили чьи-то шкуры с шумом. Боюсь, мы поздно осознали, к чему всё это приведёт.  
RU Balancer #31.07.2008 14:50  @Alexandrc#31.07.2008 09:01
+
-
edit
 

Balancer

администратор
★★★★★
Alexandrc> Нужна именно реализация конкретных известных алгоритмов. В идеале программы должны быть одинаковыми, с учетом синтаксической(?) разницы.

для Си++ и Java с натяжкой это условие покатит. В общем случае - нет. Разные языки часто диктуют разные концепции. На O''Caml быстрая сортировка запишется короче и проще, чем пузырьковая на Си++, или ленивое вычисление n-го числа Фибоначи через предыдущие на Хаскеле будет проще и на много порядков быстрее, чем рекурсивное на том же Си++ :)
 
+
-
edit
 

Balancer

администратор
★★★★★
Balancer>> JBForth :)
Kernel3> И? Это было написано за 5 часов? :)

Ядро было написано за пару вечеров. Правда, потом пару раз переписывалось с нуля, пока доволен оказался. Функциональное наполнение писалось уже нерегулярно, по мере надобности.
 
RU Balancer #31.07.2008 16:35  @Татарин#31.07.2008 14:40
+
-
edit
 

Balancer

администратор
★★★★★
Татарин> Но лучше не Форт, а что-то Басикоподобное, в достаточной степени примитивизированое.

Классический Бейсик на Форте пишется за час, наверное :)
 
+
-
edit
 

Kernel3

аксакал

Balancer> Классический Бейсик на Форте пишется за час, наверное :)
Классический без графики, наверное, всё-таки :)
Broken Windows® cures my ills and makes me feel alright... ©  
+
-
edit
 

Balancer

администратор
★★★★★
Balancer>> Классический Бейсик на Форте пишется за час, наверное :)
Kernel3> Классический без графики, наверное, всё-таки :)

А чем графика сложнее? :) Главное - «парсер». Он пишется за 15 минут отлаживается за столько же, наверное. А потом ещё полчаса на наполнение базиса. Можно и графику успеть засунуть :)

Правда, повторюсь, речь о классическом Бейсике с LET. Если использовать присваивание без этого оператора, то парсер придётся писать отдельный, а не тупо реализовывать его Форт-словами. А так - пишем просто Форт-слова, типа IF, GOTO, GOSUB, LET, RETURN и т.п. И всё :)
 
EE Татарин #31.07.2008 17:16  @Balancer#31.07.2008 16:35
+
-
edit
 

Татарин

координатор
★★★★☆
Татарин>> Но лучше не Форт, а что-то Басикоподобное, в достаточной степени примитивизированое.
Balancer> Классический Бейсик на Форте пишется за час, наверное :)
Не уверен.
...А неубитые медведи делили чьи-то шкуры с шумом. Боюсь, мы поздно осознали, к чему всё это приведёт.  
CA tarasv #31.07.2008 17:27  @Татарин#31.07.2008 17:16
+
-
edit
 

tarasv

опытный

Татарин>>> Но лучше не Форт, а что-то Басикоподобное, в достаточной степени примитивизированое.
Balancer>> Классический Бейсик на Форте пишется за час, наверное :)
Татарин> Не уверен.

Изначальный Бейсик с ключеым словом в начале каждой строки пишется на раз даже на ассемблере ;)
 
RU Balancer #31.07.2008 17:46  @Татарин#31.07.2008 17:16
+
-
edit
 

Balancer

администратор
★★★★★
Balancer>> Классический Бейсик на Форте пишется за час, наверное :)
Татарин> Не уверен.

А я знаю :)
 
+
-
edit
 

Balancer

администратор
★★★★★
tarasv> Изначальный Бейсик с ключеым словом в начале каждой строки пишется на раз даже на ассемблере ;)

Минимальный Бейсик на ассемблере - килобайт от двух машкода. Нормальный - от 8кБ. Это килобайт от 20 до 50 исходного кода. Только на набивку этого кода времени больше уйдёт :)

Я бы сказал, что простой классический интерпретатор Бейсика на Ассемблере - это несколько дней программирования и отладки.

На Си++ - день.

На Питоне или Яве - пара часов, м.б.

...

На Форте классический Бейсик получается просто не из-за простоты Бейсика, а потому что там логика операторов очень хорошо на уже реализованный Форт-парсер ложится :) И даже нумерация строк - опциональна в общем случае.

code forth
  1. MODULE: :BASIC:
  2. : PRINT ( -- ) TAIL PARSE . ;
  3. END-MODULE
  4.  
  5. \ ....
  6.  
  7. BASIC:
  8. PRINT "Hello, world"

(примитивно, но для иллюстрации принципа)

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

И забавный выверт, малодоступный другим языкам - программа на Бейсике может быть (как в этом примере) интегрирована прямо в программу на Форте :)

...

Кстати, есть аналогичная (но, естественно, много сложнее) реализация Си на Форте. Есть на Форте и реализация Lisp- и Prolog-подобных решений.
 
EE Татарин #31.07.2008 17:56  @Balancer#31.07.2008 17:46
+
-
edit
 

Татарин

координатор
★★★★☆
Balancer>>> Классический Бейсик на Форте пишется за час, наверное :)
Татарин>> Не уверен.
Balancer> А я знаю :)
Там с полсотни операторов с ненулевой функциональностью. По минуте на оператор?
...А неубитые медведи делили чьи-то шкуры с шумом. Боюсь, мы поздно осознали, к чему всё это приведёт.  
EE Татарин #31.07.2008 18:05  @tarasv#31.07.2008 17:27
+
-
edit
 

Татарин

координатор
★★★★☆
Татарин>>>> Но лучше не Форт, а что-то Басикоподобное, в достаточной степени примитивизированое.
tarasv> Balancer>> Классический Бейсик на Форте пишется за час, наверное :)
Татарин>> Не уверен.
tarasv> Изначальный Бейсик с ключеым словом в начале каждой строки пишется на раз даже на ассемблере ;)
Это зависит от того, что такое "раз" в единицах времени. :)
...А неубитые медведи делили чьи-то шкуры с шумом. Боюсь, мы поздно осознали, к чему всё это приведёт.  
RU Balancer #31.07.2008 19:10  @Татарин#31.07.2008 17:56
+
-
edit
 

Balancer

администратор
★★★★★
Татарин> Там с полсотни операторов с ненулевой функциональностью. По минуте на оператор?

В классическом Бейсике?

GOTO, PRINT, INPUT, GOSUB, RETURN, IF, LET.

Что ещё?

Кстати, после написания tail-парсера там на оператор по минуте и будет уходить :) Там «все полчаса» уйдут на ядро системы - учёт номеров строк, целевой кодофайл, парсинг выражений у LET... Да, забыл сказать, подразумевается импорт инфиксной библиотеки. Иначе на его написание с нуля надо будет накинуть ещё полчаса-час :)
 
RU Серокой #31.07.2008 19:14
+
-
edit
 

Серокой

координатор
★★★★
Как показывает практика, время, которое желаешь затратить по всем расчётам, всё равно надо умножать на три. Выплывают неожиданности всякие. Ну не верю я в полчаса-час. )
Больше не раскалятся ваши колосники. Мамонты пятилеток сбили свои клыки. ©  
EE Татарин #31.07.2008 19:23  @Balancer#31.07.2008 19:10
+
-
edit
 

Татарин

координатор
★★★★☆
Татарин>> Там с полсотни операторов с ненулевой функциональностью. По минуте на оператор?
Balancer> В классическом Бейсике?
Balancer> GOTO, PRINT, INPUT, GOSUB, RETURN, IF, LET.
Balancer> Что ещё?
Гм. Пересмотрел описание классического Дартмунского Басика: да, в оригинале операторов было немного.
DATA и READ ещё.

Но. Если мы говорим именно о классическом Васике, оригинале, то у тебя не будет, конечно, проблем с присваиванием, но выползет другая проблема: корректная обработка входных текстов без пробелов. :)
В спецификации классического Басика пробелы могли ставиться на усмотрение оператора машины в ЛЮБОМ количестве, в том числе и не ставиться вообще.
В частности,
10LETD=A+B
20PRINTD
являлось корректной программой. Сожрёт ли это напрямую Форт? :D
...А неубитые медведи делили чьи-то шкуры с шумом. Боюсь, мы поздно осознали, к чему всё это приведёт.  
RU Balancer #31.07.2008 19:35  @Татарин#31.07.2008 19:23
+
-
edit
 

Balancer

администратор
★★★★★
Татарин> DATA и READ ещё.

Да, про них забыл.

Татарин> В спецификации классического Басика пробелы могли ставиться на усмотрение оператора машины в ЛЮБОМ количестве, в том числе и не ставиться вообще.
Татарин> В частности,
Татарин> 10LETD=A+B
Татарин> 20PRINTD
Татарин> являлось корректной программой. Сожрёт ли это напрямую Форт? :D

А... Нет, операторы без написания отдельного парсера отделять надо :)

Правда, я не видел ни одной реализации Бейсика, которая бы такое сожрала :) Кроме тех, где отдельные операторы были отдельным символом (те же МК-85 или ZX-Спектрум), но и там пробел автоматом подставлялся при выводе и был всё равно обязателен при загрузке из файла :)
 
+
-
edit
 

tarasv

опытный

tarasv>> Изначальный Бейсик с ключеым словом в начале каждой строки пишется на раз даже на ассемблере ;)
Balancer> Минимальный Бейсик на ассемблере - килобайт от двух машкода. Нормальный - от 8кБ. Это килобайт от 20 до 50 исходного кода. Только на набивку этого кода времени больше уйдёт :)
Balancer> Я бы сказал, что простой классический интерпретатор Бейсика на Ассемблере - это несколько дней программирования и отладки.

С нуля - конечно, причем большая часть времени уйдет на всякие велосипеды, типа таблицы для переменных и сканера строк которые в Форте уже есть ;)
 
CA tarasv #31.07.2008 19:39  @Татарин#31.07.2008 18:05
+
-
edit
 

tarasv

опытный

tarasv>> Изначальный Бейсик с ключеым словом в начале каждой строки пишется на раз даже на ассемблере ;)
Татарин> Это зависит от того, что такое "раз" в единицах времени. :)

"Раз" это не единица времени а единица умственных усилий ;)
 
CA tarasv #31.07.2008 19:47  @Серокой#31.07.2008 19:14
+
-
edit
 

tarasv

опытный

Серокой> Как показывает практика, время, которое желаешь затратить по всем расчётам, всё равно надо умножать на три. Выплывают неожиданности всякие. Ну не верю я в полчаса-час. )

Умножить на два и добавить два но меньшего порядка. Если кажется что задача займет один день то просите два и пару часов на подготовку демонстрации. Если вам кажется что задача на неделю то в план надо поставить две недели и два дня. Если месяц - то два и две недели. А если год то не беритесь за такую задачу ;)
 
1 2 3 4 5 6 7 8

в начало страницы | новое
 
Поиск
Настройки
Твиттер сайта
Статистика
Рейтинг@Mail.ru