On 5/18/18 7:09 AM, bartc wrote:
On 18/05/2018 02:45, Steven D'Aprano wrote:
On Fri, 18 May 2018 02:17:39 +0100, bartc wrote:

Normally you'd use the source code as a start point. In the case of
Python, that means Python source code. But you will quickly run into
problems because you will often see 'import lib' and be unable to find
lib.py anywhere.

Seriously? There's a finite number of file extensions to look for:

.py .pyc .pyo .pyw .dll .so

pretty much is the lot, except on some obscure platforms which few people
use.

Which one corresponds to 'import sys'?

If the source to such libraries is not available then it is necessary to emulate that functionality. You are writing from scratch, not porting, according to specifications. And those specifications may be inexplicably tied to the inner workings of the language.

That is a little bit harder, yes? Especially as Python is a scripting language and might rely more than most on this quite extensive built-in functionality, even on fairly short programs.

(When I once thought about implementing an interpreter for Python byte-code, I found all this out very quickly. Such an interpreter could work perfectly but it would not get past 'import sys'.)

To successful port anything but the most trivial code, you actually have
to understand *both* languages -- including the syntax, semantics, built-
in language features, AND libraries.

Don't forget configuration and build systems. The code you want to port may not even exist, but is synthesised as part of the build process, and be specific to a particular build.

I'm talking about the seemingly rare case these days where you DO have the source code!

That's one problem. Others might involve how to deal with something like __globals__ which doesn't have an equivalent in the target language. And
we haven't started on features that are specific to Python.

How about features which are specific to C

I'm quite familiar with C which has its own set of problems. But taking one aspect, if a C program relies on its standard library, then it is very often possible to directly call that standard library from another language, so you don't need to reimplement it, nor port it.

Since every language has features that some other languages don't have,
is it your position that it is impossible to port code from any language
to any other?

I'm saying some languages make it more difficult, and Python is one of them, especially written 'Pythonically', which seems to be code for 'this only makes sense in Python', so that you can't understand it even if you have no intention of  porting it.


If you want to *really* see code that is hard to port, you should try
porting an Inform 7 program to another language. Any other language.

You seem to be saying that because it is rarely completely impossible to port software, that we disregard any difficulties and consider all such porting as equally trivial.

I'm just saying that in my experience, given the choice of porting the same program from other Python or, say, Lua, I would choose Lua.

Same with choosing between 'full-on' C++ and, say, Pascal.

Both C++ and Python can be used to write software in a simple style (as I would use); typically they are not used that way. Given the rich set of esoteric features of both, programmers do like to pull out all the stops.


Your logic here seems to be to use the least-common denominator among some guessed-at set of languages, so that if you ever have to re-implement a program, you can transliterate it into another language.  I would much rather choose a tool and use it well (that is, to its fullest power) than to hobble myself on the off-chance I have to switch languages in the future.

I guess I don't understand the type of work you've been doing: I have only very very rarely had to reimplement the same program in another language.  I can't imagine choosing tooling or style based on that concern.

We have had this discussion at work: do we use Python in a "simple" way so that new developers coming from Java (or C, etc) can understand it? Or do we assume that people working in a large Python codebase understand Python?  I choose the latter.

--Ned.
--
https://mail.python.org/mailman/listinfo/python-list

Reply via email to