it-history
January 16, 2023

Легенды не умирают

Теплый весенний день, школа, компьютерный класс с еще 286ми и тот самый Turbo Pascal на мерцающих экранах.

Да, это снова взято из интернета. Своих скриншотов из 96го увы не сохранилось.

Мне 15 лет, первая среда разработки и первый язык программирования. Представили? Прочувствовали момент?

И тут школьный учитель выдает вечное и нетленное:

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

Это был 1996й год.

Прошло 27 лет, того учителя давно доедают черви в могиле, да и мы сами уже с морщинами и сединой.

За это время было перепробовано множество запрещенных веществ языков программирования, фреймворков и ОС. Вся отрасль дружно хоронила то «древний Паскаль» то «святой Си» то «школьный PHP», временами пытаясь закопать еще и друг-друга.

И вот уже на дворе 2023й год, мир пережил кучу войн, пандемию и опять стоит на грани тотального уничтожения.

А паскаль бл#ть живее всех живых:

Впиши свое имя, если тоже хоронил паскаль.

Теперь это называется Free Pascal , среда уже не Delphi а Lazarus но суть от этого не поменялась.

Оно работает, живет и процветает.

А очень и очень многие из «похоронной команды» — уже нет.

Вот другой пример:

set root "/home/alex"
set default "index.html"
set port 8080

proc answer {socketChannel host2 port2} {
  fileevent $socketChannel readable [list readIt $socketChannel]
}
proc readIt {socketChannel} {
  global root default
  fconfigure $socketChannel -blocking 0
  set gotLine [gets $socketChannel]
  if { [fblocked $socketChannel] } then {return}
  fileevent $socketChannel readable ""
  set shortName "/"
  regexp {/[^ ]*} $gotLine shortName
  set many [string length $shortName]
  set last [string index $shortName [expr {$many-1}] ]
  if {$last=="/"} then {set shortName $shortName$default }
  set wholeName $root$shortName

  if {[catch {set fileChannel [open $wholeName RDONLY] } ]} {
    puts $socketChannel "HTTP/1.0 404 Not found"
    puts $socketChannel ""
    puts $socketChannel "<html><head><title><No such URL.></title></head>"
    puts $socketChannel "<body><center>"
    puts $socketChannel "The URL you requested does not exist on this site."
    puts $socketChannel "</center></body></html>"
    close $socketChannel
  } else {
    fconfigure $fileChannel -translation binary
    fconfigure $socketChannel -translation binary -buffering full
    puts $socketChannel "HTTP/1.0 200 OK"
    puts $socketChannel ""
    fcopy $fileChannel $socketChannel -command [list done $fileChannel $socketChannel]
  }
}
proc done {inChan outChan args} {
  close $inChan
  close $outChan
}
socket -server answer $port
vwait forever

Это самый настоящий, работающий HTTP-сервер на Tcl.

Оригинальный код от 1998 года: https://wiki.tcl-lang.org/page/DustMote

Я лишь поменял путь до каталога в самом начале.

Оно запускается и отдает статику на любых современных ОС где есть Tcl, по-сути — вообще везде.

Обратите внимание на отсутствие библиотек и зависимостей — их действительно тут нет, один голый стандартный Tclsh.

Так вот этот несчастный Tcl на моей памяти хоронят с момента его появления и до сих пор. А он до сих пор живее всех живых и работает.

Язык, появившийся в 1988 году (мне тогда было пять и код я еще не писал) считался программистскими массами вторичным унылым говном с самого своего появления. И считается таким до сих пор.

Но при этом — успешно работает. Парадокс.

Это конечно не так модно и сексуально, как запихивание движка Javascript на серверную сторону, смузи за такое не нальют, но это работает.

Без драмы, превозмоганий и пафоса, без «переписываний с нуля» и каких-то постоянных диких поломок.

И так уже 30 лет.

Легенды не умирают

Дело в том что успешная программа это идея.

На чем она там написана и как работает — всем насрать вторично.

Ну правда, вам разве интересно что Total Commander написан на втором Дельфи? Или что клиент Dropbox, тот самый который вы ставите к себе на компьютер работает на Python внутри?

Ощутили приступ «немодности» и пойдете их удалять?

Оно ведь работает и дает работать вам.

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

Переносят игры, 3D-движки, библиотеки, известные и популярные интернет-сервисы меняют внутреннюю реализацию практически постоянно.

Но вот идея остается прежней, идея живет.

Wake up, samurai.